Following on from the previous shadowing work, I've been adding proper night time rendering for those late night missions. It uses most of the same rendering code, but instead of starting with an all white lightmap and drawing in darker shadows it starts completely black and lights are added into it as lighter areas. Ambient light is easily done by clearing to a different colour than black, so I'm using a very dark blue which just about gives you enough light to see by.
All helicopters come equipped with a search light now, which is made from a sprite for the beam attached to the helicopter, and dynamically generated circle/ring geometry for the actual lit area on the ground. Since the ring isn't just a sprite it's properties can be changed on the fly, so it'll get larger but fuzzier if you're high up, and smaller but with sharper edges if you're low down.
The lights on the buildings are "micro lights", which are small sprites with animated vertex colours to make them pulse. They're "micro" in the sense that they're small enough not to have an area, so they only have simple depth sorting applied to them. I'm planning on adding large lights (for things like flares) which will have to have a more complicated sorting/layering method to give them a proper volume.
I have be meaning to ask this before, but is there a specific reason you chose Java as your language of choice?