Zombie Land is a 2D Top-Down Shooter game. The story of the game is that your car broke in a city called Zombie-Land where 15,000 zombies exists and your goal is to fix your car and leave.
the City size is 20,000 x 20,000 pixels in size. To put things into prospective the player speed is 3 pixels per frame and by doing simple math
player speed = 3 pixels per frame
FPS = 60 frame per sec
city width = 20,000 pixels
3*60 = 180
20,000 / 180 = 111 sec = 1.8 min
so it will take the player roughly 2 mins to cross the map from right to left. That is huge.
But there is not enough time in the Zanga to create a big map with this size, place all the objects and the 15,000 zombies . But I found a solution to this problem and the name of the solution is "Procedural Generation" not only it saved time but it saved space (the game is only 3MB in size). and this is how I did it:
1- I divided the city into Blocks and every block is 32x32 small block (wall, lava, zombie ... etc)
2- to make it easy to create a city block I used and image editor to create an image of the block. Then I feed the image to a c# application and output an array which will be given to gamemaker. every pixel color will correspond to an object like a wall or water .screenshots of the process:
3- I have created 8 city blocks and I randomly place them next to each other using the array I created form the c# application. I place 19 x 19 city blocks randomly and hocus pocus I got a city to navigate
4- to make the performance fast I only load objects that are on the screen (Culling) and if an object is off-screen I delete it.
What would I have done differently ?
1- I would have used Json instead of using arrays. I will still use a 2d array for the city I will just fill it using json
2- I would have created a map editor instead of using photoshop
3- I would have made a better GUI for ammo count
Thank you All, and if you have any question feel free to ask me :)