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

Boss behaviour states

Boss behaviour states

Calculating multiplier for transition value increase States are entered when a value threshold is reached and exits when the behaviour is done which sets the boss back to neutral. Every frame all state values increases but actions from the player ca…

Calculating multiplier for transition value increase

States are entered when a value threshold is reached and exits when the behaviour is done which sets the boss back to neutral. Every frame all state values increases but actions from the player can increase the “Multiplier“ for these values, Ex. if the player is staying far away from the boss the multiplier for Homing projectile increases which will make that state reache it threshold faster and more often. This multiplier system was developed so that the boss could use its best suited moves for the situation but also make sure that the player couldn’t force the boss to get stuck in on single behaviour state and abuse it.

  • 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.

Meele attack queue process

 

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

 
Hunter.gif
 
 
HunterAttack.gif

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.

Ranged attack queue process

 
RangedAttack.png

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