RevFramework — Status Effects • Implementations¶
Concrete runtime effect classes that execute actual gameplay behaviour.
Most implementations subclass TimedStatusEffect.
This folder answers one question only:
“What happens when a status is applied, ticked, refreshed, or removed?”
Everything else (stacking, authority, math, timing) is owned by Core.
Table of Contents¶
Overview¶
Implementations are the runtime logic layer of the Status Effects system.
They:
- Perform damage, healing, or stat modification
- React to ticking driven by StatusEffectController
- Integrate with other systems via explicit sink interfaces
- Fail safely when dependencies are missing
Most implementations derive from TimedStatusEffect, which owns:
- Duration and remaining time
- Tick scheduling (via controller)
- FX hook lifecycle
Implementations do not: - Tick themselves - Decide stacking rules - Enforce authority - Apply immunity or resistance - Interact with UI
Mental Model¶
A status implementation should be pure behaviour.
- It reacts when the controller calls
Apply,Tick,Refresh, orRemove - It never queries or mutates controller state directly
- It never assumes multiplayer authority
- It never assumes the presence of optional systems
If a dependency is missing, the effect should no-op gracefully.
Available Implementations¶
DoTs / HoTs¶
PoisonStatus— damage over timeBurnStatus— fire DoT with optional propagationRegenStatus— heal over time
Multipliers¶
SlowStatus— movement speed reduction viaMovementSpeedScalerHasteStatus— cooldown scaling viaICooldownScaleSinkVulnerabilityStatus— increased damage taken viaIDamageTakenModifier
Utility¶
ShieldStatus— temporary shield buffer viaIShieldTicketPoolStunStatus— disables behaviours by fully-qualified type nameThornsStatus— damage reflection via Health bridge
Support / Demo¶
SimpleShieldTicketPool— minimalIShieldTicketPoolreference implementation
Sinks & Integration¶
Implementations integrate with other systems via sink interfaces:
| Sink | Purpose |
|---|---|
IShieldTicketPool |
Shield buffering |
MovementSpeedScaler |
Movement speed modification |
ICooldownScaleSink |
Cooldown multipliers |
IDamageTakenModifier |
Incoming damage modification |
This pattern ensures:
- No hard module dependencies
- Safe no-ops when systems are absent
- Clean separation between systems
Gotchas¶
- Always create a new instance per application — never reuse effect objects
- Potency (
IAdjustableMagnitude) and resistance (IStatusResistance) are applied by the controller after construction StunStatusrequires fully-qualified type names; invalid types log editor warnings- Legacy shield fallback (
ShieldLegacyBridge) may wipe all shields — prefer ticket-based pools - FX hooks must never mutate gameplay state
Extending¶
To add a new runtime effect:
- Subclass
TimedStatusEffector implementIStatusEffect - Implement behaviour in
OnTick,OnApplyFX,OnRefreshFX, orOnRemoveFX - Add optional metadata via
IStatusMetadata/IDispellable - Implement
IAdjustableMagnitudeif potency scaling is required - Integrate external systems only through sink interfaces
Keep implementations focused, defensive, and side-effect conscious.
See Also¶
Definitions— authoring assetsCore— lifecycle, stacking, authority, mathAbstractions— shared contractsBridges— Pickups integration