As September draws to a close, there are lots to talk about from the developers working on Depths of Erendorn. The 3D modelling team finalised the Druid and the Zentragal armour textures. Also, the set piece design team worked on some VFX and continued making props. Meanwhile, the wizards of coding implemented and started to refine the open-world combat and vendors now enter the initial area! During this time, the sound team worked on a new ambience and sound to indicate rewards to the player. The environment team has been creating new foliage for the grasslands of Erendorn, while the animation team worked on movement cycles for the Fen Elf and Droval. Finally, the VFX team have been creating and bringing consistency to visual effects used to indicate interactable objects within gameplay. 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!
3D Modelling
The team started the month by finalising the textures for the tier one Forest Druid's armour. Using elements of the forest, that the Druid's call home, the team have added gradients and grass motifs throughout the protective gear. The gradients used within the armour convey the changing of the leaves throughout the seasons, further solidifying the respect the character class has for its surroundings. The biggest tweaks seen in the armour come from the belt and shoulder pads, as both now have added texture and detail. It is worth noting that all character models will remain hairless for now as the team explores and works on hair options across the board. An example of the finalised armour is below.
For the rest of the month, the team would work on texturing each of the tiers of the Zentragal's protective armour. Using a colour scheme that is closely related to the Zentragal's pallet the team have created three different pieces of armour that will be easy to identify by players. The team have introduced many elements that convey the arachnid nature of the character class. Using darker colours with red accents gives the impression that the wearer is close to the mystic arts. Additionally, the higher-level armour includes more symbols using that red accent continuing the theme of the occultist within the Zentragal race. Finally, the team implemented a webbing on the breastplate of the highest tier armour giving another subtle nod to the enemy's arachnid similarities. The team would finalise all tiers of the armour throughout the remainder of the month and import them all to the engine, ready for the next stage in the pipeline. Examples of each type of armour can be seen below.
Set Piece Design
The Set Design team started the month working on a variety of items that will be used for events. Starting with a mystical orb and ring that can be placed into the world of Erendorn, these assets will be used for many different events that players can interact with. The team implemented the initial models into the engine and applied textures to them, using some of the modular materials that had been added to the engine earlier in the year. The team would also apply some unique visual effects to the assets, giving them the eye-catching nature they will need to be spotted in the vast landscape of Erendorn. Examples of the items that were added to the engine at the start of the month can be seen below.
The team would pay extra attention to the Corrupted Brazier event item throughout the month. Starting with some colourful flames, the team aimed to make the asset customisable giving the event multiple uses when implemented into gameplay. The customisable flames were then applied to the engine and the brazier asset, giving us a great visual as to how the event will appear to players. With the customisable flame effects, the team can change the colour of the flame along with the height and amount of embers that float around it. These effects can all be edited within the engine making it easy for developers to attune them to their needs. Examples of these customisable effects, along with the brazier they will be applied to, are below.
Finally, the team have been adding new assets to the new city prop set. The team have used extra details to give the impression that they have been hand created for the more opulent houses within the cities. Details such as the swirls and ornate handles within the models help solidify the impression that these pieces have been handcrafted by skilled craftsmen for richer households within the cities of Erendorn. The team continued this theme throughout the cabinets, shelves and chairs that were all completed throughout the month. The team also worked on some props that would be used within the kitchens of Erendorn, using similar techniques that can be seen on other pieces of furniture. Examples of all the pieces completed by the team over the month can be seen below.
Programming
Client
To start the month, the team got even closer to bringing combat to the World of Erendorn, work has continued in bringing together the changes made to facilitate World Combat and fixing any issues that have arisen due to the differences in requirements from Dungeon Combat. Turns, basic attacks and abilities are now working correctly. During this time, the team created an Interactable manager and InteractableData class, ready for implementing Interactable objects into the game client. This will allow us to make interactable vendors and world events, one of the final features for our next milestone.
Additionally, the team has been furthering improvements and bug fixing for the World Combat gameplay loop, streamlining Session switching between Zones and implementing new character assets. This led the team to spend time, updating how Entity selection works in World Sessions and how the Core Widgets handle switching between multiple active Combats in addition to attempting to make use of the new World Partitioned map as the Settlement and Zone 1 Level.
Finally, the team implemented changes to the Session and Combat Submanagers to facilitate Entity selection at the Session level, as well as working through the process of packaging World Partition maps in UE5. Additional work completed throughout the month by the client-side team can be seen below.
- Gave the base Manager class properties for determining and branching function based on parentage. Managers are now able to more easily determine whether they belong to World or Dungeon Sessions or Combats.
- Updated Environment Managers and any Combat Submanagers that make use of their positioning functions to use a generic Grid ID that can refer to a Room ID when belonging to a Dungeon and Combat ID when belonging to a World Session. Another step towards handling multiple World Combats that the player may not even be a participant in.
- Streamlined Core UI Session and Combat Start/End functions to fit within their respective setup and clear phases. UI now updates situationally to show/initialise or hide/clear the relevant widgets.
- Debugged and fixed any issues and differences when attempting combat regarding turns, basic attacks and ability targeting.
- Fixed issues affecting Dungeon Combat brought on by the system changes.
- Refactored a majority of Step and Stepper debug logging to improve readability when streaming game state updates.
- Added an Ability Descriptions Data Table to the Ability Stepper Template Library for easier ability logging.
- Set up dialogue manager initialisation.
- Went through several reworks of dialogue functionality to work in line with the manager.
- Updated the core widget system to account for the dialogue window.
- Some further tweaks to the layout of the vendor window.
- Cleaned up some redundant parts of the old inventory system to avoid function naming conflicts and confusion.
- Updated pathfinding and grid data for World Combat tiles. Differences in tile information and its usage in pathfinding have been unified to work in either Session type.
- Improved Combat removal function to work on individual Combats. Previously Combats were removed as part of Combat Manager's clearing. The new method allows it to persist while Combats and their Submanagers are despawned, which is necessary to allow adventures to continue after one group of enemies has been defeated.
- Implemented Combat player Victory handling, players finishing a combat encounter as the victors are now able to return to world movement after combat despawning.
- Implemented player death handling, giving the player the ability to remain as a spectator in the adventure after death or to return to the settlement.
- More development on the dialogue system, mostly tackling some persistent bugs in there.
- Visual fixes to the inventory and backpack UI.
- Updated means of checking how equipment changes are communicated between client and server, fixing an issue with equipment for the player and enabling the inspector to read updates from other players.
- Implemented Interactables into the Interactable Manager and Camera BPs.
- Interactables can now be given Assets to spawn.
- Assets now spawn in, position themselves and are clickable/hoverable.
- Added handling for VendorData messages.
- Added VendorData class.
- Added VendorData parsing function.
- Added helper function to get the world position for a specific coordinate in a zone.
- Updated the client's info on the items in the game to reflect the new updates.
- The stats panels should now correctly display if a multiplier is used.
- Added session log class for EquipChange logs.
- Concluded Combats now clear themselves properly and update Session Submanagers. This allows victorious parties to leave the combat and continue adventuring, in addition, defeated players will return cleanly to the Settlement to fight another day.
- Session switching has been improved to fully remove all Submanagers associated with a Session the player is leaving. This means players can now freely switch Sessions without taking up unnecessary memory in the process.
- Explored and began testing methods to integrate the latest World Partition level as our main gameplay map.
- Interactables now spawn and are interactable.
- Refactored context menus.
- Added a vendor asset to the client to add the first vendor to the game.
- Added Parsing functions for Vendor Objects.
- Added Parsing function for Spawned Object data.
- The vendor window now opens and correctly displays player and vendor inventories, and lists the names of both.
- Created a new item slot class for vendors so that parts, only necessary for inventory management, are excluded from the vendor and vice versa.
- Some classes now show their relevant artwork in the inventory and inspector windows.
- Added 'Combat Focusing' events to core gameplay Widgets to allow them to display information differently depending on the desired active Combat.
- Updated the usage of different Combat Submanagers in Core Widgets to ensure the correct information is being called upon when switching Combat focus.
- Transferred Entity selection events from the Combat to Session Entity Manager to allow entities to be selected in the World as opposed to in combat only and updated associated functions.
- Updated the Zone Loader to function for World Partition instead of Level Streaming.
- Created Settlement and zone 1 Nav data.
- Fixed a compression/nav data loading issue.
- Added Dungeon Locations to nav data.
- Added Event Spawn Locations to nav data.
- Added spawn code for Spawned assets.
- Started the process of moving to the new World Partition map.
- Identified issues causing GPU crashes when opening the World Partition-based map.
- Fixed live item removal on clientside for inventory management and item selling, no longer needs a restart to see changes.
- Vendors are functional, allowing buying and selling with live updates.
- Updated Entity selection to work outside of individual Combats.
- Refactored the player's move and attack queue functionality to work with Session Submanagers.
- Created Submanager utility functions for branching Session/Combat context.
- Explored and fixed build issues resulting from packaging World Partition levels.
- Fixed Merchant Location.
- Updated nav data for the settlement and Zone 1.
- Improved Mapping tools to improve XP painting times.
- Painted Zone 1 XP values.
- Added event locations to Zone 1.
- Added Activity Book session log parsing functions.
- Added NavEdit session log parsing functions.
- Added Spawned Asset session log parsing functions.
- Added NavEdit and Spawned Asset data to session data.
- Fixed Item Data Parsing.
- Reduced chance of holes in the dungeon walls.
- Polished up vendors some more both visually and programmatically.
- Prepared some visual elements for an overhaul of the character selection.
Server
The server team started the month by turning their attention to the enemies that players will encounter in the world, as well as their 'Intentions'.
Two new enemies were added to the roster:
-Juvenile Forest Druid: Similar to the player class, these druids are resistant to nature damage and have a large swathe of spells to support their allies and harass their enemies from afar.
-Fen Elf Scout: Fast moving, and with a long-range, these scouts try to keep their distance from the players, their arrows apply a poison that deals damage every turn.
Intentions are like little bolt-on bits of logic that can be put on top of their standard AI, to allow them to use abilities intelligently. Before this week intentions only existed in a very basic form, such as 'Cast smite on the person my AI is targeting, if smite is available to cast'.
Much more advanced Intentions can now be created, such as the Juvenile Forest Druid enemy, who has access to three abilities with their intentions:
-If they have mana, and there's an ally below half health, cast Heal Wounds on the lowest percentage health ally.
-After that, if they have enough mana, cast Birds of Prey on their target if they don't already have Birds of Prey on them, and the spell is available to cast.
-After that, if they have enough mana, cast Nature Bolt on their target, if they're within line of sight.
After this, time was spent cleaning up and bug fixing various parts of the server code to make it more stable and to prepare for features that are due to be implemented very soon. Also, the logs sent to the client upon disbanding/joining a party are now fixed. The server team worked on implementing and polishing the vendors, relocating and fixing the interactables to contain the correct asset ID. Additionally, the server team has been busy with World Events. The groundwork code and the very first implementation of a giant system to the game is ready for testing. This includes Berries that provide a light snack to the party, a Caged NPC who needs saving from Bandits, and a barrel containing an unreasonably high number of loot combinations.
The team were busy with a couple of important fixes that tie a lot of the larger features we've been working on together. Things started with multiple fixes for the Fen Elf Scout. When testing them it was noticed that the AI they use didn't handle them very well. They would often not move and use their bow to the best of their ability. Some time was spent bringing this logic up to speed and applying it to the other ranged enemies in the game.
Also, the Druid is the first enemy type that uses spells, and some new intentions were written to allow them to use these spells more intelligently, on the best target at the time, as well as other little bits of logic to make the Druids feel like they know what they're doing.
Some major bug fixes were also completed regarding allowing people to join open-world combat mid-way through, looking out for all those players who like to go lone wolf and get caught out. Additionally, some more minor fixes for general movement pathfinding and the first iteration of code that'll calculate what an item is worth based on its power, the level it is, what stats it's rolled, and what base item it is.
Finally, the server team has mostly been busy shoring up some of the more major bugs that have appeared as all the separate working parts of the game in the forms of dungeon combat, open world, and the settlement are all brought together. Additional work completed by the server-side team can be seen below.
- Sessions now close down when they end.
- Sessions clean up objects when they close.
- Sessions will now close after everyone disconnects or is defeated.
- If an adventure/session is invalidated then any alive player entity will be killed allowing combats to resolve in defeat before the session closes.
- If a player dies in a world session they should be sent back to the settlement.
- Gold and XP should now be saved after a dungeon/adventure completes.
- Player death in an adventure has their progress sent individually back to the settlement server to be granted to the character on the account.
- Adjusted Vendor interactables to fix some invalid information.
- Checks to see if a player is in a GameSession refactored.
- World combat area reduced in size.
- Interactables now have a text string associated with each interaction.
- WorldSessions now crash a lot less often as many game breaking bugs have been resolved.
- Player death should no longer cause a server crash when adventuring.
- DungeonSessions are now correctly given unique ids.
- Combats in the WorldSessions now Teleport the entities in the combat to the correct tile on start.
- Joining a session with an entity that has already existed in that session is handled better.
- Sessions now register the parties that exist within them.
- On world combat start entities that are added have any ongoing movements cancelled.
- Fixed a crash during loot distribution.
- Fixed a crash related to ending an adventure before getting any XP.
- Entities that die are healed when they return to the settlement.
- Players should now be removed from closed sessions.
- Enemy AI should no longer try to move or attack when they are dead.
- Enemy AI should correctly end if the combat ends or they die.
- WorldSession zone monitors should no longer try to activate subzones from players in combat.
- Stopped enemy groups spawning too close to one another or near a player spawn point.
- Summons in World Combat can now issue commands like other entities in combat.
- Fixed an issue where combat IDs were being transferred between servers with a player which was causing the new server to deny actions as it thought the entity was still in combat.
- Relocated the settlement 01 Vendor.
- Fixed Vendor Interactables to contain the correct AssetID.
- Regenerated and updated the CSV export for items.
- Fixed reconnecting entities' party associations.
- Ended combats should no longer try to add entities back into them.
- Equip actions now update the connected clients so Equipped items on each client are the same.
- Fixed a lingering Connection object which was causing some bugs.
- Added server logs to spawn Interactable objects in mid-session.
- Added server logs to remove Interactable objects mid-session.
- Added server logs to spawn Non-interactable objects mid-session.
- Added server logs to remove Non-interactable objects mid-session.
- Added server logs to change the walkable area of the zone mid-session.
- Added an example dialogue to the settlement to provide an example for the client team to work on dialogue.
- Added the ability for a dialogue to trigger a vendor message.
- Improved dialogue creation functions/process.
- Ending an adventure multiple times should no longer run the code more than once.
- Fixed some broken scaling infrastructure code that went under the radar, this should make the process of scaling up the server cap less buggy.
- Refactored world combat ending code so that clients get the correct log structure.
- Fixed subzone storage.
- Fixed subzone spawned groups information, this should make more enemy groups generate after some have been defeated.
- Refactored world combat loot distribution.
- Refactored world combat start.
- Adjusted vendors to have their data filled correctly when sent to the client.
- Adjusted vendors to have settings for what power level items they sell.
- Updated settlement/zone1 nav data to match the new map.
- Vendor items have the correct stats.
- Ranged AI will no longer prefer to smack people with their bow when in melee if they can back up and fire a ranged attack.
- Fixed a crash causing someone who quits and tries to rejoin the servers to crash because the server was expecting them on a different connection.
- Altered the rules of invisibility. Invisibility no longer has restrictions on what you can/cannot do with it, and just works like any other status effect now: It lasts for a set duration then wears off.
- Gold/XP that is being rewarded in dungeon combat will now correctly be handed to the settlement server as you rejoin, and then be rewarded to your character and saved to the database.
- Fixed an issue causing the above data to be lost by saving the 'old' version of your character before it left the settlement rather than the most up to date version of your character.
- Improved Activity Book session logs.
- Refactored progression data.
- Added Spawned Assets to session data.
- Added NavEdits to session data.
Sound Design
The sound team started the month by creating new ambience audio for the caves and dungeons of Erendorn. This new audio will be layered into previously created tracks giving new depths of field for the soundscape. Layered over the current cave as bass layers, this audio will be used at random intervals each time a new instance of the dungeon is loaded. With some pitch and volume modulation, the team will convey that the geology and structures of the room are changing as the player moves throughout. This will also give the team a lot more range to the tracks used throughout gameplay meaning audio doesn't appear to be repeated frequently. Some ethereal breaths were also created to add to the soundscape. These will be used less frequently than other pieces but will add more depth to the dungeons. All the audio created through the start of the month can be listened to below.
Towards the end of the month, the team worked on interactable objects that will reward the player when used by the player. Objects such as chests, barrels and cages were all given brand-new audio to indicate when a player has opened them, with the added layer of a reward sound bite to indicate a prize for the adventure. To keep consistency throughout the design of the game, similar audio has been used so players can always identify it. The chests and barrel sounds will become common to players, as they loot throughout the world, so a variety has been made to keep the audio fresh and exciting. Examples of all the rewarding audio can be listened to below.
Environment Art
The environment team have been focusing on the initial area of Erendorn throughout the last month. To bring more colour and variety to the foliage that scatters the landscape. The team started by creating some brand-new flowers and tall grass that can be used to expand the object available to them as they decorate the landscape. Once this new foliage was completed, the team would start decorating some smaller areas within the initial area. Examples of the tallgrass, flowers and the decorated areas within the engines can be seen below.
Throughout the latter parts of the month, the team worked on updating the modular process in which cave walls are created within the dungeons. Starting the process by creating 9 new large cave walls that can be used to random patterns to make up the cave walls. A new blueprint was created within the Unreal engine, which will be used to determine the details and textures that the walls will use. The material that is created uses the base colour of the walls to determine the texture and detail within the walls, this will take less computing power to render caves walls. Examples of the new cave walls can be seen below!
Animation
The animations team started the month by updating the movement cycles for the Forest Druid. With the newly finalised armour, the team would need to apply previous cycles to the newly created mesh. The largest updates would be needed when animating the bit of fabric that hangs down from the torso. Fabric is notoriously known as one of the more difficult elements to animate, so the team have taken extra precautions so the piece of fabric won't clip through the legs of the model when the character is running. The team would continue to iterate on these animations before implementing them into the engine. Examples of Druid's animations can be seen below.
Throughout the middle part of the month, the team worked on animations for some of the enemies adventurers may face within Erendorn. The team has created multiple attacks for the Fen Elf and the Droval. Adding extra details, our animator has shown the tension of the bow in the ranged attack, giving the animation a more grounded feel. This has been conveyed by the animation showing the Elf pushing the bow forward as the archers loose their arrows. Similar techniques have been employed to show the strength that the Droval's pocess when attacking. Anticipation is used as both the enemies pull back their weapons ready to attack, while exaggeration has been used to give the enemies easily identifiable movements. Both of these animation principles have been put to good use to bring these opponents to life. Examples of the attack animations for both the Fen Elf and the Droval can be seen below.
The team have also completed animations for those enemies or characters that are unfortunate enough to get stunned while fighting. Along with the UI that will convey to the player status effects, such as being stunned or poisoned, these animations will be vital in giving the player feedback. Exaggeration has also been used in these animations so players will be able to identify quickly when their character or their enemy is the one stunned. The team completed the stunned animations for both the Skeleton Enemy and the Human Knight and implemented them into the engine. Examples of these movement cycles can be seen below.
Finally, the team worked on the Zentragal rig and skeleton. With a new mesh created with the armour added the team had the opportunity to edit the model to suit the updated needs of the Zentragal. Moving the lower joint down to the back of each of the Zentragal's legs will keep the leg straight as the enemy walks around. The team have also moved the primary joint within the legs to the centre of the arachnid's abdomen, this will make the skeleton a lot less complex when viewing it at a glance. With the rig and skeleton updated, it was time to implement the changes onto the new model. The team have also started tweaking previously created animations to fit with this new mesh, tweaking them if need be due to clipping issues. The team will continue to work on the Zentragal's new mesh throughout the next month. Examples of the new mesh and rig, combined with animations can be seen below.
Visual Effects
To start the month, the visual effects team worked on combining previously created visual effects with their corresponding animations within the engine. The visual from this effort gives us a good visual representation of these animations as they would look once they are applied to gameplay. Some complex techniques have been used to complete these abilities. Such as the flairs of the Boar's charge that seemingly bounced off the floor. Effects like these will help make the effects feel more grounded and realistic during gameplay. Examples of the combined animations and effects are below.
The team would continue these complex effects as they tackle effects that will be used in the open world and dungeons. Effects like these will be used throughout gameplay to indicate to a player when certain items are interactable. The team would work on improving and polishing these visuals through to the end of the month. After some design tweaks and changes, the team aimed to make the effects for interactables consistent. Using similar colours and subtle movements throughout all of the effects will aid new players greatly when identifying the object that can be interacted with. These effects are a work in progress and will be iterated on through the coming weeks. Examples of all effects created for open-world intractables can be seen below.
That’s it for this month’s devlog, but have you seen our monthly roundup of August yet?!