Dev Log 1


Introduction

This development log is an overview of the development of Ethereal Fortuna from this past sprint. This past sprint was from approximately the 27th May to the 19th June. However the first week of the sprint was ideation and actually pitching the game idea and so the game only entered production/prototyping on the 5th June.

After pitching the idea for the game and getting this idea approved we then created a git repository for the project and then also began using GitHub desktop as version control for the project. We then began prototyping the various features of the game outlined in the GDD and TDD that we created after pitching the game idea using the information from the pitch presentation of the game and the various ideas that were combined for this game idea. Not only does the use of GitHub desktop allow us to have good version control for the project but it also gives a valid and easy to view timeline of the development of the game. During the first week of this sprint we completed the GDD completely and began the process of completing the TDD which will be added to throughout the coming sprints.

Harry

5th June: Began by setting up the basic folders for the project and also creating a enemy blueprint that at this point was just a copy of the template third person character blueprint with removed input code. Also setup the basic structs and data tables for weapons that will be implemented and also implemented some asset packs - infinity blade weapons asset package, dynamic weather and sky system and a combat animations package. Also on this day I created various UI widgets including: pause and main menus, inventory widget with some functionality at this point, the HUD with 2 progress bars for health and stamina. I created a rudimentary player levelling system with XP but this wouldn't be properly implemented for some time. Furthermore I created functionality for interacting with items to pick them up, interacting with weapons with a choices UI for weapons giving the player the option to swap or store the weapon if they already have a weapon equipped, there is also an interact list of what the player can interact with depending on what they are overlapping with.

6th June: Updating the enemy info and stats based on their name using the enemy info data table. Improved the visual clarity of the weapon choices UI. Can now store weapons in the inventory similarly to items. Quantity of weapons which will always be 1. Populated more fields in the weapons info by adding more weapons and also began outlining the structure for implementing ranged weapons. Holstering and un-holstering weapons was implemented as well. Equipped weapon icon in the inventory widget. Created the structures for healing items so an easily add more healing items in the future and then also implemented functionality for using items which is decently modular and allows for more items in the future, using items is done by clicking on the item in the inventory. Weapon choices inside the inventory when clicking on a weapon in the inventory. Weight system for weapons that effect the player's movement speed.

7th June: Created a child of the player which is the player render which will work to show the "player" in the inventory with all of the same characteristics like the equipped weapon. Also changed how weapons work with the player for equipping them. Can now drop the equipped weapon from the inventory. Weapon physics when they are not equipped. Commenting. Upgraded the interacting system by making use of the line of sight of the camera to also select the interactable to interact with and then also updating their outline material to highlight them to the player.

8th June: Pause menu actually pauses the game now. Using input actions for the previously implemented features instead of debug keys. Updated camera collision with weapons. HUD update with inventory icon and equipped weapon icon. Updated text boxes in various menus to be more modular for input keys and such. Started prototyping the enemy lock on system. Implemented enemies having equipped weapons as well. Enemies can now die, when they die the locked on enemy is forcibly switched. Also started prototyping weapon durability  which would not be fully implemented for more than a week. New animations when the player is locked on to an enemy. Started prototyping ranged weapons and projectiles creating new data tables for projectiles and ranged weapons specifically, projectiles stick into world objects and are fired when the player is "aiming". Camera changes when the player starts and stops aiming for a more other the shoulder position and closer position to the player. Bow model implemented. New animations for aiming implemented with aim offset.

9th June: Changing weapon position whilst aiming for ranged weapons. Charging the bow with animations as well and also modifying the speed of the shot projectile based on charge percentage. Restricted camera movement whilst aiming. FOV change whilst aiming so starts zooming in effect whilst charging ranged weapon. Projectile fires in aimed direction and with the correct rotation. Projectiles can now hit enemies. Created actor component for storing ammo and populated with some basic functions for managing ammo.

