COP3503 Spring 2018 Semester Project Game Design
Traphouse.Footage.Realisee.avec.Clipchamp.mp4
Items: Red Health Potion +Full Health (15% spawn chance) Blue Speed Boost Potion +50% Speed +50% Attackspeed for 20 seconds (10% spawn chance) Green Stamina Potion +Unlimited Stamina for 20 seconds (10% spawn chance) Yellow Attack Potion +50% Damage for 20 seconds (8% spawn chance) White Time Potion -50% enemy Walkspeed and Attackspeed for 20 seconds (7% spawn chance)
Weapons: Rarities: Default - D Uncommon - U Rare - R Epic - E
SPS -Swings per second
Default Knife - D -25 HP per hit Attack Range: 2 Nodes -1/2 SPS
Sword - R -60 HP per hit Attack Range: 5 Nodes 1/5 SPS 5% spawn chance
Default Pistol (M1911) - D Unlimited Ammo 10 Ammo per clip -10 HP per shot Penetration: 1 enemy 1 second reload time
Heavy Pistol (Desert Eagle) - U 35 Ammo 7 Ammo per clip -50 HP per shot Penetration: 2 enemies 2 second reload time
15% Spawn Chance
Bolt Action Sniper Rifle (L96A1) - E 15 Ammo 5 Ammo per clip -100 HP per shot +1 second bolt time Penetration: 5 enemies
2% Spawn Chance
Semi Auto Rifle (M14) - R 60 Ammo 10 Ammo per clip -20 HP per shot Penetration: 2 enemies 2 second reload time
5% spawn chance
Pump Action Shotgun (KSG) - R 30 Ammo 6 Ammo per clip -20 HP per shot Shoots out 12 projectiles at a certain angle from each other in a 30 degree cone Penetration: Each pellet, 1 enemy 0.25 second reload time for each shell
4% spawn chance 90 Ammo 30 Ammo per clip -30 HP per shot Penetration: 2 enemies 2 second reload time
4% spawn chance 180 Ammo 60 Ammo per clip -20 HP per shot Penetration: 2 enemies 5 second reload time
======= 2% spawn chance Semi Auto Sniper Rifle (Barrett .50 Cal) - E 30 Ammo 10 Ammo per clip -80 HP per shot Penetration: 4 enemies 4 second reload time 2% spawn chance
Submachine gun (MP40) - U 96 Ammo 32 ammo per clip -20 HP per shot Penetration: 1 enemy 2 seconds reload time 10% Spawn Chance
Monsters Skeleton - -5 HP per attack 35 speed 30 HP 60% spawn chance Spider - webShot(); shoots web that -50% speed when player is in the range Bite(); -3 HP per attack 50 speed 15 HP 30% spawn chance Ogre - Hammer(); -25 HP per attack 10 speed 100 HP 10% spawn chance Demon - -35 HP per fireball hit -50 HP per smash 30 Speed 500 HP 1 spawns in boss room //Progression (as the levels progress you see more of these, stats are better but sprites are different) //Skeleton -> Zombie -> Voidwalker //Black widow -> Huntsman -> Tarantula (bigger) //Giant-> Cyclops-> Ogre-> Scherik the Orc (Easter Egg) //Demon starts showing up mid game.
MileStone*** Milestone #2 Group 37 -- Suman Adari, John Thurber, Edward Goodman, Chimeziri Mbionwu, Kayton Fletcher, Matthew Baumaister, Bricson Linares
Definition (20%): The system is a top down shooter video game called “Traphouse.” The game takes in input from the user and displays various on-screen elements that correlate with the user’s choices. This includes moving, shooting, and interacting with objects. The system will be written so that, on certain key events from the user, it will respond on screen with the desired choices -- moving, shooting, or interaction.The system will also create its own “enemies” that, when shot, increase the player’s score. It will also create random levels for the player to progress through, keeping the game unique and interesting for the player. The game is designed just for the entertainment of the player. The game will be easy enough to be played by people of all ages, so we have a wide audience.
Analysis (30%) What should be the inputs?
- Inputs: what data will be input into the program by one or more “actors”?
Enemy position Enemy health Mouse position Keyboard input Left/Right mouse clicks Score User health User ammo User stamina Camera position Map seeds Inventory Player Buffs Game time loop
– What commands will be available? Left Click Right Click WASD Q, E,F,R,Left Shift, Space Esc
– What will be the format for each type of data?
Player name (for high scores): string Level: int Score: int Ammo: int Health: int Stamina: int Movement speed: double Positions: SFML coordinates (from external graphics library) Inventory/Buffs: Array Time: SFML time (from external graphics lib)
What should be the outputs?
- Outputs: what data will our program generate that will be needed by one or more “actors”?
The time the program has been running. The location of the player based on the map. The location of the enemies. The location of weapon particles and other objects that cause damage.
– How will data be output?
The spawn room and minimap will be generated first onto the screen. Game data like mob health will not be shown. Other data, such as ammunition count, or player health, will be displayed graphically on the screen. The player would be shown as a sprite. Mouse position will be shown to assist with aiming, and movement will be shown as the player’s sprite moving through the room. Enemy spawning will also be output on the screen in addition to bullet/attack animations.
– Are there different ways it may potentially need to be output? UI such as weapon ammunition and game score will be output to the screen constantly while other elements such as menu screen will be displayed dynamically.
Different window resolutions (you can make it as big or as little as you want, within reason) Dungeon rendering
What are the flow/logic required for the proposed system?
The game will run in a while loop, only exiting when the “exit game” button in the escape menu is pressed.
- Constraints: we’ve previously noted that sometimes objects should have limitations imposed on them “artificially,” in order to model what they represent in the real world more accurately. -Might there be analogous system-level constraints which should be enforced?
Movement speed will be modeled after real human movement, but sped up a bit to keep the game from being boring. The same goes for stamina and health.
Monsters will have varying degrees of handicaps, since different monsters will go at different speeds, have different attack power, and have different health.
- Assumptions: Are we operating under any sort of assumptions?
We are assuming the game will work on any compiler and that the user won’t try to break it or use outside applications to affect the pieces of the game itself (like cheat programs).
- Modifications: Whenever an object within the program is modified, will any corresponding changes be expected elsewhere within the system? Adding a new element into a data structure (typically) may not automatically add it into corresponding structures of the user interface.
In the case of mobs, no. All mobs are independent objects and won’t all die if one dies. However, once a mob is killed, the score is affected. In the case of the player dying, then the game will have to end the current level. This means every object in simulation is affected. The inventory will change if the user picks up a new item. The same goes for player stats if a potion is used.
- Relationships/Effects: How are system-level modifications related to system constraints?
System level modifications such as window size and frame rate are directly related to your system’s resolution and processing power, which will be scalable in out program based off of system specs.
Design (30%)
How many modules are required? Graphics Audio System Window
What are the classes and methods for each module/component? Graphics Player class Getter/setters for player struct(speed, health, attack, position, name) Update (for position) Enemy Class Getter/setters for enemy struct (speed, health, attack, position) Update (for position) Map Class Map generator Game Manager Game data module (collection of user data and game data) Graphics module (renders sprites and map) Pickup Class Items child class Mutators for player variables Weapons child class Audio Module -- It will handle the sound portion of the game. For example, gunshots, mob sounds, footsteps, etc. will be handled by the audio module. Audio Audio::playSound(string name) Background music / ambient noises
What are the shared classes/methods across all modules? Player class, enemy class, classes for each individual mob created, game manager class
Execution Plan (20%):
What is the best way to divide the coding tasks?
There will be one student working on the graphics. This involves creating sprites, weapons, the map, and animations for each. Another student will work alongside him, helping to implement the graphics into the program properly. One student will deal with audio implementation for the different game actions and help to debug existing code. Two students will work on the core game code, including map generation, key events for the user, and “actor” classes for the enemies and player. The final two students will develop the AI for the enemies and
What will the makefile look like? The Makefile will include targets/dependencies/actions for each of the following cpp files (and their respective header files): Player, Enemy, Map, GameManager, Chest, Pickup, Health Potion, Speed Potion, Time Potion, Attack Potion, Stamina Potion, and Weapon.
Your own planned deadlines to carry out the implementation/testing on each module:
March 20: Final planning for project structure
March 22:: Get coding outline for project, including classes and methods.
March 29: Finish map generation for the program
April 5: Finish most classes and methods for game “actors” (getters, setters, other functionality)
April 9: Have sprites completed for game
April 12: Complete game menu
April 15: Get sprites integrated into game code
April 17: Audio implemented into game
April 20: Get enemy AI completed.
April 22: Finish final debugging and finishing touches on game.
April 23rd: Project Due
- int hp;
- int attack;
- double walkspeed;
- string name;
- Sprite player;
- Texture texture;
- Pickup inventory[];
- Player();
- void setName(std::string);
- void setHp(int);
- void setAttack(int);
- void setWalkspeed(double);
- std::string getName();
- int getLevel();
- int getWalkspeed();
- int getHp();
- int getAttack();
- Sprite getPlayer();
- void Update(double);
- ~Player();
- int hp;
- double walkspeed;
- double spawnChance();
- int attack;
- Sprite sprite;
- void setWalkspeed(int);
- int getWalkspeed();
- int getHp();
- int getAttack();
- Sprite getEnemy();
- void Update(double);
- ~Enemy();
- Map();
- void Generate();
- ~Map();
- GameManager();
- void Start();
- void Pause();
- ~GameManager();
- double spawnChance;
- Vector2f spawnLocation;
- Sprite sprite;
- Texture texture;
- vector Open();
- double spawnChance;
- Sprite potion;A
- Texture texture;
- void Heal();
- Sprite potion;
- Texture texture;
- void boostSpeed();
- Sprite potion;
- Texture texture;
- void slowTime();
- Sprite potion;
- Texture texture;
- void boostAttack();
- Sprite potion;
- Texture texture;
- void increaseStamina();
- string name;
- int damage;
- double attackSpeed;
- int ammo;
- Sprite sprite;
- Texture texture;
- void setAmmo(int);
- int getAmmo();
- double getAttackSpeed();
- void setAttackSpeed(int);
- void Shoot();
- void Shoot();
- void Shoot();
- void Shoot();
+void boneThrow(); +void boneWhack();
+void webShot(); +void Bite();
- void Hammer();
- void Fireball();
- void groundSmash();
Pseudocode************ ~enumeration for sprinting, walking , idle ~while true check each enumeration status and loop corresponding audio clip ~break loop when enumeration is idle ~if state changes (sprinting->walking), play current audio for extra half second, but start new state audio clip ~if state changes to idle cut sound immediately