Skip to content

Health Rules

Folder Overview

This folder defines the rule contracts used by the damage and healing pipelines.

Rules allow behaviour to be extended without modifying core systems.


Purpose

Rules provide:

  • A composable pipeline for damage and healing
  • A way to inject behaviour externally
  • Separation between data (Contracts) and behaviour (Rules)

What Lives Here

Pipeline Model

Damage and healing follow this structure:

PRE Rules → Core Processing → POST Observers


PRE Rules

Interfaces:

  • IDamageRule
  • IHealRule

Semantics:

  • Run in ascending Priority
  • Execute sequentially
  • Receive a mutable context

They may:

  • Modify values (Multiplier, FlatDelta, etc.)
  • Set Cancelled = true to reject the operation
  • Return false to stop further rule execution

POST Observers

Interfaces:

  • IPostDamageRule
  • IPostHealRule

Semantics:

  • Run after evaluation completes
  • Receive the final context
  • Act as observers only

They must not:

  • Mutate internal health state directly
  • Re-run pipeline logic
  • Assume they run for rejected operations

Affinity — IDamageAffinity

Optional multiplier providers.

  • Return float?
  • null = no opinion
  • Combined by the consumer

Used for:

  • resistances
  • weaknesses
  • immunities

Important Notes

Behaviour

  • ctx.Cancelled = true marks the operation as rejected
  • return false stops further PRE rule execution

These are not the same and may be used independently or together.


Constraints

PRE rules are expected to:

  • Be suitable for hot paths
  • Be designed to avoid allocations
  • Avoid unintended side effects outside the context

Boundaries

Rules should not:

  • Depend on HealthSystem
  • Access internal state outside the context
  • Perform direct mutation of health values
  • Introduce gameplay systems outside rule scope

Rules operate on context only.


Usage Guidance

  • Use rules to extend behaviour without modifying core systems
  • Keep rules focused on a single responsibility
  • Avoid coupling rules to specific implementations

  • Contracts
  • Mutation
  • Lifecycle
  • Health System