How to think about time based aspects of Gameplay Ability System in terms of turn based instead

I’m attempting the exact same thing as you mention. I’m new to Unreal Engine, so take what I say with a grain of salt, but I’ve had some success in my game with the following strategy:

  1. All ‘Turn Based’ Gameplay Effects have a Duration of ‘Infinite’.

  2. All ‘Turn Based’ Gameplay Effects rely on a ‘SetByCaller’ tag so that turn based gameplay events can have a variable turn duration.

  3. Each character tracks their own active ‘Turn Based’ effects in a Map of Effect → NumTurns left.

  4. At the beginning of each turn decrement the number of turns left, executing the effect again if it applies on every turn, and then removing the effect manually if there are no more turns left.

This code is still in progress on my end, so I can’t provide much in turns of snippets… but here are some pieces.

Piece of my ‘HandleStartTurn’ function:

Applying An Effect:

Final thought – My method is definitely not working with GAS as it was meant to be used. It is probably more ‘correct’ to extend GAS FGameplayEffectSpec to support a HasTurns mode directly… but that would take a lot of effort. I’d love to know what you end up going with.