top of page

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.

DraconicRampage_Movement.gif

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.

DraconicRampage_SegmentGain.gif

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.

DraconicRampageAbilities.gif

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.

DraconicRampage_Projectile.gif

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.

DraconicRampage_ExplosionProjectile.gif

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.

DraconicRampage_SpecialAbilities.gif

Ray of Frost & Hyper Beam

DraconicRampage_Projectile.gif

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.

​

DraconicRampage_BounceModifier.gif

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.

DraconicRampage_StatusEffects2.gif

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.

DraconicRampage_StatusEffects_New.gif

Burning and berserk effects

ENEMY BEHAVIOURS

Archer_And_KNight.png

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.

DraconicRampage_KnightAttack.gif

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.

DraconicRampage_ArcherAttack.gif

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.

DraconicRampage_Separation.gif

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.

UnrealInsights.PNG

Overlook of the Unreal Insights program

bottom of page