Monthly Devlog | October 2022 | No. 45
It has been an interesting month of development for the team. The 3D modelling team have been getting to grips with some new hair tools as they create the initial hairstyles of Erendorn. The set piece design team have been creating some highly detailed props for cities while the sound team work on collecting some primary audio from woodlands. During this time the wizards of coding have been working on implementing and bug-fixing open-world combat and continue to improve the dialogue UI. Also, the animation team have been getting technical with inverse kinematics while the environment team work in the engine with some new pathways. Finally, the VFX team have been working on more level three abilities. 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!
The 3D modelling team have focused their month on working on the hairstyles for the many characters within Erendorn. Starting with the introduction of a new tool, the team took the time to create some hair strands that will be layered on top of each other to build the hairstyles. A lot of experimentation would be done by the team as they got to grips with the new tool and its many variables. Many of the starting images of hairstyles need a lot of work to get to the realistic image the team desires. Examples of the initial hair strands created and in the first experimental hairpiece can be seen below.
As the team got to grips with the tool, more hairstyles that aligned with the realistic image of Erendorn would be produced. Using the hair strands seen above the team would use multiple layers to build up the hairstyles. The final example, which can be seen below shows the bulk of the hair completed by the team after their experimentation. With the back of the hair complete, over the coming weeks, the team will work on the fringe to finalise the style. With all their newly built confidence with this tool, the team will also go on to create many different hairstyles for a range of characters, throughout the coming weeks. Examples of the hair being built up can be seen below.
Set Piece Design
It has been a highly detailed month for the set design team, as they continue their work on the asset pack for Erendorn’s cities. With the theme of opulence and grandeur, the team continue to create eye-catching props that will furnish the dwellings of Erendorn’s elite. Many of the props that have been created in this set have a higher poly count than those created before them, this allows the team to add more detail to these props. Using an integral part of the Unreal 5 engine, Nanite will allow props such as these to have a higher poly count. The Nanite tools automatically sort through the models and optimise objects that are in a player’s view ensuring less processing power is used when the player enters an area. the team will experiment with this tool as the city is built up within the engine. If the Nanite tool cannot be utilised in the way the team envision, they will turn to creating lower poly models and baking the detail onto them to save the processing power similarly. Examples of all the props created throughout the month are below.
To start the month the team implemented the handling of a range of World Combat circumstances, namely allowing adventuring party members to enter and take part in Combat without the rest of the party and subsequently allowing members not in Combat to join in on the fight.
The team would continue making improvements and bug fixing for World Combat UI functions, updates to World Combat joining and a refactor of how Entity selection functions in Dungeons work in line with the new World selection changes. The team also added several new Session Logs and integrated functions for Player Progress as a result of World Combat/Dungeons/Adventures, Activity Updates for displaying progression through Event Objectives and further improvements to entering and exiting World Combat in different circumstances.
Finally, the team worked on integrating Progression and Activity updates with their respective UI windows, streamlining World Session gameplay and updating how Lobbies work to allow Dungeons to be entered from the World. More work completed by the client-side team throughout the month can be seen below.
- Implemented the setup of new Combats the player is not necessarily participating in.
- Updated the Turn Display to show the relevant Combat turn order when selecting different characters.
- Created and implemented Logs and Steps for new Server message types; Items being equipped in Sessions, Vendor Transactions and Adventure Progression Granted.
- Created Steps that will be used to spawn objects and modify adventure Zones, adding and removing objects and navigation data to keep things interesting out in the world; Interactable Objects, Spawned Objects and Navigation Data Modifications.
- World Event first client asset was created.
- Crash related to painted XP outside of the bounds of the zone.
- More UI elements for dialogue integrated.
- A lot of bug chasing in the dialogue system.
- Dialogue windows now open clientside.
- Core UI Widget’s ability to update depending on the currently selected character has been further implemented, allowing players in and out of/in multiple combats to view their party member’s combat status and turn order.
- Updated the process of joining Combat to ensure only players participating in the Combat have their Combat inputs available.
- Fixed issues with Dungeon Entity selection resulting from last week’s selection handling refactor.
- Added a Character animation controller state for looping the Stunned animation for any character experiencing the state.
- Interactables now update on state change (chests open/VFX disappear/appear).
- Added World Event Assets.
- World Combat Grid Fix Attempt.
- Patched many layers of the dialogue system to get text and responses showing.
- Created a basic UI and made functions for the adventure progress screen.
- Fixed a few naming conventions for the sanity of all of us.
- Started fixing some bugs that turned up in the inventory/vendor windows following server updates.
- Added Progress Granted, and Progression Data Logs and Steps to handle party progress updates.
- Added Activity Logs and Steps to update Event Activities as players explore and progress through Event Objectives.
- Implemented an Activity Controller to manage the state of and updates to player Progression and Activities with hooks for the Activity Book widget responsible for displaying updates.
- Continued testing of Adventures and Dungeons to ensure Combat functions correctly in various player configurations.
- After a long trawl and much assistance from the server team in bug fixing, the client dialogue system can run a full conversation.
- Adventure progression window now takes inputs of the correct types, and now had some safeguards in place to prevent visual overflow of UI elements, and the internal functions have been rearranged and cleaned up to fit the new input data.
- Integrated the Activity Controller with the Activity Book.
- Integrated Progression Data with Adventure Summary Widget.
- Modified World Entity spawning to work asynchronously from more time-dependent Session Logs. As a result of this, movements and interactions are no longer delayed when world characters join the session.
- Updated the Lobby Controller to work with Dungeon Lobbies, ready to allow players to enter Dungeons while Adventuring out in the World.
- Polished up the visuals for Dialogue and Vendor windows.
- Updated Adventure Progression window to handle empty progress, still requires some fixes.
- Fixed scrolling in the dialogue window.
- A tentative fix to Dialogue History will require some testing.
- Nav Edit Creation Tool.
To start the month, the server team focused on more Adventure bug fixing, with more of a big laundry list of things worked on rather than any single feature worth diving into an explanation of. However, a few new things have been made on the side, including the beginnings of our Day/Night systems, Weather code, and tying the game’s systems such as enemy XP into them. You may find more powerful enemies during nighttime, or things may get rough when a storm blows in!
Additionally, a lot of work has been put into fixing various crashes and bugs being discovered as more and more of an open world Adventure becomes playable. This includes Events not spawning in random locations properly, quitting and joining a new adventure getting you stuck in the old one, and a bunch of crashes caused by the Zone server. More work completed by the server-side team can be seen below. Getting to the end of the month, the server team focused on the Zone server and creating yet more events. Some of these events ended up complex enough that a few chunks of code had to be refactored, such as Active Effects becoming part of the server package, and applying an active effect had to be able to accept multiple entities to attach to it. On the plus side, these new events were created:
- Combat Shrine, a shrine that gives you a random, but powerful buff for the next fight you’re in.
- Rangers with Lost Ring, go find it for them and they’ll reward you handsomely!
- Dwarf’s stolen Heirloom, some bandits took a Dwarf’s heirloom, figure out where they’re hidden and return his family jewels.
- Cursed Ground, destroy the dark braziers to remove the curse, and the zombies, from the surrounding land.
- The Graveyard Event, a graveyard that will spawn multiple waves of zombies that must be wiped out.
Finally, the server team got busy putting in the code for activity logs (imagine a quest tracker but more dynamic). Once this was done, more work was then spent on the Graveyard Zombie after testing found it wasn’t quite working as intended, as well as causing a bunch of crashes on top of that. With the event then fixed, the code for weather and time, which was created some time ago, was finally implemented into the working server, including dynamic weather maps, and a server-wide time. Additional work completed by the server-side team can be seen below.
- Reworked how DeepCopy was used in the server, changing from straight Deep Copying to creating new memory addresses that copy the values of the original.
- Some tweaking with enemy groups in the open world and their spacing, as well as respecting the painted-in XP of the local subzone.
- Fixed Active Effects crashing open-world combat.
- Fixed Adventure combat ending causing a Crash.
- Zombies now no longer apply their plague to themselves, but their enemies!
- Added Item Drop Logs.
- Added the ability for the server to change the weather.
- Fixed a bug which stopped the Leave manager which handles removing disconnected players from sessions.
- Fixed a bug which stopped dialogues from starting.
- Refactored World Events to be easier to create and work with.
- Fixed many bugs which stopped the spawning and selection of world events.
- Refactored enemy placement and selection in world sessions.
- Refactored Interactables to have a State and the ability to change states.
- Refactored initial World Events.
- Added ItemDropLogs to the RandomLootDrop Event.
- Refactored entities getting added to sessions.
- Refactored Entity ID assignment to avoid clashes with event NPCs.
- Added cleanup of a log cleaning thread which should improve long-term server performance and remove a memory leak.
- Added a combat check on attempting to create a world move.
- Added Assets for World Events.
- Expected players sent from other servers now update the Entity service.
- World move commands now check if the entity is in combat which stops a rare edge case around combat.
- Wrecked caravan World Event NPC is no longer considered to be a player.
- Caged NPC World Event NPC is no longer considered to be a player.
- Fixed the interact command which re-enables all interactables again.
- Refactored Expected players and new connection handling code.
- Players are no longer sent to prior-ended sessions instead of newly request ones when connecting to servers.
- Fixed a bug which made it impossible to change the character on future sessions.
- Refactored ProgressionData, Improved variable naming, and they now contain information about their origin.
- Added a command the client can use to request the current session ProgressionData.
- Fixed some bad ProgressionData building which caused some data loss.
- Summary logs are now sent to clients on the completion of Dungeons/Combats and Adventures.
- Zones are now pre-loaded on the server start reducing wait time on the first adventure on a server.
- Refactored combat start code, combat trigger distance is now a lot more consistent.
- Nearby party members are now dragged into combat when it triggers.
- World Events can now interact with each other if they are a parent or child of other events.
- Added subzone deactivation when the party moves too far away which will unload enemy groups.
- Fixed a bug which makes newly created dialogues accessible.
- Added a command to return to character select so players can change characters in settlements.
- Fixed Dialogue ID Assignment.
- Fixed Server Outgoing Connections.
- Adjusted WorldEvent methods.
- Refactored new connection code relating to character selection.
- Fixed issues relating to being expected in gamesessions that had ended.
- Added a dungeon entrance to use to test/debug the upcoming feature.
- Added the ability to update a mapped zones height/slope data without having to recreate all of the zone data.
The sound design team started the month by gathering some primary resources within a forest setting. These primary resources will be added to the soundscape of the wooded areas of Erendorn’s initial area. Adding primary resources from our world will enhance the audio and give a living feel to our digital world. When out in the wilderness it is expected to hear certain things such as birds tweeting, leaves rustling and the wind passing through the trees. Sounds like these are easily captured by our team with their professional equipment. The team went on to tweak these sounds and get them ready for the engine through the rest of the month. Examples of the recorded soundscapes can be heard below.
Getting to the end of the month, the team worked on some visual effects audio for the Twilight Elf Assassin. Following the stealthy aura this character has, a less conspicuous set of audio has been created. These sounds allow the character to continue to be stealthy while using abilities from the shadows. The team have also mixed in some slashes of daggers conveying the proficiency this character class has with a blade. All the audio for the visual effect created throughout the month can be seen in the video below.
The environment team started their month with some work on new foliage for the world of Erendorn. The berry bushes, which can be seen in the examples below, will be utilised within an in-game event. The team gave these bushes a bespoke look, making it easier to spot them within the luscious landscape of Erendorn’s initial area. Although the initial area is not the only place these hedges will be utilised as the event they are tied can be activated within any area of Erendorn. These hedges will be implemented into the engine along with VFX, making them even more eye-catching and giving players immediate feedback that they can be interacted with. Examples of berry bushes can be seen below.
After working with the foliage, the team would spend some time within Erendorn’s initial area. Working within the areas that would see the most traffic, the team have implemented dirt paths to illustrate this. Along with these dirt paths came some optimisation to the grass and flower placement within the settlement and the surrounding area. Now, along with the flowers and grass, the dirt paths can be painted into the world. Giving the team a new tool in their world-building arsenal. With this new tool, the team have also added dirt paths to the ruins that have been added in previous months. Examples of the paths in the settlement and the ruins can be seen below.
To finish the month, the team would work on some creeping ivy that will break up the cliff and dungeon walls within Erendorn. A common problem with cliff walls within digital spaces is they can be very repetitive. Breaking up the continuous colour of the rock face is a challenge the environment team have been tackling head-on. Initially creating multiple rock faces that can be used in random succession to alleviate the repetitive look, will do a good job to start with but can only do so much. As the rock faces will be used a lot through Erendorn, a splash of colour along with something else to break up the continuous rocky colour will do a great deal to keep the formations interesting. The creeping ivy the team have been working on is a perfect example of some nature that will achieve the break up of colour needed along the cliff walls. As this is just a work in progress, the team will continue to iterate and improve the ivy before it is implemented into the engine. Examples of the first iteration of climbing vines can be seen below.
Work in progress ivy
The animation team started the month with some technical work within the engine. Taking the newly finalised Zentragal rig, the team set to work adding inverse kinematics to the arachnid. This is a technique that is used to keep all the legs of a creature on the ground. When animating a walk cycle for games, the typical set-up is to create the walk cycle on a flat surface. This makes the process of animation a lot easier for the team, although it can cause some conflicts when the character enters the not-so-flat world of Erendorn. Although sometimes tricky to set up, inverse kinematic works stop any conflict as the character wanders around on uneven terrain. Once this technique is employed, the team can also use the animation cycles to keep the character moving without going through the floor. The team would also go on to implement inverse kinematics to the turtle and crocodile enemies, later in the month. Examples of all the enemies with newly implemented inverse kinematics can be seen below.
Moving on to the middle of the month, the team would work on implementing a variety of stunned animations to the game engine. The stunned animation will be used to indicate when an enemy or an ally is incapacitated. These animations will be tied with visuals on the user interface giving players multiple articles of feedback so they can identify the incapacitated entity. The team implemented the stun animation for the zombie and the small mammal class of enemies. The team would also start some experimentation with cloth in the engine throughout this time. Setting up a system that will allow for quick and easy cloth animation within the engine. Examples of the stunned movement cycles and the cloth experimentation can be seen below.
The visual effects team have been working on a variety of level-three abilities throughout the month. Starting with some abilities for the Druid and Parakaw character classes. The abilities created for the Druid utilise earthy colours similar to the ones that will be found in the Druid’s armour and homeland. Similarly, the visual effect created for the Parakaw follows a cosmic aura of the intelligent race. This is further conveyed by the constellations that can be seen in the Nurturing Heal ability. Examples of the visual effects created for the Druid and Parakaw can be seen below.
The team would then move on to working on abilities for the Twilight Elf Assassin and the Human Knight. To start the level 3 abilities for the assassin, the team utilise a darker colour pallet. Due to the Assassin’s stealthy nature, the team have created abilities that will be harder to spot as they conceal themselves within the shadows. Although this is the aim the abilities still need to be visible to the players around them so utilising the darker colours fits these visual effects nicely. In direct contrast, the abilities created for the Human Knight use more warm colours throughout, correlating to the neutral good the character may be. The team went on to finalise the abilities for the Twilight Elf throughout the month and will continue to work on the Human Knight’s abilities in the coming weeks. Examples of all the abilities created throughout the month can be seen in the videos below.
That’s it for this week’s devlog, but have you seen our monthly roundup of September yet?!