Yo! It’s been a proper good while since I made a post here, so let’s get things up to speed.
Essentially Dragonspawn was shelved for a bit while I was working on another game with a friend from Uni, that’s still ongoing, but I’m back to cleaning up some of the code for Dragonspawn now, hoping to roll straight back onto that fulltime once this other game is done.
Thought it might be fun to start a series of posts where I look back at the original Dragonspawn from 2012 and point out the mistakes I made back then and how I’m avoiding making them again as I clean up the new code base. Seeing as how my last post (from years ago) was talking about Weapons and Projectiles, figured I’d touch on that topic as it pertained to the old Dragonspawn.
So first thing’s first, the original game only had one type of primary weapon, Crossbows, which all fired very similar physics based Projectiles, with travel time and influence from external forces like Player velocity and impulses from Explosions.
One problem that the Crossbows had was that they were all randomly generated, and this included random stats including the Projectile used, Reload Time, Damage, Zoom Multiplier, Projectile Speed, and Accuracy. This often led to the generation of utterly terrible Crossbows, this was partly due to the fact that there were a number of joke weapon components in the mix that done things like quadruple Spread (more on this later), halve Damage, and double Reload Time. There were a handful of unique weapon variants in the game that had interesting properties, one in particular consumed Health and Shields to fire instead of conventional ammo.
Accuracy of the Weapons was perhaps the biggest problem, every time you fired the actual Projectile was physically launched from atop the Crossbow model and had about half a second of delay where its renderer was shifted to a different layer, collision parameters were altered, and had its velocity shifted randomly, however upon looking through the source code, it seems this offset was not based on the Crossbow’s Spread at all, but instead random values between -1 and 1. This was all bad, mostly because the game didn’t even factor in where the player was actually aiming, even if you removed spread the projectile would still just travel in a straight line from its origin point forward, potentially intersecting with geometry in its direct path.
Now a key part of the new game’s design is the complete and utter removal of randomly generated weapons, instead the Player will gain access to a number of pre-defined weapons throughout the course of the game. Each of the new weapons is unique and are all based on common FPS weapon archetypes, for example the new Crossbow weapon is intended to function more like a Heavy Machinegun with full auto and average rate of fire, the new Ice Staff is functionally a Shotgun, and the new Cannon weapon is essentially a Rocket Launcher. It was important to me to come up with weapons that were both thematically appropriate for a fantasy setting, but also fill the common weapon archetypes of 90s and early 2000s FPS weapons.
Before I wrap up I just wanted to state that I don’t want to discredit the validity of random weapon generation in games, as I still think it’s a really cool feature, especially for roguelikes and dungeon crawler sort of games, but there’s a lot more work involved when modelling or designing various components that all fit together nicely when the weapon is randomly generated, and balancing such weapons is a chore, because realistically you want the weapons to be fun to use, but now so overpowered that players will never want to pick up a new weapon ever again.