10th June: Resized spear static mesh at smaller build scale and created spear skeletal mesh and resources. Change weapon relative location of the skeletal mesh for the different weapons. Update holstered and un-holstered position of some weapons in player. Visual arrow representation when charging bow which moves with the player's hand as they "draw" the bowstring back. Using traces instead of overlap events for projectile hit detection. Projectiles attach to closest hit bone of hit enemy. Made terminology for aiming and charging ranged weapons more modular for different ranged weapons like the spear. Created testing actor called moving target which moves a certain distance and then switches direction. Created more animations for the bow aiming, fully taut aiming up and fully taut aiming down. Created aim offset and animations for aiming and charging spear. Player render no longer renders every frame and only renders when the inventory is refreshed increasing frame rate. Cleaned and organised player blueprints into different graphs. Changed pivot of spear mesh. Fixed some issues with lock on system and made interact collision larger for weapons.

11th June: Cleaned and organised ranged combat code and logic. Added camera shake if the player charges the ranged weapon longer than 4 seconds after it is fully charged. Lock on system update for camera and overall feel making use of this tutorial for some of the update: https://youtu.be/c65W1AxMkZg. Inventory item description formatting in struct and also added to the inventory item widget so when player hovers over inventory item they are given a brief description of the item. Can no longer fire ranged weapon if you don't have ammo for it, and when firing decreases ammo by 1, the spear is not effected by this as you will only have 1 anyway. Implemented pistol aim offset and associated animations with new animation state as well, also implemented pistol model - sketchfab:https://sketchfab.com/3d-models/pmm-makarovs-pistol-modernized-661559377a64492bb... -  and bullet model - sketchfab:https://sketchfab.com/3d-models/9mm-bullet-model-aa2b95d9bd1049518cda00763d0a9f8.... The projectile's collision now changes based on the bounds of the static mesh of the projectile but not fully working at this point. Bullets are fired at full speed without needing charging from pistol. Updating holstered and un-holstered pistol location and rotations.

12th June: Changed projectile collision to capsule collision so extents and size of the collision is working fully now. Another lock  on system update in conjunction with the dagger special attack for forcing lock on and forcing unlocking. Started learning Niagara effects and system in UE and implemented some very basic Niagara effects for projectiles when they are moving. Also created a Niagara effect and system for shooting the pistol and for the bullet hitting an object in the world.

13th June: Began prototyping the crosshair for aiming. Created crosshair widget positioned in world. Added delay to turning off the projectile hit trace after hitting an object fixing some hit detection errors. Commented ranged combat code. Fixed some issues with dropping weapons whilst attacking. 

14th June: Commented more projectile. Enemy ragdoll small update. Started prototyping stamina system decreasing stamina after attacking then with delay to start regenerating stamina. Small interacting update so can only highlight interactables that the player is overlapping with. Enemy invincibility after taking damage until stagger animation completed or interrupted. Another projectiles attaching update and fix. Projectile damage update where damage is calculated based on speed out of max possible speed for the projectile so only fully charged projectiles have the maximum damage of the projectile. Small update to arrow trail Niagara effect.

15th June: Specific stamina usage based on weapon. Began working on persistent data and saving systems. Load saved data. Store player's inventory, equipped weapon in text file. Saving game when player quits to main menu or quits the game entirely. Save data is loaded when level starts (right now is just the development level). Started prototyping checkpoints, created checkpoint actor which the player can save the game at by interacting with them. Created checkpoint manager that keeps track of most recent checkpoint interacted with. Main menu continue takes player to most recent checkpoint. Main menu new game takes player to the start checkpoint outlined in checkpoint manager. If no checkpoints ever activated player cannot continue game and must click new game. Created small Niagara effect for checkpoints.

16th June: Checkpoint spawn location for player. Various construction script updates and changes so setting info of certain actors is in construction script instead of on begin play. XP and levelling system update. Enemy health bar widget created. Scaling health and defence stat based on enemy level. Defence is a new stat that effects the damage enemies take. Can add XP to player on kill for enemies with base XP to give outlined in enemy data table. Level of enemies can be set when they are spawned so can have enemies scaling to the level of the player. Enemy health bar functionality implemented. Revamped the entire development level to more easily showcase the different features that are being developed and prototyped. New event text in the HUD that displays text based on the player's actions e.g. dropped *insert weapon name* etc. Fixed the crosshair overlapping enemies and simplified it so aiming is much better and easier to do now. Random chance for projectiles to break on hit which changes based on the projectile itself, e.g. arrows have a 50/50 chance whereas bullets have a 100 chance. Weapon icons, inventory icon, item icons which were downloaded from https://game-icons.net.

