The framerate isn't quite what I'd like but it's smooth & playable on my system ( ~30-45 fps ), and I don't have a lot of other speed-up ideas, so I need to move on & continue getting the test version ready.
I added physics sleeping, so objects track their last positions & velocities, and if these haven't changed much, they increase a sleep counter. Once the sleep counter reaches one second, they go to sleep, and very little physics is done on them until they receive some sort of impulse from an awake object. Right now the player & enemies are always 'awake' physically. This was a very minor fps improvement, but it should help the minimum frame rate at times.
For shadows, I made the shadow frustum code a bit tighter, and did a better job of skipping work for casters that are out of view. The system is a bit complicated b/c objects may be casters, receivers, or both. If they are receivers, you only care if they are in view, but if they are casters, you may want to skip the receiver work but still do shadow casting on any receiving entities.
The other day I added entity tilting to match the terrain. Enemy corpses don't do ragdoll, so when they fall, they tend to stick over ledges & into ramps & stairs. I added code to find the slope of the terrain under their feet, and rotate the char so he falls roughly flat to the ground. Still not perfect, but much better than before.
Then I adapted the technique for dropped items, like weapons, so they line up, too.
The game is too hard right now, without any sort of way to replenish your character's health. Right now the player's received damage can be tweaked via an overall factor, but if it's too low, it's hard to get close to death via combat, and falling pretty far doesn't kill you, so I think I will raise it back up and instead add some sort of pickup or device that, when activated, will boost your character's health.