Project Details
Project 5
Languages: c++ & c# (C++ Game | C# Editor)
Production Time: 14 Weeks halftime
Genre: ARPG
Platform: Monostein (Groups own engine)
Spite:
Drowned Souls
Drowned souls is a Spite/Diablo clone and is our first game that we made in our second year at TGA. With this project came the requirement that we had to create the game in our own render engine “MonoStein”, as our editor and level creator we used unity and converted unity scripts into data structures we could then use on our gamelogic side which used Entt as a component system.
My Project Roles
Boss Behaviours
Tounge Attack
The boss exposes its weakpoint to be attacked by the player, after a time the hurtbox for the weakpoint disables and the neck joint rotates towards the players position. When the rotation either reaches the players position or the rotation limit is reached several hitboxes are created in the direction of the boss heads forward direction.
Homing Projectile
The homing projectile gets launched from the boss after a small charge up delay. When launched the projectile always moves forwards and has an allowed turn amount which gives it a slow turning behaviour.
When the projectile gets close enought to the player it loses its homing property and continues to move in the same direction until it stops and starts swelling up to create an AoE to reduce the players walkable area.
Summoning
Summoning starts with the boss moving towards a transition point. When reached it starts a jump animation and a jump parabola over to its summoning spot, which then triggers the actual summoning which spawns enemies radnomly in specified area on the level.
Boss State System
Enemy Attack Behaviours
Possesed
The basic enemy for the game with simple attacks
Meele Attacker
The possesed enemy type attacked with close range hitboxes with a generous size. These were early enemies so attack speed and other balancing things were not defined yet. Because of this i made it possible to scale animation speeds on the enemies to stretch out animations or shorten so they would be able to balance these things without it looking to weird visually.
This was done by using entt:s schedular system and adding processes to it through the “.then“ keyword. Processes were either short lambdas or process classes.
Editor
Thorugh the editor our designers were able to configure almost everything about the attack.
Range: Distance the hitbox spawns from the attacking enemy
Attack Time Scale: Scales the time for both animation and hitbox creation for balance testing purposes.
Create Hitbox Time Percent: When in the attack animation the hitbox will be created. (will take “Attack Time Scale” in mind)
Attack Damage: How much damage the attack does on hit
Attack Size: Dimensions of the attack hitbox
Amount Of Attacks To Do: Amount of attacks the enemy should do before exiting its attack state
Faction: Changes what objects react to the hitbox
Hitbox Alive Time: How long the hitbox stays active
Hunter
The high damage ranged enemy in the game
Ranged Attacker
The hunter shoots 3 quick projectiles in a row with high damage. The ranged attacks script didnt have any scaleability incorporated into it because this enemy was finished so late in the process that our designers wouldnt have time to test and balance them. So instead of giving the editor a huge amount of varialbes to change I only added the necessary variables so we could fit the projectiles to the anmimation. This is done by using entt:s schedular system and adding processes to it through the “.then“ keyword. This processes were either short lambdas or could be created through process classes.
Editor
Thorugh the editor our designers were able to configure almost everything about the attack.
Range: Distance the hitbox can travel before being destroyed
Startup Timer: Time before the attack starts
Recovery Timer: Time it takes to exit the attack state after shooting all projectiles
Cooldown: How long the “Hunter” has to wait before attacking again.
Projectile Speed: Speed of the hitboxes movement
Projectile Damage: The amount of damage on hit done to target
Between Burst Projectile Cooldown: amount of time inbetween shots
Amount Of Projectiles to Burst: Amount of attacks the enemy should do before exiting its attack state
Faction: Changes what objects react to the hitbox