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 shield — CapacityShield, 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:
ThornsStatusitself 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¶
RegenStatusrequiresIHealthWriter→ otherwise no healing occursShieldStatusrequiresIShieldTicketPool→ otherwise nothing is contributed, and even when present the pool does not absorb damage (see above)ThornsStatusdoes 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 taggedReflect - All integrations are safe to remove without breaking Status Effects core
Extending¶
To add new Health-integrated statuses:
- Create a status in this folder (or runtime if generic)
- Use Health interfaces (
IHealthWriter,IShieldTicketPool, etc.) - Register it via
StatusRegistry - 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.
Related¶
- Runtime → Status Effects core behaviour
- Health → damage, healing, shields
- Core → lifecycle, stacking, authority