May DevLog | Game Development Summary
May’s been one hell of a month for Depths of Erendorn. With a character customisation system underway, and the integration of sound, VFX and animations in the engine, our fantasy RPG is really starting to take shape – and, if you want to take a closer look at what we’re up to, head over to Twitter, Instagram or Reddit!
Storm Elf Casters
Back in April, we sculpted, retopologised and unwrapped three of the five models for the Storm Elf Caster series, including the Initiate Wizard, the Veteran Wizard and the Seer Overloader. This meant that this month, we could finally begin texturing this awesome series of enemies from the game – and there were three main areas we focussed on:
- The Underdress: We textured this with their characteristic blue material, which mirrors the regality and dignity of the Storm Elves as a race. A gradient was also added to the dress in imitation of the storm clouds that reign over this race’s settlement.
- The Robe: This, as well as the hooded shawl, was textured similarly to the underdress, with the addition of a gilded lightning pattern running through it. This is a nod to the Storm Elves’ affinity with lightning, and their ability to hone it into powerful magic.
- The Armour: We wanted this to appear both fantastical and intimidating. To do this, our 3D Artist invented their own dark metal material, with galvanised patterns and gilded edges. This makes the Storm Elf armour very unique, and undeniably their own.
Once this was all out of the way, our 3D Modeller was able to create the clothing and equipment for the remaining two Casters: the Overloader and the Seer. We essentially mixed-and-matched the meshes from the current models in order to do this, adding them to the base mesh that had been created last year.
And that concluded our work on the Storm Elf Casters! The textures and materials for these characters have now been transferred to the engine so that we can start testing these enemies out.
Character Customisation System
This month, our 3D Artist began researching and outlining the various components that will be needed to create a character customisation system. When the game is up and running, this will allow players to customise their chosen character’s clothes, equipment, facial features and body proportions. But first, we needed to find the best approach – and, based on our 3D Artist’s research, we decided that a modular pawn system would work best:
- A modular pawn approach involves splitting up the base mesh of a character into various parts, such as the head, torso, arms, legs, etc.
- It should then allow us to swap out parts of the base mesh for the respective clothing mesh, enabling players to modify their characters however they like.
We will use this modular pawn approach for customising things like clothing and armour. When it comes to some of the more complicated parts, like customising body proportions, we’re planning on using bone scaling, so keep an eye on our weekly devlogs if you’re curious to see how we work that out!
Once the modular pawn system had been researched, outlined and approved, our 3D Artist could move into UE4 and use Unreal Engine’s visual scripting tool, Blueprints, to start setting everything up. It took a while to get a handle on it, but we were soon able to get the modular pawn system’s most basic functionality, the ability to swap out meshes, up and running:
- We are able to use this system’s ability to swap between different meshes to reduce clipping as much as possible, which is a huge benefit to using this approach.
- The modular pawn system works by swapping between meshes according to which customisation slot a mesh has been designed for.
- Therefore, the character’s base mesh will have to be split up into customisation slots that correspond to the hair, head, upper body, hands, lower body and feet.
- These marked areas represent the parts of the base mesh that will be able to be swapped out for something else, like different clothes, armour and even equipment.
- This will mean that we won’t have meshes underneath what a character is wearing because we should be able to swap out the meshes for different ones.
For us to be able to test out how meshes will be swapped out, we needed a guinea pig. So, our Animator split up the human base mesh into the marked areas we mentioned earlier. Each body part was then exported with its own rig so that our 3D Modeller could start testing the modular pawn system.To make our lives a little easier, our 3D Modeller decided to use different colours to represent different meshes being equipped – and you can check out how this process works below!
Our Animator spent this month creating animations for several enemies, such as the Wolvajin, whose new attack animations were paired with some of its sound FX so that we could gauge the full force of this creature. In fact, many enemies from the game had new attack animations created for them this month, from the Jaguar and Lion to the Undead Skeleton and Zombie. But the most worked-on character in May was the Unproven Lionmen, a low-level enemy who you may encounter anywhere along your journey:
- After adjusting the bones on its rig and fixing some skin weights, an idle and walk cycle were created for this character.
- When creating the walk cycle, our Animator made two variations of how the Unproven Lionmen holds his axe, one of its weapon of choice.
- A basic attack animation was then worked on, and this shows the Lionman wielding a two-handed axe.
But we didn’t stop there. Amid the creation of many attack animations, our Animator has begun focussing on the Unproven Lionman’s special ability called ‘Frightening Roar.’ When this is used, any player adjacent to this enemy will lose Strength. The only forewarning you will get for this ability will be a mighty roar, which our Sound Artist is currently working on – so keep an ear out if you find yourself facing this opponent!
After our Programmers set up a wall spline system in last month’s devlog, our Environment Artist ran through the updates that had been made to the dungeon walls and began thinking of ways to improve their visual interest.
Their cosmetic work started with fixing some pinching issues that were occurring with the cave walls. Our Environment Artist then created a random mesh variation blueprint for the walls, so that they can spawn variations of different meshes instead of repeatedly using the same one. This will add diversity to our procedurally generated dungeons. There were other improvements proposed besides these:
- Along with what we already have, even more meshes and textures will be created for the walls.
- A variety of wall models will also be worked on so that we can avoid repetition in our dungeons.
- Random props and assets will be created and placed at arbitrary points along the wall splines.
- Foliage tools were also looked at as a potential way to decorate the insides of the dungeon walls.
But our Environment Artist’s focus this month wasn’t only on the dungeon walls, but on our cave dungeons in general. For example, a new slope-based material was created to texture the terrain within our caves. This material will be able to automatically texture a surface based on its slope angle – so, for example, it will make flat areas appear rocky and stony, while it will texture steep edges differently so that they look like cliffs.
Another way in which our Environment Artist is improving our cave dungeons is through something that they call a ‘Rockifier.’ Working in Houdini, our artist is creating this so that we can more efficiently generate rocks for the environments in our game:
- The Rockifier will work by accepting a base mesh and generating complex rock sculpts that are based on that original mesh.
- This will make our generation process much faster because it removes the need for our artist to create individual rock sculpts.
- The Rockifier will also be used to create rocks that will be purposed as components for the internal sides of our dungeon walls.
Whilst we were making this massive tool, we had to make a few critical improvements along the way. Stretching, for example, kept occurring on the corner areas of displaced and deformed meshes, so this had to be minimised. We also added a new section to the Rockifier graph in order to address mesh intersections.
We also added a mesh auto low-poly process to the graph before improving the mesh auto UV unwrapping. Noise generation and rock form definition were also improved. We did this by creating large rocky base shapes which we added striations and finer noise to later on. After we got the Rockifier about where we wanted it:
- We imported it into Substance Designer to ensure that the workflow was watertight.
- We then carried out a test bake so that we could see how the Rockifier functioned.
- A smart material was then created for the desert-style rock asset that was generated.
There are a few more things we need to do in order to get the Rockifier fully optimised, but so far we’re stoked on how useful this tool is proving to be.
This month, our VFX Artist created the visuals for all of the Watertarg Excursionist’s abilities. This is a playable character in Depths of Erendorn who hails from an ancient race. An amphibious creature, our Visual FX Artist used a lot of water splashes and aquatic imagery so that the spells and skills were in keeping with the Watertarg’s identity.
With that said, visual effects were created for the following abilities:
- Ancient Bolt: This ability deals Arcane Damage to an enemy while also slowing them down for 2 whole turns.
- Empowered Ancient Bolt: Not only does this upgraded ability deal more Arcane Damage than its less powerful predecessor, it also slows the enemy down for an additional 5 turns.
- Revitalise: This doubles the Watertarg’s natural Health Regeneration for 4 turns. It also allows the player to gain extra Ancient Power per turn.
- Magic Gland: This is an incredibly useful ability because it absorbs one enemy spell that the Watertarg can then use itself.
- Mind Net: This allows the player to choose three enemies to root to the spot for one entire turn.
- Ancient Invocation: This gives the player the choice to either deal Arcane Damage to a chosen enemy, or to heal a team member.
- Water Drops: In 2 turns from when it is used, this ability will heal a decent amount of Health on a chosen target, including the player itself.
- Spiritual Whirlpool: When this is used, all 1-tile enemies in a room have their Movement speed reduced for 5 whole turns, giving you and your team an extra advantage in battle.
- Rock Barrage: A particularly hard-hitting ability, this not only deals significant Physical Damage to a chosen enemy, it will also deal some to all adjacent enemies as well.
- Pulsating Wound: This ability does a few things. Not only does it deal Physical Damage to enemies every turn for 5 turns, it also has a passive effect of making 1-tile and 4-tile enemies lose Movement speed whenever it is active.
- Flood Lungs: This spell deals Physical Damage every turn for three turns, with the highest amount of Damage being inflicted on the first turn. Even though the amount of Damage dealt decreases every turn, it is a very effective ability, and can only be used on beasts, humanoids and Dragons.
- Arcanic Reverberation: If you ever find yourself facing a powerful enemy, with many other accompanying enemies in the room, this is the ability to use. It attacks a given enemy with 1 Arcane Damage per enemy in the room – so if there are 6 surrounding enemies, 6 Arcane Damage will be dealt to a single opponent.
- Future Blessing: If you want to do future-you a favour, then choose this spell before entering a difficult room – especially if your stats need a boost. For the next room you enter, it will increase your Energy Regeneration and your Strength until you leave that room.
The Earthen Dwarf was the next playable character whose arsenal of abilities was brought to life this month. As with the Watertarg, our VFX Artist wanted the visuals for this character to reflect their lore and identity. So, since Earthen Dwarves are a mining race who occupy underground tunnels, a lot of rocky imagery was featured in their abilities, as well as orange particle effects to simulate the appearance of friction sparks caused by mining:
- Precise Strike: This deals an accurate strike that targets the weak parts of an enemy.
- Shattering Blow: This reduces the Resilience of a chosen enemy for a long 20 turns.
- Stone Blood: This temporarily turns an enemy’s blood to stone, causing them to lose Health.
- Smite: This deals high amounts of Air Damage and causes the enemy to lose a lot of Energy.
- One With the Earth: This restores some Health and grants the player with Resilience for 1 turn.
- Earthquake: This ability deals a good amount of Earth Damage to all enemies within a three-tile radius. Also, if it hits three targets or less, the cooldown is reduced, which is pretty helpful.
- Magnetic Blood: This allows the Earthen Dwarf to disarm any enemy that’s in the same room. It also heals the player a little, so this ability is very useful in the midst of battle.
- Earthen Rage: When this is used, the player gains a bit of Strength for every 10% of Maximum Health that the Dwarf is missing. It’s a great way to get a boost when the going gets tough.
- Thorn’s Aura: For every normal attack dealt to the team, this ability causes all adventurers to reflect a significant amount of Physical Damage back to the enemy, and it lasts for two whole turns.
- Juggernaut: This gives you the chance to gain extra Strength for every enemy that dies per enemy spawn. When this happens, the Dwarf also grows in size – though this advantage is lost once all enemies have been defeated.
While the Earthen Dwarf is fresh in our minds, we’ll show you some of the awesome sound FX that were made to go along with its abilities. Just like our VFX Artist did, our Sound Artist used very particular sound effects in order to uphold the Earthen Dwarf’s character identity:
- Earthquake was brought to life with the sounds of deep, crumbling rocks.
- Earthen Rage uses echoing wind effects to nod to the hollow tunnels of the Dwarves’ settlement.
- Thorn’s Aura features the metallic tinkering of tools to add an element of mining into the design.
Sound effects were also drafted for the Watertarg Excursionist this month, and these utilised a lot of splashing water sounds in order to reference this character’s amphibious roots. To do this, our Sound Artist spent the day throwing buckets of water around their flat, so if you haven’t seen that already, check out their process here!
Another playable character our Sound Artist worked on in May was the Zentragal Illusionist, whose arsenal of ability VFX and sound fx was completed last month. To do justice to their cruel and deceptive nature, a lot of the vocalisations for this character’s abilities were made to sound whispery, with a lot of reverb being added in order to really emphasise the Zentragal’s dark and sinister persona.
The final character our Sound Artist worked with this month was actually an enemy that they had worked on before – the Zombie. They decided to rework the sound design for this Undead creature because they felt that it sounded too stereotypical. So, they added some gurgling noises in order to make it more gruesome and unique. We then moved on to their attacks:
- The Zombie’s attacks were originally represented by biting sounds.
- The attack animations feature no biting, however, so these had to be changed.
- Since the Zombies swipe at their opponents, our Sound Artist created a new impact sound.
- The effect chosen was very wet, and evocative of a blood splatter.
- This tied in nicely with the Zombie’s gorey aesthetic, and makes their attacks feel extra harmful.
Getting to Know the Action System
This month has been focussed on getting the team familiarised and comfortable with the Action System. In case you weren’t with us last month, the Action System is essentially a development structure that will allow all of our devs to implement their animations, visual effects and sound effects in an easy and efficient way.
When creating the Action System, therefore, we not only had to think about it from a gameplay perspective, where we considered the functional underpinnings of how the above assets would work together; we also had to think about it from a team perspective, and ensure that the workflow the Action System provides is easy-to-use for all of our developers.
Therefore, in order to familiarise everyone with the new system, our Programmers spent a lot of time in May introducing our devs to the new workflow so that they know how to implement their respective content. Animation, in particular, received a lot of focus:
- A workflow and documentation were put together for the creation of Animation Controllers, specifically for bipedal characters, though they will be transferable to quadrupeds, too.
- After our Animator was talked through the entire process, they successfully created Animation Controllers of three playable characters: the Watertarg, the Earthen Dwarf and the Human.
- We then added animation blends and ability triggers to these Controllers, before finally adding animation states that were assigned animation triggers.
- Finally, our Animator created ability Blueprints that had gone missing. When all this comes together, it will be a much easier way of working with animations in the engine.
Documentation and workflows were also put together for our VFX Artist and Sound Artist. However, whilst it was important for everyone to get to grips with the new Action System, there was a particular focus on using it to add integration between audio and animation, specifically for character sounds, meaning that our Sound Artist was really put through the wringer this month!
So, after wrapping their head around the engine and documentation, our Sound Artist kicked off their work in the Action System by creating Blueprints for generic skills in UE4. Sound sequences and cues were then added to these Blueprints so that they know when the sound fx on a particular skill should be triggered. This lay the groundwork for the implementation of ‘Sound Profiles’:
- Sound Profiles allow us to slot class-specific audio clips as shared SFX for each, and this includes things like hit reactions, basic attacks and idles.
- Our Sound Artist used the new system to implement these Sound Profiles for characters, as well as setting up the sounds of their individual footsteps in the game.
- Our Programmers then developed a system to give characters their class-specific audio assets for basic attacks, hit reactions, deaths and footsteps, i.e. their individual Sound Profiles.
- Once these Sound Profiles have been added, it means that we’ll be able to generate a list of sound fx slots and modify them in-engine as the assets are implemented.
To incorporate these audio elements with animations, we integrated Animation Controllers to trigger sound FX from character profiles based on newly created animation SFX events. Doing this has had a huge impact on how Depths of Erendorn plays now, making it feel more immersive and more like a finished product. We’ve still got a lot of work to do on the Action System, however, so stay tuned!
Custom Step Classes
While we’re on the subject of the Action System, it’s worth mentioning that this month our Programmers also created Custom Step Classes that will be applied to ability templates and then used for adding Animation, VFX and Sounds to the engine.
Custom Steps essentially hold assets, as well as details on how to execute them. For example, we can use a Custom VFX Stepper to define which particle effect system should spawn at a particular moment, as well as to what entity and location it should be applied to. But this is just one of three Custom Step Classes that were created in May:
- VFX Stepper: As we just mentioned, this allows us to trigger specific particle systems at provided locations, on provided entities and at or attached to skeletal mesh sockets.
- Sound Stepper: This allows us to trigger specific sound cues, with options of playing non-spatial UI sounds or to select a location or skeletal mesh socket to play at.
- Animation Stepper: This allows a specific animation (or a list of preferences if an animation isn’t available for a certain character) to be triggered, with the option to continue execution at a specific frame of animation.
A proof of concept on the workflow of adding Custom Steppers has now been implemented by creating a new step structure, called Basic Attack Stepper, which was then tested:
- Custom Animation Steppers were used to trigger basic attacks and hit reactions between two characters from the game.
- The basic attack animation was set on one character, i.e. the enemy, while the hit reaction was set on the affected entity.
- A VFX Stepper for a ‘generic hit,’ as well as a corresponding ‘sword clash’ Sound Stepper were then set to trigger between the two entities.
This is an example of how the Action System can be used to easily spawn VFX and Sounds on specific animation events. Being able to do this also means that we are now able to switch trail Visual FX and Sound FX on and off mid-animation, leaving the Action System to execute them in the correct order.
Custom Step Rules
We decided to introduce the Custom Steps system in order to allow other developers and team members to efficiently add their respective Custom Steppers to specific actions. But to really get this system working well for everyone, it needs to be easy to use and should work dynamically. This led our Programmers to create some Custom Step rules in order to help define the:
- What: What asset or custom step type we want to apply.
- Where: Where to trigger this custom step.
- Who: Which entity (tile or location) we want to be the focus of the custom step.
- When: When to allow the rest of the steps to continue their execution.
Custom Step rules are the working class that is used when defining an Ability Template. This means developers have a choice of blueprint nodes to use when modifying a Custom Step’s behaviour. Once Custom Step Rules have been defined, the specific Ability Stepper that is being initialised will search through each rule, trying to apply their criteria and spawn relevant custom steppers.
Projectile Custom Steppers
While the Action System was running pretty well, we wanted to get it to the point where it was able to handle more complex sequences of actions beyond custom Animation, VFX and Sound Steppers. A primary example of the kind of complex sequences of actions we wanted to introduce was projectiles.
Projectile Custom Steppers take up to three separate VFX and Sound assets, one for each phase of the ability that is being cast:
- Launch Phase: This allows assets to be triggered before the projectile is launched, i.e. directly after the character has cast the ability.
- Projectile Phase: This allows a particle system to be shot at and animated towards a specified target. The moving object will also have a sound component so that a trailing sound can be spatialised.
- Impact Phase: This allows assets to trigger as soon as the projectile hits the specified target – so this is when the final VFX and SFX will occur.
Custom Step Rule Additions
With the Projectile Stepper set up, our Programmers had to make a few additions to the Custom Step rules so that they would reference both a primary and secondary target, with the secondary target’s main use being to draw projectile trajectories. With that in mind, the following rule additions were made:
- We added offset options so that VFX and SFX can play x/y/z Unreal units, or a said number of tiles, away from their provided target.
- We added the ability for Animation nodes to take an order of preference and, optionally, a modifier for that animation. This means that a basic attack Animation Stepper can trigger basic attack A, B or C.
- We also integrated an Ability Target class so that affected targets can be accessed and applied as Stepper targets when initialising.
- We finally added ‘Before Run’ and ‘After Run’ (as well as ‘After Launch’ and ‘Before Impact’ for projectiles) in order to delay times as an optional rule.
Secondary targets can be used in a number of different ways besides drawing projectile trajectories. They can also be used for rotating as well as providing extra positioning information to Custom Steppers that require more complexity, so it will be very useful once the Custom Steppers can handle both secondary and primary targets.
Moving on from the Action System and all its various components, a lot of work was carried out on the audio manager this month, starting with a few additions and bug fixes:
- Fixed a bug that was causing the playlist to only play the first track.
- Fixed a bug where the start-time offset when starting a music track caused a potentially very long silence between tracks.
- Fixed a bug that, when generating a new playlist, in some instances wouldn’t reset the current track variable.
- Another bug occurred when joining old lobbies, in which the large time offset from the start of the match was causing the audio manager to make the client hang.
- More volume tracking was then added to the audio settings, and a fade out/fade in transition was also added when changing to in-dungeon music.
- New settings were then finally created for character sounds, ambient music, environmental sounds, interface sounds and dialogue.
We also changed the default volume in the game to 70% on each music setting so that players won’t have to frantically lower the volume in an attempt to save their ear drums. This was a decision based on our teams’ personal experience when playing PC games, and we think you’ll all be thankful for it!
Following this, there were a few more things worked on to get audio fully up and running:
- An easier-to-use GetVolume function was added for use in various game systems that use sound. This will ensure that a player’s preferred settings are respected.
- A notification was added for when the music track changes. This will likely be disabled as a default, but for now it’s useful for our testing.
- We added simple functions for playing sounds at a certain location, as well as playing sounds that respect the players’ audio settings without needing to first retrieve the volume level.
Finally, the client was updated with the final remastered versions of the music, creating a great audio experience. We also incorporated a Server Time Offset variable that controls the offset between your local time and the server’s time, ensuring that everyone can hear the same part of the music as each other.
Floors & Walls in the Dungeons
When they weren’t working on the Action System or the Audio Manager, our Programmers were working on floors and walls that appear inside the game’s dungeons. For starters, they implemented a floor generator that was based on a UE4 plugin called Runtime Mesh Component:
- This generator works by taking a grid from the server and using it to detect where to build the floor in a given dungeon.
- It then calculates the required number of vertices and triangles before passing this information on to the plugin for the final mesh.
- After this, the floor generator was then implemented into the room builder logic, which is used for building and removing rooms.
- This is only the first version of floor generation. We will revisit this method once we have added features like bottomless pits, water, ceilings and rivers.
When it came to the walls in the game, our Programmers were mainly focussed on the internal parts of walls within a room. The main objective was to get these parts of the walls looking as visually interesting as possible so that there is a variation in the dungeons:
- We made it so that internal walls are now replaced with LoS (Line of Sight) blocking meshes.
- These blocking meshes will include dense stalagmite formations, among other bespoke assets.
- Doing this will replace the plain imagery of a wall with more visually appealing elements.
Our Programmers also replaced walls that do not touch the edge of the playing field with other objects. These objects will still block the LoS in the same way that the walls would, but will instead offer more visual interest and variety. However, while nearing completion, this feature isn’t quite ready, so we’ll be continuing our work on this in June.
Finally, a lot of changes were implemented this month in order to improve our testing process:
- A debug UI widget was added to help debug the game and collect some stats while testing.
- A session timer has been added in order to track how long it takes us to complete dungeons when testing.
- Room information can now be logged out of the console at runtime so that we can debug the room builder and level generator.
- The seed and XP is now visible for both the dungeon and each individual room. This information makes the reporting of bugs much easier from a tester’s perspective.
All of these additions, updates and tweaks have brought us closer to getting Depths of Erendorn to the point where it is playable in time for its beta release next year. We’ll even be able to get the whole team in on a game soon, and have proper animations and sounds and VFX up and running! It’s really exciting to see our fantasy RPG develop in this way, so make sure you keep an eye on our socials for regular updates!