Finally done! And it's better than my last few!
https://ldjam.com/events/ludum-dare/46/$199110
This is my fourth time doing Ludum Dare (after LD38, LD40, LD44 and now LD46). I managed to get closer to having a working game system and had win/lose conditions in by lunchtime on day 2. Consequently, it actually feels more like a game this time.
I wouldn't yet say I've managed to make something good in the time. I was running close on essential features like effects (slow/aoe damage) so I didn't get to give it a balance pass. Only realised near the end that the enemies had way too little HP which left laser turrents pretty overpowered. Ended up cutting the laser turret damage to a third and quadrupling the HP, but it probably needed another couple of balance passes to be fun.
Still, that's far better than LD44 where I was using the midnight hours to actually add a win state to the game, so improvement is good, I guess.
Collision detection remained a big time sink, though pathfinding was not nearly so much as I expected. I've basically built the same collsion detection system as LD44, so I should just publish it as a library so I don't have to rebuild it again a third time next LD :)