Dev Log 2


Introduction

This dev log covers the 2nd sprint for the development of Ethereal Fortuna, which started on the 24th of June and ended on the 10th July. This dev log will cover the majority of the production part of the development process for Ethereal Fortuna.


Harry

26th June: Enemies now drop their equipped weapon on death. Camera spline created for the main menu which will transport the player around the specified spline to showcase the world whilst in the main menu. Rolling implemented using actor component which is added to both enemies and players, when rolling the character is invincible to damage during part of the animation. New font for UI added and changed all other texts to use this font. Juiced some of the UI elements in various menus like main menu and pause menu. Fixed an oversight with the inventory system by fixing the durability to be properly decreased on use for items. UI update for displaying durability of weapons in the inventory where the text is now more inline with the centre of the item widget.

27th June: Created actor components for shared actions between the player and enemies like light attack, heavy attack etc. This allows for the avoidance of repeated code that is basically the exact same in logic and appearance and will allow for easy alteration to these actions. Debug enemy action for testing. Holstering actor component which allows enemies to holster and unholster their weapon and weapons now also have parents (either the player or the enemy) so who is holding it which will help determine who damage should be applied to. Greataxe heavy attack implemented. Enemies rolling with debug action. Spear heavy attack, and also relevant notifies for all previous implemented heavy attacks. Death screen created, player death implemented, loading director for loading saved data so not doing it in the level blueprint which will be easier to handle when using the finished level, loading blur on main menu so can't see the player being teleported as easily to the first camera spline location. Inventory no longer pauses the game. Created a rotatable render widget, player render now captures every frame as default and captures on movement. This rotatable render widget allows the rotation of the specified render using the material of the image presented when the player clicks on the widget and then moves their mouse around. This is present only in the inventory at this point but the widget can have different render target materials applied to it. Loading screen widget created and also created a weapon render which the rotatable render widget can use. Randomise the weapon mesh for the render. Rotatable render also now present in the loading screen. Also now passively rotating the render in the rotatable render widget.

28th June: Loading screen now displayed when going from the main menu to the game and then also from the game to the main menu but not fully working at this point. Loading screen from death screen but loading screen animation not playing every single time at this point. Created an NPC actor and also began working on NPC interaction. Also changed the "interactingtype" of various actors to be more easily readable like "PickupWeapon" to "Pickup Weapon". New button input for cancelling interaction with NPCs. Wrap text on NPC dialogue box, cancel interaction shown as another widget when interacting with NPCs as well. Changed loading screen font.

29th June: Loading screen now actually works as intended for this point still with some bugs though, but it now works as intended after the first time it is created as the reference to the loading screen widget was wrong the whole time. Dialogue for NPCs now actually shows as if they are talking with characters showing one after another with a delay. Camera spline update with a new seperate actor for managing the camera spline instead of using the level blueprint which will be easier to use when using the completed level. NPC dialogue also stops slightly longer if there is a full stop to show the end of a sentence easier. Changed colours on the interact menu and interact options menu so not as washed out anymore. Loading screen hint / tip text now works the same as the NPC dialogue text showing character by character. Increased rolling animation play rate and the play rate is now also relative to the weight of the player depending on set bounds so the higher the weight of the player the slower they roll. Can no longer store a weapon if you have a weapon of the same type stored in your inventory. Fixed duplication bug with interacting with a weapon when overlapping multiple weapons by adding a check to see that the selected interactable is in fact valid before doing the selected action which stops the duplication of the equipped weapon from happening.

30th June: Implemented evading which replaces rolling when the player is locked onto an enemy. Evading is a strafe in the player's most extreme direction of movement but only in the 4 cardinal directions, the player is also invincible during a part of the evading animation. Fixed the issue with the greatswords position since it's relative rotation and location were being reset as an edge case for changing the relative location and rotation for ranged weapons so now the greatsword uses the correct rotation and location. Questing system started and associated UI created. NPCs now also have a struct and associated data table which will control what dialogue they say and also what quests they can give to the player.

