Chris Pioli's Avatar

Chris Pioli

@cpioli

Gameplay Engineer and Game Designer. Loves Nintendo, Square-Enix, Sony, Jedi, Muppets, and cooking! Opinions are my own and do not represent my employers!

1,239
Followers
2,714
Following
2,027
Posts
03.08.2023
Joined
Posts Following

Latest posts by Chris Pioli @cpioli

Don't blame me, I've sung it from the rafters since day 1!

05.03.2026 01:57 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

It's nice when the problem is that obvious and straightforward, and the solution equally so. But that rarely happens in real life (unless you work on a manufacturing line, right?).

03.03.2026 22:35 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

Whaaaaaaaaaat?

03.03.2026 20:23 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

I think I want to re-learn GAS and the gameplay message subsystem... it'll help me with this new plugin AND it'll help me develop that third person controller I want to build.

02.03.2026 01:19 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

For ppl who aren't aware:
Old temperate forests are insanely rare nowadays and extremely important ecosystems lost forever once cut.
They're not just "old trees" but intricate networks of trees, fungi and all kinds of living creatures.
You CANNOT replant this!! Once it's gone it's lost FOREVER!!!

01.03.2026 19:18 ๐Ÿ‘ 3457 ๐Ÿ” 2341 ๐Ÿ’ฌ 21 ๐Ÿ“Œ 12

just became aware of this--the regime wants to clear-cut massive chunks of Oregon's old growth forests in the name of timber production.

you have until March 23rd to comment.

i know we have endless fucking things to scream at politicians about--this is an important one too.

28.02.2026 18:41 ๐Ÿ‘ 2663 ๐Ÿ” 2659 ๐Ÿ’ฌ 40 ๐Ÿ“Œ 49

DUDE THAT WATER STARTER IS A GEKKO?

I'm choosing the Gekko!

#PokemonWindsWaves

01.03.2026 08:24 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

There are more updates I can make

* Camera shakes
* Post-processing
* Materials
* Popup text
* A parent class or interface for Actors generated by this plugin

There are now Niagara data channels now?

01.03.2026 08:23 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

Finished the looping fx implementation. There are some bugs in it - no clue why the AnimNotifyState's Details window cuts off the first letter from the name.

Now I need to make a video, which means making a level with cool assets, possibly remembering how to implement Gameplay Effects.

01.03.2026 04:39 ๐Ÿ‘ 2 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

Mike Johnson intentionally and willingly chooses not to enforce Congressional power because he doesn't have enough votes to guarantee Congress will approve Trump's actions.

It's absolute corruption.

28.02.2026 23:25 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

"How can you oppose war when Khamenei was evil?"

Simple. If you killed Donald Trump by nuking Washington DC, I would not mourn Trump but I'd still say you're an evil war criminal who belongs in the Hague. It's really not hard.

28.02.2026 22:52 ๐Ÿ‘ 6714 ๐Ÿ” 1488 ๐Ÿ’ฌ 70 ๐Ÿ“Œ 40

I had not heard of data channels in Niagara systems before now. It's experimental yes, but still cool. Hmm.

25.02.2026 13:40 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

If I can successfully get looping effects to work, that's a huge challenge over and done with.

At some point I need to write functionality so effects can be triggered in code by collisions, too. And ones that are emitted by default, like on a weapon...

God this is getting so complex. Y.Y

25.02.2026 13:18 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

Otherwise, I would have done it already!

So what's the solution?

๐Ÿ’ก

Delegates!

When an Actor is going to be destroyed, pass a function that destroys its Registry inside the subsystem's "Looping Effects" directory.

So back to the original problem... use UStructs.

#RubberDuckCoding

25.02.2026 13:14 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

To maintain encapsulation, I can't just write an AActor subclass and expect all projects to rearrange their architecture. The plugin's component could keep track of looping effects... if that didn't create a circular dependency. The Subsystem would have to send looping effects back to the Component!

25.02.2026 13:14 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

I just realized something...

If an Actor - that owns components emitting looping effects spawned by my plugin - is removed from the level, I'd have to update the Subsystem to remove that Actor from the Directory, and all its references. Seems inelegant?

The alternative is...

25.02.2026 13:14 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

