The Taking Of the Ss AMusement
The game was made in the Unity game engine by myself and two other people for a project class at UCI. My role in the group was programming, and most of the Unity related work. The other two group members developed the art assets, playtested and designed the rooms and levels of the game.
The two major systems of the game are the combat system and the map generation system.
COMBAT
The combat systems utilizes interfaces to allow combat agents to attack each other. Depending on which interfaces an agent inherits it can be a combatant or just a target for attack. Each combatant has the base stats necessary to be a combatant, power, speed, armor, and health. The interface also names some variables meant to be used for applying knock-back to combatants. Buffs and debuffs can also be applied using these interfaces.
The game uses 2D colliders in conjunction with the Unity physics system to determine when combatants hit each other. The attacks hitboxes are only enabled for a small amount of frames during the attacks animation. This is accomplished by using Unity's built in animation event system. The animation events also trigger state changes in the AI to ensure the AI always knows what its doing. This system ended up working very well for our purposes because it allowed for easily changing the attack timings and exact hitboxes without having to change any code. It was also smooth to implement along with animating the hitboxes to match the artwork of the attack.
MAP GENERATION
The map is procedurally generated by assembling predefined hand-made rooms into a new orientation for each playthrough. The rooms are made up of blocks that are a fixed size and each room is an X-by-Y assemblage of blocks. The rooms were organized this way in order to ensure that every passageway between rooms line up easily. Each room also holds references to a number of hand-made enemy layouts and decoration layouts that are chosen randomly to add more variation in map generation.
The map generator places the unchanging starting room and places it at the origin, and takes note of the available passageways. Then, the map generator places another room down ensuring that the two rooms have connecting passageways. This process repeats until the map generator has placed down the selected number of rooms, then the boss room is attached to an existing room. Finally, every room chooses a random enemy layout and decoration layout from their list of available layouts.
Because the map generator works with building blocks created by our team, the only work necessary to create new levels is to generate the new room templates. No programming is necessary.
Future Development
This project is very easily scalable. The map generator is easily adapted to create new level and themes without any programming. The current AI controllers are very general and can be tuned to drive new enemies with minimal to no programming depending on the specific needs of the new enemy design. The item system allows for many different permutations of items currently, and the system can be easily augmented to allow for more complex and meaning item designs. The vast majority of work necessary to expand the game is in the creation of new art assets.