Jonathan Kim
Jason Mooradian
Andrew J. Santa Maria
Warren Seranio
Design Document
Overview
In our game --------, the player must struggle to survive a never ending zombie onslaught. The premise of the story is that the player is one of M.O.O.N. (Mobile Overt Operations Network) unit’s soldiers who was separated from his squad and is forced to barricade himself inside of a mansion in Badger City. Due to a mixture of nuclear and chemical experiments done by the Parasol Company near the city and the discovery and accidental release of a previously unknown strain of the influenza virus, the S-Virus, the citizens of Badger City has been turned into zombies. To make things worse, the army government and the Parasol Company has sent in a team of mercenaries and soldiers, the M.O.O.N. unit to dispatch and get rid of all evidence i.e. survivors. Since the player’s character was separated from his squad and no one is able to account for all of his actions and determine for sure whether the player is infected or not, he is also a target to be eliminated. As a result zombies and occasionally M.O.O.N. soldiers will charge into the mansion and try to break into it in order to eat or splatter the player’s brain respectively.
The player’s sole job is to survive by using various weapons and using traps the player sets inside of the mansion. The zombies assault the room for three minutes every round. In between rounds there is a rest period of at most 30 seconds where the player buys necessary equipment such as ammunition, weapons, traps, and food/med kits. As the player survives more rounds the number of zombies that assault the house will increase until eventually the player is killed. Traps are set between rounds via a grid based system and they vary in area of effect, power, number of uses, and cool down or reactivation times. The player will move using the arrow or wasd keys and fire or use weapons primary and secondary functions with the spacebar and shift keys respectively. The activation on traps will vary by trap with some such as mines activating on impact, trapdoors activating via a button press on an assigned number key, or bombs activating after a timer. Health and weapons are refilled between rounds through “internet” transactions. Money that needs to be used for transaction is collected by killing zombies with each zombie dropping a random amount of money in its wallet before it is killed. Zombies can also drop articles of food which can restore a little bit of health. Note that this game is an intentionally unbeatable game like Tetris and Space Invaders and the goal of the player is nothing more than to see how long he can last before he is eaten or killed.
The entire game is played from a top down perspective similar to the style used by the old Nintendo Legend of Zelda games or the Pokemon games. The art style on a whole is reminiscent of Pokemon with characters possessing slightly enlarged craniums. The game is also going to feature a ridiculous amount of blood and gore to satirize the survival horror genre of video games. The copious amount of blood, gore, and the over the top violence will also offset the otherwise cutesy cartoon-esque look of the game giving it an interesting look and style overall. In the audio department the game will feature the standard zombie moaning, bone crunching, bullet firing, chainsaw revving, flesh hacking, and profanity spouting sound effects that are common for this genre. The music will also feature a cheesy soundtrack to emphasize the satirical nature of this game.
Game Specifications
Rules and Mechanics
The game only ends when the player is killed whether by the zombies or the M.O.O.N. soldiers
The player’s character is controlled by the w, a, s, d keys or the arrow keys. The player uses a weapons primary function with the spacebar and the secondary function with the shift key. All projectile weapons such as dual pistols, rocket launchers, grenades, shotguns, and assault rifle/SMGs have a finite number of ammunition. Melee weapons such as swords, chainsaws, lightsabers, whips, and maces/axes have infinite use, but lack the range of projectile weapons. The player can only hold two weapons at one time. It does not matter if it is two projectile weapons, two melee weapons, or one of each type of weapons. Ammo counts and current weapons displayed at the bottom on a toolbar like HUD. The player cycles between the two weapons using the ctrl key. To swap out weapons, the player must wait for the end of the round and purchase a new weapon, once purchased the player must go to the weapons locker and pick out a new set of weapons. The player will automatically lose his current weapons in favor of the new weapons the player has chosen.
The player has a fixed number of hp at 100. The player takes 5 points of damage every time the player comes in contact with a zombie and 10 damage points if the player comes in contact with either the M.O.O.N. soldier or their bullets. The player can refill health by either a picking up food dropped by the zombies, which restore 15 health, or med kits dropped by the soldiers, which restore 25 health points. Also between rounds players can purchase health via the internet which restores the player’s health to 100.
The player’s attacks also do varying amounts of damage. The melee weapons do about 20 damage for swords (good balance of range and swing speed), 70 for chainsaw (awesome range, but slow swing), 30 for light saber (has good range and a great swing speed), 50 for axes and maces (maces have a faster swing rate than maces, but axes have more range), and 15 for whips (one of the biggest ranges and fastest swing speeds). The dual wield pistols do about 5 per shot(but shoots two bullets per spacebar press), the shotguns do 25 per shot, but shoots about 5 spread bullets, Rocket launcher and grenades both do about 75 damage also causes splash damages where all enemies 1 unit away from the target receive 50 damage, 2 units away 25 damage. However both the rocket and grenade are slow to use. The assault rifles do about 25 per shot and SMGs do about 20. However SMGs have a faster firing rate. Traps are instant death weapons with generally big area of effects.
Zombies have about 15 health points each and as a result are mostly cannon fodder in the game. The M.O.O.N. soldiers on the other hand have about 50 health points and do about 10 damage points with their 9mm weapons.
The player also can set traps that are “bought” over the internet and lay them out in the level. The traps only have a limited amount of use and vary depending on power. For example traps all have a maximum number of uses, activation methods, and reset times. Activation methods are how the traps are activated. These methods are timed countdowns, remote detonation (which is activated by the assigned number key), and proximity (if an enemy touches it, then the trap is sprung). Reset times are the time the trap is unable to be sprung between use (i.e. if a trap has a reset time of 10, then the player must wait 10 seconds after the trap is used in order to use it again). Maximum number of uses is the number of times a trap can be used before it breaks. All of this information is given on the bottom of the screen via a toolbar like hud. The player can only have a maximum of 4 traps in a round at a time. If a trap still has some use left it can be carried over to the next round. To restore the number of uses in a trap, the player must purchase the repair option over the internet. The following is a list of traps available to the player
Prince of Persia style floor spikes
Mines ( Proximity, Remote, or Timed)
Trapdoors
Crushing ceilings
Closing in walls
Indiana Jones style Boulder Traps
A giant blade that cuts across the entire level
Saw blades that travel across the floor
Artwork/User Interface
The game will be seen from a Legend of Zelda or Pokemon-esque viewpoint which is a pseudo- top down/isometric viewpoint. Also the general art style of utilizing slightly large headed and cutesy looking character designs will also transfer into our game. However, our game will be more violent and a lot gorier than either of the two games listed above. To juxtapose the dark murky theme of death in our game, our game will actually utilize bright vibrant colors and as a result greatly resemble the Pokemon games.
Our game will feature a limited HUD unlike Zelda or Pokemon. Our HUD will resemble a toolbar on the bottom of the screen much like the HUD used in the MMORPG, Guild Wars. The HUD will display the traps the player has and the weapons the player has equipped. All the traps that are ready to be used or the weapon that the player is using will be brightly lit, while unready traps or equipped, but not used weapon will be dimly lit. The players life bar will be shown at the bottom right of the toolbar and the ammo count will also be shown on the toolbar right above the health bar.
Gameplay and Balance
Our game will limit the player to carry only two weapons and plant 4 traps every two minute round. The focus of our game is not to create a long complex adventure, but create a game that has fast thrills and can be played for both long stretches of time or quick ten minute sessions. The level of the mansion will be quite Spartan in appearance and will mostly be a wide open space. The only real interaction the player will have with the level is via traps that the player set and the other soldiers or zombies that will occupy the mansion during the rounds. Also interaction will also be little more than accessing a PC for buying equipment, traps, and supplies or accessing a weapons locker to swap out weapons. To swap out or choose weapons or buy supplies the player merely points and left clicks on the mouse the stuff they wish to buy/equip. To access a weapons locker or PC in the first place the player only needs to stand in front of the terminal and press the ENTER key.
All weapons will be activated by both the space and shift keys. The spacebar controls the primary function of the weapon and the shift key controls the secondary function of the weapon. Depending on the traps, the timed or proximity based traps will be used automatically while remote traps will be used by pressing the corresponding number key.
Physics will not be the highlight of this game, instead the game will rely on quick pacing and animation to remain interesting to the player
The game is meant to be fun in quick or long sessions by allowing the player to try and survive for as long as possible. The appeal of the game is that the rules are simple and easy to learn, but the difficulty increases in order to offer a challenge to even the most experienced gamers. The satire filled nature of this game will hopefully ensure that players will have a interesting time playing whether or not they decide to use traps, use projectile weapons, or go solely melee combat like in the original gauntlet games.
Music and Sound
The game will feature a mixture of hard rock/metal music during the round when the player is fighting in the middle of the round. However as the player hits the ¼ life mark, the music will shift into a slow dramatic even epic scores to emphasize and parody cinematic feeling moments in other games.
The sound effects will be standard for each weapons and traps. Also the zombies will make appropriate moaning effects and death screams. The soldiers will shout orders and also scream during their deaths. Bone crunching, and flesh squashing sound effects will also be used extensively in the game.
Background Story
On October 31, 2008 a virus was accidentally unleashed in the quiet city of Badger City. This virus was a creation of the Parasol Company and is a mutated strain of the Influenza virus. When combined with the nuclear and chemical pollution that the Parasol Company created over the years, this virus turned 90% of the bustling metropolis of Badger City into Zombies. In response to this threat, the government and the Parasol Company attempts one of the biggest cover-ups in history. By sending an elite fighting force, the M.O.O.N. (Mobile Overt Operations Net) soldiers into the city and destroy all evidence, including witnesses (i.e. survivors). You are Leo Samuel Kane, a soldier of M.O.O.N. during one of the extermination runs, you were separated from your squad when you were ambushed by a horde of zombies that killed most of your squad mates. As a result, because of the high chance that you are infected with the U-Virus, you are now a target for extermination. To escape the zombies and your former cohorts, you barricade yourself in a mansion and struggle to survive for as long as you can by using the mansion, your training, and your wits to survive.
Characters
Leo Samuel Kane – this is the main character of the game and the character that the player plays in the game. He must struggle to survive the zombie invasion and the M.O.O.N. extermination squads using his training and wits. He has a wide knowledge of weapons and is in peak physical condition making him as formidable melee combatant as a weapons specialist.
Zombies – They want to eat your brain and were residents of the city before the infection of the virus. They are not the smartest tools in the shed nor are they the strongest or fastest, but there are a whole lot of them and can easily surround you. Solution: shoot them, cut them, light them on fire…. Etc…
M.O.O.N. soldiers – You’ll come upon a few of these guys as you ward off the countless number of zombies. These guys are tough and they are also highly trained. After all you were one of them. Advice: Don’t even try to go melee combat with them because they are as good if not better fighters than you. Note: All’s fair in love and war, shoot them in the back while they are distracted by zombies or use your traps. These soldiers will also attack zombies and zombies will fight them as well, but be warned they are still after you.
Levels
There are only two stages in the entirety of the game. The first level is the mansion floor where the player must fight the never ending hordes of zombies and M.O.O.N. soldiers. The second level is the second floor of the mansion where the player rests for about 30 seconds and buys weapons, buys or repairs traps, buy supplies and ammo, and change out weapon load outs. From then on these two maps cycle until the player is killed. The first floor of the mansion however will look different as the player adds traps to the mansion. The person access the second floor of the mansion by going through a door at the end of the two minute round by pressing enter in front of the door the player returns to the first floor by going back to the door and pressing enter in front of the door. The goal of the first floor is to survive, and the second level is mostly to take a break.
Scripts
The scripts are as follows
Zombie(normal): Mooooooooan
Zombie(dying): RRREEEEAAAARRRRRGGGGHHHH!!!!!!
M.O.O.N. Soldier: “Get Him!”
M.O.O.N. Soldier: “There He Is!”
M.O.O.N. Soldier: “Under Fire Need Help!”
M.O.O.N. Soldier: “I’m Hit”
M.O.O.N. Soldier: “Medic!”
M.O.O.N. Soldier: “I need Help!”
M.O.O.N. Soldier: “Take that you damn zombie!”
M.O.O.N. Soldier: “Tango Down!”
M.O.O.N. Soldier: “Got You!”
M.O.O.N. Soldier: “Shit!”
M.O.O.N. Soldier(dying): “AAAAARRRRGGGGHHHH!!!!!
Cut Scenes
We are still debating whether or not we wish to implement a cutscene for our game, but if we do decide to add a cutscene it will only be a short cutscene in the intro of our game that details the event prior to entering the mansion for the first time.
Artificial Intelligence
The Enemy AI will differ slightly depending whether it is zombie or soldier. For the zombie the AI will shuffle to either the player or a M.O.O.N. soldier depending which is closer to it.
The M.O.O.N. soldiers on the other hand will make their way towards the player and focus solely on the player unless the soldier is attacked by a zombie. Then the zombie will be exterminated before the soldier resumes the attack on the player.
Technical Specifications
Our game will be
written in Java using the Eclipse environment for easy, organized
development. Additionally, the game will not only be utilizing
several provided data structures in the Java library, but Dan Frost's
ucigame for displaying the graphics and controlling the entities.
Utilizing the Java library and ucigame, I am basically writing the
game from scratch. Since this game is written in Java, it
should be able to execute on all systems which can compile and run
Java. There isn't anything attached to the underlying engine
which doesn't make it cross-compatible. Additionally, thanks to
Google's 2+ gigabytes of disk space for email, recent updates of the
code will be kept in my email.
While Sprite is a great class for
display digital entities, there was still more I needed to expand
upon. Since the ucigame source is closed, I had no real way of
extending it so I had to make a new class which encapsulated it.
For the record, the MR prefix stands for our group name: Minority
Report.
private
abstract class MRSprite
{
protected Sprite
data;
protected boolean
mVisible;
public
MRSprite(Sprite spr) { ... }
public Sprite
getData() { ... }
public
void setVisible(boolean visible) { ...}
public boolean
isVisible() { ... }
}
In
addition to the given sprite data, as of now, the entities will also
have a boolean declaring their visibility, this will help out the
SceneManager described next. Since there are several types of
sprites such as ones representing characters and items, object
oriented programming is essential.
private
class CharacterSprite extends MRSprite
{
...
private float
mHealth;
public void
setHealth(float health) { ... }
public float
getHealth() { ... }
}
The character sprite
obviously needs a new floating point variable which represents its
health.
private
class ItemSprite extends MRSprite
{
...
private long
mLivingTime;
private long creationTime;
public void
setLivingTime(long time) { ... }
public long
getLivingTime() { ... }
}
Items
such as traps and grenades aren't forever. They need to know
when to disappear, explode, and/or what not.
With visual
display being a primary element of any videogame, I'm going to pay
special attention to the manipulation of graphics. The game
features our protagonist fighting against endless hordes of
zombies. The only way he can hope to survive is if he utilizes
his items, weapons, and skill. Of course, with so many things
sprites on screen, managing them is essential.
// code thus far
private class SceneManager
{
private HashMap<String, MRSprite> mSprites;
private HashMap<String, Image> mImages;
public SpriteManager() { ... }
public Image addImage(String name, String filename) { ... }
public Image getimage(String name) { ... }
public void removeImage(String name) { ... }
public CharacterSprite addCharacterSprite(String name, Image img) { ... }
public CharacterSprite addCharacterSprite(String name, Image img, int shade) { ... }
public
CharacterSprite
addCharacterSprite(String name, Image img, int red, int green, int
blue) { ... }
public
ItemSprite
addItemSprite(String name, Image img) { ... }
public ItemSprite addItemSprite(String name, Image img, int shade) { ... }
public ItemSprite addItemSprite(String name, Image img, int red, int green, int blue) { ... }
public Sprite getSprite(String name) { ... }
public void removeSprite(String name) { ... }
public void renderScene() { ... }
}
The SceneManager is
a major class for this game. Instead of making several
unorganized calls to getImage() and makeSprite(), the SceneManager
takes care of those calls. The SceneManager especially utilizes
Java's HashMap.
public
Image addImage(String name, String filename, int red, int green, int
blue)
{
Image img =
getImage(filename, red, green, blue);
if (img != null)
mImages.put(name,
img);
return
img;
}
public
CharacterSprite addCharacterSprite(String name, int width, int
height)
{
Sprite spr =
makeSprite(width, height);
if (spr != null)
mSprites.put(name,
new CharacterSprite(spr));
return
mSprites.get(name);
}
In
looking for the right data structure to organize allocated Sprites
and Images, I needed quick, immediate, and especially, recognizable
access. Map's proved to be the right structure. The keys
for these maps are Strings; thus, the SceneManager can tie a given
String to each Sprite or Image. This way, if I gave a sprite
the name "name0," I can retrieve that specific sprite using
getSprite("name0") without needing to memorize some
traditional number index. addImage() and addSprite() are just
like their counterparts getImage() and makeSprite(), except they call
those functions and require a String as a key. renderScene()
does exactly what it does; the function will allocate through the
HashMap of Sprites and render each one for the scene.
public
void renderScene()
{
Iterator<MRSprite>
i = mSprites.values().iterator();
while (i.hasNext())
{
MRSprite spr = i.next();
if (spr.isVisible())
spr.getData().draw();
}
}
Instead
of calling draw() on each Sprite myself, SceneManager does everything
for me.
private class Vec2
{
public float x;
public float y;
public Vec2() { ... }
public Vec2(float x, float y) { ... }
public Vec2(Vec2 rhs) { ... }
public Vec2 add(float x, float y) { ... }
public Vec2 add(Vec2 v) { ... }
public Vec2 sub(float x, float y) { ... }
public Vec2 sub(Vec2 v) { ... }
public Vec2 mult(float x, float y) { ... }
public Vec2 mult(Vec2 v) { ... }
public Vec2 div(float x, float y) { ... }
public Vec2 div(Vec2 v) { ... }
public Vec2
normalize() { ... }
public float length() { ...
}
public float distance(Vec2 v) { ... }
}
Much like any
two-dimensional game, entities require some kind of euclidean
coordinates. Vec2 provides a general purpose representation for
position, direction, and magnitude. Vec2 can be arithmetically
combined with other Vec2's thanks to its member funtions. The x
and y variables are public for immediate access to the fields rather
than implementing get()/set() functions. Of course, Linear
Algebra comes into play when programming these 2D vectors.
float
length()
{
return (float)Math.sqrt(x * x + y
* y + z * z);
}
Vec2 normalize()
{
float invSqrt = 1.0f / length();
return new
Vec2(x * invSqrt, y * invSqrt);
}
I'll
definitely need to do much vector normalizing when it comes to
calculation directions. And of course, there is no way for me
to do that without calculating its length/magnitude. Picking up
tips on game development forums, I've learned that divisions require
more computation than multiplications. For that reason, I
calculate the reciprocal for the length and simply multiply it to the
elements of the vector. As of now, this is one of the many
optimizations for the game. Since this fast paced game depends
on skill, optimization is essential to providing a speedy game
experience.
As for the actual game, zombies and M.O.O.N. Soldiers both possess a common goal: to destroy the player. The zombies, of course, are relatively dumb. All they really want is the player for sustenance.
Vec2 direction = new Vec2(player1.getData().x, player1.getData().y).sub(new Vec2(zombie.getData().x, zombie.getData().y)).normalize();
zombie.motion(direction.x * velocity, direction.y * velocity);
With this code, the zombie ghoulishly walks toward our hero. M.O.O.N. soldiers use much the same algorithm but move even faster. Since the soldiers are armed with weapons as well, they don't really need to get so close to the player anyway. They'll probably keep their distance.
public float distance(Vec2 v)
{
Vec2 dir = v.sub(this);
return (float)Math.abs(dir.length());
}
Schedule and Personnel
Jonathan Kim is the ideas man—our lead game designer. He considers all the things that will go into the game and brings it all together in the game document. This makes it easy for our group to create the game knowing that everything in the game is on text. Jonathan needs to be the conductor of our game development orchestra, and over time, learn all the specific details that go into creating a game.
Jason Mooradian is the audio creator. Our game will definitely require sound to immerse the game player. Jason also performs other tasks such as assisting Warren in graphical content. Initially without any sound creation experience, Jason will learn what it takes to create audio for a game.
Andrew J. Santa Maria digitally strings all the content together through the power of Java. He takes the game play elements from Jonathan Kim, the graphics from Warren Seranio, and the audio from Jason Mooradian, and concocts a game. Eventually, he will not only gain the experience it takes to program a game, but the experience to work on a game in a team.
Warren Seranio creates the graphics for the game. With visual output usually being the primary mode of interactivity with a video game, Warren's job is not an easy one. The graphics must fit with the game and blend in seamlessly with the environment. In the end, Warren will learn what it takes to create graphics for a simple video game.
|
Week |
Jonathan Kim |
Jason Mooradian |
Andrew J. Santa Maria |
Warren Seranio |
|
1 |
Think of game idea |
Think of game idea |
Think of game idea |
Think of game idea |
|
2 |
Agree upon game idea |
Agree upon game idea |
Agree upon game idea |
Agree upon game idea |
|
3 |
Expand upon ideas |
|
|
Write up outline |
|
4 |
|
Start creation of sound/music |
Start coding major data structures |
Start creation of graphics content |
|
5 |
Write up Game Specifications for the Game Document |
|
Write up Technical Specifications for the Game Document |
|
|
6 |
|
Finish character sound effects |
Fully implement enemy AI |
Finish enemy graphics |
|
7 |
|
Finish item sound effects |
Fully implement items |
Finish item graphics |
|
8 |
Testing |
Testing |
Finish an alpha for testing |
Testing |
|
9 |
Possibly more testing |
Possibly more testing |
Finish prototype for demonstration |
Possibly more testing |
|
10 |
Any last minute polish |
Any last minute polish |
Any last minute polish |
Any last minute polish |