| Game Title: | Blockade |
| Development Team Members: | Abhishek Nath and Gene Massey |
| Game Genre: | Tower Defense (strategy) |
| Brief Description: |
Blockade is a tower defense game where you try to stop waves of rotten vegetables from corrupting a plate of healthy vegetables. The rotten vegetables come from different directions and you have to create structures out of blocks that will collapse and kill the vegetables. As you defeat more vegetables, you gain money and can buy more blocks. The goal is to stop as many of the rotten vegetables as you can and get a high score! |
| Game Story / Objective: |
The story behind the game is that rotten vegetables are heading toward a plate of healthy vegetables and they must be stopped before they ruin the food. Your objective is to kill as many of them as you can and get a high score. |
| Game Mechanics + Controls: |
The way you kill the rotten vegetables is by creating precarious structures of blocks that collapse and crush the creeps. There are three different types of blocks and three different types of rotten vegetable creeps. Each block kills a particular type of rotten vegetable. For example, in order to kill the carrots, you must create structures that include "carrot crusher" blocks. You use the arrow keys to move your cursor, the space bar to place blocks , and the alt key to toggle between the different types of blocks that are available. |
| Technology: |
We used the Panda3D engine and integrated the ODE physics engine. We also implemented BFS path finding, though it is not used in the final version of the game. |
| Aesthetics: |
We wanted the game to have a light-hearted feeling, so we used funny "evil" vegetables and the enemies. For the blocks, we wanted to use simple cubes that could be easily distinguished from one another by their color. We chose comical sound effects and scary circus music for the theme music. |
| Screenshots: |
 |
 |
Early stages of game in between waves of creeps. |
Later stages of game with creeps coming from all directions. |
|
| CODE: |
All original code written in python using the Panda3D and ODE physics engines.
Here is an outline of the code files:
- Physics.py
The main file with the update loop.
- Init.py
Global variables.
- Block.py
The block class that is used to create the three types of blocks.
- Creep.py
The creep class that is used to create the three types of creeps.
- Grid.py
The grid class which keeps track of where all of the creeps and blocks are for path finding and block stacking.
- ResourceManager.py
This files keeps track of score, money, and health.
- MouseAndKeyboard.py
UI controls.
- Sound.py
Imports the music and sound effects.
|
| CONTENT: |
- There is a models folder that holds the vegetable and cube models. These are models that we created for a previous game.
- The textures folder holds the textures for the models.
- The sounds folder holds the music and sound effects which were created for this game.
|
| Three Greatest Challenges: |
- integrating ODE physics with Panda3D
There wasn't any documentation for this so it was challenging getting the ODE physics engine to work with Panda3D. We tried a number of things including using both Panda's collision detection for some things and ODE's physics and collision detection for others. Eventually we settled on using ODE for all of the collision detection and physics.
- optimizing performance with physics and path finding
Once we got path finding and physics working, we realized that the game would slow down too much when there were a lot of creeps and blocks in the scene. We tried a number of different ways to get the game to perform on a level that was still fun to play like limiting the number of creeps and blocks and simplifying the path finding. Eventually we settled on not using path finding for the creeps, and using a clean up routine for the blocks. Every ten seconds or so, any used blocks would be deleted. These changes allowed for the game play to still be fun and for everything to run at a speed that made it fun while still having the feel of a unlimited number of creeps and blocks.
- using physics as a game mechanic
Our main goal was to use physics, force and velocity, as the main mechanic behind killing creeps. This turned out to be more difficult than we expected. It was hard to calculate damage based on the force of a block impacting a creep and then have a reasonable response from the creep. We realized that it got complicated quickly when trying to have the creeps react to impacts from blocks or other creeps when they didn't die. We ended up settling on a compromise to the physics-based damage. We used a stone, paper scissors mechanic where certain block types were needed to kill certain creep types but the physics aspect was that the blocks had to have a certain downward velocity in order to cause a kill.
|
| Three things that went right: |
- general premise and design
We were really happy with being able to explore the general premise of a non-shooting tower defense game that used physics collisions to cause damage. Blockade shows the potential for some alternate ways to create a tower defense game. Since most tower defense games rely on placement to have the greatest effect within the range of the tower, mazing towers in a certain pattern to cause the creeps to move to certain locations or receive fire for longer, and then other characteristics of the kind of projectile and aura effects such as "slow", we were able to explore how these mechanics work when a 3D space can be explored more fully and placement of towers becomes more important than quality of projectile or effect.
- simplified technology
We chose to use the Panda3D engine because we knew that it was good for rapid development. We knew we didn't have as much time as we would have wanted to create the game we envisioned so we chose technology like Panda3D and using existing models to help speed up the development process so that we could focus on exploring gameplay.
- iteration and play testing
We started with a simple game within the first week of work. This helped a lot and we tried to keep iterating and play testing through out the process. Making changes based on how the game played help make it fun and helped us know what to work on.
|
| Three things that went wrong: |
- path finding wasn't that useful
We spent a good amount of time working on path finding because it is so essential to most tower defense games, but found that with our physics-based model that path finding actually took away from the fun of the game. A big part of the fun is to have the creep crash into your structure and then watch it collapse on the creep. If the creeps always avoid the structures, then you will not be able to get any points since there are no projectiles in the game. At the end, we decided not to use path finding. Also, it slowed things down.
- physics engine and path finding slowed things down
We struggled with the performance of the game throughout our work. The path finding wasn't fast enough once there were a lot of creeps and blocks, and the physics engine slowed down even more. We were able to come up with ways to minimize these performance problems, but it would be great if we could return to these issues and see if we could further optimize the game so that it could handle many different physics objects at once.
- interest curve
While we were happy with the premise and overall design of the game, we realized it was hard to make this game last as long as many tower defense games do. Most tower defense games can last any where from 30 minutes to an hour and we were just not able to match this level of depth in the gameplay. We ended up making a pretty enjoyable short game and can see that with more time we could extend the strategy and progression of the game so that it would build in challenge and reward.
|
| Other final thoughts: |
We loved the basic game design that we came up with and were happy about using some simplified technology to create the game quickly. We feel that we underestimated the complexity of balancing this kind of strategy game. Blockade is a great start and an interesting exploration of experimenting with the tower defense genre. |