RevFramework – Pickups • FAQ¶
This FAQ answers decision questions about the Pickups system. It is not a feature list or a repeat of the READMEs — it exists to help you decide:
- Is this the right extension point?
- Why does this behave the way it does?
- Am I integrating this correctly?
If you’re looking for setup or API details, see the folder READMEs instead.
❓ How do I integrate Pickups into my game?¶
World pickups (fastest path)¶
Use this when the pickup should trigger automatically on contact.
Do this:
- Add EffectPickupCore to a prefab
- Add TriggerRelay2D or TriggerRelay3D
- Assign a PickupEffect (usually built from a Definition)
- Set layer/tag filters if needed
Avoid:
- Writing custom trigger logic
- Calling effects directly from OnTriggerEnter
Interactable pickups (player input)¶
Use this when the pickup requires player intent.
Do this:
- Subclass PickupInteractableCoreBase
- Implement DoPickup(GameObject actor)
- Trigger success/failure via return value
Avoid: - Putting effect logic directly in the interactable - Mixing input handling with effect execution
❓ Is Pickups tied to Inventory, Health, or Currency?¶
No.
Pickups is fully modular:
- Inventory integration is optional (via
GiveItemEffect) - Currency integration is optional (via
GiveCurrencyEffect) - Health integration is optional (via heal/shield effects)
All integrations use soft links (resolvers or reflection bridges).
If a system is not present: - The effect safely no-ops - No exceptions are thrown - Player builds remain silent
❓ Why didn’t my pickup apply its effect?¶
Check these in order:
- Authority
- Is an
IPickupAuthoritypresent and returningfalse? -
Remember: no binder = allow by default
-
Null-damageable rules
- Does the effect require
IDamageable? -
If yes, and the actor doesn’t have one, the effect is skipped
-
Conditional decorators
-
Health %, tag, or RNG conditions may be blocking execution
-
Cooldowns
-
The effect may still be on cooldown for that owner
-
Layer / tag filters
EffectPickupCoremay be rejecting the actor
❓ Should I put gameplay logic in Effects or Interactables?¶
Effects. Always.
- Effects = gameplay logic
- Interactables = input + flow control
Interactables should: - Decide when a pickup happens - Never decide what the effect does
If logic lives in an interactable, it becomes: - Harder to reuse - Harder to decorate - Harder to test
❓ When should I use a Decorator vs a new Effect?¶
Use a Decorator when:¶
- You’re adding cross-cutting behaviour (VFX, SFX, logging, conditions)
- The behaviour should apply to many effects
- The core effect logic should remain unchanged
Use a new Effect when:¶
- You’re implementing new gameplay behaviour
- The logic is specific and not reusable as a wrapper
Rule of thumb:
Effects do gameplay. Decorators decorate.
❓ Why are Decorator priorities "backwards"?¶
They aren’t — they’re explicit.
- Lower priority values wrap first (inner)
- Higher priority values wrap later (outer)
At runtime:
- Outer decorators run BeforeApply first
- Inner decorators run closest to the core effect
This ordering is deterministic and intentional.
❓ Does Pickups handle multiplayer replication?¶
No. By design.
Pickups only answers:
“Is this actor allowed to consume this pickup locally?”
Replication, prediction, rollback, and despawning are the responsibility of your netcode.
Pickups provides: - Authority hooks - Clean seams for server-side execution
Nothing more — nothing hidden.
❓ Can I safely remove parts of Pickups?¶
Yes — as long as you respect boundaries.
Safe to remove if unused:
- Feedback/
- Utilities/
- Specific decorators or effects
Do not remove:
- Core/
- Interfaces/
- Definitions/
If you remove a module (Inventory, Currency, Health): - Pickups continues to function - Related effects simply no-op
❓ Is Pickups meant for no-code designers?¶
No.
Pickups is designed for developers who: - Are comfortable with C# scripting - Want modular, inspectable systems - Prefer explicit behaviour over magic
Designers can author Definitions, but system behaviour is intentionally developer-driven.
🧭 Final Guidance¶
If you’re unsure where something belongs:
- Gameplay logic →
PickupEffect - Reusable behaviour → Decorator
- Authoring data → Definition
- Scene glue →
Unity/ - UX response → Feedback
- Policy / rules → Authority
If you follow that split, Pickups will stay clean and scalable.