17th June: Weapon durability update where a weapon's durability is decreased by 1 each time it hits an enemy. When the durability of a weapon is 0 or less the player is forcibly stopped from attacking and the weapon becomes broke. The broke weapon is dropped and destroyed. Created a progress bar in the HUD to show the equipped weapon's durability. Added a scythe model from sketchfab: https://sketchfab.com/3d-models/scythe-da037304a1a14a6caacf98f88be8b52b. Changed scythe un-holstered position in player. XP and player levelling update so enemies actually give the correct amount of XP to the player and the player can now level up from this XP increasing their health and stamina but this can be added onto in the future to increase other stats or such. Started prototyping storing the durability of weapons in the inventory item widget for weapons so the durability of a weapon is persistent between equipped, the world and stored in the inventory. Revamped the inventory item widget colours and the inventory colours. Categorised all functions within various interfaces for easier viewing.

18th June: Small update for the interact menu which is now attached to the camera for easier player viewing and so it doesn't get blocked by any environmental factors. Imported health potion mesh from sketchfab: https://sketchfab.com/3d-models/handpainted-potion-65a7a0283dac4e66ae4eddc688ff2..., shard mesh from sketchfab: https://sketchfab.com/3d-models/gray-crystal-9e765b2a852e4463b7de5b8f9a504b15 and also created a different material for the full heal potion which is green instead of red and uses the same mesh as the normal health potion. Implemented item physics. Updated the inventory to store the quantity as a value of the name key of the item or weapon but the quantity for weapons is actually the durability of the weapon so the durability of weapons is now stored between equipped weapons, stored weapons and weapons in the world.

19th June: The collisions for projectiles is now modular to the shape and size of the projectile so the overall hit detection for projectiles is now more accurate. The player level and current xp / the xp to level is now shown in the HUD. The player's health, stamina and max stats for these 2 stats is now also saved and loaded properly.  Fixed an visual issue where when opening the inventory after refreshing the inventory by completing an action that changed the inventory caused it to double the contents. Attempted to create a ribbon niagara system and effect for the arrow to show a trail of wind which is being developed but is on hold for now, Created a modular text widget for input keys for the controls menu in the main and pause menus and made all inputs player mappable (to attempt to create changable keys for player input in the future) so that the name of the input action and associated key is easily shown for each input action in the controls menu.

20th June: Created a modular credits menu with text that is easily changeable. Fixed the arrow trail a little more but still needs more development. Created a options menu in the main and pause menus that allows the player to change a variety of settings and then apply these changes that are saved to the game settings, the options include: resolution, resolution preset, mouse sensitivity, audio sliders for various sound classes ( not fully functional as of yet for actually changing sound class volumes but this will come later in development), capping the FPS to preset targets, texture quality, Vsync, and motion blur. Created a volume that changes the weather to a specified weather preset when the player overlaps with it and then sets the weather back to the preset is was before when the player stops overlapping with it which can be used throughout the level to change the weather to specific presets when the player reaches certain area, I then also placed these volumes in the playground / development level for each weather preset for testing.

Ben

5th June:  I started working on the Player character, specifically the movement and combat. During this, I added a simple sprint and dash function; the sprinting increases the players max walk speed and the dash multiplies the players current velocity by a flat amount. I then implemented a modular combat system with animations. All of the weapons are part of a data table that contains the animation info unique to each weapon. When the player attacks, we get the data table row of the selected weapon and play its specific attack depending on which combo the player is currently on (3 combo system).  

6th June: Today I added notifiers to the currently used combat animations in order to precisely trigger the traces that are being used to generate hits. I also created functionality for enemies being hit and dying, when hit they will become invincible for a small amount of time and when going below or equal to 0 health, they will ragdoll. I also created a enemy data table so we can have different types of enemies and created the Blueprint Interface that the enemies will use.

8th June: Today I began working on the special attack system, this functions very similarly to the basic attack system.

9th June: I changed the hitbox system to become traces instead, as using collision boxes for overlaps can cause issues with varying frame rates, whereas traces are much more consistent. Because of this, I ended up needing to change the position of the traces of the weapons, but that wasn't too difficult. I also needed to make a bug fix for the holstering system, which was changing the position of the weapon unintentionally, causing some wacky hitboxes. 

