Homing weapons are in and functional, and the projectile system in general is reworked to read in an XML file and generate weapon types based on that. All arguments are optional, with default values. There is no longer any projectile type-specific code, it’s now purely focused on doing what the XML tells it to.
One exception: beam weapons. Those are entirely separate, because they’re so extremely different. But what can you change on a beam weapon besides the damage rate, and perhaps the width? It’s a beam. It goes in a line.
The neat thing is, just add another line to that file and fill in the different values, and it will be there in-game with the properties you list.
I am sure I could also make it editable in-game. Assign a price to all those modifiers, stick an in-game GUI on it, and the player could have their own weapon-manufacturing shop at their base and build their own weapons types.
The onHitEffect and onDeathEffect I’ll probably leave like that. 0 kills the projectile (So saying -1 for onHitEffect would have it pass through enemies), 1 is the shockwave, and I’ll probably hard-code in whatever else I think of. I’m constantly striking a balance between extensibility and ease of implementation, and writing a very general system for any imaginable “on hit” effect is on the far side of that divide.