Monthly Devlog | March 2023 | No. 50
Throughout March, the development team working on Depths of Erendorn made significant progress on several aspects of the game. They finalised the retopology process, UV mapping, and texturing for the Human Knight armour. The set design team worked on improving materials and textures within the initial settlement of Erendorn and fixed decal issues, while the sound team implemented various sounds for different events and created unique sounds for different Wisps. In addition, the wizards of programming tackled problems with movement in the open world, the environment team optimised the geometry and UVs of castle ruins, and the animation team made updates to various creature animations. The VFX team worked on improving the Twilight Elf Aura, designing new visual effects, and improving ground targeting circles. Overall, the team was dedicated to improving the game’s visuals and fixing bugs to provide a more immersive and enjoyable experience for players. Examples of all the work completed by the teams can be seen below. As always, join us on Facebook, Twitter, Instagram, and Reddit for daily updates on Depths of Erendorn. Alternatively, join our Discord for all the latest! – now let’s get into it!
Throughout March, the development team has been busy with the Human Knight armour, making significant progress in various areas. They completed the retopology process and added a cape to the rear of the armour, attached it to the shoulder plates, and retopologised the cape and boots to finish the model. The team has also finalised the UV mapping for the armour, projecting the 3D mesh onto a 2D plane for texturing. The texturing process has begun, and the team has paid great attention to detail, adding smaller details for realism, including threads in the fabrics, scuffs, and deterioration on the metal plates, and grooves in the leather belt. Additionally, the team is experimenting with a new set of armour, with bold and exciting shapes. Despite the challenges of creating intricate designs, the team is dedicated to working on this new armour over the coming weeks. Overall, the team has made great progress on the Human Knight armour, and we look forward to seeing the final product and how it enhances our game’s visuals. Examples of the completed set of armour along with the new block out can be seen below.
Set Piece Design
During March, the set design team has been working on improving the materials and textures within the initial settlement of Erendorn. They tackled issues with leather on books, paper and scrolls, carpets, log ends, and wood texture, resulting in more realistic and simplified looks. The team also fixed decal issues and updated light sources to give a polished feel to the game. They made small tweaks to materials and fixed placement issues of assets around the settlement. Additionally, they worked on the secular levels of certain items, perfecting the design of ‘The Rising Sun’ tavern and fixing more decals in the area, making the game environment more immersive. Examples of the updated visuals to the initial area can be seen below.
The team started the month, updating some of the remaining visual features not yet ported for World Combat; Ability Targeting, Standard and Aggressive Enemy Intended Targets and Combat Conclusion UI are all now functioning in Dungeons and World Combat circumstances. Additionally, fixing some display bugs in adventures as well as adding some tools to help us tackle some harder-to-catch bugs. Furthermore, the team fixed several UI bugs that had arisen from some of the new features added in recent weeks, focusing on timing and when certain UI elements require updating.
The team would also apply fixes to the premature ending or soft locking of world combats with delayed actions. This will enable players to join dungeons after some of their actions have already occurred before connection. Thus, improving the player experience for either kind of combat with SFX and better reaction times for enemy animations. Finally, the team would set about updating a number of classes that handle responses from Server commands sent by players as well as allowing Summons like the Zentragal’s Charged Spiderling to be called into battle in the World and more. Additional work completed by the client-side team throughout the month can be seen below.
- Ability Controller Targeting in World Combat – All kinds of abilities now update their target visuals as players are selected/deselected in World Combat.
- Added the new meshes to the Dungeon Door Set Piece.
- Updated Rotation Steppers to facilitate the new rotation logs-in abilities.
- Refactored the Combat Conclusion execution order to prevent premature triggering of Victory or Defeat messages and Combat clearing.
- Standard enemies now display their targets next to their portrait when targeted, players can once again see how enemies intend to attack during Combat.
- Aggressive enemies now show updates to their intended targets based on distance as players move around.
- Adjusted character selection screen so that exiting returns to the login screen rather than closing the game, also re-enabled missing scrolling controls for the character list.
- Vendor refreshes are now functional and correctly update timers and item icons.
- Adjusted the layout of the adventure progression window to make character information more central.
- Character class portraits now correctly display in the adventure progression window whether there has been progress made or not.
- Fixed a layout issue with inventory, vendors and progression windows misaligning empty item slots.
- Implemented a new string hashing algorithm.
- Fixed dungeon backdrops not being removed at the end of a dungeon.
- Updated how Overhead UI is applied to Entities in the World to ensure duplicates aren’t appearing in adventures.
- Improved rotation debugging and added a Dev tool and console command for displaying the ‘Actual’ rotation of a character in the world to better track when the Client might desync from the Server.
- Fixed missing cases where UI relevancy would not update when the camera had moved.
- Fixed server time offset calculation.
- Implemented server time offset into movement code.
- Improved movement handling.
- Fixed parse failure of interrupted movement logs.
- Added missing log event classes.
- Added graveyard event assets.
- Adjusted entity rotation updates from the movement.
- Swapped out some more default UI assets for our bespoke pieces, mostly missing instances of scroll bars.
- Fixed an issue in the progression window that wouldn’t load the correct character icon for each player.
- Fixed XP/gold/loot displays mid-adventure to show the total of the player’s gains rather than just the most recent drop. Notably, this currently causes the display to falsely show doubled gains after an adventure ends.
- Started addressing a bug in which context menus in the inventory do not appear in the correct place.
- Updated how the ‘Player has ended turn’ checkmarks reset and when the turn button is reactivated in the Turn Display.
- Updated execution order of death popup to trigger on character ready for clear (post Death animation).
- Added a close button and optional function for dismissing the session change on player death to allow dead players to spectate an ongoing Adventure.
- Updated Character Creation to make use of the same tooltips used in combat.
- Updated the ability descriptions data table to remove info that already appears in other data fields and fix damage type text tags.
- Fixed a bug that prevented sounds from being played at the correct location, footstep SFX is now properly spatialised.
- Updated Entity Target widget to accept players and party members for display.
- Updated Overhead UI relevancy to always display the player and their party members at any range.
- Added a SoundProfile asset for UI sounds to allow new sounds to easily be implemented and invoked via blueprints.
- Created a template for the NPC version of Dwarven Smite.
- Updated camera relevancy checks for Overhead UI when possessing the camera to prevent a delay when joining Sessions.
- Equipping an item should grant you the stats on the items and the display should now update to reflect the change.
- Entity stat panels now update as they should, they had an issue where the Max stat would always change to the current MaxMovement State no matter which stat it was being changed.
- Added some missing event log files.
- Fixed the adventure progress gains showing doubled gains after ending an adventure.
- Updated equip slots in the player inventory to allow context menus again.
- Removed several redundant functions and events that were still present from previous iterations of the context menus in the inventory screen. Likely won’t have a noticeable impact on performance.
- Added highlight effects to hovered context menu options.
- Updated the methods for ending combat to ensure the last combat updates play out properly before returning to regular movement. The Action Director (responsible for gameplay action timing) has been updated to wait for the completion of the final updates a combat receives before victory or defeat is achieved.
- Integrated the SoundProfile from last week to be the source of all sound cues relating to gameplay UI triggers such as joining/winning/losing combat, different turn changes, inventory/vendor actions and more.
- Fixed a bug that meant that late joiners to a dungeon are no longer prevented from joining or seeing the active state of the dungeon.
- Updated animation events for Hit React animations as a number of characters didn’t have them assigned, minute to minute combat should feel more responsive for all enemies now.
- Remapped zone1 and settlement.
- Remapped all dynamically spawned assets.
- Updated NavEdit tool to create distance data.
- Finished fixing the context menus for equipped items: items can now be unequipped and deleted from their slots rather than having to locate them in the player’s backpack.
- Fixed the adventure progress window displaying the information wrong. All progression was being combined for everyone instead of being separated when in a group.
- Fixed a bug that would cause the vendor to display no items if the stock was refreshed whilst a transaction was in process, and additionally fixed said transaction then granting the wrong items.
- Implemented some new ability and damage type UI elements.
- Started on adding a display to the Character Creation screen to show the player which class abilities they have chosen as they progress.
- Updated how request responses are handled across the project to conform to the new method used by the Server. The format of generic request responses has been upgraded to be more consistent and provide better error detection and feedback on failed actions such as attempting to cast an ability without the required resources.
- Added the ability for Summons to spawn and participate in World Combat.
- Added the ability to inspect party members equipment and stats.
- Worked to improve the player Inventory widget layout.
- Added template for the Droval ability Wounding Lunge and updated their animation controller to be able to play the corresponding animation.
- Updated the Combat Grid Material.
- Adjusted Interactable Collision.
- Updated Nav Data.
- Updated the Nav data loading/storage to use an expanding buffer.
- Developed a texture generation class to use with the new Grid.
To start the month, the team tackled a bug that caused AI to not correctly select their new, temporary target, when their main target is obscured, such as surrounded by other entities, invisible, or other states. Additionally, a bug that allowed an entity to leave a tile in combat without removing its reserved status from the tile, causing many tiles to permanently be reserved by entities that have long since moved from them, was fixed.
The team would continue ironing out some of the harder-to-fix bugs persisting in the game. First up to be fixed was abilities failing on the first turn of a dungeon. Next up, a bug making standardAI choose a specific player to really, really hate, rather than spreading their aggro out evenly across the party. The problem was caused by two separate issues. Firstly, the list of players they were using to add up how much XP’s worth of enemies had been divided between them was being overwritten every time a new enemy went to choose a target. Secondly, the wrong list of current targets was being obtained meaning the XP calculation would have been off even if the first issue didn’t exist.
Additionally, the server team tackled some underlying problems with movement in the open world, causing invalid entity locations to be assigned and ‘teleporting’ entities to the coordinate 0,0, a term we dubbed ‘beaching’ because of the fact there’s a beach at that location! While this was being worked on, a miniature rework was done on the code responsible for checking the players’ distances from roaming enemies. Previously, a simple short-range check on every group’s average location against every player’s location was done, with the new method now being a multi-layered system to do a general distance check first to save time, then the more accurate (and time-consuming) entity to entity distance check once the general check is passed.
Finally, a medium-sized refactor was also done to the pathfinding code used in combat to determine what tile an enemy will try to move to. Now they can respect what tiles their allies are already walking towards, but can still ignore tiles their allies are on their way through, but not stopping at. A connection timeout now also exists for the Dungeon server, meaning if you crash or never connect to the dungeon server, it will let the server that sent you know you never arrived after a period of time. After this you’ll be handled as a disconnect and reset as appropriate for a normal log off. Additional work from the server-side team can be seen below.
- Implemented a new string hashing algorithm.
- Loot drops no longer scale with party size and is strictly XP based.
- Added minimum power level of 40 to loot drops.
- Increased power levels of item drops.
- Increased loot drop chance to 100% to test items.
- Dropped items should no longer have stat entries that give 0 of the stat.
- Refactored the loot generation code.
- Re-wrote the code to get the nearest tile to a location.
- Adjusted the start of combat code.
- Improved combat area logging functions.
- Fixed incorrect tile types in open-world combat.
- Adjusted entity rotation handling.
- Fixed loot generation bug related to 0 stat entries.
- Fixed an issue stopping the session from closing down and cleaning up the threads for that session.
- Fixed an issue which was causing sessions to get stuck in a closing state.
- Refactored the Inventory based commands.
- Fixed an issue that caused Health to be added to shields instead of Max Health.
- Increased the loot value when finding random loot chests in the world.
- Added a function to fill an entity’s stats.
- Adjusted the item stats calculations.
- After equipping or unequipping items the Entity stats are now validated to avoid issues of stats going negative or above the maximum in edge cases.
- Fixed an issue which was causing movements to teleport vast distances across the zone.
- Updated the vendor refresh timer to 1h intervals.
- Entities that initiated combat in an open world would cause 2 sets of start turn triggers.
- Entities that joined combat initiated by another, while in their turn, would not be added to the TurnManager, meaning the initiating Entity could force-end the entire team’s turn.
- Entities were not being set a rotation when they were spawned into the open world, causing abilities that care about which way the opponent is facing, like dirt kicking, to fail.
- Abilities with complex requirements, such as blindside, which needs an opponent to be not facing them, but also either behind OR beside them, were failing if a single one of these conditions were not meant, when as long as ‘besides’ or ‘behind’ the enemy was fulfilled, the ability should be allowed to work. As such, we reworked how ability requirement effect blocks pass back if they’ve failed or not.
- Enemies being added to a dungeon told the combat area manager the tile they were occupying before they had been assigned an ID for the combat, causing every entity to overwrite its predecessor’s occupying location. This happens in the opposite order now, letting everyone be on the tile they’re actually on turn 1.
- Updated Golang version.
- Updated server restart scripts.
- Added Mutex locks to Entities.
- Added Functions to obtain locks on a group of entities.
- Fixed entity position updates on the first step of each movement.
- Re-implemented NavEdits for dynamically spawned assets.
- Updated settlement code to fill all stats upon joining.
- Added Pack and Unpack healer functions to the Coord struct.
- Fixed Mutex deadlock whilst a session is closing down.
- Started work on a Cache system.
In March, the sound team made significant progress in creating new audio for Depths of Erendorn. The team implemented various sounds for different events, such as the Graveyard and the Corrupted Ground. They also created unique sounds for different Wisps, depending on their element, to give the impression that the Wisps have some similarities. The team also worked on audio to indicate whether a player has won or lost during combat, with the win condition sound utilising metallic sounds and the loss condition sound using echos and bass to convey deep emotion. Additionally, they created generic magic audio for spell casters, and they focused on creating audio for escaping combat. Lastly, the team reviewed older sounds that need updating, which is part of their ongoing effort to improve the audio quality of the game. Examples of all the new audio created can be heard below.
The environment team has been busy this month optimising the geometry and UVs of castle ruins in preparation for destruction and displacement. They are also exploring simulated destruction methods to achieve a more realistic look for destroyed parts of the structure. The team is also testing displacement methods that are being used in conjunction with textures to give brickwork on walls a high-fidelity Nanite-ready appearance. By focusing on these aspects, the team aims to provide a more immersive experience for players in the game. Examples of this process can be seen below.
This month, the animation team has been hard at work updating and improving various movement cycles and character rigs. The team began by checking all the imported creatures and making sure they are working as intended. They made several adjustments to models to achieve better movement, including moving bones, adjusting materials, and editing skin weights. The team used a physics-based tool to get more accurate motion for cloth physics and made updates to various creature animations, including the Watertarg’s run cycle and the canine characters such as wolves, dogs, and Skyhounds. The team also updated the animation blueprints, ensuring that every movement is smooth and realistic, and worked on adding wing animations to the Skyhound model. The team’s progress this month can be seen in the examples below.
Firstly, the team has been working on improving the Twilight Elf Aura, a key visual effect for the Twilight Elf Assassin character. By refining and combining various aspects of previous effects, the team has created a new and more dynamic aura that now emanates from the entire body of the Elf. The colours of the aura have also been kept consistent, portraying the Assassin as one with shadows. In addition, the team has been working on concepts for four new visual effects that will be added to the game. These effects have been designed with a focus on texture and shape, ensuring that each one is distinct and instantly recognisable within gameplay. While each effect is unique, they all follow aspects of magic that are familiar within the world of Erendorn. Finally, the team has been working on improving the ground targeting circles within gameplay. This involves addressing rendering issues around other meshes, such as grass, and exploring new visual designs for the circles themselves. By doing so, the team is striving to create a more immersive and visually stunning gameplay experience for players. Examples of all the work completed by the VFX team can be seen below.
That’s it for this week’s devlog, but have you seen our monthly roundup of February yet?!