When starting out with a game in a powerful engine like Unity it seems like everything is possible and that you can make a game in a finger snap. While everything is possible and you can make something playable in a relatively short time span, making a complete game usually takes a fair share of time, especially if you are a newbie to game design, engine itself and programming.
As far as i can tell, illusions of grandeur are quite common when you begin developing a game (turns out i was not immune to it too). Enthusiasm doesn’t seem to whiff away quite easily as it is fueled by actual things getting done, but after a while you get to realize it will take too much time to make it like you want it to be, or you simply don’t know of a way that is fast and simple enough. If you want to complete the game, you will need to strip it of layers and keep it simple. It hurts and feels like taking away the originality and personality from it. Not only will you have to cut it in half, but you will probably need to cut that half in half too, reducing it to meager ¼ of the game you meant to make.
One of the things i had to cut again and again was the weapon system i was quite proud of. You can read about it here and here’s the short version:
30+ weapons in game;
5 levels of each weapon;
3 weapon types (bullet, energy, missile, each having a corresponding multiplier against normal, armored and shielded enemies);
Player can hold two weapons at the same time, but fire only one;
You can’t have two same weapons of different levels equipped;
You can’t have two weapons of same type equipped;
You have Bullet Weapon X Level 1 equipped as active weapon and Energy Weapon X Level 1 equipped as inactive. After blasting the enemy transport you come across Missile Weapon X Level 1 and pick it up. Since you don’t have it equipped in any of slots, it will replace the active weapon and eject Bullet Weapon X Level 1.
If you wanted to replace the Energy Weapon X Level 1, you could simply switch weapons to make Energy Weapon X Level 1 active and replace it. This would be a common occurence for adapting to the enemy types because of their vulnerability or resistance to certain type of damage.
I could make things simpler in design and coding by simply omitting the part where the replaced weapon is ejected since there’s a small chance of picking it up by accident since it involves pressing a key while you hover over the weapon. However, two player mode requires that feature for the weapons to be interchangeable between players and that is a great way to improve cooperation, gameplay and combined firepower.
Due to design limitations (limitations as in 150 weapon variants) i had to make a hard choice that can affect the future gameplay on upgrading the equipped weapon and few solutions came to my mind.
1. You can only upgrade the weapon if you pick up the exact weapon
That way, either equipped or not, the weapon in players posession is upgraded to the next level without any ejection which only happens when you are picking up a weapon you don’t have equipped. While challenging with high long-term impact on decision-making, you only have 6% chance of getting the same weapon from the transport which is slim to none. Needles to say, a bad option.
2. Equipped weapon level transfers to pickups
Whenever you equip a weapon that is not equipped it is always at level 1, but when you upgrade any of the weapons on ship to level 2, the weapon you replace the level 2 weapon will also be level 2. Basically, it would be a kind of cheating, since by dropping and re-equipping active and inactive weapons, you could get all equipped weapons to a higher level.
3. Weapons upgradeable only by picking up the same weapon
To make it more viable, one should increase the chance of spawning a weapon you already have.
The maths on this one are simple, though a bit hard to code. You have 25% of transport spawning active weapon, 25% of spawning inactive weapon and 50% chance of spawning a new weapon. This comes with a different kind of trade-of. Though 25% is a lot ot may happen that you rarely run into a weapon you want to upgrade. On the other hand, you may always run into a weapon you already maxed out. This discourages experimentation since you will always want to hold on to your maxed out weapons, no matter how good or bad they are. There are no bad weapons per se, but holding on to weapons of the same type greatly decreases success.
4. Weapon upgrade pickups
Though not originally meant to be implemented, this could pose a good solution combined with approach 1 or 2. It is simply a kind of a joker card which levels up your active weapon without worrying if it’s the same one. You pick it up, the active weapon gets upgraded and you just keep on blasting.
The basic idea was for the player to drop the currently equipped weapon when he picks up the new one, so if a mistake is made (though hardly possible, since only hovering over it won’t do – you have to press a pickup key too) player can simply pickup the ejected weapon again.
I don’t know about you, but i got a headache just by reading this. You see how easy it is for things to get out of hand for every single layer of stuff you intend to add? Amount of work increases exponentially for every feature added. Not only did it get overly complicated, but it got to the point where it would depend on chances of picking up weapons that would be extremely hard to tweak properly. And all that doesn’t guarantee that you won’t end up in situation to have no proper weapon to amswer the challenge on the screen, which is unacceptable.
On top of that, i wanted to implement weapon overheating mechanics, but to be honest, i haven’t played any game except Jets ‘n’ Guns that has it, and that game has a completely different concept.
In the end, the whole system got stripped down to bare essentials, and an easy to understand concept:
You start with all 3 weapon types on ship (basic weapons);
No switching – you have a button for firing every weapon (with a small delay between firing a different weapon, something like auto-switching);
Automatic picking up, you don’t need to press a key while hovering over a weapon to pick it up;
When you pick up a weapon, it replaces the one with the corresponding type on the ship and the old weapon does not get ejected;
No weapon levels, which brings number of weapons to a manageable number (maybe i’ll put SOME levels in the future, but i doubt it);
No overheat mechanics, it would add another layer of tweaking which would require enormous amount of time of testing;
Much better and easier to grasp.
After a while you don’t look at the striping like something that made your game bland and simple, but as a salvation from meaningless work that would probably be too complicated for you and not turn out well. Obviously, perfection is not a thing to strive for, especially if you are a solo developer. Much bigger games suffered for trying to achieve it. So, keep it simple, and cut, then cut again.