chrysaora 🎐
banner
chrysaoravioli.bsky.social
chrysaora 🎐
@chrysaoravioli.bsky.social
Making whatever, whenever.

📺 YouTube • • • https://www.youtube.com/@chrysaoravioli
📝 Tumblr • • • https://chrysaoravioli.tumblr.com/
It's Christmas Break so it's pedal to the medal in UE5 for the next few weeks.

Modified the RHS Hitbox system to use GAS's "Send Gameplay Event To Actor". This way, all the hit targets are sent to the Gameplay Ability to determine how much and what kind of damage should be dealt.
December 20, 2025 at 2:53 AM
【GAS】GE_LastStand

Quick implementation of a feature from Bayonetta, where if an attack would kill you, they give you exactly 1HP as a sort of "one last chance".

Attribute Set basically checks if the owner has a tag (provided by GE_LastStand). If so, activate this alternative damage calculation.
December 19, 2025 at 5:32 AM
【GAS】GA_Death
More tweaks to the Health Component.
- Cylinder w/100HP showcases fallback health value if it is not listed in Data Table.
- Cylinder w/999HP showcases custom override health value.
- Health Component automatically grants a "Death Ability", and callbacks for the owner to respond to.
December 19, 2025 at 3:56 AM
One addition that I've made is reading default health values from a single data table. That way, I can easily adjust any actor's health at a glance.

Default health is automatically read by the Health Component and used as a SetByCaller magnitude for GE_InitialHealth, which sets the owner's health.
December 18, 2025 at 4:00 AM
【GAS】
Boring nerd stuff for today.

I've been working on a Lyra derived health system that can be easily applied to any actor that also uses GAS. In the image below, the cube, sphere, and player use the same health system with no manual setup required.
December 18, 2025 at 3:55 AM
【Hitbox Study】

Reworking the Aurora Devs RHS to tailor it to my own tastes. For now, drawing the hitbox works but not the actual damage transmission. This vid is just aping off existing UE template.

My C++ is certainly stronger since I was able to fully convert their AnimNotify blueprint. 😄
December 15, 2025 at 1:59 AM
【Multi-Zone Demo】

Using a single GA to create & evaluate multiple zones at once.

End of the video shows multi-zone and single zone GAs running simultaneously, demonstrating how two Niagara Systems can utilize the same ExportParticleData callback without fear of crosstalk.
December 11, 2025 at 3:26 AM
tfw you can't have nice things
December 9, 2025 at 3:32 AM
While the Paint Detection functionality isn't totally hardened, I knew eventually I wanted to use the GAS framework.

Gameplay Abilities don't have a native tick function but Ability Tasks do. Just have to go through some trouble of setting it up in C++ and bam, I can do a trace as the player moves.
December 9, 2025 at 1:00 AM
Same results from two weeks ago but a lot of changes under the hood.

1. Majority of functions have been transferred to C++, with various functions doled out to base and child classes.
2. In this demo, I've decided to incorporate GAS, so detection is actually contained with a Gameplay Ability.
December 9, 2025 at 12:55 AM
Trying out a new Paint Detection method that uses a single system to evaluate multiple zones at once. For now, I'm just testing the drawing of the multiple spheres.

Not too expensive at 1/4 resolution (2px/m), clocking in at about .008ms for mask updates. I guess the detection part is up next...
November 29, 2025 at 5:49 AM
Continuing to buff the Paint Detection component, with today's PoC showcasing a similar function to Splatoon that allows you to move faster if you're in your team's ink color.

Slowly but surely hardening the functionality now that I have a better idea of what I want.
November 24, 2025 at 11:57 PM
PoC "zone capping" feature like Splatoon.

Instead of using my central "Paint Stamper" system, the Zone system painted the zone. But, that means the Paint Stamper is unaware of the changes so I currently have a questionable workaround that fires every frame.
November 20, 2025 at 4:02 AM
I don't have any interesting breakdowns for the Niagara System since most of the code is very sloppy for now.

Instead, here's an image of my "version control".

I don't know how to set it up so I'm just packaging the plugin every week or so and zipping up the contents to a backup hard drive 🫡
November 19, 2025 at 4:15 AM
Hey, it's Splat Zones!

I can define any n-sided polygon and voila, we can detect paint in that area. Sampling resolution is kept low about 1px/m. Don't need to be too accurate.

Next, I'll introduce a fill operation, so when it hits 75%, it completely fills the zone with the winning team's color.
November 19, 2025 at 4:03 AM
I had an issue where "inward points" in a polygon would cause issues. Found this 2D Polygon SDF example on ShaderToy that solves my issue: www.shadertoy.com/view/wdBXRW

Tbh, I don't expect my detection zones to have any winding but I suppose it's a nice feature to have.
November 18, 2025 at 4:31 AM
Buffing the long overdue Paint Detection side of the plugin.

Spent the weekend researching the math for creating an irregular n-sided polygon to replace the previous primitive cube method.

Doesn't work with all shapes right now (such as a star) but I'll continue debugging it tomorrow.
November 17, 2025 at 6:04 AM
Demo for Modular and Proxy Paint Actors.

Modular contains a singular visible mesh with a single corresponding collision mesh.

Proxy allows multiple visible meshes correspond to a single collision mesh, useful for large collision meshes where multiple static meshes may be associated with it.
November 8, 2025 at 5:26 AM
Remapped Atlas parameters are sent to the material via Custom Primitive Data.

Before, I was using Dynamic Material Instances but it's a pain to set up the code per material instance. Custom Primitive Data instead only needs one node that applies to every material that shares the same index!
November 6, 2025 at 3:27 AM
For now, the collision mesh is separate from the visible mesh because Niagara builds the UV map from the collision mesh. Having a combined mesh means creating separate logic that I don't feel like implementing 😄

The paint UVs are fairly easy to create thanks to Blender's Data Transfer modifier.
November 6, 2025 at 3:21 AM
Added support for a "packed" paintable mesh.

If a static mesh is added to the "Visible Mesh" variable, it will automatically create a component to show the added mesh. Perfect for modular paintable actors similar to Splatoon 3's single player campaign.

Will work on detached visible meshes next...
November 6, 2025 at 3:13 AM
Been a while since I've done a UE5 update.

The paint system generally works but I've decided to create a test map that forces me to flesh out various features.

Currently, I'm working on a system where a single paintable collision mesh to distribute painting params to corresponding visible meshes.
November 5, 2025 at 4:38 AM
[ #NinjaGaiden4 Tech ]

Dodge Offset causes the final hit of the rapier's YYY combo to bug out. I don't even know if it's some weird root motion or motion warping error but it's neat to see that the hitbox is independent from the animation.
October 25, 2025 at 3:04 AM
[ #NinjaGaiden4 Tech ]

Using Dodge Offset, it's possible to infinitely loop between standard and Blood Raven combo strings.

In this example, I am looping between the dual swords' XXXXX string and the Blood Raven XXX string.
October 25, 2025 at 3:02 AM
[ #NinjaGaiden4 Tech ]

By using Dodge Offset, you can retain your offset combo even after an Obliteration Technique.
October 25, 2025 at 3:02 AM