Skip to content

03 — Potency Auras


Goal

Learn how potency scales status strength, how resistance scales status duration, and how both are verified through the controller-owned active state.


What This Scene Demonstrates

The core mental model:

potency changes strength → resistance changes duration → controller applies/recomputes → Active verifies runtime state

  • Potency configures DemoStatusPotency to scale effect strength.
  • Resistance configures DemoStatusResistance to scale effect duration.
  • Quick Apply builds real effects through StatusRegistry and submits them to StatusEffectController.
  • Active shows the controller-owned runtime state.
  • Potency recompute updates active potency through the controller.
  • Duration recompute updates active durations through the controller.
  • New applies naturally use the current adapters.
  • The scene may also include a StatusAuraZone, which can attach temporary zone providers, nudge controller recomputes, and optionally auto-apply sample statuses when actors enter or remain inside the trigger zone.

The adapters and aura-zone providers are optional public sample seams. The controller owns the real runtime result.


What To Look For

  • Overview Shows the Target, resolved Host, lifecycle counters, and whether potency and resistance adapters are present.

  • Potency Potency changes status strength. All is the global multiplier. Poison, DOT, HOT, and Magic multiply matching effects. Exact Id and Exact × target one status id. Apply Aura writes adapter fields and calls RecomputePotencyForAll(). Remove Aura removes the sample potency adapter and recomputes potency. Reset 1× restores neutral potency values.

  • Resistance Resistance changes status duration. All, Poison, DOT, HOT, and Magic scale matching durations. 1 means full duration. 0.5 means half duration. 0 effectively removes duration. Apply Resistance writes the sample resistance adapter. Refresh Active Durations calls the controller duration recompute path.

  • Quick Apply Builds real effects through StatusRegistry. Uses small demo defaults for magnitude and duration. Submits the effect through StatusEffectController.ApplyStatus(...).

  • Active Shows current controller-owned statuses. Each row shows status id, runtime type, stacking rule, remaining duration, and a Remove action. Use this tab to verify what potency or resistance changes actually did.

  • Aura Zone / Totem (Scene Object) If present in the scene, StatusAuraZone is a trigger-zone helper. On enter, it can attach temporary potency and resistance providers to the resolved controller host. It can call controller recompute methods on enter, stay, exit, or provider changes depending on its settings. It can optionally auto-apply sample statuses on enter or while the actor remains inside. On exit or disable, it removes the temporary zone providers it added.

Read the scene as:

configure adapter or enter zone → apply/recompute through controller → verify Active state


Sample Scope

This scene covers:

  • Adding and configuring DemoStatusPotency
  • Removing DemoStatusPotency
  • Recomputing active potency through StatusEffectController
  • Adding and configuring DemoStatusResistance
  • Removing DemoStatusResistance
  • Recomputing active durations through StatusEffectController
  • Applying real sample statuses through StatusRegistry
  • Verifying live controller state through the Active tab
  • Removing active effects through the controller
  • Showing a resolved Host when the controller is found on the target or a child object
  • Demonstrating a scene StatusAuraZone if present
  • Attaching temporary zone potency and resistance providers on trigger enter
  • Removing temporary zone providers on trigger exit or disable
  • Optionally auto-applying sample statuses through the aura-zone helper

This scene does not cover:

  • Full combat behaviour
  • Full Health integration behaviour
  • Production aura-zone architecture
  • Networking implementation
  • Production authority implementation
  • Permanent project-specific potency or resistance design

DemoStatusPotency, DemoStatusResistance, and StatusAuraZone are sample/demo seams for this teachable. Real projects can replace the adapter/provider approach with their own systems implementing the same public contracts.


Authority Note

This scene may include a permissive sample authority setup for demonstration purposes. Production projects should provide their own authority implementation.


Networking Reminder

RevFramework does not include networking. Multiplayer support is the developer’s responsibility.