July 1st: Created sound classes and sound mixes for the different categories of sound that can be changed in the options menus, also implemented the functionality for changing the volume of the specified sound class and sound mix when changing the appropriate value of the slider in the options menus. Random death phrase added in player death screen so not always saying "You died" anymore. Also altered some logic for the loading screen delay.

July 2nd: Loading screen now randomly renders between player and weapon each time it is displayed. Identified an issue with the player render's weapon unholstered position which can only be fixed by removing it from the world and adding it back. Quest log icon added to the HUD. Item use update. Created an item use actor component which will handle the different item use functions instead of doing them directly in the player. Progression item functionality added in this actor component and struct and data table created for progression items. When using a progression it adds the associated amount of XP to the player's current XP and then updates it's quantity or removes it from the player's inventory. Created multiple different shard progression items which have differing amounts of XP to give. Removed the specific mesh for full health potions and instead began using dynamic material instances on runtime to change the colour of each different healing item and also shard items. Also the shard items have differing sizes depending on the item by changing the 3D scale of the item. Overall item size increase. New type of healing items implemented: regen healing items which regen an amount of health over a set amount of time. Item widget name now wraps text properly by making use of a function that splits the item name by spaces so can still use camelcase in the data tables, used this thread and code snippet for help in implementing this: https://forums.unrealengine.com/t/add-spaces-to-string-using-its-capital-upper-case-letters/109339/2, https://blueprintue.com/render/nxmrxqnl/.

July 3rd: Replaced creating dynamic material instances for items at runtime with using material instances for each item instead which is probably a performance upgrade. Fixed an issue with spawning in a player render when there was already one in the world which is no longer done. Saving player quests and associated status of each quest and then also loading these in. Fixed an issue with the weapon render material which needed to be changed from a colour to a linear colour. Clamped the pitch for the camera rotation when locked on so changes how the camera reacts when the player is very close to the locked on enemy. Fixed an issue with the crosshair overlapping with the weather change boxes that was triggering the function. Cooldown layout for special attacks started. Interact system update which fixes a massive issue with interacting with multiple interactables at once. This fix was done by making the interact raycast a multi box trace by camera channel and then changing various collision presets in various components of interactables to not interact with the camera channel so that now the raycast will only detect the main mesh of each interactable correctly choosing the looked at interactable instead of being blocked by the interact collision of interactables.

July 4th: Removed some redundant code for the interact system which further fixed interacting with multiple different interactables at once. Also now when an interactable is removed from the player's overlap through an interact action then we now check if there are other overlapping interactables and set the selected interactable to be the first of the array which fixes the weird issue with the interact widget displaying none and having to leave the interact collision and re-enter before being able to interact again. Small update to changing the position of ranged weapons when aiming (which was later removed) using a timeline to lerp the position instead of immediately setting it. Added a mesh for the checkpoints and created a material and material instance for the checkpoints. Massive update to the saving and loading screen: now using a struct for save data and then also cleaned up the code for loading and saving by now using a macro which will make it easier to add other data to save and load. Clicking New Game now loads the data but then also loads data from the first row of the base save data table that contains all the information that is usually saved but with preset values of what the player should have when they start the game. Also after setting the player inventory and equipped weapon the weapon is now set to have the max durability of the weapon when starting a new game. Additionally now when saving data if there is no recent checkpoint then the starter checkpoint is set as the most recent checkpoint for saving purposes thereby allowing the player to exit to the main menu and save even if they have not actually saved previously at a checkpoint yet.

July 5th: Saving and loading ammo amounts for arrows and bullets for the player implemented and working. Fixed the loading screen which now removes all widgets from the viewport and now works as intended every time since we now create a new loading screen each time we need one and set that to be the loading screen reference so might be ever slightly more performance heavy but garbage collection should fix any memory issues. Player defence now implemented and scaling implemented for this, also saving and loading defence implemented. Enemy types in data table improved with new variable for equipable weapons that the enemy can have and then when the enemy spawns a random name is chosen from the array of equipable weapon names that then becomes the weapon that they are wielding.

