Monthly Devlog | April 2022 | No. 39
It’s been an incredibly busy month for the team working through April. Our 3d modelers have finalised the Zentragal rework and started to create textures for it. The set design team continues to make props, while the sound team gets out and about collecting audio from the wilderness. Additionally, the animation team has tackled a couple of enemy animation cycles and the VFX team continues to create amazing visual effects for the spellcasters of Erendorn. Finally, the environment team has been making a castle for a new ruins point of interest, while the coding team has worked on bug fixing and implementing a party system so players can team up in-game! As always, join us on Twitter, Instagram, and Reddit for daily updates on Depths of Erendorn – now let’s get into it!
3D Modelling
It has been an exciting month for the 3D modelling team as they have continued to work with the Zentragal model, finalising the sculpt and starting the texturing. The high poly sculpt has been completed with a high level of detail that the artists will “Bake” onto a low poly model. This was completed later through the month. An example of this high-poly sculpt can be seen below.
Once the high poly sculpt were complete a lower poly model was created that would be primarily used within the engine, the low-poly model will be a lot less resource-intensive when it has been put into engine. This model would then go through the “Baking” process, this process will take all the detail of the high-poly sculpt and apply them to the low-poly model using a heightmap. This is applied to the low-poly model giving the impression that it has all the detail of the sculpt but will be a lot easier to render once it is in the engine. The low-poly render can be seen below!
Once these models had been completed the artist then moved on with texturing the Zentragal model. Using a colour pallet based on the Black Widow spider the artists have primarily used blacks and reds to begin adding some colour to the reworked model. The artists have used these colours to give our Zentragal rework a mysterious and sinister vibe. The team has also used a pale purple colour in the skin of the upper body to cement the idea that the character has a leaning towards dark magic, this has been a key feature of the race’s background from the beginning. These work-in-progress textures can be seen below.
Set Piece Design
The set design team has continued with their work creating props that will furnish the interiors of Erendorn. Last month the team took the time to update some props as new concept art has made some of the items clearer for the artists. Although some models have been updated, no work has been lost as the difference in models will allow for more variety within the props keeping interiors fresh and unique. The team has worked on many different props such as chests, crates, basins, pillows, and beds. Examples of these models can be seen below along with updated concept art.
Programming
Client
At the start of this month, the client-side team has been about setting up World Sessions to use and interact with the Camera Controller, working towards implementing movement of both the player character and the camera within the world. Additionally, the client-side team has also spent some time fixing a number of Dungeon gameplay bugs as well as finishing the first implementation of movement in the DoE overworld. Finally, the team has worked on adding the concept of player parties (a group of two or more players) that are integral to allowing players to leave settlements and venture out into the world of Erendorn. A number of systems have been added to facilitate the sending, receiving and display of this information from World Sessions. Here is a breakdown of some of the other work completed by the client-side team over the last month.
- Implemented Camera Actor into the World Session.
- Updated the Movement Manager to listen for movement inputs from the Camera Actor.
- Updated the execution order of Session setup, the Session now waits for a zone to be loaded before updating its Session State, among other organisational updates.
- Created Session-WorldMove command to be sent when a player requests.
- Fixed team Portraits not showing in Combat.
- Added the ability to show health regen numbers on Overhead UI.
- Fixed a bug causing teammates cooldowns to not display correctly.
- Updated entity placement in the world.
- Added the ability to get the height of the floor at any point in a zone.
- Fixed a crash from requesting the height outside of the zone bounds.
- Fixes Stats display on the Inventory.
- Inventory is now functional.
- Updated the method for connecting to the World Session to allow players with already selected characters to join without forcing character selection.
- Created World Movement Steppers to handle World Movement Server logs, players can now see the results of any other connected player’s movements in the World.
- Updated how Step Logs reference their parent Session or Combat.
- Updated character IKs to ignore weapon collisions.
- Fixed the end turn display only showing for the most recent player.
- Added character nameplates to overhead UI and added show on hover functionality when in a dungeon.
- Updated the team portrait UI to allow character summons to appear alongside their summoner.
- Implemented animated Charged Spiderling character.
- Added the ability to select a specific Set Piece from a dropdown to use in dungeon generation.
- Refactored the layout and how the Stat Panel displays character stats.
- Updated how the Movement Manager handles updating player coordinates during movements in World Sessions.
- Added the Party and Party Controller classes for handling the state of parties relevant to the connected player.
- Added the ability to invite other players to your party with a party-invite request.
- Added context menu interaction for entities, players can now right-click other players in World Sessions and whisper (direct message) or invite them to a party. (This has been added specifically for furthering party implementation but gives us the basis for lots of new player interactions, such as inspecting other player’s equipped gear, further down the line.)
- Added GameLog and StepLog classes for handling Server updates pertaining to the state of a Party. By receiving a snapshot of Party information when something changes we can update each player accordingly.
- Refactored the Stat Panel to use updated StatIDs when determining their display order in the panel.
Server
The server-side team has been working on many things throughout the month, with some bug fixes and some general quality of life updates taking precedence. With the server now mostly bug free, the server team has been working on cleaning up some older and messier code. The code calculating when the next entity/team’s turn is finished has been completely rewritten. Turn skipping when stunned has been cleaned up and concentrated into one place, and an experimental change to having Movement and casting spells cost a small amount of energy has been implemented. Additionally, the server team has been busy writing up a lot of new code to handle the open world zones. Our open world has a defined number of major ‘Zones’, (like biomes but far larger), which are populated by ‘Subzones’, smaller areas divided up by the server. Each Zone has an average XP (Experience Points) amount for the enemies, and each subzone will take this initial number, and alter it faintly based on changes we can make in our game editor. For example, we can paint a large area to be higher XP than the average for the Zone, allowing tougher encounters to happen there. Once a Subzone knows its XP, the team has finished off the code that dictates what kind of enemy/ally/neutral thing spawns, it’s preferred spacing from the others in the spawn group it’s in, and the group’s preferred spacing from other groups spawning in the same Subzone with it, all with a little bit of randomness, of course. Finally, a funky little bug was causing many of our entities to rock up with stats they weren’t meant to have, causing some of our enemies to become secretly tougher, even when we checked, their stats in the database were correct. Turns out the map equating stat names to stat ID’s was out of sync by one in a couple of places! A breakdown of more work completed by the server-side team can be seen below.
- Added the ability for one server to notify another about a player which will soon connect.
- Changed the connection workflow between the client and World Sessions.
- Added CharacterSelect and SessionChange Message types and notifications.
- Obtaining Loot from the dungeons should no longer crash the server.
- Removed the Inventory from the JSON version of a player entity, this reduces message size when sending player data and stops clients from seeing what is in other players inventories with client modifications.
- Added the ability for servers to assign players to sessions without their connection.
- Added Inventory loading for expected players.
- Added Session Change notification when a player dies in a dungeon.
- If a player expected in a session died in the previous session the character is healed to full.
- Added the ability to remove States from entities outside of combat.
- Added the ability to disassociate a player with a specific session.
- Death in combat now removes all active effects and states.
- World Join now checks if the player is expected.
- Crashes caused from new movement code.
- Crashes in importing zone nav data.
- Crashes when a settlement is reacting to an ‘ExpectPlayer’ notification from another server.
- Fixed some logging on ‘WorldLeave’ commands.
- Fixed a crash on connection drops.
- Fixed a crash relating to AI Targeting changes.
- Added the ability for us to easily change how Elite NPCs stats scale as they get promoted.
- Implemented new NPC stat scaling.
- Cleaned up the logging functions around some server start and processes.
- Added the ability to ‘Paint’ XP onto areas of the zones in the world, this XP will determine the level of enemies groups that can spawn in this area. This can be set very precisely in specific areas and is flexible enough that we can raise or lower the XP amounts and range in any area giving us a lot of control.
- Added A Party Service.
- Integrated the Party service into the settlement server.
- Added party commands so players can invite/respond/kick/leave and disband parties.
- Laid the foundations for world zone server code in the instance manager.
- Made the zone a server handles a configurable option on server start.
Sound Design
The sound team took to the wilderness last month to collect ambient sounds and atmospheric audio. These sounds will be used throughout the vast landscape of Erendorn bringing scenic audio to the world as adventurers journey through! Taking these recordings, the audio team has also edited them to create cavernous sounds, these will be used within the dungeons. These initial recordings can be heard below.
The sound team also took some recordings of chopping woodblocks while out in the wilderness that would be edited to create audio for some of the many abilities that will be used in Erendorn. These recordings will be also edited to create an eerie and suspenseful atmosphere that will keep players on their toes as they travel through the more unnerving areas of Erendorn. The team then worked closely with the VFX artists to create audio alongside some of the visual effects that had been created for abilities earlier in the month. The abilities that the teams worked on were Magnetic Shift, Shoulder Barge, Earthen Touch, Holistic Regeneration, Vehemence, and Berserk. These visual effects and sounds give a brilliant representation of how the abilities will be shown in-game. A video of these visual effects and audio can be seen below.
During the latter part of the month, the team turned their attention to working on some of the interior noises needed for the many buildings of Erendorn. Primarily working on the audio needed to create a bustling and working gambling hall. All the sounds have been layered on top of each other in such a way that the player can sense the busy atmosphere but can also identify each sound that is being played. Some of the sounds that have been used are cards shuffling, coins clinking, people chatting, and drinks. Audio such as this will bring the gambling hall to life and bring a familiar atmosphere to the player. This audio can be heard below.
Environment Art
The environment team has focused this month on creating a new point of interest that will be placed within the world of Erendorn. This point of interest will be a selection of castle walls that can be made into ruins that can be scattered around the vast landscape. The first part of the process was to create a castle that would eventually become ruins within the world. The team took lots of samples from many of the European castles that are currently within the real world and started blocking out the castle to fit in with their aesthetic. Creating parapets, curtain walls, and turrets the environment team has blocked out the structure for the castle adding details where needed. All the while the team has also been able to get the correct scale with this model so it fits perfectly within the world when placed into it. An example of this picture can be seen below.
Once the block out was mostly complete the team moved on to experimenting with what method they would use to make the castle look abandoned and desolate. After some iteration, our artists have created bricks that can be used to build up walls and supports. Bricks such as these will be the building blocks of most of the castle walls and ruins, using these blocks lots of different types of structures can be built ready to be put into the landscape. The first structure created using these bricks was a castle staircase that will act as a foundation for the castle ruins, this has been made to the same scale as the castle was made earlier in the month. Examples of both the tileable bricks and staircase can be seen below.
After the bricks were created the team started making some more tileable textures that could be used on the larger areas of the castle walls. These textures will be used in areas that will be too big to place bricks individually. Making a texture tileable involves creating one section of the design that can be reused repeatedly with no breaks in the pattern. This makes texturing larger areas such as the new walls and turrets of the castle much less complex. Examples of this texture can be seen below. The next stage in the pipeline will be to apply these textures and newly created bricks to the castle then start iteration of the level of damage the artists desire within the ruins.
Animation
The majority of the month saw updates and new animations for the Small Ogre enemy. The animations team started by preparing the model by rigging and skin weighting, once this was completed the team moved on to creating animations. The team started with some idle and running cycles and aimed to convey the size of the enemy within its movements. The initial work in progress animations from the start of the month can be seen below.
After the initial work was completed on the Small Ogre model more animations were then worked on. The team turned their attention to how the weapon will be wielded by the enemy, focusing on the weight of the weapon in hand. A lot of anticipation was used in the animations to give the impression that the weapon needs more power to drag it across the enemy’s body. After these cycles were complete a stunned animation was also completed. These animations can be seen below.
The team continued working on many of the animations that will be needed for the model once in the game. The team moved on to focus on two variations of walk cycles, a two-handed attack cycle, a death cycle, and a drink animation cycle. All of these animations have continued the theme of conveying the size and the strength that the creature will have. Once these animations were complete, the team have taken all the files and added them to the engine. Once in the engine, an animation blueprint was created that will ensure that animations can smoothly cycle between each other. Examples of all these animations can be seen below!
Near the latter part of the month, the team focused on working with the Charged Spiderling summonable model. The team has transferred animations from an existing Spider enemy and editing these to get the Spiderling walking and completing an idle cycle. These cycles have then been polished and added to the engine where a blueprint has also been created to ensure smooth transitions between animations. Examples of these animations can be seen below!
Finally, the animation team worked on cleaning and finalising the newly completed Zentragal model. The rig has been updated to have additional bones so the Zentragal can be more articulate in more areas. These new bones on the shoulders and behind the head will be used for the possible customisation options that players may have for their character. The bones behind the head will be used for possible hair movement and the additional shoulder bones will be used for clothing movement as the character moves. An example of this finalised rig can be seen below.
Visual Effects
The VFX team started the month doing some experimentation, creating a new library of “building blocks” for visual effects. These building blocks will be the foundations of many of the visual effects to come. From these building blocks, the team will be able to create many different and exciting visual effects, this process also makes their jobs a lot less complex. Examples of these building blocks can be seen below.
The team continued the work from the building blocks to create new visual effects focusing on a range of abilities that will be used by the Druid character class. These abilities include Wind Blast, Lifemend, Dampening Shield and Toxify. Taking a typical idea of a Druid’s spells the visual effects team has used earthy and bright colours to convey the Druids class connection with nature. These new visual effects can be seen in the video below.
The VFX team has also been creating some concept sketches for many of the abilities needed in the world of Erendorn. These sketches show the general form and colour of the many spells that can be cast by many of the character classes. These spells will all be recognisable once in the game at a moment’s notice, this will help players make important decisions within a moment’s notice. Examples of the sketches can be seen below!
Taking the concepts the team started to create the visual effects needed to show the spells in-game. These visual effects will be iterated upon before they get put into the game along with sound effects to give a full representation of the spells used by the player. The team completed many of the spells from the concept sheet including StormStrike, Astral Ray, Empower Weapon: Frost, Mana Rush, Frost Shield, and LifeSpirit. These spells are visually distinct from one another so players will be able to differentiate between each one at a moment’s notice, this is an important feature within gameplay as it could be the meaning of life and death to a player. Examples of these new visual effects can be seen in the video below!
That’s it for this month’s devlog, but have you seen our monthly roundup of March yet?!