Effects Architecture recommendation

Hi, I've played around with various ability effect systems, but I'm wondering what people think is the best.

Here's some use cases:

-Cryo/ incidiary/ X ammo ability: activate ability-> current weapon now slows enemies, who gain "icy" fx over them.

-adrenaline rush ability: activate ability-> temporarily increase speed, weapon and melee (but not ability) damage, and gain damage resistance.


Questions:

-Is it better to add functionality to the weapon at runtime (when ability is activated), or have an "effector" module on the weapon that is enabled and configured by the ability?

-where should "stats" be for move speed, weapon damage, ect.? I could use the attribute manager, but I could see myself having dozens of stats for managing fine details of gameplay ("accuracy" alone can have over 10 stats). Would it be preferable to "lazy call" stats from the attribute manager (ie. Melee Damage attribute does not exist until something asks for it or asks to change it)?

-How and where to manage inflicted effects on enemies/ player, such as bleed, on fire, weakened, ect? I could add/remove components, or I could have an effect manager that can have effects passed into it.

-Following that, what is the best way to produce a graphical effect on an enemy? I can try to add the fx dynamically, but I'm not sure how, or I can have a component/ model on the enemy for every possible effect, but that's not scalable.

Any thoughts are welcome!
 
-Is it better to add functionality to the weapon at runtime (when ability is activated), or have an "effector" module on the weapon that is enabled and configured by the ability?
From the controller side of things there isn't really a difference. If you're going to be changing the functionality often you could do it at runtime, or just add them all at edit time.

-where should "stats" be for move speed, weapon damage, ect.? I could use the attribute manager, but I could see myself having dozens of stats for managing fine details of gameplay ("accuracy" alone can have over 10 stats). Would it be preferable to "lazy call" stats from the attribute manager (ie. Melee Damage attribute does not exist until something asks for it or asks to change it)?
The controller doesn't really have a stats system so for this I would design your own. You could do something similar to the attribute manager except make it better able to handle multiple layers of stats.

-How and where to manage inflicted effects on enemies/ player, such as bleed, on fire, weakened, ect? I could add/remove components, or I could have an effect manager that can have effects passed into it.
Having an effect manager sounds better.

-Following that, what is the best way to produce a graphical effect on an enemy? I can try to add the fx dynamically, but I'm not sure how, or I can have a component/ model on the enemy for every possible effect, but that's not scalable.
This is also something that an effect manager could do. These type of things aren't really built into the controller so having some custom code is likely the way to go.
 
Top