July 6th: Enemy ranged combat implemented by making use of the ranged combat in the player and changing them to be 4 different custom events: start aiming ranged weapon, stop aiming ranged weapon, start charging ranged weapon and stop charging ranged weapon. This will allow easy and fast implementation of enemy ranged combat when implementing the enemy AI to the project. Created a new animation blueprint specifically for enemies but turns out this was not needed and the issue was with another part of the code however kept this as it keeps the animation blueprints cleaner and more specific since there are fewer states in enemies than players. No longer lerping position and rotation of bow when aiming and stopped aiming. Attacking now interrupts charging and aiming a ranged weapon for both the player and enemies so characters can now be staggered when aiming / charging ranged weapon by attacking / being attacked. Also possibly fixed the enemy weapon detachment issue since no longer unholstering the weapon in the construction script of enemies which may have fixed the weird detachment issue for enemy weapons. Player death update using 4 new animation montages for the 4 cardinal directions which are randomly selected before playing and then also now disabling all input whilst this is playing and then enabling input again afterwards. Stops the anim montage when leaving the death screen so that the animation stops since all 4 death animations have auto blend out disabled to keep the player on the floor.

July 7th: Implemented L System for Tree generation using the following tutorials on Youtube: https://www.youtube.com/watch?v=0o7T6Pu0WJs, https://www.youtube.com/watch?v=6SbsUXodEus, https://www.youtube.com/watch?v=DWHV-eSOA1o, https://www.youtube.com/watch?v=IqtWU8BlUxA. Also implemented another tree generator that isn't using L Systems but follows these tutorials: https://www.youtube.com/watch?v=H4SaiOwYwQY, https://www.youtube.com/watch?v=2K_W5K9yLsMhttps://www.youtube.com/watch?v=d3pzR0mArFUhttps://www.youtube.com/watch?v=yebB5-Tq-wA

July 8th: Implemented physical animation, creating a new physical animation profile for running out of stamina that makes the player look exhausted when they run out of stamina. The physical animation is controlled in a specific physical animation actor component. Implemented rolling and evading decreasing stamina and also fixed an issue with enemies automatically being in the "tired" physical animation state. Created a material for the L System trees.

July 9th: When updating the attacking bool we know also update the weapon hitbox to be inactive if setting attacking false which fixes various issues with the weapon hitbox not being turned off. The player render now correctly shows the player's weapon in the loading screen but the position of the weapon in the player render is slightly off. Fixed the NPCs to not be automatically in the out of stamina physical animation profile.

July 10th: Can no longer add a quest to the quest log from an NPC if the player already has that quest. Added the landscape created by the animators to the project. Created a quest tracker actor that as of this point will track when the player picks up a weapon, picks up an item or kills an enemy since the only quests right now are quests for picking up a certain amount of weapons and items, and killing a certain amount of enemies. But this should be modular enough to be able to implement other quests and the tracking of these quests. Quests in structs now make use of various enumerators to keep creating quests modular. Quests now give a specified amount of XP to the player on completion. Implemented a new stat for the player: damage multiplier which scales with the player level effecting how much damage they do to enemies so the higher the player's level the more damage they will do gradually increasing with each level.

Ben

June 26th: Fixed combo attacks playing in the wrong order. Needed to set the attack index to be zero if the attack does not get interrupted. Fixed weapon break causing attacks to fail. Now sets attacking false, and attack index 0. I added the attacks with animation notifiers to the spear, Great Axe, and fists. I then updated the VFX for the spear by adding a lightning effect to the dash. I began implementing the blocking system, it now has animations.

June 27th: I turned blocking into a component to be shared with the enemy and player along with the Take Damage component. I added parrying into the game; if you take damage within 0.3 seconds of beginning a block, you will parry the attack. Parrying interrupts the attackers animation and negates all damage that would have been taken. If you get hit with an attack whilst blocking you will reduce the damage of the attack significantly. Had to make parrying disable the hit box of the attack as well. 
Fixed a bug after sword special attack causing player to be unable to attack anymore.

