Introduction
Return to Castlevania DLC, also known as update 3.3, is the fourth and biggest paid expansion for Dead Cells.
It is an official crossover with Konami and the Caslevania franchise, which was made possible thanks to a collaboration between them and Evil Empire.
Notable additions and changes
- NEW - Two new biomes.
- Castle’s Outskirts, a mainly vertical biome where the player must climb an elevator shaft to access the castle.
- Dracula’s Castle, a biome with the unique characterstic of being capable of looping on itself, as well as being accessible at two different points in a run.
- NEW - Three new bosses.
- Death, an alternative first boss that is accessible after entering Dracula’s Castle at the beginning of a run.
- Dracula, an alternative final boss that is accessible after entering Dracula’s Castle at the end of a run.
- Dracula - Final Form, appears as a second boss after defeating Dracula, the player has to fight him on the falling debris of the destroyed castle.
- NEW - New weapons and skills.
- 6 Melee weapons.
- 3 Ranged weapons.
- 1 Shield.
- 4 Skills.
- NEW - New enemies.
- 4 Melee mobs.
- 3 Ranged mobs.
- 2 Flying mobs.
- 1 Mini-boss.
- 1 Trap.
- NEW - 20 outfits inspired by iconic Castlevania characters.
- NEW - Castlevania alternative soundtrack.
- Replaces all the music in the game with Caslevania tracks.
- NEW - Richter Mode.
A full list of changes can be found on the Dead Cells Wiki.
What I worked on
Dracula’s Castle
At the time, the Dead Cells dev team was composed of four artists and four programmers. The main features were the two biomes and three bosses, and they were split between four duos of one programmer and one artist.
Alongside one of the artists, we took care of the entirety of Dracula’s Castle. While their role was to create everything artistic related to the biome (concept arts, key arts, in-game assets…), I took care of:
- Designing and implementing the level structure.
- Creating all the rooms in Tiled.
- Implementing the artist’s assets according to their intentions.
- Designing and implementing the unique mechanics of the biome.
- Anything else technical related to the biome.
Unique mechanics
Dracula’s Castle is unique in two ways.
Firstly, it’s the only biome in the game that can appear at two different points in the run. At first, it can only appear at the beginning of a run, right before the first boss, in which case it will lead to Death.
Once Death is defeated, it will start appearing as a replacement to the last biome, before the last boss. In that case, the level will be bigger, introduce a mandatory mini-boss, and the exit door will lead to Dracula.
To the left, the map of early game Dracula’s Castle. To the right, the map of late game Dracula’s Castle.
Secondly, it’s the only biome in the game that can loop on itself, due to its unique level structure.
Level structure
The level structure of a biome is the first step of its procedural generation. It can be represented by a tree of nodes connected to each other.
Each node can have one parent and multiple children, as well as a type
.
When generating a biome, the node tree will be generated based on the rules defined in code.
Example of a node tree:
graph LR
classDef entrance fill:DarkSlateGray
classDef corridor fill:DarkSlateBlue
classDef combat fill:DarkRed
classDef exit fill:DarkOliveGreen
entrance1(("Entrance")):::entrance
corridor1(("Corridor")):::corridor
combat1(("Combat")):::combat
combat2(("Combat")):::combat
branch1(("Corridor")):::corridor
combat3(("Combat")):::combat
combat4(("Combat")):::combat
combat5(("Combat")):::combat
exit1(("Exit 1")):::exit
combat6(("Combat")):::combat
combat7(("Combat")):::combat
branch2(("Corridor")):::corridor
combat9(("Combat")):::combat
corridor3(("Corridor")):::corridor
combat10(("Combat")):::combat
combat11(("Combat")):::combat
exit2(("Exit 2")):::exit
entrance1-->corridor1
corridor1-->combat1
combat1-->combat2
combat2-->branch1
branch1-->combat3
combat3-->combat4
combat4-->combat5
combat5-->exit1
branch1-->combat6
combat6-->combat7
combat7-->branch2
branch2-->combat9
combat9-->corridor3
branch2-->combat10
combat10-->combat11
combat11-->exit2
“Combat” are rooms where enemies can spawn, “Corridor” are rooms with no enemies.
Then, each node will be replaced by a room.
The room used is randomly chosen base on the type
of the node, as well as the number of children of the node. Every room in the game has a certain number of entrances and exits, defined in Tiled, that will determine how they get connected to each other.
Example generation from the node tree above, using rooms from Prisoners’ Quarters:
While this system works really well for all biomes in the game, it has one major flaw, which is that node trees can only go forward.
A node tree cannot go backwards, and each node can only have one parent. This means all the branches of a level are linear, and two branches cannot connect to each other.
For Dracula’s Castle, there were three major intentions:
- Make it feel like you are climbing the castle.
- Have at least one big landmark room in the center of the biome, that acts as a HUB for all the branches.
- Give it a “labyrinth” feel.
After playing around with them, I pitched the following idea to the team.
While everyone was on board with the idea, it was going to be a technical challenge, due to the fact that the level structure loops on itself, at the second landmark room.
In order to achieve that, the best solution was to fake it. For most biomes, their rooms have vastly different sizes and entrances/exits placement, and as such the same node tree will produce almost chaotic levels that look significantly different to each other.
However, if we were to generalize the size of the rooms, as well as the position of their entrances and exits, we can achieve way more stable results.
In this case, if all the rooms of the same type have the same height and the entrances/exits are at the same height, we can guarantee that all the branches will grow vertically at the same rate.
Some Corridor rooms used in Dracula’s Castle, all with the same height.
Some Combat rooms used in Dracula’s Castle, all with the same height.
With this in mind, we can build a node tree that lets us get to a level structure similar to this:
Then, we can fill up the space between the “Landmark Room Start” and “Landmark Room End”, using an algorithm that places rooms without using the node tree.
The beginning and end of the second landmark room, and the additional rooms that connect them together.
And with that, we get a level structure that loops on itself.
Screenshot of the map of Dracula’s Castle in-game, with the Entrance, Landmark rooms and Exit highlighted.
Medusa
Medusa is a mini-boss, appearing in the late-run version of Dracula’s Castle, and guarding the door to the exit.
It is a simple mini-boss, with only three attacks.
A flurry of scratches that lasts for as long as the player gets hit.
A giant cone of vision, where the player gets pertrified if they look at it.
Axe Armor
The Axe Armor is a special enemy that only spawns in Dracula’s Castle.
It hides among the statues of the castle, and appears once the player gets close enough.
A statue transforming into an Axe Armor.
After appearing, it will try to hit the players with two attacks:
A melee axe swing, and an axe throw that goes through collisions.
Minor contributions
- Death’s Scythe and Medusa’s Head.
- Balancing, notably on items added in update 3.2.
- Bunch of bug fixes.