10th June: Focused on adding some more weapons, today specifically the spear. I added the model from Sketchfab but I was having trouble with scaling it and also merging all of the objects together. Eventually got it to work and I added the necessary data to the data table. Going to begin working on special attacks.

11th June: Today I implemented the basic functionality of the spear special ability. It uses the ranged weapon system that Harry has implemented. The spear uses itself as its ammunition, and the player throws the spear. This is the special attack on the spear. When the player is empty handed and tries to special attack, a check will be ran to see if the spear has been thrown within a few seconds. If it has, then the player will dash towards the hit position of the spear, damaging any enemies that they hit on the way. 

12th June: The spear will now spawn in a weapon parent based on itself when it stops moving and de-spawns the projectile. This is so the player can pick up the spear again after they have thrown it. 

13th June: The dagger has been implemented into the game with all of its data table stuff. I also added its special ability, which was a bit of a pain but it works now. The dagger uses the lock on system that Harry implemented, and will teleport behind the selected enemy and deal a massive amount of damage to them. Before this however there is a trace behind the enemy to see if there is anything that would block the player like an actor. If there is, we do the same check in front of the enemy and teleport there. If the enemy is fully blocked, the dash isn't done but the damage is still dealt. 

I also began experimenting a little with Niagara, and I added a little spell to the game that lacks functionality but has a cool effect!

14th June: Added a charge up effect to the "Purple" spell I started yesterday. I also added more legitimacy to this spell thing; I added a spell component with a cooldown mechanic, began working on the staff special, added the staff model with skeleton, and tidied up the special attack region of the event graph by collapsing all of them into macros. Makes it much easier to read!

15th June: Mainly bug fixing stuff today. Special attack was setting attacking to be always true so looked into fixing that. Works properly now. Also fixed bug where if the spear didn't hit anything and the player tried to use the dash move, it would take the player to the last location hit. Instead now, it will only set the dash ability to be available if there was a recent hit recorded by the ranged projectile.

17th June: Updated data tables with spells + added staff to the data table. Added Spell Storage component to ranged projectile BP. Added scripts to change active spell. Added scripts to find the spell selected in ranged projectile when staff is equipped. 

Added Spell projectiles + projectile parent. overall advanced spells

Spells, (currently only red) have a charge up Niagara that will play

18th June: Added functions to BPI player for starting the charge effect on the staff. Added a particle effect for blue

19th June. Lighting effect added to system of red. Worked on some more Niagara effect stuff Added animations for the scythe, found a problem with melee attacking in general though. 3rd attack animation will never go through so I've gotta fix that. Changed rotation of the scythe holster because it looked goofy. 

20th June: VFX for dagger special is complete. It no longer instantly teleports and kills, plays a wind up animation before attacking. I added a new Greatsword weapon with models and did its animations. 

Charlie


I started my project by making sure i had all the animations in the project and alongside all the assets needed for myself going forward, this involves the weapons, the blend spaces and many more.

5th-11th June: After sorting my assets i started by making an enemy blueprint that i can work in going forward, this was names BP_Enemy_Base, the first action in the blueprint i set up was a chase player event that included that included an AI move to and a reference to ‘self’ and a get player character node to help that work. To make sure this worked i had to include a nav mesh bounds volume that allocated the space the enemy ai can run in.

Next i set up an attack custom event with a play montage node attached to it with the mesh attached and selected the asset that is needed to play then attached that attack node into chase player.  

Behavior trees:

I started by creating the enemy ais behavior tree and blackboard. I first started by attaching a root then a selector to the tree. Then I attached the move task to it. I then inserted a wait and play animation task to the BT. I created a self actor key and an attack target key. I then created an AIC controller with an event on the possess node to start it and a few other nodes that run the behavior tree as shown below.

After this i created a behavior tree task called default attack with a cast to bp player base and the attack event attached to it , i then inserted the task into the behavior tree so the enemy ai is able to attack the player. Below is what the behavior tree looked like afterwards

After testing this i found out that if the player moved that the ai wouldn't focus so i had to make a focus target task so that the ai will refocus on the target every time the sequence started.

