Skip to content

Status Effects — Health Integration

This folder contains optional integration code that connects the Status Effects system to the RevFramework Health system.

It exists to answer one question:

“How do status effects interact with health (damage, healing, shields, reflection)?”

This integration is built and supported for RevFramework systems only.
It is not intended as a general integration layer for third-party health systems.


What This Folder Is

This is a bridge layer between systems.

It provides:

  • Health-backed status implementations
  • Authoring definitions for those effects
  • Registry wiring for integration-only statuses
  • Bridge helpers for cross-system behaviour

It is not required for the Status Effects system to function.


Why This Exists

The Status Effects system is designed to be:

  • modular
  • decoupled
  • deletable

Health is not a dependency of Status Effects.

Instead, integration is handled here so:

  • Status Effects can run without Health
  • Health can be added later without modifying core systems
  • Cross-system behaviour stays explicit and contained

What Lives Here

Health-Backed Statuses

Status Behaviour Dependency
RegenStatus Heal-over-time (HoT) IHealthWriter
ShieldStatus Timed contribution to the shield pool — see below IShieldTicketPool
ThornsStatus Reflects a share of incoming damage at the attacker DamageRuleHub (added for you)

ThornsStatus itself lives in Status Effects core — it carries only the percentage, because reflection is a Health rule. This folder installs the rule. Without Health the status still applies, ticks, expires and dispels, and reflects nothing.

These effects:

  • operate normally when dependencies are present
  • degrade safely to no-op behaviour when missing

ShieldStatus does not absorb damage

It adds a ticketed amount to Health's ShieldPool for its duration, and withdraws it on expiry. ShieldPool is a value accumulator for UI, FX and your own gameplay code. Health documents it as not an IShield, no shipped shield reads it, and the damage pipeline never consults it — so applying this status and then taking a hit shows full damage.

That is Health's deliberate position and shields are a Health feature; the Status Effects side used to claim otherwise. For real absorption use a Health shieldCapacityShield, RechargeShield, OverhealShield (temporary HP), or ShieldChain to combine them. Use this status when you want a timed number to display and react to: read ShieldPool.Total or subscribe to its total-changed event.


Definitions

Definition Builds
RegenStatusDefinition RegenStatus
ShieldStatusDefinition ShieldStatus
ThornsStatusDefinition ThornsStatus (in Status Effects core)

Used for authoring via ScriptableObjects.


Registry Integration

File Purpose
StatusRegistryHealthIntegration Registers Health-dependent statuses into StatusRegistry

This runs automatically at startup and ensures:

  • Health-linked statuses are only available when this integration is present
  • Core Status Effects remains independent

Bridge Helpers

Helper Purpose
ThornsHealthBridge Connects ThornsStatus to Health damage reflection rules

Important:

ThornsStatus itself lives in Runtime and only carries metadata.
This bridge enables actual reflection behaviour when Health is present.


How This Fits Into The System

The system is split cleanly:

  • Runtime (Status Effects) → defines behaviour + lifecycle
  • HealthIntegration (this folder) → adds health-specific behaviour
  • Core → controls stacking, ticking, authority

So the flow is:

StatusEffectController
        ↓
   Status Effect (Runtime)
        ↓
 Optional Integration (this folder)
        ↓
   Health System

Mental Model

  • Status Effects do not depend on Health
  • Health does not depend on Status Effects
  • This folder is the explicit seam between them

Gotchas

  • RegenStatus requires IHealthWriter → otherwise no healing occurs
  • ShieldStatus requires IShieldTicketPool → otherwise nothing is contributed, and even when present the pool does not absorb damage (see above)
  • ThornsStatus does nothing on its own → this folder installs the reflection rule for it. It used to say the same thing while nothing did the installing, so Thorns reflected nothing even with Health present
  • Reflection needs an attacker with an IHealthMutator, and does not reflect a hit already tagged Reflect
  • All integrations are safe to remove without breaking Status Effects core

Extending

To add new Health-integrated statuses:

  1. Create a status in this folder (or runtime if generic)
  2. Use Health interfaces (IHealthWriter, IShieldTicketPool, etc.)
  3. Register it via StatusRegistry
  4. Keep behaviour safe when dependencies are missing

What Does NOT Belong Here

  • Core status logic
  • Stacking rules
  • Authority systems
  • Time systems
  • UI

This folder is integration only.


Third-Party / Custom System Use

This integration is built for RevFramework Health systems only.

If you are using a different health system:

  • Treat this as a reference example
  • Implement your own status behaviours or bridges
  • Use your own service layer

👉 Custom or third-party integrations are not supported by this layer.


  • Runtime → Status Effects core behaviour
  • Health → damage, healing, shields
  • Core → lifecycle, stacking, authority