Designing upgradeable abilities in GAS (singleplayer)

Sooo, I’ve been fiddling with GAS for a while and I’ve got the gist of it, but I can’t wrap my head around designing upgradeable abilities.

The game is singleplayer, so I don’t need to worry about replication thank god. Let me explain with an example I’m trying to make:

I have a Meteor Gameplay Ability that spawns a Projectile BP. The projectile flies, and on impact it queries hit actors and applies Gameplay Effects (mostly damage for now) plus Gameplay Cues.

My question is: how do I design upgrades for this in a clean and modular way?

My current instinct is to store all upgrades on the character. Then I’ve been thinking of two different types of upgrades:

  • Status effects: e.g. an “OnFire” effect - I keep an array Upgrades of Gameplay Effects and access it from the Gameplay Ability and pass it through to the Projectile BP

  • Bonus Gameplay Abilities: e.g. after impact I want to spawn another GA that scorches the ground. That’s another ability I want to trigger at the impact location.

Where I get stuck is: how to add multiple different upgrades cleanly. Some upgrades will need custom data (damage, duration, special params) and some bonus abilities will need custom execution control. Every bonus GA or status effect might want a slightly different implementation, and I want to make it nice and modular and possible reusable as possible - so for example that another ability can call on to scorch the ground at specific time

I hope I explained what I want to do properly but do ask follow up questions if needed :slight_smile:

Thanks in advance!