Feature Name | Spellshocked |
Area | Game |
Related Features | LibGdx |
Requirement Specs | |
Document Location | https://github.com/SpellShocked/SpellShocked-Game |
Spec Status | Draft |
Role | Name |
---|---|
Manager | Chad Magendanz |
Developer | Lucy Stewart |
Developer | Roy Pan |
Developer | Jack Scott |
Developer | Alex Stedman |
Developer | David Nicolle |
Author | Date | Version | Comment |
---|---|---|---|
- | 11/23/2021 | Initial Draft | Created this page |
Roy Pan and Lucy Stewart | 1/14/2021 | Rough Draft | Created base outline (main componenets) |
Roy Pan and Lucy Stewart | 1/18/2021 | Edited Draft | Added more description to headers |
Roy Pan and Lucy Stewart | 1/20/2021 | Edited Draft | Included pictures and screenshots of class hierarchies |
Roy Pan and Lucy Stewart | 1/21/2021 | Final Version | Polished grammar and added more information |
spellshocked is a game developed with libGDX is java. The target audience for this game is people who enjoy fanatsy games. This game includes two main modes, Shock Wave and Pumpkin Rush. Pumpkin Rush is when a player must collect all the pumpkins that are guarded by a skelton, trying to do so in the quickest time as possible. The other mode, ShockWave, is a wave-based game where the player must beat certain amount of monsters that generate next to his location. Thge objective is to survive for as long as possible.
Photo of Loading Screen Photo of Shock Wave Photo of Pumpkin Rush
Includes volume
Select one of the three game mode
Sections of the project:
- Engine Selection: For our engine, we wanted a compromise of an active community, ability to code features largely on your own unlike Unity, and low levelness to essnetially be able to practice our coding skills as much as possible. As a result, we agreed upon LibGx and set up an enviornment and repo to began development.
- Project Breakdown: Our next step was to break down our project into multiple packages, so each person could work on something else at a time and for better file management. This packages were GUI, entitities,item, world, and input/util.
- GUI: Our gui imported a skin found from a skin database and the bult in button and graphs features from LibGdx. We used this to create a master parent GUI, that then had child classes to create different screens for the corresponding screen needed, for example Game Over, Game Choosing Menu, Pause Menu, Title Screen, and more. To make switching between screens possible and effcient, we decided to organize our game with a Scene Manager, making the parent psellShocked class a stage chooser and game mode classes a seperate entitiy rather than combining the two.
- Entitities: The entitities package was used for all characters in our game. Atttatched is an illustration of our entitiy flowchart/class hierarchy. The hostile enemies were programmed to have unqie aspects such as a target enemy to follow, attacking range, and damage dealt. Player was also included, which required features such as user contorl though WASD, ability to handle inventory, and more.
- World: The world package was where we included the features for PERLIN generation, the different game modes and screens, as well as the obstacles. Perlin generation was done so that the map would be different everytime and randomnly generated with varying biomes such as water, sand, rock, lava, and grass. These tiles would effect player movement in a way true to reality, for example, a player's speed is reduced while in sand tiles and dramatically reducded while in water. The obstacles such as rocks were also placed onto seperate tiles, and used collision detection to block player and enemy movement through them, as well as dealing HP damage.
- Input/Util: The util package was used to make input for other packages easier. This included the input and input scheduler classes that enabled controls, so hitting keys could have actual effects on movement as well as general gameplay.
- Images/Artwork/Sounds: This section was done mainly by David. All character and world art was handmade in paint.Net. For sprites, he would use a sprite sheet of the character in a different positions to mimic animation and movement. Overall, 26 different drawings and frames were completed, ranging from monsters to lava.
- Item
-
random and set seed
- We're using Perlin Noise to generate map (basically setting the Tile height) and that requires bunch of random floats. While we could using Math.random to do this, but it just not cool, so we using java.util.Random that create a Random object, then using random.next() to get a number, but the benefit of using this library is can set a "seed", so as long long as using the same seed, every time running this using the same seed will provide same pattern, that will generate identical maps every time run, not only can possible easier to reprocude issues during development, in case we decide to make ranking system we could have everyone having the same map for fairness.
-
time based
- In pumpkin rush, the quicker you collect all the pumpkins, the better your score is. To use this, we have a score calculator and use a built in timer that determines the delta of time depnding on how many frames have been rendered.
-
enemies (range, following based)
- For the monsters in this game mode, we use skeletons that are assigned to a specific pumpkin to guard. To do this, w emade a new class called pumpkinentitiy that had a pumpkin object, and by extent could call a inrange function. In doing so, a skelton could only attack a player when they were in nearby proximity to its pumpkin object. When its pumpkin is destroyed, it goes and finds the nearest pumpkin and that becomes the new pumpkin object. When there are no nearby pumpkins, that means the player has destroyed all the pumpkins, and the game is over.
-
pumpkins get picked up
- Pumpkins randomly generate in the tile map, to a varaible amount. Once generated, they are stored into an array that keeps track of the pumpkins in gameplay, and assigns each pumpkin a new skeleton guardian. A pumpkin can be removed if a player hits the right key and runs away, removing the pumpkin from the array and reassigning its skeleton.
- Waves -Monsters spawn in waves, siginifed by a progress bar for raid. When the progress bar is full, 2 monsters spawn in a range by the player. The monsters are coded to follow and attack the player until out of range. Each monster has a health system. When monsters are killed, player gains more points and once a set amount of waves is over, the game is 'won.'
- map level
- For this game mode, the map is randomly generated wiht perlin world, but the different tiles are 'layered' to mimic terrain of the real world. This means the map is leveled, and different tiles have different functionalities such as slowing player and enemy movement and dealing damage.
- Chests
Due to some special circumstances we were unable to host the game locally (LAN) and cloud server have too much latency.
The get prefs built in library for LibGdx was not working well. It was confusing, and the radio button groups were automatically set to be clicked when the person opened up settings. As a result, it was cut from the project.
Rune Run was meant to be the third game mode and similar to Subway Surfers. However, this would require making entirely new world generation and movement, which we simply did not have time for. As a result, it was cut.
Tried several online servers, but it did not work. Tried following the tutorials but nothing happened, scores would not be sent to the website.