Download

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

There is some overlap with another post here, but this topic is about ways in which turn based aspects can be handled in Gameplay Ability System.

So I’m trying to incorporate GAS into a prototype turn based style game, think X-COM. So, I’m currently trying to figure out how to do what is traditionally thought of as duration based actions like HOT, DOT, Cool-downs, and Buffs but in terms of turn based. There is Instant, Infinite, and Has Duration Duration Policies in Gameplay Effects, but what is needed for a Turn based game is something like Has Turns. For Example, Adding a Damage Over Time should inflict damage at the beginning of each turn for x turns, not every x seconds.

So there are a few different ways to think about this:

  1. Gameplay Ability System wasn’t meant for turn based games and should be avoided. If so, then I’m going to use it anyways because literally everything else has benefit and it’s going to suck not being able to use duration/turn based effects.

  2. Is there a way to extend GAS to have and honor a Has Turns duration policy? Has anyone done this?

  3. Are there other ways to do turn based stuff within existing GAS infrastructure? For example, does it make sense to: a. Have duration based effects be Instant or Indefinite but somehow refreshed every turn for so many turns by some other GAS mechanic?
    b. Or could I use a Has Duration policy but with some Custom Calculation Class logic to accommodate it?
    c. Or maybe go with a very frequent (100ms maybe) Has Duration but with logic wrapped in a DoOnce that gets reset every turn?

  4. Or is this a forking situation? Or rather, turning off the plugin and porting the GAS code directly into project + replacing duration logic with turn logic.

Ideally a non-hacky solution would work best and I imagine I’m not the first person to run into this.