June 30th: Added some audio into the game. Added swooshing sound effects for all of the melee weapons when the swing, and I added sound effects to the dagger and spear's special moves, which is a lightning sound effect. 

July1st: I continued adding sound effects, today I focused on hit effects for the melee weapons. It combines a blood splash effect and also a metal clang effect. I also did some bug fixing on light attacks breaking and fixed roll attack cancel bug. 

July 3rd: Added Great sword special and reworked some special attacks. Now created a "Basic Special" macro, which can be reused now by multiple weapons that consist of only a special animation as they're special attack. Uses the new data table row "special attack cooldown" and a map on name. 

July 4th: Great Axe ability added. Great axe ability puts player into a mode where they are no longer staggered by attacks, have higher defence, and use no stamina when attacking. Still needs a cooldown, special effects, and an "end"

July 10th: Added a cooldown a special effects to the Great Axe


Charlie

June 26th: I started working on the Enemy's sight sense, doing this I changed the senses configuration to sense sight within the Set State as passive function and I also made changes to the auto success range and max age to give it a more realistic feel. Once testing this I found out that it didn't work so I changed the detection by affiliation to fix this. 

June 27th: I started to work on the hearing sense of the enemy AI and i done this a very similar way that i done the sight as i created another array element on the sense configuration, then added an AI hearing configuration with the implementation as hearing and set the range and max age to give it a realist feel to the enemy. To test this I needed to assign a key to make noise in the blueprint to test whether the AI would react to noise and they did.

June 28th: Today i started to make the AI react to damage taken and track where it came from and this was very similar to to the other two by setting up a configuration for damage within the AI perception, and setting the max age, i also had to set up a keybind within the blueprint to test this and make sure it works and it does.

July 1st: I started working on making the AI respond to the player when it senses the player. I set up some nodes within the AI controller and set up a few functions that will allow this to happen. I also set up an enumeration that includes senses. To test it I made it print a string when it sensed me and it worked. I made it so the when the AI senses the player they will start to attack the player and i done this by making functions and setting the state as attacking but this didn't work as they wouldn't  chase the player player and just swing at them so i ended up fixing this and testing it again and it world so i removed the string print as i know it works.

July 2nd: Next i started working on the investigating for the AI to make it feel realistic so it would respond to sound and investigate where it came from, this was made by setting up a function for it within the AI controller and made a new state that sets the AI as investigate and they will grab the location of where the sound came from and jog over to it, this worked so i moved on to making it so if the AI would attack the player if they seen them mid investigating and the state would change. I made the change so if you dealt damage to the AI but they didn't see you they would still attack as a response to it.

July 3rd: After i finished the states and how the AI reacts to the player in some situations i moved onto the environment query systems, today i set up a strafe animation blend space and set up the direction so it it matches the way the animation is set up, i also set it up so while strafing the enemy will always be looking and forecasting on the player.

July 4th: I set up an OnCircle EQS and set it up so it would be a decent distance from the play so they would walk from point to point when strafing before attacking the player and to do this i set up an EQS context that got the player location and made it so when the AI changed state to attack the player they would run to the  best possible point within the circle to start strafing.

July 5th: I wanted it so the AI would strafe and attack after a set amount of seconds, so i had to make it so it was linked with the attack branch within the behavior tree so i therefore made a strafe sequence branch within the behavior tree coming off the combate state, i put a focus target coming off then a set movement speed, run an EQS query then move to and wait. I also found out that after doing this they would still just attack so i had to put a cool down on the attack sequence. 

July 8th: I wanted to make it so that when the AI was low on health they would run away out of the player sight and try and heal back up to at least half health and come back to attack, for this i used a grid EQS that would find places that the player can't see and make them available for the AI to run to the opposite unavailable. I then had to input this into the behavior tree so that it could switch from another state fully functionally.i then also had to set up the healing within the behavior tree while out of the sight of the player and while the state has temporarily changed.

Art and Animators

Get Ethereal Fortuna

Leave a comment

Log in with itch.io to leave a comment.