Development Diary part one
So about 6 months back I had the idea to make a twin stick shooter game, and thought I’d try using procedurally generated enemy and some path finding.
So I put some GML code together, with some basic sprites to test out movement and enemy spawning.
I wanted them to move towards the player if he was close to them or just simply meander around if he wasn’t. I threw in some weapon switching code for the player so simulate different guns. I put some obstacles in the room that enemy sprites had to get round but player could pass through.
The result was this
Which for testing code and ideas was fine. But the way the enemy sprites moved put the idea in my head to make them zombies. So I recoded the spawn code a little, added some rooms and weapon pickups. Again nothing elaborate I was still just coding off the top of my head, no real planning, just putting ideas in to see if they would work or not.
Eventually I had a large Room area with a smaller viewport that tracks the player, The map area had several “houses” which act as safe zones that the enemy cant enter at the moment, I tweaked the “zombie” code, making 2 different zombies, shamblers and sprinters (light green are shamblers, dark sprinters). And they respond to the players movement and sounds they make when using weapons.
I added several weapons to the game with different rates of fire and noise levels the player can change the weapon he is using by pressing numbers 1 to 5. Then I added some code to the player to allow him to run by pressing shift, but at the expense of not being able to fire his gun while running.
I added a health bar for the player and damage code to the zombies when they bite him.
And finally I added a Map button so the full play area can be seen while the player presses the M key. This will allow them to see where rooms, and zombies and later pickups like guns and ammo and other goodies are.
So I tried it out and the results are ok, and you can see them below.
So I had zombies that spawned randomly over time, but stop once they reach a designated number, currently 100. They will shamble around the room until triggered by player sound or movement, when they will track the player until killed or they loose interest when the player gets out of range or into a safe house.
So I started looking at this again, and coded in some finite ammo, so when using guns you now have to be sparing with ammo. I added ammo pickups and removed all weapons from the player and placed them around the map so now the player has to pick up different weapons to use them, and he can run out of ammo and pick up new ammo. I put in a couple of health packs to replenish lost health and added an ammo counter to the on screen display. Its still very, very much at the prototyping stage. I’m tossing in ideas and seeing how they work.
And yes it does look like the player is a floppy disk being chased by zombie floppy disks and that might be the final plot of the game, “killer zombie floppy disks from 1990” is as good a working title as any.
If you want to play with the current version in your browser you can find the link below
Movement : Arrow Keys
Run : Shift + Direction Arrow key (Can not shoot while running)
Press and hold M for map
Shoot : left mouse button
1 : Pistol (single shot slow)
2 : Rifle : (semi automatic, faster rate of fire, Loud)
3 : minigun (fully automatic, massive rate of fire, VERY LOUD)
4 : Shotgun (slow, arc of fire, each bullet has 3 projectiles)
5 : Auto Shotgun (fast rate of fire, arc of fire, each bullet has 3 projectiles)
Theres a lot still to be added. I was really thinking of making the map and rooms randomly generated by code, I want to add doors that to safe houses that if not closed will allow zombies to enter rooms behind player, add some items like a noise generator that can be dropped to draw zombies away from player. things like that. As I said I’m spitballing ideas and throwing them in to see what works and what doesn’t at the moment. And once I have a basic prototype that im happy with I’ll sit down and plan out a more indepth design for it all.