🧩 Status Effects — Pickups Integration (Bridges)¶
This folder contains optional bridge code that connects the Status Effects system with the RevFramework Pickups system.
It answers one question:
“How can pickups or items apply status effects using the Status pipeline?”
This integration is built and supported for RevFramework systems only.
It is not intended as a general integration layer for third-party pickup or item-use systems.
🧠 What This Folder Is¶
This is a thin interop layer between two independent systems:
- Status Effects → lifecycle, stacking, potency, authority
- Pickups → item usage, effects, context
The bridge allows pickups to:
- apply statuses
- pass item context
- reuse the Status controller safely
💡 Why This Exists¶
Status Effects does not depend on Pickups.
Pickups does not depend on Status Effects.
This folder keeps that separation clean by:
- isolating cross-system behaviour
- avoiding hard dependencies
- keeping both systems fully deletable
📦 What Lives Here¶
🔹 Runtime Bridge¶
| File | Purpose |
|---|---|
StatusApplyEffect |
PickupEffect that applies a status via StatusEffectController |
This is the core runtime glue.
It:
- builds a status from a definition
- applies it via the controller
- optionally forwards item context (
ItemUseContext) - preserves stacking, immunity, potency, and authority rules
🔹 Authoring Definition¶
| File | Purpose |
|---|---|
StatusPickupEffectDefinition |
ScriptableObject wrapper for applying a status via Pickups |
This allows designers to:
- assign a status to a pickup
- reuse existing Status definitions
- avoid duplicating gameplay logic
🔗 How This Fits Into The System¶
Pickup System
↓
PickupEffect (this bridge)
↓
StatusEffectController
↓
Status Runtime (stacking, potency, etc.)
Important:
The bridge does not implement behaviour.
It simply forwards into the Status system.
🧩 Mental Model¶
- Pickups trigger effects
- Status handles behaviour
- This folder connects the two
🔌 Behaviour Details¶
Context-Free Apply¶
When no item context is provided:
- uses
StatusContext.None - avoids extra allocations
- applies via
ApplyOrRefresh
Context-Aware Apply¶
When ItemUseContext is available:
- builds a
StatusContext - passes source metadata (item, slot)
- raises usage events (
StatusUseEvents)
⚠️ Requirements¶
- Requires
REV_PICKUPS_PRESENTdefine - Automatically excluded if Pickups is not installed
- Safe to remove entirely
⚠️ Gotchas¶
- Requires
StatusEffectControlleron target - Does not bypass authority rules
- Does not handle networking or replication
- Status definitions must be valid (
BuildEffect()must not return null)
🛠 Extending¶
To extend this integration:
- Create a new
PickupEffect - Build a status via
StatusEffectDefinitionBase - Apply via
StatusEffectController - Pass context where appropriate
Keep the bridge:
- thin
- explicit
- dependency-safe
🚫 What Does NOT Belong Here¶
- Status logic (belongs in Runtime)
- Pickup logic (belongs in Pickups)
- UI or feedback systems
- Networking or authority systems
This is integration only.
🌍 Third-Party / Custom System Use¶
This integration is built for RevFramework Status Effects and Pickups systems only.
If you are using a different pickup or status system:
- Treat this as a reference example
- Implement your own bridge or effect
- Use the public APIs of your systems
👉 Custom or third-party integrations are not supported by this layer.
🔗 Related¶
- Status Effects → runtime behaviour
- Pickups → item usage pipeline
- Core → lifecycle and stacking rules