So I've been thinking about the enemy attack abilities in Neon Galaxy and came to some conclusions, some of which led to some implementing.
Enemies need to be able to shoot you, of course! Which means I need to implement guns! But wait... the player already has a nice modular weapon system, where you just equip a gun and call Fire() and it does its thing. So all I actually needed to do was add a faction system (simpler than it sounds -- the factions are Player, Enemy, and Neutral, and the practical effect of a faction is that a) it gets automatically attached to your subsidiary objects, like your gun and fired bullets, and b) a bullet belonging to a particular faction can't harm members of that faction), remove the very few player-specific elements from the gun-related classes, give the sub-meson generator a fresh cup of really hot tea... and turn it on!
And ther we go -- the enemy can now lay down a curtain of fire that would make [insert Japanese doujin game maker name here] proud. Note that the enemy is currently using the same gun as the player so it fires the same boring old shots, but dealing with that issue is just a matter of actually creating more guns.
The other cool thing about this is that I intend to steal the "bones level" feature from Nethack/Rogue -- that's the gimmick where, when you die, the game will save a copy of the level you died on and in later games you have a chance of re-encountering that level along with a hostile ghost of the previous player equipped with all said player's stuff. With these changes, it would now be much simpler to equip a hostile "ghost ship" with whatever weaponry the player happened to have when they died.
However, as we all know gun safety is very important. The AI has to be able to decide when to fire! This brings up the awkward problem that under my current AI design, it is incapable of walking and chewing gum at the same time: it can only be executing a single behavior at any point. In reality, of course, we'd like one set of behaviors to make the AI duck and weave around attacks while another set of behaviors fires at the player whenever they are within range. This is straightforward enough to solve -- the AI is just going to need multiple state machines instead of just one -- but dealing with the bureaucracy around that will no doubt take a bit of time to resolve.