Dev Blog #2
It’s been almost two weeks and i’ve been very busy with my day job so i didn’t manage to spare too much time for game, but i finally finished (for me) a very complicated thing – upgrade and weapon switching system.
Player starts out with one weapon. During the game he can pickup a variety of weapons from destroyed cargo ships. The first time he picks up a weapon, it is added as a second weapon, and player can switch between them according to situation (bullet, energy and missile weapons don’t deal the same amount to normal, armored and shielded enemies). When another weapon appears as a pickup, two scenarios are possible: if the weapon is already equipped, it gets upgraded and the pickup despawns. If the weapon is already at maximum upgrade level, player is notified via on-screen message and the pickup stays where it is. If the weapon is not equipped, currently selected weapon is replaced (dropped as a pickup, while pickup spawns on player). While dropping the weapon is not very important in single player game and complicates the situation a lot, it is handy in 2 player game, where one player can drop a weapon for the other player to upgrade his weapon. The handy thing is that when a player drops, for example, Hyperblaster Level 4 and the other player picks it up, he’ll get the Level 4 Hyperblaster too, not level 1. Since there are (for now) 23 weapons in game and the only way to upgrade them (besides universal weapon upgrade pickups) is to pickup the same weapon, that will be very cool in terms of player cooperation.
Here’s a shot of an FSM:
Basically, when the weapon spawns, it checks itself if it is a weapon or a pickup (by checking if it is parented or not). If it is a weapon, that means that it is player equipped and it is added to the array and the variable is stored if it is in slot one or slot two (required for weapon switching during the game). If it is a pickup, distance check state is activated. Player can only pick it up if he is closer than a defined distance from it (by pressing space, so no accidental pickups are possible). When he picks it up, it iterates through the array to see if it will replace the existing weapon (if no weapon of same type is found) or upgrade it (if weapon of same type is found). If it replaces it, the existing weapon is dropped (which means it is despawned, removed from array, spawned on location of a pickup with its firing scripts disabled and pickup indicator enabled, while next level weapon is spawned on gunpoint with its firing scripts enabled and pickup indicator disabled).
Weapon switching is, compare to the upgrade and pickup system, a walk in the park. Stored weapons are simply activated/deactivated by pressing the switch key.
Scripting this thing alone would probably take a lot more time than it did, so using Playmaker did the job pretty quick since i can try something out in a matter of seconds, not waiting to write a couple of lines with risk of making syntax errors.
But, here comes the downside. Instead of making the script that can just be copied/pasted on all weapons (have in mind that there are 23 weapon with 3-5 levels each, so that comes to about a hundred prefabs, with more to come), i have to copy/paste an FSM to every weapon and tweak the variables in each one of them. I don’t have to tell you that if any larger scale fixes in logic are necessary when all the weapons are already prepared it will be a lot of work to change everything. Not to mention the possibility of making errors when managing such a tedious task.
One more thing i did is implementing the sprite atlas which reduced draw calls a lot, and boosted frame rate from 15-30 FPS to ~150. Now everything goes very smoothly. There are some hiccups, but those are due to extensive logging which is quite necessary in this phase. Swarm missiles got an overhaul too, now they’re flying nicely in a semi-random homing pattern, they way i imagined them to be.
Also, the artist guy did some weapons art for me, some will maybe change, but i thing they’re pretty good looking and quite different.
Dev Blog #1
To keep the track of the work done, motivate myself and keep people interested, it’s time to start a Dev Blog. Here’s the first one for the work done in the last few days, enjoy.
- Design of the Swarm Missiles weapon. Basically (as the name says) it launches a swarm of small missiles from the player ship and every one of them tracks random enemy. It may require an overhaul to make them more random with some sort of unnecessary crazy loops to compensate for their number. The design wasn’t too tough, each missile has a random frontward direction upon launch and a small delay before tracking starts. Every few moments, they change the target they locked on to so they move randomly in a natural, swirly manner.
- Design of the Randomizer (work title) weapon which shoots a lot of particles but to compensate for their number they move slowly in a random forward pattern and are fairly weak, but can protect you from swarms of smaller enemies. Pretty useless against big enemies though.
- Design of the Shield with regeneration timer and connection to the shield integrity bar. Still needs connecting to the heat transfer mechanism (when you get hit, shield takes the damage, but your heat level increases, energy transfer stuff).
- Design of the Auto Cannon Drone. It tracks closest enemy, rotates towards it and fires. If no enemies are present, it stops firing. Oh, it also follows player of course.
- Design of the Ripper, basically a manual shooting shotgun that sprays multiple bullet in a cone, that was pretty easy to make. It shoots as fast as you can click, deals a lot of damage it all bullets hit the target, but it heats a lot, so i have to disappoint you if you’re a Starcraft player with million clicks per minute and plan to win the game using Ripper only.
- Design of the Flak Cannon. Like the real Flak, it has proximity activated “fuse”. At a certain distance from the enemy it explodes and blasts into a lot of small pellets. Great against small enemies.
- Design of the Proximity Mines. Regular mines just floating in space were designed a while ago, but i decided to put a bit more challenging ones. When you get near one, it shoots a laser ray which locks on to your ship (doesn’t damage it though) and starts slowly moving towards you until you destroy it. I also designed the EMP mines that will work the same way, but deal less damage and mess up your screen with glitch effects. Also updated the mines with random rotation and blinking red light so they’re a bit more interesting looking and easier to spot.