Skip to content

Resource-ification project for Life, Feedback, etc.

Expands the resource system and streamlines some edge cases into the main resource paradigm.

Resource definitions are rather finicky, and the Feedback change deprecates the psionic_feedback actor parameter, so this will break saves.

Changelog

  • Life and Feedback are now actual resources, as opposed to pseudo-resources. Among other effects, this means that they easily appear in talent descriptions, along with new talent descriptors sustain_life, drain_life, and drain_feedback.
  • Resource system expansions:
  • New no_reset flag for a resource definition. Resources flagged as such don't reset to full on level up or actor birth (as part of Actor:resetToFull()).
  • All resources automatically generate an Actor:regenFoo(fake, force) function. By default, this increases the resource (or decreases for decrementing resources) based on the regen_prop supplied in the definition. fake=true prevents the actual regeneration, force=true prevents the result from being bounded by the resource limits (i.e. force=false returns the actual delta, force=true returns the ideal delta).
  • All resources automatically generate a foo_rating parameter (subject to overwrite in params). They also automatically an Actor:levelupIncFoo function. This is part of levelup and is expected to interpret the foo_rating parameter. The default function increases max_foo by foo_rating, but can be over/superloaded.
  • The individual levelupIncFoo functions are moved collectively to Actor:resolveResourceRatings(), called during levelup.
  • New function_overrides table can be passed as part of defineResource. This is a fancy way of overloading functions in this framework rather than overloading them elsewhere (e.g. when defining Life, passing {regenFunction = function(self, fake, force) ... end} rather than defining elsewhere _M:regenLife)
  • The regenResourcesFast framework is deprecated, due to the loss of the assumption that resource regeneration is a simple process. Tinkering with returning it to life.
  • UI Changes
  • On the life bar and character sheets, the life regen and psi regen displayed now appropriately account for T_SOLIPSISM; if life regen is being reduced to regenerate psi instead, the displayed life regen will be appropriately smaller. Thus, the delta on a given turn (outside of combat, obviously) now matches the numbers displayed.
  • In character sheets, Feedback now is its proper yellow color instead of the odd light-green-blue. This makes it consistent across the resource bars, character sheets, and talent descriptions.
  • AI Changes
  • New no_want flag for a resource definition. Resources flagged as such don't generate want entries in improved_tactical AI. This is done to prevent double-checking shenanigans for Life, in particular.
  • The AI will probably continue to not amazingly handle the resource changes, because the regen_prop can now easily lie (e.g. feedback_regen isn't used to handle feedback degeneration).
  • Various tweaks here and there to support Feedback no longer being a pseudo-resource.

Update 12/21/2020

  • Major changes to how Life is interpreted. The life gained from Constitution is now computed in Actor:getMaxLife which means the max_life parameter now lies a lot. As such, you should always use the getter.
  • Similar changes to Mana, Stamina, and Psi to reflect their attribute dependence.
  • Multipliers to max life from sustains (Last Stand, Icy Skin, Chant of Fortress) are moved into Actor:getMaxLife to alleviate snapshotting bugs. For cleanliness, multipliers to resources from temporary effects weren't changed.
  • Debating the introduction of a foo_mult_add property to make this a bit more general, but I've added about a dozen new parameters with this MR alone.
  • Actor.die_at is now respected by Actor:getMinLife. This means that Actor:getMinLife should be used in place of accessing the raw Actor.die_at for life calculations.
  • Sweeping changes to a million talents, effects, UI, and AI to make them properly use getters and setters instead of accessing raw parameters.
  • The Air meter now shows your real degeneration if you're standing on a tile you can't breathe on.
  • Consistency pass on "execution" mechanics like Blade Shear and Coup de Grace to make them respect the changes to Actor:getMinLife. They're all worded the same, they should all operate the same with regards to enemies at negative life. Previously, they had inconsistent behavior about executing these enemies.

Merge request reports