I'm frustrated that template errors and incompatible argument lists are causing this problem. That's such a junior-level problem! The only thing that's changed is I am not using ustructs or uclasses, just normal structs. I do not understand why that would be the problem, but whatever man...

25.02.2026 13:14 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

However, the *other issue* remains. I created a bunch of structs like in my original post, but every time I implement them, some template error stopped the compilation.

I was hoping I could just use plain structs, but the more I think about it the less it makes sense, especially in Unreal C++

25.02.2026 13:14 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

#UnrealEngine All I had to do for the first problem was get the AssetManager to front load. It refused to load into the class's member, though. *That* caused a crash for some reason. Had to use a pointer in-scope. Maybe I should grab the Asset Manager and Stream Manager in the constructor?

25.02.2026 13:14 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 1

"YO DAWG, I HEARD YOU LIKE TEACHING YOUR AI WITH DATA!

SO I TAUGHT MY AI
WITH THE DATA THAT CAME FROM
THE AI YOU TAUGHT WITH DATA!"

...there's a way to make this work, I swear to God! That Is the 5th draft. I can do this.

24.02.2026 08:05 ๐Ÿ‘ 19 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

Oh, riiiiiiight!

The object referenced could also be an AActor, so I will probably need to use a different pointer type. Urgh...

Maybe I can make an ActorManagementComponent to hold reference to all these Actors the system might be generating? Wait that sounds ridiculous...

24.02.2026 07:47 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

And LoopingEffectsReference would house the essential data: the pointer to the thing, maybe the owning Actor, the time that has passed since the object was fired, etc.

Honestly? This might be overdoing it, but if it works for the AnimNotifyEventReference, it can work for me!

24.02.2026 07:40 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

TMap<AActor*, FLoopingEffectsOwnedByActor> LoopingEffectsDirectory;

struct FLoopingEffectsOwnedByActor
{
TMap<FName, FLoopingEffectsContext> LoopingEffectsIndex;
}

struct FLoopingEffectsContext
{
TArray<FLoopingEffectReference*> LoopingEffectsList;
}

struct FLoopingEffectsReference
{
}

24.02.2026 07:40 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

The Key is the Actor's address and the Event Name, but I turn them into an FString. The intent is to make these looping effects accessible to any part of code that knows the owning actor and the event that was fired.

The best idea is probably using structs.

24.02.2026 07:40 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

#UnrealEngine I did not realize that in AnimPreview my WorldSubsystem does not call OnWorldBeginPlay(UWorld&)...

Because that's what's happening. And it is one of two suspects into why my code crashes.

The other being a poorly implemented Data Structure that crashes when I lookup a key.

24.02.2026 07:40 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 1

If you're used to using Facetime but it's a voice-only call, that can definitely happen and it's just force of habit. Not your fault.

If you still do it, it's still not your fault but just make sure nobody noticed you... ๐Ÿ˜…

24.02.2026 01:13 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

2. Front-loading all effects in an AnimMontage before AnimNotifies fire, begin, tick, or end. I thought the Subsystem would handle this, but *boy was I wrong*

Why not just make the Async code into Synchronous Load Code? It'll stop this from happening...

24.02.2026 01:05 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0

Returning to the looping effects now. There are 2 huge problens

1. Creating a data structure that meets the criteria I have written (accessible through Subsystem, generated by owner Actor and Event Name, etc.) and DOES NOT CAUSE ANY FATAL ERRORS

(Cont'd)

24.02.2026 01:05 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 1 ๐Ÿ“Œ 0

Ask the OP/Author to give you a copy, directly through E-mail.

They'll probably give you a copy, free-of-charge. They want people to read it, those resources want people to pay for it.

24.02.2026 00:59 ๐Ÿ‘ 0 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0
Preview
a man with a beard wearing a gump hat is tired and walking down a road Alt: Forrest Gump has finished walking across the United States. He feels tired. He wants to go to bed now. And a group of people are waiting behind him, followers.

๐Ÿ˜ตGasp! ...shiny... ๐Ÿ˜ซ alpha...
Baxcalibur... ๐Ÿ˜ฉ
I caught it... ๐Ÿ˜ฎโ€๐Ÿ’จ

23.02.2026 04:04 ๐Ÿ‘ 1 ๐Ÿ” 0 ๐Ÿ’ฌ 0 ๐Ÿ“Œ 0