Current Revision: 12/3/22
Hamdam Almehairbi (almeharibi.3)
William Gilicinski (gilicinski.3)
Owen Hennessey (hennesey.64)
Abd Elrahman Ibrahim (Ibrahim.281)
Emil Pang (pang.216)
Adam Perhala (perhala.3)
The Legend of Zelda done our way. Current iteration is complete with full implementation of entire first dungeon,
with new features including custom controls and a level creator.
Block - Block generation and collision
- Block.cs - Enables Updateable and Drawable Capabilities
- BlockFactory.cs - Produces all blocks
- BlockRectangle.cs - Holds default block size data
- IBlock.cs - Block Interface
Camera - Camera and Transitions
- Camera.cs - Enables Updateable and Drawable Capabilities
- GameCamera.cs - Camera object that enables the transition gradually between rooms instead of clipping to them
- ICamera.cs - Camera Interface
Collision - Collision of any collidable objects
- CollisionDetection.cs - Determines if a collision occurs
- CollisionResolution.cs - Handles collisions when they do occur
- EnemyBlockCollisionCommand.cs - Enemy/Block collision
- EnemyEnemyCollisionCommand.cs - Enemy/Enemy collision
- EnemyPlayerCollisionCommand.cs - Enemy/Player collision
- EnemyProjectileCollisionCommand.cs - Enemy/Projectile collision
- ICollidable.cs - Collision Interface
- PlayerBlockCollisionCommand.cs - Player/Block collision
-
- PlayerDoorCollisionCommand.cs.cs - Player/Door collision
- PlayerEnemyCollisionCommand.cs.cs - Player/Enemy collision
- PlayerItemCollisionCommand.cs - Player/Item collision
- PlayerProjectileCollisionCommand.cs - Player/Projectile collision
- ProjectileBlockCollisionCommand.cs - Projectile/Block collision
Content - Sprites and Imagery files
Controller - Interface for controllers and default key/mouse mappings
- ControlsKeyboard.cs - Keyboard used when modifying keyboard controls
- IController.cs - Controller Interface
- KeyboardController.cs - Default Keyboard settings
- KeyboardDrawings.cs - Drawings used when displaying the controls screen
- MouseCommand.cs - Allows for mouse clicking
- MouseController.cs - Allows for Updateable and Registerable capabilites
Door - Interface for controllers and default key/mouse mappings
- Door.cs - Contains all of the features for doors
- DoorFactory.cs - Produces all doors
- IDoor.cs - Interface for doors
Enemy - Enemy generation/Movement/Collision/Damaging
- Enemy.cs - Enables Updateable and Drawable Capabilities and defines enemy properties
- EnemyFactory.cs - Produces all enemies
- EnemyFrame.cs - Holds/Updates Enemy positions and frames
- EnemyRectangle.cs - Holds Enemy image rectangle data
- EnemyVelocity.cs - Handles changes in Enemy movement velocity
- IEnemy.cs - Enemy Interface
Game - Opening/Loading levels/Running/Stopping the game
- Constants.cs - Default measurements for important sizes
- Enums.cs - Enums for the 3 states (STANDING, RUNNING, ATTACKING) and the 4 directions (UP, DOWN, LEFT, RIGHT)
- ExitCommand.cs - Enables exit game capabilites
- Game1.cs - Core of the game containing base components such as level loader, game object manager, and public interfaces
- GameObjectManager.cs - Handles updating and drawing all objects currently in game by tracking them in lists
- ICommand.cs - Command Interface
- LevelLoader.cs - Enables transitions between the different rooms of the level
- LoadLevelCommand.cs - Command used to load a level
- LoadRoomCommand.cs - Command used to load a room
- PauseCommand.cs - Command used to pause
- Program.cs - The very bottom that allows everything to run
- Room.cs - Describes features of a room
Item - Item generation/Movement/Collision/Pickup
- IItem.cs - Item Interface
- IObject.cs - Object Interface
- Item.cs - Enables Updateable and Drawable capabilities
- ItemFactory.cs - Creates all Items
- ItemObject.cs - Allows for XML parsing
- ItemRectangle.cs - Holds Item image rectangle data
Levels - Files containing each of the different rooms as well as the artificial one
Link - Image of Link
- LinkRectangle.cs - The defaults of Link's position and appearance
Player - Player generation/Movement/Collision/Damaging/Attacking
- IPlayer.cs - Player Interface
- Player.cs - Allows for Updateable and Drawable capabilities
- PlayerCommands.cs - Allows for Running/Standing/Attacking/Damage/Projectiles in all directions
- PlayerFactory.cs - Creates all Players
Projectile - Projectile generation/Movement/Collision/Damaging
- IProjectiles.cs - Projectile Interface
- Projectile.cs - Allows for Updateable and Drawable Capabilities
- ProjectileFactory.cs - Creates all Projectiles
- ProjectileRectangle.cs - Holds Projectile image rectangle data
ScreenDisplay - Key mappings for the display of all necessary objects
- NextProjectileCommand.cs - Display next Projectile to screen
- PrevProjectileCommand.cs - Display previous Projectile to screen
- DisplayRoomCommand.cs - Used to switch rooms HandleSpecialDisplays.cs - Used to display different special screens
Sprite - Image display for all Players/Items/Blocks/Enemies/Text
- ISprite.cs - Sprite Interface
- Sprite.cs - Allows for Updateable and Drawable capabilities
- FactorySprite.cs - Creates all Sprites
- SpriteRectangle.cs - Holds Sprite image rectangle data
- TextSprite.cs - Allows for text output to the screen
You only have to start with the following keys, but they can be updated in game.
Move up: 'W'
Move left: 'A'
Move down: 'S'
Move right: 'D'
Attack: 'N'
Quit Game: 'Q'
Pause Game: 'P'
Restart Game (only after victory): 'R'
Shoot Projectile: 'B'
Previous Projectile: 'J'
Next Projectile: 'K'
Display Inventory: 'Y'
Remove Inventory: 'T'
Display Controls Screen: 'X'
Remove Controls Screen: 'Z'
To update a control, open up the controls screen and first tap the key that the current control is mapped to. Then press the new mapping that you want to replace the key for. If the requested key is already mapped to another key elsewhere, the request won't register. In that case, choose a different key to map to.
YOU CANNOT CHANGE THE CONTROLLER MAPPINGS FOR VIEWING (X) AND EXITING (Z) THE CONTROLS SCREEN.
Change object - Click on either a block, item, or enemy
Place object - Click or hold down the left mouse click
Remove object - Right click on said object
Place Door - Click on a door
Move to north room - 'W'
Move to west room - 'A'
Move to south room - 'S'
Move to east room - 'D'
Exit creator - 'ESC'
Exit Game - 'Q'
THE LEVEL SELECT SCREEN IS NOT SCROLLING; THEREFORE, TOO MANY LEVELS MAY TAKE UP SPACE. TO LOAD THE CORRECT LEVEL MAKE SURE 'Custom Level' (with a space) IS SELECTED.
When2meet: when2meet.com (Find best times to meet as a team)
Trello: trello.com (Task Managment)
Sprite Cow: spritecow.com (Used to find sprite coordinates on sprite sheet)
Discord: discord.com (Used to collaborate vitually)
The backlog mainly contains minor and major features that need to be made to improve the game or code quality. The backlog features that remained in the backlog on Trello are not necessary and are simply additions that would help clean up our code. Please see the Trello list "Backlog" for a full detail of all items here, as well as complete descriptions.
Link does not move in completely expected ways when multiple movement keys are pressed (WASD)
Enemies are able to push Link outside of the room
Please see the Trello list "Buglog" for a full detail of all items here, as well as complete descriptions.
The team organized tasks mainly by dividing up the work based on missing features, with Abd Elrahman working custom controls, Emil and Owen working on Camera transitions, Will working on a level creator, Adam working on the title screen, and Hamdan working on cleaning inventory. We had initially planned on including a multiplayer feature as well; however, we realized during the sprint that it would not be feasible to do so because we would not have enough time to finish the feature.
A potential improvement could have been to work on multiplayer more early on. However, the team had decided to work on many features early on, including a level creator and custom controls, which helped with dismissing the multiplayer feature. Integration between Discord (our primary communication) and Trello also helped ensure that everyone was up to date on the completion of features.