Skip to content

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:

  1. Authority
  2. Is an IPickupAuthority present and returning false?
  3. Remember: no binder = allow by default

  4. Null-damageable rules

  5. Does the effect require IDamageable?
  6. If yes, and the actor doesn’t have one, the effect is skipped

  7. Conditional decorators

  8. Health %, tag, or RNG conditions may be blocking execution

  9. Cooldowns

  10. The effect may still be on cooldown for that owner

  11. Layer / tag filters

  12. EffectPickupCore may 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 logicPickupEffect
  • Reusable behaviour → Decorator
  • Authoring data → Definition
  • Scene glueUnity/
  • UX response → Feedback
  • Policy / rules → Authority

If you follow that split, Pickups will stay clean and scalable.