DRACONIC RAMPAGE
Game Summary
Draconic Rampage is a shoot 'em up dragon fantasy game where you play as a dragon seeking revenge on those who brought him down decades prior.
Game Idea
This was the third group project of PSQ and the idea was to create a mix of Vampire Survivors and Snake, where you grow longer as you gain new abilities. Enemies on the ground below you will drop XP-orbs when killed, allowing you to select an ability when you level up. Your selected ability can either upgrade an existing ability of the same type, or you can add it to a new segment and become longer.
ROLE
AI, Combat, Systems & Generalist Programmer
JOB DESCRIPTION
As the only programmer being able to work full-time on the project, I worked on many areas of the game.
Some of the things I did:
​
-
Player controller and segment system
-
Segment-based camera setup
-
Base ability class and a majority of the abilities
-
Projectile modifiers and enemy status effects
-
Enemy wave spawning system
-
Enemy logic and separation behaviour
-
Profiling and optimization
​
These are described in more details below.
YEAR
2022
GENRE
TOP-DOWN, SHOOT 'EM UP
PLATFORM
PC
ENGINE & LANGUAGE
Unreal Engine 5, Blueprints
TECH TAGS
Player controller, abilities, status effects, projectile modifiers, AI flocking behaviour, profiling & optimizing
DOWNLOAD LINK
Player Controller & Segments
Movement
Similar to Snake, the player moves forwards constantly in a straight line until input is given. The head will then turn based on the input, with the acquired segments following suit.
Like in Snake, the body always follows where the head has gone
Segments
After having collected enough XP to level up, the player is prompted to choose one out of three abilities. Choosing a new ability will add a new segment at the player's chosen location after the head. Segments will then automatically use their ability when not on cooldown. Every segment including the head has its own health bar. Once a segment runs out of health, it dies and is removed. If the head dies, you lose.
Note the new segments being attached to the body
​
ABILITIES
Ability Types
There are different types of abilities in Draconic Rampage. The player chooses one out of three abilities to gain when leveling up.
Projectile Ability
Predicts where a target is going and shoots a projectile towards it. For the purpose of reusing projectile types, we add a lot of customization to the ability. The following can be adjusted here: projectile type, speed, damage, cooldown, life duration, number of projectiles and if the projectile amount is affected by the player's projectile-amount multiplier.
Fireball & lightning bolt
Explosion-Projectile Ability
An extended version of the regular projectile ability, this ability-type will force all of its projectiles to explode upon expiring. This type contains methods for adjusting explosion scale, duration, intervals between damage ticks and damage per tick. Setting projectile life duration to zero also allows this to be used for non-projectile area of effect abilities.
Lava pool, flaming bomb & Burst of Fear
Special Abilities
Most abilities fit into the two types above, but some required custom solutions. An example of this is Ray of Frost, which does a capsule trace and applies frozen to all hit targets. Another example is Hyper Beam, which disables all segments behind itself, gaining damage + range per disabled segment.
The last ability type (which doesn't get its own text-section) is enhancement-type abilities; they increase a stat that the player has, such as damage, projectile speed and projectile amount.
Ray of Frost & Hyper Beam
Fireball and Lightning Bolt are both projectile abilities
PROJECTILES
Abilities can use different projectile types while attaching effects or modifiers to gain new unique projectile behaviours. Projectiles can also be customized for their needs: you can make them travel differently, have different amounts of damage, apply different effects, have different amounts of max targets hit before expiring and finally you can attach unique expiring conditions and effects.
​
Note: the tornado usually bounces around the entire screen, but here it has been restricted to a smaller area to keep GIF size small.
PROJECTILE MODIFIERS
Modifying a projectile means to add and/or extend its functionality in some way. Modifiers can be both enabled and disabled during runtime, to allow enhance-type abilities to enable the modifier for all projectiles. An example of a modifier is the bounce-modifier, which will make a projectile bounce if it hits the edge of the screen. This modifier is used by an ability called Flame Tornado, and was applied to all projectiles through a cut ability called Magic Bounce.
STATUS EFFECTS
Status effects can be applied to enemies through different abilities. There are two types of status effects in the game: frozen and fleeing. These are added as components when applied, and will either have an effect upon ticking or when finished ticking. Frozen has the starting effect of disabling the normal locomotion and the end effect of enabling it again. The fleeing effect causes enemies to slowly run away from where the effect originated, over a duration.
Frozen and fleeing effects
Cut status effects
Other than frozen and fleeing, we also had a burning effect which would deal damage at intervals and a berserk effect, which would cause enemies to attack each other instead of the player. These didn't make it into the release, as there wasn't enough time to balance the abilities that inflicted them.
Burning and berserk effects
ENEMY BEHAVIOURS
Models and environment made by the awesome artists
ENEMIES
There are two types of enemies in Draconic Rampage: Knights and Archers. These enemies attack differently, but something they have in common is their movement animation, separation behaviour and their "out-of-camera-position-adjustment". This means that if an enemy gets outside your field of view they will be teleported to the opposite side of the screen.
In the game-ready level, knights will sometimes jump downwards instead if they are further up than the dragon
KNIGHTS
These are the basic enemies of the game. Knights will walk towards whichever segment is closest to them and jump up to attack once they're within range. Both the attack- and movement animations are done using a timeline, with the hit-detection being done with a collider. The knight enemy also has an enhanced version, which is bigger, has more health, damage and speed, and holds a sword instead of a halberd.
Archers always stop and take aim before shooting
ARCHERS
These enemies are ranged. They attack from far away and always aim for where the head is going, which allows the player to dodge the arrows if they're quick enough. Once an archer has spawned, it will respawn a few seconds after being killed. This makes them hard to deal with and the biggest challenge when it comes to staying alive.
Enemies walk further away from each other based on separation amount, and will separate more aggressively based on separation aggression
SEPARATION
Since enemies all go towards the segment that is closest to them, they inevitably become clumped together. To prevent them from heavily clipping into each others' meshes, we used a separation technique commonly found in boid steering behaviours. All units check which other units are closest to it, and build a "neighbourhood" which is updated and maintained. When moving towards their target, enemies will take their neighbours' positions into account so they don't walk too close to each other, while still moving in the right direction.
PROFILING
UNREAL INSIGHTS
To profile for Draconic Rampage, we used Unreal Insights to investigate any performance issues that we saw. This is how we noticed that using colliders to separate enemies from each other wasn't going to work; the performance toll was way too heavy with the amount of enemies and how often they collided. Instead, we went with the technique that boids usually use: neighbourhood separation; making them stay away from the closest one in their vicinity.
Overlook of the Unreal Insights program