This is my personal blog its main purpose is just as a sort of work log for myself, but maybe someone might find some part of it interesting or useful at some point. I started keeping this log back in July 2025, but it was just on a text file on my desktop so everything up until the creation of this website will have a listed date in the title.
Work Log 8/23/2025
Fixed a bug in the drop sound event and metasound that as causing the sound to only ever spawn at the initial spawn location.
Fixed a bug where the fail hit sound would never reset
Fixed a bug where the npc would try to play the blocking animations even if their weapon wasn't drawn
Fixed a bug where the SpawnAndPlayFailedHitSound wouldn't trigger a noise event
Added a noise event to when the player hits an enemy that isn't yet aware of them, Theoretically we would just give the impact point for the noise location but that didnt seem to work so we are gonna give some radius around where the player is for the npc to look what hit them, in testing worked pretty consistently and felt natural enough.
Fixed bow and arrow damage calculation, was previously only using bow value for damage oddly enough you would figure it would only be using the arrow damage if anything, but nope Nathan programmed that wrong, all good though simple mistake.
Removed the line trace we were doing to determine arrow damage in the arrow component seemed pointless seeing as we are now using actual hit events for everything.
Fixed the Bug of the arrow trails staying around forever if you hit a close enemy
Fixed the bug of the arrows spinning forever if you hit a close enemy
Massively cleaned up Arrow Code
Fixed the math and code for sticking arrows into objects physically, previously the arrows just kinda sat near the surface where they hit now they stick into the object they hit properly and even have a bit of randomization for how far they will stick in, might want to later make that randomness based on arrow velocity somehow, but works well enough for now, looks great!
Arrows are properly activating their hit particle effect when hitting not character targets
Work Log 8/22/2025
Set up the other 3 displays today which took 3 fucking hours for some reason, the displays were being super fucky and the new monitor mount doesn't provide enough swivel really annoying.
Found a pretty large bug in how durability and item health were being calculated, so i completely rewrote that functionality.
Moved all of the armor durability calculations into functions and loops instead of the giant functions we were using.
Work Log 8/21/2025
Added noise events to spell hits just like the noise events for dropping or hitting weapons together.
Removed the on event overlap code from the base object as we no longer use it for combat hit checks.
Spent 5 fucking hours tracing down a Niagara crash issue for the blood effects, but at least we now have 18 different blood effects when you hit someone. I really kind of hate niagara as well, sure its powerful, but we have SO MANY crashes with it. That being said its clearly my weakest area of Unreal Engine expertise, I should spend some time making some complex stuff with it.
Work Log 8/20/2025
Built the new monitor stand today to support the new 4k 144hz HDR monitors, i have 2 of them right now 3 more should be here tomorrow.
Renamed a few of the events in the melee component for clarity. The melee component ever only exists on NPCs so the events there center around the NPCs doing something like NPC attack blocked, NPC Start Blocking etc
Fixed a bug where shield bashing would only ever play the anim once
Added some code to differentiate which sound and particle effect to spawn when npc blocks based on whether or not they are holding a shield.
Fixed some incorrect references in the base object combat code.
Collapsed the code for spawning an item drop sound into a function
Added an array of sounds for metal clangs to make the MS_ParrySound Metasound more random we were previously only playing a single sound effect inside the meta sound when a parry happened, i plan to also use this sound for general weapon hits like for if you are holding two weapons and hitting them together, previously we were using the hit sounds for this, but that doesn't really make sense seeing as those are a bit meatier.
Scratch that. Cant use the parry sound for the player just hitting two held weapons together sounds fucking weird, besides the parry sound should stay specialized as it is. So i created another metasound thats the same base sound as the parry sounds but with reverb and non of the extra effects that make up the parry sound effect.
Found a bug in Gabriel's metasound design. He was sometimes using (Trigger Accumulate) to kill the metasound in locations where the full accumulation never would have happened, the node he should have been using was (Trigger Any)
Added a shield hit sound array to my new PlayerHitWeaponsTogether Metasound
Removed some code in the Melee component function EnemyBlockHit that would sometimes lead to a dead end causing the NPC to neither block or parry.
Fixed an audio bug related to dropping weapons. they would previously play a sound for if they hit something like the floor, but if they hit another weapon that had previously been picked up and dropped it wouldn't make the sound for hitting another weapon.
Added a Do Once gate to the item drop sound also pushed it into a sperate event thats resettable so we can better control how that sound effect plays and stop sound spam
These new weapons sounds now report noise events so if players are sneaking around, but then decide to start banging their weapons together it will alert NPCs.
Dropped weapons and other items also produce noise events meaning you can actually throw something to distract an npc now if they haven't detected you, pretty cool.
Work Log 8/19/2025
With the help of Jackie I fixed the hit reaction animations being too long
Generated some new temp lines for combat barks
Made another dialogue for combat taunts used for things like when the npc blocks your attack
Cleaned up combat code in melee component event graph for parrying blocking and attacking
Added a Boolean blend inside the anim graph for whether or not we should be playing blocking anims with a shield or not
Work Log 8/18/2025
Had to fix a bunch of issue related to the codex not properly uploading to GitHub. I kinda fucking hate GitHub in my opinion its only useful for toy projects that don't have tons of data. I am aware that most of the world uses it for software development… I think that is a mistake.
Got Megan's computer set up to be able to package to android, always a fucking nightmare to get android setup to package to a headset even though i've done it dozens of times at this point.
Put in some error handling code for dealing with NPCs trying to initialize dialogue when the didn't have an NPC data ref
Removed refs to the Hair and beard meshes on the BP_AI_Parent because they are removed well before the could be used. These were causing log messages about invalid refs.
Added refs to weapons to the events for parrying and blocking that way we can choose what type of sound to play when we impact for a block or parry instead of it being hard coded
Added a recoil state to the animation graph for NPCs so they can properly respond to having their attack blocked.
Added an interface event called PassWeaponOwner_OnInterface to allow us to get a direct reference to who ever is using a weapon
Parrying and Blocking are now programmatically different blocking plays one set of sound and animations and parrying plays another
Shield bashing now has a chance to knock down an NPC, one of my favorite feature adds, just feels awesome in VR.
Updated the stunning functionality to make sure the npc stops strafing around the player when stunned
Added hit reactions to the anim graph they aren't perfect yet need Jackie to modify the length of the animations they are far too long and reset the npc to a neutral pose for like half a second before they go back to fighting looks super weird
Added a check to make sure npcs cant attack when they are stunned
Added a check to make sure we can still knock down npcs, if we shield bash an npc and it knocks them down we ignore hit reaction animations.
Work Log 8/15/2025
Interviewed a prospective hire today for a new narrative writer, took most of the day but went well.
Work Log 8/14/2025
Worked on combat code, blocking is much more reliable now, we have a block proxy set up for the top and bottom of the npc, if the player is faster than the block animation then they still get blocked if the npc has chosen to block.
Ai strafing around the player during combat works again!
Implemented a new selection thing for the npcs determining if the player is using a ranged weapon or melee weapon, similar to how they know if another npc is using ranged or melee.
Distance checking for blocking is now enabled, meaning the npc shouldn't fantom block when the player isn't even nearby
Fixed doors not closing
Fixed players taking forever to die at the end of the matches
Updated the weapon broken event to auto add the broken item to the inventory so the player wont be confused and continue to try to use it
Put in a temporary workaround for the two handed weapon blocking not really working with the new block system, if the system sees that the npc is using a two handed weapon it plays the two hand block instead of the normal block animations.
Tutorial is playable all the way through again
Temporarily fixed the weird issue with arrows freaking the fuck out when you pick them up turns out that only happens when they spawn from a quiver, its something wrong with their collision that i haven't quite solved yet, changing the response to the player channel seems to make no difference even though thats how non spawned arrows handle it. for now we just check to see if the owner and the hit thing is the player character if it is we ignore hits, bad for perf sure but works for now.
Work Log 8/13/2025
Worked on administrative stuff like the new list, codex stuff.
Worked on the blocking system we have a tentative solution to the issue of weapons not hitting if moving too fast.
Work Log 8/9/2025
More work on the crowd rendering system, ran into some issues with how PSO caching was handling the crowd actors, forcing them to always use the lowest lod even though im custom calculating the lods.
Crowd rendering system is working pretty well still needs to be instanced, but the actual rendering is doing fine the textures are a bit aliased at a distance, but id rather that than blocky blurry messes.
Work Log 8/8/2025
Spent the time since the last update working on the crowd system. Who would have though rendering 4k NPCs on a mobile chip would be hard.... Havent really taken a day off in a couple weeks, but theoretically I have a usable solution now all built in house too which is cool!
Readded the sky actor for the tutorial arena level
Had to rebuild the whole tool for generating the crowd npcs to use a editor utility widget instead of an editor utility actor
Generated around half of the animation texture arrays
Work Log 7/29/2025
Tried to compile to the headset and what a surprise Skelot is a piece of shit that crashes the build every time.
Tried switching back to 5.5 main branch for testing and now narrative wont work. Fuck.
Our crowd system is super important, I feel like this is gonna take some time to solve and a lot of R&D. All the plugins we have tried have not worked in one way or anolther. Might have to build something custom.
Work Log 7/22/2025 - 7/28/2025
Worked on the blocking system its working, but not perfectly. Feels like one of the hardest god damn problems of my career frankly.
Work Log 7/19/2025
Added missing Skill class base class for Megan to go through and make variants of
Added an interface event for GetSkillClass_OnInterface
Added the code to allow classes to actually modify skills and attributes on NPCs!!
Fixed missing Hit effect info for magic effects added to actor when hit
Promoted Weapon Hit to a variable for easier access
Cleaned up code for adding magic effects via weapon hit.
Added check to make sure we cant add magic effects if we dont have enough charge
Replaced the location for spawning VFX and SFX to the actual impact point instead of the stabber socket
Updated the armor durability log to better show what actor is having their armor damaged
cleaned up code for npc blocking player strikes
Added a bit of a recoil pop when the player gets parried ... this shit took 3 fucking hours
Added a way to stop player from dealing damage if their attack was parried
Rewrote the entire calculation for NPC parrying player attacks, We can get rid of the combat testers soon! (Future Robert here, took over a month to actually get rid of the combat testers.)
Work Log 7/18/2025
Fixed Crystal mat for staff
Cleaned up fist code a bit instead of a branch for selecting which socket to spawn a fist on we are just using a select node
Fixed player hands not being able to stretch far enough
Fixed missing data in NPC Weapon swing list of actors to ignore when tracing
Removed the old server checking code for checking NPC hits because it caused increased latency in registering hits and actually applying damage to the player hit detection is much more reliable now!!!
Added an additional check to see if an NPC is already playing an attack anim before attempting to play another we were sometimes loading new animations in the background and then playing them in the middle of already playing animations due to the delay with async loads. This change results in less spazzy looking npcs when attempting to play an animation and stops the premature stoppage of hit traces leading to more reliable hit detection for NPCs
Updated the debug damage info message to actually reflect base weapon damage, skill adjusted weapon damage, and post armor calculation weapon damage.
Added in a check to see if the cell state manager exists before we try to add stuff to its array inside the BP_AI_Parent because we were getting an error when it doesn't exist
Added a shield bash cool down inside of the melee component to help deal with the bug where shield bashes frequently don't deal damage this bug is caused by the anim notifies which call the end traces event, for some reason this never seems to be an issue inside of attack anims on regular weapons
Player now receives an impulse when killed… it’s awesome!
Work Log 7/17/2025
Moved my computer setup into the main office
Moved Megan's setup into the main office
Debugged physics on swords to figure out why they frequently just pass right through each other and stop registering as hits sometimes. Seems to just a combination of the VRGrip Settings and the fact that our collision objects are just really small even if i change the project settings for physics in multiple ways it doesn't seem to make too much of a difference. With a collision capsule of at least 3-4 we seem to always collide with a weapon in the other hand. This can sometimes leave a visible gap in between weapons that should be touching though perhaps the answer here is to make which weapon collision is used based on velocity so if a player is swinging slowly we can use a smaller collision object to get the blade much closer together if they are swinging fast we can make it much larger so that we guarantee a hit.
Fixed incorrectly rotated axes on hip socket and hand socket
Work Log 7/16/2025
Added match aligned array of sounds for male or female gasp sounds.
Got plugins updated on everyone's systems
Helped Megan rebuild old system to act as a build server
Attempted to Debug Skelot, the change to the architecture of the plugin has caused excess draw calls.
Downloaded the skelot template and tested to see if it was still an issue with a bare bones projects... it was
Tested the UE 5.6 version of skelot it does perform better, but not sure much it would make a difference and we cant upgrade to 5.6 until oculus releases their branch
Attempted a workaround that I found on the skelot discord that requires making a skelot asset for each piece of armor, tested in the skelot 5.5 test project it reduces draw calls anywhere between 30 and 40 percent better but not gonna make a huge dent when we are 70k draw calls over budget
Downloaded overcrowd plugin to start testing it will pass it off to megan tomorrow to attempt to make progress on
Work Log 7/13/2025
Added events for NPCs to run out to the center of the arena when the gates open.
Fixed hidden tags category on marker objects
Disabled All tick optimization Component settings on Long Tutorial Arena Combatants, was causing them to perform weird like ignoring AI Move To commands
Added Boolean to stats component for AllowTimeDilation sometimes we might want to disabled the possibility of time dilation such as in the tutorial until we get to that part.
Created a narrative event for toggling the ability for time dilation to occur
Fixed a bug causing the time dilation VFX to show even if there was no active time dilation
Added a complete narrative data task to the magic effect component for PlayerHealthRestoredViaSpell
Created Tasks for tracking if player has cast a spell. This should eventually replace the more specific player has cast healing spell task.
Created task to track if NPC has cast a spell
Disabled pickpocketing code for now seeing as it needs a refactor and it shouldn't be enabled for the tutorial anyway
Added the tutorial helper card to the arena default behavior now is to show the current task description if the player doesn't complete it within 10 seconds
Added an event to destroy the items spawned for the previous match, previously only the items npc used would be destroyed
Created new material instance for NPC Invisibility, old invisibility was way too visible.
Updated volume of crowd cheers louder
Updated volume of impact sounds quieter
Not totally fixed but the annoying sound spam is kind of better doesn't clang every time it hits anything
Fixed the sneak sound being a loud fucking thud that played everytime you hit anything.