Ghost Streets is a top down action arcade game - sort of like GTA meets Pac Man. In the game, the player takes the role of an outlaw criminal on the run. While the players character is on the run from his latest bank robbery and driving through the desert, his car runs out of petrol and stops on the outskirts of a mysterious deserted city that suddenly appears out of nowhere. The player has to scavenge the city and try to find some petrol, before he can get his car started up again and get back on the road. However, there is something very creepy about the city. While the players character is looking around the deserted city to find some petrol, he starts to notice strange white ghost-like entities appearing and surrounding him. These ghosts seem to appear out of nowhere, and they also seem to be able to go through buildings and to merge into each other. Then all of a sudden, one the ghosts swoops into the players character - the players character starts to feel like his life is being drained out of him…he decides it’s to time to get out of the city as quickly as he can, but first he must collect enough petrol to get his car started again. He has to hurry up, or else it’s game over!
Ghost Streets was developed using XNA 4.0. I decided I wanted to try and make a proper arcade game - something less abstract in terms of gameplay and more complex in terms of applied game logic. I’m also a big fan of classic arcade games like Pac Man (I even have a Pac Man themed hoodie!) - and I’m also a big fan of the original GTA (and GTA II). I thought that it would be cool if the top down shooter gameplay mechanics of GTA could be combined with the fast paced Pac Man-style of level navigation. In Ghost Streets, the main objective is for the player to collect 10 randomly placed petrol cans in the city level, while at the same time trying to avoid the ghosts who want to kill him. Once the player collects the 10 petrol cans, they can return to their car and drive away. The player can also shoot at the ghosts, but this does not kill them - it only slows them down. The ghosts can go through buildings, merge and multiply during the course of the game. The total amount of seconds spent by the player looking for the petrol cans is what the high score is based on. In Ghost Streets, the player can attempt to beat the top ten scores with their own. The level generation is Ghost Streets is procedural - so every time the player starts a new game, they will be faced with navigating a new level (and will have to collect new randomly placed petrol cans).
In terms of graphics, Ghost Streets features very simple “coder art” graphics. I decided to spend more time focusing on programming the gameplay logic rather then programming the graphics. However, one feature I’m kind of proud of is the very crude animation system used to animate the players character. This animation system is based on a simple sine wave oscillation timer - that rotates, back and forth, designated group parts of the players character model. It makes the players character animation look similar to the sprite-based animation used for characters in the original GTA.
Gameplay wise, the main feature in Ghost Streets are the ghosts. The total number of ghosts that can be present during the course of the game are 784 ghosts. Groups of 196 ghosts are divided into four different "flocks" and a simple waypoint based flocking algorithm is used to control their movement around the level. A vector distance checking function is used to check how close they are to their current waypoint and how close they are to player. If the player is within a certain distance to them, they swoop in (their speed temporarily increases), and they attack the player.
A special thanks goes out to James “Axyss” Webb for writing the main game music loops (and also for testing the game). Thanks also goes out to all the awesome folks who tested the initial versions of my game. I would also like to recommend Riemers XNA tutorials if anyone is looking for good and straightforward XNA game programming tutorials.
Below you can watch the trailer for Ghost Streets: