Skip to content

RevFramework — Status Effects • Integration

Optional bridges that connect Status Effects into other RevFramework subsystems
(Health, Shields, and similar gameplay pipelines).

These integrations are entirely optional and deliberately decoupled.
If the target system is missing, integration calls fail safely and no-op.


Table of Contents


Overview

The Integration folder contains bridge helpers that allow status effects to interact with other systems without creating compile-time dependencies.

These bridges: - Use reflection or narrow sink contracts - Are safe to delete if the target module is not present - Never make Status Effects depend on Health, Shields, or other systems

Bridge Purpose
StatusHealthBridge Routes status-driven damage/healing into the Health system (reflection-based).
ShieldLegacyBridge Compatibility adapter for legacy shield implementations.

Important:
Integration bridges are not part of the core Status pipeline.
They exist purely to optionally connect behaviour when other systems are present.


Mental Model

Integration bridges answer one question only:

“If another system exists, how do I talk to it safely?”

They do not: - Own gameplay rules - Decide balance - Enforce authority - Replicate state - Guarantee effects occur

If the target system is missing, integration calls silently no-op by design.


Components

StatusHealthBridge

Used by: - PoisonStatus - BurnStatus - ThornsStatus

Purpose: Routes status-driven damage or reflection into the Health subsystem when present.

Key behaviour: - Applies damage via Health rules (e.g. DamageRuleHub) - Supports reflective damage stacks (Thorns) - Refreshes Health rule ordering when needed

Key traits: - Reflection-based (no assembly dependency) - Auto-adds required Health rule components if missing - Safe no-op if Health is not installed

This allows Status Effects to interact with Health without coupling the modules.


ShieldLegacyBridge

Used by: - ShieldStatus (fallback path only)

Purpose: Provides compatibility with older shield components that expose:

  • Add(int amount)
  • Clear()

Important notes: - Deprecated path — prefer IShieldTicketPool - Clear() removes all shield contributions on the component - Used only when no IShieldTicketPool is present

This bridge exists solely to ease migration from legacy systems.


Quick Start

Health Integration

No setup required beyond installing a Health system.

If Health is present, status effects automatically route damage through it:

ctrl.ApplyStatus(
    new PoisonStatus(5f, 10f),
    StatusContext.FromAbility("toxin_arrow")
);

If Health is missing, the call safely no-ops.


Shield Integration

Preferred: - Implement IShieldTicketPool on your shield system

Fallback: - Legacy shield components are supported via ShieldLegacyBridge

Use the fallback only if you cannot migrate to ticket-based shields.


Gotchas

  • ShieldLegacyBridge.Clear() wipes all shields on the target component
  • StatusHealthBridge silently ignores calls when Health is absent (by design)
  • Auto-added Health rule components require the Health module to be installed
  • Not all status effects use integration bridges — only those that explicitly opt in
  • Integration code must never throw if a dependency is missing

Extending

You can create your own integration bridges for:

  • Mana / energy
  • Stamina
  • Rage / heat / overcharge
  • Threat / aggro systems
  • Custom combat pipelines

Recommended pattern:

  1. Write a standalone static helper (reflection-based or interface-based)
  2. Call it from your custom IStatusEffect implementation
  3. Fail safely when the target system is absent
  4. Keep Status Effects decoupled

Avoid introducing hard references or gameplay rules into integration code.


See Also

  • Effects — runtime behaviour
  • Core — controller, stacking, authority, math
  • Abstractions — shared contracts
  • Bridges — Pickups interop
  • UI — visualisation components