January DevLog | Game Development Summary
Long time, no speak, guys! Welcome to the first monthly devlog of 2020. We dived headfirst into the new year with an insanely productive month: finishing up four new models, testing VFX alongside character animations, and planning out some awesome new set pieces for our Cave Dungeons. Not only this, in January we welcomed a new Sound Artist to our team *crowd cheers* so we can’t wait to show you the incredible work they’ve been doing. We sure have kicked off 2020 in the same way we mean to finish it – but enough small talk! Before we get into the good stuff, remember to check us out on Instagram, Twitter or Reddit for daily updates on our fantasy RPG, Depths of Erendorn.
3D Modelling
Texturing the Civilian and Merchant
Where did we leave things off last year? Ah, yes – we had just finished the sculpts for the human Civilian and Merchant classes. These NPCs will appear throughout Depths of Erendorn – the Merchants in particular will prove invaluable to your journey, possessing many treasures and magical items.
When texturing these models, we decided to go for a rather neutral colour pallet to reflect the fact that these are ordinary folk, unlike many of our playable characters which boast bright, or rich colours. We also made the leather textures of their shoes and various accessories appear quite worn, reinforcing the idea that these characters are hardworking and, in the case of the Merchant, nomadic.
Speaking of the Merchant, the texturing process for this character was a little more complicated than it was for the Civilian:
- We played around with the opacity of the Merchant’s tunic in order to give it a ripped effect.
- This was done during the texturing, rather than sculpting phase, because it was faster and would allow us to adjust it more easily in the future, if necessary.
- A tiling texture was used to create the planks of the Merchant’s wooden backpack, which we gave a raw appearance to by way of random cracks and grooves.
- We then focussed on texturing all of the Merchant’s various accessories, such as their rolled-up blanket, pouches and pans.
After texturing the rest of the Merchant’s accessories that dangle from his backpack, we finished this character pretty early on, allowing us to start work on a new model – the Blackhorn Rhinoceros! As well as having a plethora of unique monsters and beasts, Erendorn will also host some recognisable wildlife so that a familiarity can be felt between the fantasy world and our own.
Modelling the Blackhorn Rhinoceros
Using reference images of black rhinos, our Character Artist was able to finish up the sculpt for this creature pretty quickly, allowing them to move on to the task of adding all the intricate skin details that rhinos are known for. They first tried to add this skin detail in ZBrush – but, after some struggles, we decided that it wasn’t the best course of action, and we instead decided to add all the little wrinkles and surface texture in Substance Painter during the texturing phase:
- Using alphas and brushes in Substance Painter, we were able to create the appearance of leathery skin, as well as add all of our wrinkle details.
- These brushes were perfect for doing this because they added height/normal information, as well as AO information, which gave more depth and shadows to the skin details.
- We thought doing this in Substance Painter would be the best course of action because, if it didn’t work out, we could always go back and add the details to the sculpt.
Luckily for us, this method did work out, and we were left with one gnarly looking rhino! Before we could call this model complete, however, we had to create a variation of this character for the much more formidable Hulking Blackhorn Rhinoceros, a rarer and more powerful enemy in the game. The main difference between these two models is that the Hulking Blackhorn Rhino has a bigger horn and thicker body. With both of these beasts completed, we could then move onto a different character.
This was the finished sculpt of the Blackhorn Rhino. We then moved the model into Substance Painter to add all the skin details. Blackhorn Rhinos are low level enemies in Depths of Erendorn, though their more powerful counterpart, the Hulking Blackhorn Rhino, is much more formidable.
Modelling the Rhinogars
Our next character was also of the rhino persuasion. Rhinogars are a battle-hardened desert species who are known for their lethally sharp horns, hulking strength and a hatred for Humans. To get started on these enemies, our Character Artist actually decided to use our strongest Lionman model as a base for the body. We could then start shaping the Rhinogar from there:
- The head, hands and feet were cut off from the Lionman model.
- The head and back feet that we used on the rhinos were then added.
- Next, we adjusted the overall proportions, making the model shorter and its body thicker.
- We did this because it’s important that this character is conveyed as a strong, bulky fighter.
- The hands were made from scratch and were kept closer to the rhinoceros’ anatomy by having only two fingers and a thumb.
After merging everything together and refining many of the shapes, musculature details and intersections between the previously separate parts, the Rhinogar sculpt was finished! The next step was to model all of the Rhinogar’s armour – but before we did that, our artist decided to retopologise the body sculpt first, rather than waiting until after all the armour had been made. This is because armour and equipment creation is much faster when there is a low mesh to create geometry from.
The armour we created was heavy-plated in order to accentuate the Rhinogars’ muscular build. We also added spikes to the design, and worked hard to make this set of armour look intimidating and formidable. The armour is a really important part of this character’s design because Rhinogars are known for their unrelenting, battle-hardened ways; so we were really pleased with the results and how threatening they made the Rhinogar look.
The modelled armour was then brought into ZBrush where all the details were sculpted and refined. Once this was done, we were able to retopologise the armour, and then unwrap and bake both the body and the armour. This brought us to our favourite part: texturing!
Like the Blackhorn Rhino, many of the Rhinogar’s tertiary details were added during the texturing phase:
- Taking the skin texture from the Blackhorn Rhino, we first transformed this into a nice tiling material to help speed up the texturing process without sacrificing any skin details.
- We did this using a tool called ‘Bitmap2Material,’ which is great for making tiling materials. This gave us a really detailed skin material that could apply in a very efficient way.
With the body all textured, our Character Artist turned their attention to the armour. They started by making multiple versions of different texture configurations, playing around with different materials and trim colours until they found the perfect combination. This took the form of metal chest armour, with leather wrist cuffs and waist armour that were bordered by a sliver of metal. We liked the look of having gold trim on this armour set, as well as the crimson colour of the underskirt.
To add a few finishing touches, our Character Artist decided to paint the opacity of the Rhinogar’s underskirt in order to make it look ripped and more haggard. They then went on to paint a layer of chainmail on top of the skirt to create more visual interest. That brought us to the end of this fearsome enemy! We’re really pleased with how all of our 3D models turned out this month, and can’t wait to show you the next lot we work on – so keep an eye on our weekly devlogs if you’re hungering for some updates.
We used the body of the Lionman model as a base for the Rhinogar. We modelled the armour separately, then unwrapped and baked it with the body. A skin tiling material was created so that we could texture the Rhinogar more efficiently. The skin material was created using a tool called Bitmap2Material. Like the Blackhorn Rhino, skin details were added during the texturing phase. Several armour configurations were then created so that we could test different combinations. This is the final result of the Rhinogar model. Rhinogars are fearsome enemies in Depths of Erendorn, known for their battle-hardened and vicious attacks.
Animation
Our Animator spent a lot of time this month transferring multiple characters onto the new main rig that we will now be using for all bipedal characters in the game. We created this new rigging system back in October, so make sure you head over to that devlog if you want more details on how it all works!
One of the characters we did this for was the Twilight Elf Assassin. After transferring, editing and then baking their animations onto the new rig, we were able to export all four class versions of this playable character, including the standard Twilight Elf Assassin, as well as the Twilight Elf Assassin Champion, the Master Twilight Elf Assassin and the Twilight Elf Assassin Deathlord. As the names suggest, each class is more powerful than the last, with the Assassin Deathlord being the most formidable.
Our character artist then repeated this process for a couple of other characters:
- The Forest Druid’s rig and mesh were first updated to fit the main rig, after which this character was skinned and had its animations transferred to the new rig. We then centred the rig to better fit the Druid’s mesh before going back in to adjust some skinning weights.
- The Watertarg was worked on next. A lot of work had already been carried out on this character, so all that was left to do was to add an ‘unequip weapon’ animation, since it had previously been missing this.
- The Parakaw Astromancer also had some adjustments made to its mesh in order to fit the main rig. These changes included deleting some faces inside the mesh, which made the skinning a lot cleaner as it didn’t require a lot of weight-painting.
We’ll have to wait before we can export the Parakaw to the engine because its first animations are currently in the process of being transferred onto the rig. In the meantime, our Animator imported the rigs and first sets of animations for the Twilight Elf Assassin, Watertarg and Forest Druid into the engine for testing. Before this was done, the main rig was also reimported after some additional bones were added to it a while ago. In the engine, all of these characters will be using this main rig in order to cut down on time, as well as to make character generation much faster. This is why it’s important that we run a lot of in-engine tests, to ensure that all characters and their animations are compatible with the main rig.
One of the most exciting things that happened in the Animation department this month was seeing how some of our character animations looked alongside some visual effects. The Earthen Dwarf’s Hammerfall animation, for example, was edited and then exported by our Animator so that we could see it alongside the VFX that was created for it earlier in the month. When this ability is selected, the Earthen Dwarf leaps into the air, landing with a forceful impact that sends splash damage to all surrounding enemies.
After having worked on Hammerfall’s VFX for a few weeks, it was really great to see how it looked with the Earthen Dwarf animation, rather than just seeing it isolated against a background – and, on a similar thread, it was awesome to see the animation in full force! It really helped us to see both VFX and animation play out in this way because it gave us a clearer idea of where we need to tweak certain things. We also did this process for Spinning Kick, a skill harnessed by our Watertarg, and hope that in the coming months we will continue to be able to test character animations alongside their respective visual fx.
We tested the VFX for Spinning Kick alongside the Watertarg animation. We also tested the VFX for Hammerfall alongside the Earthen Dwarf animation.
Environment Art
You’ll remember from our last monthly update that we had been busy building one of the many Cave Dungeons that will appear in Depths of Erendorn. Work continued on this in January, starting with our Environment Artist making a lot of improvements to the water:
- The water shader was updated so that refraction was more performant.
- The river spline system was improved so that it would displace terrain geometry below itself. This was carried out for procedural generation purposes.
- Real-time dynamic water foam/flow interactions were implemented in an effort to make the water flow and foam be informed by intersecting objects.
- The latter, however, turned out to be more costly than we first anticipated, so this feature has since been disabled, though we may reimplement it in the future.
We then started thinking about what set pieces could be included in our Cave Dungeons. Set pieces are a core component in our dungeon builder. Essentially, they are a small portion of the level which are set-dressed and tailor-made to provide visual storytelling for the players exploring that dungeon. These set pieces can also sometimes be linked to random events which trigger and occur during gameplay.
To get started on the pre-production of these set pieces, our Environment Artist made several moodboards of interesting ideas for the environmental storytelling of the Cave Dungeons. Our favourite moodboards were then expanded on and fleshed out, each containing relevant information to help inform the 3D modelling process – information like lighting, mood, texture information and shape language.
Our ideas for set pieces have thus been grouped into five different categories:
- Stalagmites: We loved the effect the stalagmites gave in one of our previous environment tests, and intend on using these in a few of our caves and dungeons.
- Natural Marvels: These include naturally forming features like underwater passageways or luminous, subterranean pools, which will reinforce the fantasy elements of our environments.
- Crystals: As you know, we are big lovers of crystals and will be incorporating these in many different structures, from small clusters to huge walls formed by generations of crystal growth.
- Flowstones: We are in love with the aesthetic of flowstones, and think they will add a really unique design element to our caves.
- Water: Various bodies of water will be used within our caves and dungeons. We are particularly fond of the idea of hidden lagoons, where the cave’s natural architecture arches above them.
The first of these set pieces we decided to tackle were the flowstones. After blocking out the major forms in MAYA, the models were then transferred to ZBrush for sculpting. This was also where all the tertiary and micro details were added. We’re currently in the process of refining these flowstones; once this phase is complete, the next phase will be to create low poly meshes of them. Next month, we hope to have finished these set pieces, as well as to have started on the next round, which will include stalagmites!
Many improvements were made to the water in our Cave Dungeon this month. We then went on to create moodboards for set piece ideas. The first set pieces we’re creating for our caves are the flowstones. The major form of the flowstone was blocked out in MAYA. It was then brought into ZBrush where the details were refined.
Visual FX
There were a lot of visual effects worked on this month for spells and abilities. As we mentioned earlier, we integrated a couple of these effects with their relevant animations: Hammerfall was one of them, as was Spinning Kick. We’re happy to see how well our animations and visual effects are integrating together, and can’t wait to carry out more tests in the future.
But there was a whole host of abilities worked on besides these two:
- Unique Blessing: Harnessed by the Zentragal and Forest Druid, this ability allows you to increase a team member’s Strength and Resilience for three turns in a row.
- Giant Lightning Bolt: This deals a significant amount of Lightning Damage to opponents.
- Sub Zero: This deals Frost Damage to three targets of the player’s choosing and can be used by either the Parakaw or the Zentragal.
- Leap: This is a skill that allows the player to jump from three tiles away without getting disturbed by enemies.
- Leaping Strike: Used by the Watertarg and Twilight Elf Assassin, this is another skill that allows the player to jump one tile before dealing Physical Damage to an adjacent enemy.
- Relentless: When your Health is below 75%, 50% or 25%, you’re granted an increase in Energy Regeneration, Movement or Resilience respectively.
- Hammerblow: A skill of the Earthen Dwarf (not to be confused with Hammerfall!), Hammerblow allows the player to deal a significant amount of Physical Damage to their opponents.
- Double Strike: This is another skill that deals Physical Damage, this time to 2 enemies – although there will need to be only 2 enemies adjacent to the player in order for this to work.
This is the VFX for Double Strike. This is the VFX for Giant Lightning Bolt. This is the VFX for Unique Blessing. This is the VFX for Relentless. This is the VFX for Hammerblow.
In addition to all of these, our VFX Artist dedicated a lot of time to the Parakaw Astromancer’s abilities. The Parakaw belongs to one of the most intelligent races of spellcasters in Erendorn and as such, their arsenal of spells is pretty impressive! You’ll notice that a lot of the effects for these abilities are connected by an astral theme, like Arcane Burst, Healing Nova and Mana Rush. This plays into the lore of the Parakaws by echoing their affinity with the stars. The visual fx created for this playable character include:
- Arcane Burst: A starting ability of the Parakaw, this ability can be used on a specific target before dealing Arcane Damage to it, as well as to all enemies within a 1 tile radius from the target.
- Healing Nova: This can be used to restore health to all team members, which will definitely come in handy when faced with higher level opponents.
- Mana Rush: This actually transforms Energy into Mana, enabling you, in those desperate moments, to use special abilities and spells that cost Mana.
- Stone Skin: This allows you to increase your own Resilience for three turns in a row.
- Teleport: Another specialty, Teleport enables the player to teleport to any unoccupied tile in the room, which is very useful for when things start heating up in battle!
- Lifeblood: This will restore a small amount of the Parakaw’s health for three turns in a row, as well as granting a burst of Mana on the third turn.
- Birds of Prey: This spell deals damage to an enemy every turn for between 2 and 5 turns. Incremental damage like this can really help turn the tables in battle.
We’ll continue to create jaw-dropping VFX throughout the coming months, and are looking forward to testing some new ones out with the relevant characters! We’re also really excited to say that a couple of our visual fx have been brought to life with some awesome new sound effects – so let’s get into that part of the devlog!
This is the VFX for Mana Rush. This is the VFX for Lifeblood. This is the VFX for Healing Nova. This is the VFX for Stone Skin. This is the VFX for Arcane Burst.
Sound Design
January was a big month for a number of reasons, many of which we’ve just been through with you. One of the biggest changes, however, was the introduction of an incredibly talented Sound Artist who has since joined our team! They’ll be using their expertise to create the sonic landscape of Depths of Erendorn, using sound design to breathe life into our visual effects, environment designs and character identities.
As we just mentioned, sound effects have already been created for a few of our spells and skills, including Ice Storm, Drain Life, Spinning Kick and Fast Healing. These have all been tested alongside their respective visual effects, and although the sounds are still in their first drafts, it’s really exciting to see how auditory and visual elements all come together in this way.
In between working on these sound effects, our Sound Artist spent some time planning out character-specific sonic identities, so that each of their characteristics is exemplified through sound. One way our artist creates sonic identities is through a character’s specific abilities and their corresponding sounds, which not only need to sound distinguishable from other characters’ abilities, but also need to have a sense of cohesion among themselves. This can be demonstrated by the set of Twilight Elf Assassin abilities that our Sound Artist created effects for:
- Throatcutter: This causes any enemies that are adjacent to the Assassin at the end of its turn to suddenly die. Enemies must have Health below 20% for this work.
- Blindside: This can only be used when attacking an enemy from the side or from behind. This skill will always cause critical damage to an opponent.
- Voidshadow: This ability activates Stealth, meaning that the Assassin cannot move, nor can it be targeted by enemies.
Furthermore, to create accurate sonic identities for each of our characters, our Sound Artist has spent some time reading through the lore that’s been written about specific races, which will help to inform their unique sonic identities going forward. This side of sound design is crucial because it gives the player a feeling that their character is separate from the rest, and helps to build immersion into the game.
Our Sound Artist continued their efforts towards creating a distinct sonic identity for every character by focussing on arguably one of the most integral yet underrated sound effects in games: footsteps! Footsteps really help to mold the sonic identity of a character by giving clues about its identity. Therefore, our Sound Artist has dedicated themself to giving each character class distinct footsteps. For example:
- The Parakaw Astromancer needs to sound like their talons are scraping the floor.
- The Twilight Elf Assassin needs to be sleek and quiet since these are stealthy characters.
- The Human Knight, on the other hand, should sound heavy and forceful because of their armour.
This demonstrates how the sound of footsteps helps to subconsciously reinforce elements of a character’s identity, as well as helping the player to feel that their chosen character is unique from the rest. The next step after our artist has created a “base” sound for the footsteps will be to consider how the footsteps of different characters will sound on different terrains, from rocks and grass to water and forests.
The next bit of sound design that was worked on this month was for some of Erendorn’s lower level beasts. There will be a huge variety of beasts and fauna in Depths of Erendorn, and whether friends or foes, it’s important to get the sound effects for our various creatures just right so that our players can feel more immersed in the game. Among things like eagles, rats, crabs and dogs, our Artist created sounds for the:
- Silver Hawk: Commonly found in the mountain regions, Silver Hawks can sometimes accost your party as you go about your journey – so make sure to look up!
- Glacial Boar: Native to the arctic region, Glacial Boars are often used by the Frost Dwarves as a source of survival; but these hulking beasts can be extremely dangerous when they feel threatened.
- Black Bear: Also found in the mountains, these creatures are known to put up a good fight. Savage Black Bears are more powerful, however, so make sure you can tell the difference!
Since all of these are only level 1 beasts, our Sound Artist ensured that they didn’t sound too massive or intimidating. This not only helps to indicate their smaller size and level of threat, it also means that we will be able to give higher level beasts a greater presence with their sounds. If we had made these lower level beasts sound too intimidating, for example, it would lessen the impact of more threatening creatures.
Programming
To get back into the swing of things after the holidays, our Programmers kicked the month off with some refactoring work on lobbies and character loading. Refactoring refers to cleaning up the code and making it more readable, so this was a good way to ease back into the working week.
Moving on, there were multiple successes this month:
- New level generation code was implemented into the game server code before being debugged.
- New spawn locations are now correctly stored, and tiles in rooms are now marked with the set piece name if they are to be part of a set piece.
- This will help the client understand which tiles to load in separately, as they will be authored pieces
- The X/Y Data now updates in the tiles of an object when it is rotated.
- Inheritance with tile objects was set up for better maintainability.
- We fixed several smaller bugs that affected the placement/rotation of Set Pieces.
- Overlap detection, which kept going wrong, especially after an object had been rotated, was also fixed.
In addition to all this, a new pathfinding algorithm was created to ensure that set piece objects and doors are always accessible in each room. However, a few issues did crop up with this new pathfinder:
- The pathfinder was destroying tiles around the edge of the map.
- This meant that certain places on the grid were surrounded by nothing.
- The pathfinder was also moving diagonally, which created 1-tile gaps.
- This would have made the levels easy to complete as the gaps could have been used as chokepoints.
After carrying out the necessary fixes, the pathfinder now correctly destroys and replaces tiles. An example of what we’re talking about would be if you had 2 set pieces in different parts of the room that were cut off from each other during generation. The pathfinder finds a more logical way of linking up the two areas by essentially burrowing through and replacing wall tiles with floor tiles to make a path.
Next up on our Programmers’ to-do list was to produce placeholder UI widgets that were also functional and necessary for gameplay. With this in mind, they went on to create an:
- Ability bar.
- Turn-order widget.
- Turn timer and End Turn button.
- Target health bar and portraits.
- Player and team health bars and portraits.
The creation of this UI sets us up for our next stage of development: connecting and interacting with game servers. To achieve this, a new server connector was then added so that it can deal with sending and receiving game server data, meaning that players can now find and connect to game servers.
With the Game Server Connector up and running, allowing players to connect to a game, the next step was about creating functions for unpacking server messages about the state of the game and being able to convert those messages to data types usable within the game. This currently includes, but is not limited to:
- The game state;
- Rooms;
- Votes;
- Events.
Some work also had to be carried out in regard to debugging the connection process, as well as cleaning up some commands for use in the server. Included in this work was:
- Adjusting how levels and events are serialised.
- Adding a simple Lerp function.
- Fixing Enemy Entity Data being lost from the room data.
- Updating Set Piece code to reflect asset names being added to set pieces.
- Reviewing company code security and backup processes.
This month, our Programmers also designed and implemented a manager-based behaviour pattern for handling the many facets of gameplay. By having an array of manager classes, each created for their own purpose, we’re able to delegate and handle functions between them and allow relevant objects to be updated accordingly. These manager classes include:
- Room Manager: Handles all data and representation of the environment.
- Turn Manager: Responsible for keeping track of and managing player turns.
- Ballot Manager: Deals with any pending rerolls or votes.
- Status Effects Manager: Controls access and storage of Status Effects. It also has helper functions and events which fire off when the class is used.
- Entity Manager: Manages access and storage of entities, as well as holds the teams and entities in the individual levels.
- Game Events Manager: Tracks ongoing events and storage, as well as fires off events when a new event is added, when a new event starts and when an event completes itself.
Before creating the Status Effect Manager, our Programmers created a class that will store the status effects that exist within the game. These objects will then be displayed as buffs/debuffs on a player’s character. After this class was created, it was then integrated into the Status Effects Manager.
These manager classes all have aspects that are linked with the player’s gameplay UI, and so the links have been created to allow this for the following:
- Team Portrait Panel: Listens to the Entity Manager for changes in the team.
- Ballot Panel: Listens to the Ballot Manager and displays newly pending ballots.
- Ability Bar, Target Portrait and Stat Panel: Listens for targeted entities.
- Turn Display: Listens to the Turn Manager and updates turn time and order.
Game Action Log functions and classes were also created this month. This means that the Game State now updates via logs that are stored, and there are many different types of logs that can happen. Together, these logs describe to the Client everything that has happened in the game to that point. This information then needs to be parsed from its serialised form into a form that the Client can understand and use, so we’re pleased that the means to do this was achieved this month.
On a similar vein to the manager classes our Programmers implemented, Data Managers in the Game Mode were also created. These manage specific parts of the data, like the Entity Manager we mentioned earlier. Each manager class now listens to the Game State update that comes from the server when joining a dungeon. They also now set themselves up with any data stored in the Game State that the Client retrieves when entering the game. This will allow players to join games that are in progress, as well as from the start.
Some work was also carried out on Damage Shields this month. Damage Shields add a protective layer in front of the player, which helps to absorb the impact of incoming damage. In Depths of Erendorn, they can be triggered by certain abilities, like Solemn Word, which is used by the Human Knight. On this note:
- Entity Damage Shields data structures and parse functions have been added to the Client.
- A manager for them was also created in the Client so that we can track and show data from ongoing damage shields in the game.
Next up, our Programmers added the functionality for the Entity Library to load a specific number of each enemy class on demand. On doing this, a map can now be given to the Library with a list of entity IDs and a number of each one to create. This is needed so that assets can be preloaded when joining a dungeon, reducing any frame drops from spawning characters during a game in progress. The last thing our Programmers did this month was fix a small issue with how Set Pieces in the generator were storing their rotational information.
If you’ve made it this far – hats off to you, and thanks for joining us for another monthly update on our fantasy RPG! If you want to see more on Depths of Erendorn, remember to join our social media family – we’ll see you next month!