Having a wield sword animation for the melee AI meant i had to make a wield sword event spawn actor for the sword and an attach actor to component inputting the socket i wanted it to attach to with the event play also being attached to the wield sword custom event.as i wanted the AI to wield the sword i needed to add it to the behavior tree by making a wield sword task that casted to the blueprint nd included the custom event and included that into the behavior tree.

However after making this i ran into the problem that i the player ran away the ai may run backwards while facing forwards and wouldn't lose focus so i had to make a clear focus task to make it so the enemy will temporarily lose focus while getting back in line of sight of the player then refocus target .

Having a wield sword animation for the melee AI meant i had to make a wield sword event spawn actor for the sword and an attach actor to component inputting the socket i wanted it to attach to with the event play also being attached to the wield sword custom event.as i wanted the AI to wield the sword i needed to add it to the behavior tree by making a wield sword task that casted to the blueprint nd included the custom event and included that into the behavior tree i therefore needed to make a decorator to check if the AI is weiding the weapon and this included a perform condition check on the AI, finally creating an ‘is wielding sword’variable in the enemy blueprint and setting it, fixed it once i added the decorator to the behavior tree. The image below is the final outcome.


12th- 15th June: I next started working on the patrolling and states of the enemy AI. I started f by making a patrol route blueprint that would use a spline to allow the Enemy Ai to walk along once they're linked and attached to each other through the editor menu and a created on my behavior tree.

Within the blueprint for the patrol route I started off by making a custom event labeled ‘IncrementPatrolRoute’ and created two integer variables called ‘PatrolIndex’ and ‘Direction’ and within the ‘Direction’ value range I set it to ‘-1’ and ‘1’. After setting and getting the ‘PatrolIndex’ and ‘Direction’ and getting the number of spine points and connecting it to the the patrol route and checking the condition with branches to make sure the once the AI reaches the end of the spine they will turn around till they reach the other end and carry on that cycle.

 

I then had to make a function to get the spline point in the world, I named this ‘GetSplinePointAsWorldPosition’ . I therefore had to attach a return node to the function node. However, I also had to add a get location at spline point and get both the ‘PatrolRoute’ and ‘PatrolIndex’ and attack them to the target and point index on the get location at the spline point node and change the coordinate space to world. Once that was all sorted I attached the return value on the return node. This can be seen in the image below.

After this was done I went back into the Enemy base blueprint and made a new variable that was connected to the patrol route blueprint and made that visible.

Back within the behavior tree I made a task that was to help the AI move along the patrol point and a blueprint interface function that was tasked with getting the patrol route for the enemy base blueprint to allow the enemy to walk along it. Back within the enemy base blueprint I was then able to access the interface I just made and connect the patrol route to it and move on.

I've added a passive branch to my behavior tree with a patrol route task attached to it that allows the AI to move along, i have tested this and the enemy AI moves along patrol route until player is in sight then changes focus and chases the player.

16th june: I have created an enumeration that allows the enemy AI to differentiate between the different speeds that they posses ranging from idling to sprinting, i also made a new behavior task that sets the movement speed of the enemy AI so it changes speed depending on what state of action it is in, finally i have made a decorator that  i have attached to the passive state sequence that performs a condition check to see if the AI is on the patrol route.

 17th june: I have created more Enmuerations that hold and control the states that the AI will be in, I have also made a state key within the blackboard that I can reference to. To finish off for the day I created a blackboard based condition that's attached to the combate state selector within the behavior tree with the key value set to attacking state. And the same to the passive state with the key value set to passive.

18th June: Today I have created an attacking state function and a passive state function that have been set to the appropriate branch when the behavior tree is running. Next to test this I set a key to change the state of the AI until I add the senses like hearing and more to the AI.

19th June: Today I have created a new branch for the behavior tree that allows the Melee enemy to draw their sword and put away their sword. I attached a decorator to perform a condition check to see if the AI has wielded their sword within the attacking state and the opposite within the passive state.

20th June: Today I made a few adjustments to my behavior tree and by this I included a couple of clear focus tasks and an idle state branch. I also created a new sequence branched off the combat state where I moved the wield sword task and decorator to this new sequence and attached a focus target task before it so it would do that task before wielding the sword.

Art and Animators

Get Ethereal Fortuna

Leave a comment

Log in with itch.io to leave a comment.