Yesterday I got the first digsite level working, besides the initial intro section. The digsite level was initially completely indoors, but I wanted to make it a bit more varied, so I added two outdoor areas as well.
The final outdoor area is the hangar where you find the spaceship, and the hanger doors open above you, so I wanted shadows cast from the doors. That called for adding a light to the level, so at first I added a directional light.
That caused problems in the indoor areas of the level, where door entities that go through walls when opening are visible to the light, because they both lie 'outside' of the level, and the indoor areas of the level don't have a skin around them.
So, instead, I added the capability of restricting lights to a box, like a cell, room or trigger box. When lighting the level, the box will be used to cut off lighting influence earlier than it really would. This way interior areas of the level wouldn't be screwed up, as long as they stay out of the light's box. I changed the light from a single directional light, to a point light in each area, and restricted each light to the nearest cell.
Shadowing for the main character still didn't work right, however, so I had to add some flags to the lights, which required adding a version field to the lights so I wouldn't break existing levels. My new requirement is that every serialized object has a version field in it, so I can add things without breaking levels, which is rare, but still happens. I should probably add a dword flags field to each object as well to keep per-object boolean flags that come up more and more over time.
The issue with the shadowing was due to an optimization. For each light, I generate an index list and bounding box info for each world chunk that is partly lit by the light. This actually looks at the lightmap texels to include only tris that are actually getting some light, so backfaces from the light's POV aren't included.
This reduces fill & draw calls when rendering dynamic shadows on entities like the player, doors, bridges, etc, but has the problem that interior walls ( like a hallway ) without anything between them and the light won't cast shadows.
So, I added an option to the lights to mark them as casting backface shadows, in which case I draw all faces between the light and the shadow caster, without looking at the per-light info structure. Now, the shadowing on entities works in those cases.
Last week I added the cloning station & menu to the ship level, and numerous other fixes here and there to the editor and the game.
Today I am putting in the power-up effects, and might have some interesting screenshots coming up from those...