How To Use

  1. Enter Play Mode.
  2. Confirm the Target is assigned.
  3. Confirm the panel resolves a Host with StatusEffectController.
  4. Open Potency.
  5. Toggle Enabled as needed.
  6. Set Exact Id if you want to target one status id.
  7. Adjust Exact ×, All, Poison, DOT, HOT, or Magic.
  8. Click Apply Aura to write the potency adapter and recompute active potency.
  9. Or click Remove Aura to remove the potency adapter and recompute active potency.
  10. Optionally click Reset 1× to restore neutral potency values.
  11. Open Resistance.
  12. Toggle Enabled as needed.
  13. Adjust All, Poison, DOT, HOT, or Magic.
  14. Click Apply Resistance to write the resistance adapter.
  15. Click Refresh Active Durations if you want already-active durations recomputed through the controller.
  16. Open Quick Apply.
  17. Choose a known status id.
  18. Click Apply Sample.
  19. If the scene includes a StatusAuraZone, move the actor into the trigger zone to let the zone attach temporary providers and optionally auto-apply configured sample statuses.
  20. Move the actor out of the zone to remove the temporary zone providers.
  21. Open Active.
  22. Verify the controller-owned active effects, remaining time, and runtime state.
  23. Use Remove to remove an active effect through the controller.

Failure Behaviour

  • Missing Target Meaning: the panel has no object to resolve from. Corrective action: assign a target GameObject with StatusEffectController, or create a scene object named EnemyCapsule.

  • Missing Controller Meaning: the target or resolved host does not have a StatusEffectController. Corrective action: add StatusEffectController to the target or resolved host.

  • No Known Status Ids Meaning: StatusRegistry returned no ids. Corrective action: register at least one status definition, then reopen or refresh the scene.

  • Apply blocked: no controller Meaning: there is no valid StatusEffectController available. Corrective action: assign a valid target or host, then try again.

  • Registry could not build sample Meaning: StatusRegistry could not create the selected sample effect. Corrective action: choose another id or register that status.

  • Potency blocked: no target Meaning: there is no target to resolve the host from. Corrective action: assign a target, then try again.

  • Potency adapter could not be resolved or created Meaning: the panel could not create or find DemoStatusPotency on the host. Corrective action: check the target and host setup.

  • Remove Aura blocked: no potency host found Meaning: the panel could not resolve the host object. Corrective action: assign a valid target or host, then try again.

  • No potency adapter was present Meaning: there is no DemoStatusPotency component to remove. Corrective action: use Apply Aura first if you want to create one.

  • Resistance blocked: no host found Meaning: the panel could not resolve the host object. Corrective action: assign a valid target or host, then try again.

  • Resistance adapter could not be resolved or created Meaning: the panel could not create or find DemoStatusResistance on the host. Corrective action: check the target and host setup.

  • Refresh blocked: no controller Meaning: there is no valid StatusEffectController available for duration recompute. Corrective action: assign a valid target, then try again.

  • Aura zone does not affect an actor Meaning: the actor may not pass the layer mask, required tag, 2D/3D trigger mode, or controller-host resolution. Corrective action: check the zone physics settings, actor layer/tag, trigger collider setup, and whether the actor resolves to a StatusEffectController host.

  • Aura sample does not auto-apply Meaning: applyOnEnter may be empty, seedDefaultSample may be off, repeat timing may not have elapsed, or the requested sample may not be buildable in the current project setup. Corrective action: configure applyOnEnter, enable seedDefaultSample for the demo path if needed, check repeat interval, and verify the requested sample status is available.

The operation result explains what happened in the panel. The Active tab confirms the actual controller state.


Behind The Scenes

This panel uses:

  • StatusRegistry.KnownIdsString()
  • StatusRegistry.TryBuild(...)
  • StatusEffectController.ApplyStatus(...)
  • StatusEffectController.RecomputePotencyForAll()
  • StatusEffectController.RecomputeDurationsForAll(...)
  • StatusEffectController.RemoveStatusAt(...)
  • StatusEffectController.Active
  • StatusEffectController.StatusApplied
  • StatusEffectController.StatusRefreshed
  • StatusEffectController.StatusRemoved
  • StatusEffectController.StatusExpired
  • StatusContext.FromAbility(...)
  • IStatusEffect
  • DemoStatusPotency
  • DemoStatusResistance
  • StatusAuraZone
  • ZonePotencyProvider
  • ZoneResistanceProvider
  • IStatusPotency
  • IStatusResistance

Key Takeaway

Potency changes how strong a status is.

Resistance changes how long a status lasts.

The panel shows manual adapter configuration, and the scene aura zone can demonstrate temporary provider behaviour.

In both cases, the controller owns the real runtime result and the Active tab proves what actually happened.