Skip to main content

Features

Power ships with a complete, production-ready toolkit for stat-driven gameplay. Everything below is built in — you configure assets in the Inspector and connect them, instead of writing and re-writing damage formulas, buff timers, immunity checks and reflection logic in every project.

This page is the full catalogue, grouped by concept. Every entry names the asset that provides it and gives a concrete example.

tip

Not sure where to start?

Skip to the Mechanics Cookbook — a list of gameplay mechanics you can build, each mapped to the Power feature that does the work.


Stat Types​

There are no predefined stats in Power. You define what a Stat means through its type and its relationships. These are the types you can build from.

Value stats​

StatWhat it storesExample
Numerable (Float / Int)Numeric values with arithmetic and comparison supportAttack, Gold, Level
ClampedA numeric value locked between a min and max borderHealth: 0–100
Edge ValueReturns the lowest or highest candidate among the raw value and every Modifier, instead of summing themA MoveSpeedSlow stat where only the strongest slow applies
VectorVector2, Vector3, Vector2Int, Vector3IntPositions, directions, knockback vectors
StringText valuesNames, dialogue keys, localization ids
ActorA reference to another Actor"the enemy I'm currently hooked to"
Effect PackOne or more Effect Packs stored as stat dataA reusable "on death" payload other systems can read

Clamped stats: Allow Exceed​

A detail that matters. Give Health a max of 100 and apply a +30 Modifier:

  • Allow Exceed = true → Raw Value becomes 130, Value shows 100. Take 25 damage and the raw drops to 105 — the visible Health doesn't move. Wrong for consumables.
  • Allow Exceed = false → the Modifier is trimmed on the way in, so the same 25 damage correctly leaves you at 75.

Consumable stats want it off; utility stats often want it on. Both are one checkbox.

Stat borders from other stats​

A Clamped Stat's min/max can be a constant or resolved from another Stat via the MinValue / MaxValue Relative Keys — so "max Health scales with Level" is a relationship, not code.

Behavioural stats​

These stats do something rather than just holding a number.

StatWhat it doesExample
GeneratorGenerates values over time by dispatching EffectsHealth regen 0.5/s, mana recovery, resource production, poison damage-over-time
ModifierTransforms an incoming Effect value (Flat / Rate / Multiplier)+20% Defense
Conditional ModifierA Modifier that only fires when its condition passes"Deal 25% more damage to targets below 50% Health"
Duration ModifierChanges how long a Modifier lasts"Buffs last twice as long", "Debuffs on me are 50% shorter"
LimiterClamps an incoming Effect value by a min or max rule"Damage can never exceed 2% of the target's Health"
State Based EffectFires an Effect automatically while a stat condition holds"Gain 50% Defense while Health is below 50%"
Event Based EffectFires an Effect when a named event is dispatched"Increase Morale when an enemy dies"
Effect BundleApplies its Effect Pack to its host on initialization, and removes it cleanlyEquipping a weapon injects the weapon's whole stat system into the character
DirectorRedirects the whole Effect to other Actors before processingTaunt, redirect incoming healing to the whole team
ReflectorRedirects the final value after processing5% life steal, thorns, splash damage to nearby enemies
Counter EffectTriggers a different Effect after an incoming one was applied — or blocked"Slow whoever attacks me", "break the shield when it blocks", chain reactions
Intervener EffectTriggers a different Effect before an incoming one lands, and can block itParry and riposte, revive instead of dying
TweenerMoves another Stat from a start to an end value over time, with easingDash, leap, knockback, pull toward a hooked enemy

Generators are more than regen​

Generators never touch the target Stat directly — they generate through an Effect, so the full processing funnel still applies. They support:

  • Interval mode (a tick every N seconds) or continuous mode (value = amount per second)
  • Turn-based generation for turn games
  • Stackable on/off — combine all Modifiers into one tick, or generate each Modifier independently
  • Toggleable — switch on/off from another stat's value (On Zero / On Positive)
  • Toggle Off On Zero — pauses itself at 0 and resumes automatically

That last set is how Stormchannel's charge meter in 3DCells builds up while the button is held.

Container stats​

StatWhat it does
Source Separated (SrcSep)Keeps its own combined value and a private inner Stat per source Actor
Signature Separated (SigSep)Holds multiple child Stats of the same role, processed in a configured order

Source Separated example. Three enemies each poison you. The SrcSep Poison Stat stores the combined poison and three inner stats — one per attacker. Now you can remove only that attacker's poison, or reflect only their share of the damage. Without it, you'd have a single blended number and no way back.

Signature Separated example. PhysicalAttack needs two reflection mechanics at once — HealthSteal and DamageReflect. A stat can only reference one Reflector Relative Stat, and making a new Relative Key per reflector doesn't scale. A SigSep stat holds both, and the SigSep Reflect Processors run them in order.


How a Stat Value Is Built​

Every Stat resolves through a defined pipeline, so you always know where a number came from.

Default Value → Raw Value (+ Modifiers) → Modified Value (+ Injectors) → Value
  • Modifiers are temporary contributions — they expire, or you remove them.
  • Injectors transform the value every update — add, multiply, clamp, or override it.

Full breakdown in How Stat Values Are Evaluated.


Effect Features​

An Effect is the data describing a change. Here is what you can configure without writing any code.

Effect
Target Stat:Health
Attribute Stat:PhysicalAttack
Value:-50

Lifetime and timing​

FeatureDescriptionExample
Apply Type: PermanentApplies the change permanentlySpend 10 Gold
Apply Type: TemporaryCreates a Modifier that can expireGain 50 Shield
Modifier Type: With DurationRemoved automatically when the timer or turn count runs out+20% Attack for 10 seconds
Modifier Type: Managed By CodeStays until your code removes itAn aura that lasts while you stand in a zone
DelayApply the Effect after a wait"Deal −40 damage after 3 seconds"
DurationHow long the Modifier lives10s
TurnTurn-count lifetime instead of seconds"Lasts 3 turns"
UpdaterWhich Updater drives the Modifier's lifetimeReal-time clock vs. turn clock

Every one of Delay, Duration and Turn can come from a Stat instead of a constant. So "cooldown scales with the caster's Haste" is configuration, not a special case.

Value calculation​

FeatureDescription
ValueA fixed value
Use Stat ValuePull the value from a Stat instead — this is how one shared "deal damage" Effect serves every weapon and card in a game
Use Value AdapterTransform the value before processing, including converting between stat types

Usage Types — percentage-based effects​

For a target Stat with Value 15, Min 10, Max 30, and an Effect value of 0.2:

Usage TypeResultReads as
Constant15 + 0.2Flat amount
Percentage Of Value15 + (15 × 0.2)"Deal 20% of current Health"
Percentage Of Range15 + ((30 − 10) × 0.2)"Heal 20% of Max Health"
Percentage Of Missing15 + ((30 − 15) × 0.2)"Heal 20% of missing Health" — execute and recovery mechanics
Percentage Of Remain15 + ((15 − 10) × 0.2)"Deal 20% of remaining Health"

Use Seperate Percentage Source Stat lets the percentage be calculated from a different Stat than the one being modified — "deal damage equal to 5% of the target's Max Health, applied to their Shield".

Targeting​

FeatureDescriptionExample
Single StatTargets one Stat by keyHealth
Tagged StatsTargets every Stat matching a tag, container and environment filter"Reduce all elemental defences by 50%", "Strip every stat tagged Debuff"
Effect AttributesFlags carried by the Effect that Processors key off ofOnly Effects marked Critable can crit
Custom Targeters, Custom Actors, Targeting FiltersReusable targeting assets: filtered relation scopes, the closest foe in sight, static Actors, random picks"Bounce to a random enemy within 6 m"

Specialized Effects​

EffectWhat it doesExample
InjectorAttaches a value transformation to a StatAdd a permanent "×2 damage" transform while a Power card is active
LinkerLinks one Stat's value into another and keeps it in sync"Every 100 Dexterity increases Move Speed by 20%"
Modifier RemoverRemoves existing Modifiers, filtered by who applied themCleanse — remove only debuffs applied by enemies
Injector RemoverRemoves Injectors by tag and source ActorEnd an aura when the caster dies
Effect Timer ModifierChanges the remaining time on active Modifiers"Killing an enemy reduces your cooldowns by 0.2 seconds"
Effect PackBundles several Effects so they travel and apply togetherOne "hit" pack = damage + stun + VFX trigger
TweenRestarts a Tweener in one Effect: endpoints, duration, progress and toggle"Dash 4 m forward over 0.2 s"
ConditionalApplies a Then or an Else pack depending on stat checks — control flow without a script"Dash to the closest foe in sight, otherwise stay"

Removers filter by Relation, Team, a Custom Targeter, or a specific Actor Stat — so "dispel only what my ally cast on me" is a filter setting.


The Processing Funnel​

An Effect never touches a Stat directly. It travels through a configurable funnel where Processors can inspect, modify, block or react to it. See Effect Process Flow.

Effect (BS / AS / MAS) → PreProcess → Process → PostProcess → DurationProcess → FeedbackProcess → Stat

Pre-process — should this Effect happen at all?​

ProcessorWhat it doesExample
ImmuneBlocks the Effect entirely"Immune to stun", "immune to Physical attacks"
Cast RestrictorStops the source from applying it"Silenced — cannot cast magic damage"
Hit RateRolls accuracy vs. dodge and can miss80% Hit Rate
Modifier Count LimitCaps how many Modifiers can stack"An enemy can't have more than one Poison" — and it can count per source
DirectorForwards the whole Effect elsewhereTaunt, guard, redirect healing to the team
Intervener EffectFires a different Effect before this one lands, and can block itRetaliate on being hit, parry
Attribute Stat EliminatorRemoves selected Attribute Stats from processing without blocking the Effect"Ignore the Fire part of this attack, keep the Physical part"
Effect Attribute EliminatorStrips Effect Attributes to disable specific mechanics"Orc attacks cannot critically hit" — remove Critable

Contribution — what is the value?​

Standard Processors build Contribution Data from three contribution types: Flat (10 + 2 = 12), Rate (10 + 10% = 11) and Multiplier (10 × 1.5 = 15).

ProcessorWhat it doesExample
ModifierApplies Modifier Stats to the value+20% Attack
Conditional ModifierApplies Modifiers only when conditions pass+50% Crit Rate against Undead
Critical HitRolls crit rate from both sides, applies the crit multiplier, tags the Effect CriticalCrit Rate 20%, Crit Multiplier 150%
Multiplier Against SuppressorCurve-based attack-vs-defence formula with tunable offset, scale and exponentPhysical Attack vs. Physical Defense

Post-contribution — shape the final number​

ProcessorWhat it doesExample
ShieldConsumes a Shield Stat before the remainder reaches the target10 Shield eats 10 of a 15 damage hit; 5 goes to Health
LimiterMin/max clamps the value, optionally as a percentage of another stat's range, missing, or remaining portion"Damage can never exceed 2% of the target's Health", "any hit deals at least 5"
ReflectorSends a share of the final value to other ActorsLife steal, thorns, splash
Min Max OffsetRandomizes within a range around the base valueWeapon damage range 15–25 on a base Attack of 20
Block By Result AttributeBlocks the Effect based on what happened during processing"Block critical hits" — after the crit roll succeeded

Limiters can also gate on Result Attributes, so "cap only critical damage" is one setting.

Post-process — react to what happened​

ProcessorWhat it doesExample
Counter EffectTriggers an Effect after this one appliedRiposte on taking damage
Modifier ReplacerReplaces an existing Modifier instead of rejecting the new oneRe-applying Poison refreshes it rather than stacking

Duration process​

Duration Processors modify a Modifier's lifetime as it's added — with Flat / Rate / Multiplier contributions, stat conditions and Result Attribute checks.

A BuffDurationModifier with value 2 and Contribution Type Multiplier turns a 10-second buff into a 20-second buff.

Feedback process​

Feedback Processors turn the result into presentation — floating numbers, VFX, SFX, camera shake, hit reactions, combat log. They can select feedback from the Target Stat and the Result Attributes together, so a critical Health hit and an ordinary Mana drain produce different feedback with no branching in your code.

Power Core ships no built-in Feedback Processors on purpose — presentation differs per project. Working implementations are in the Samples package.

Signed processors​

Regular Processors don't care about the sign of the value. Signed variants define separate Relative Keys for positive and negative values — so a stat can be immune to damage but still healable, or reflect damage without reflecting heals.

Result Attributes​

Processors tag an Effect as it flows — Critical, Reflected, and your own. Later stages read those tags. This is what makes "block crits", "cap only critical damage", and "double buff duration on critical effects" configurations rather than code branches.


The Relationship System​

This is the idea the whole framework rests on: a Stat doesn't contain its rules, it points at the stats that hold them.

Health doesn't know what immunity is. It has a NegativeImmune Relative Key pointing at ImmuneToNegativeHealthEffects. The Immune Processor follows the relationship and decides. Add a new rule by adding a relationship — never by editing Health.

FeatureDescription
Relative Stat KeysNamed relationships the funnel resolves during processing
Target Stat vs Attribute Stat separationThe same Stat can behave differently depending on the role it plays in an Effect
Source / Target resolutionEvery relationship is resolved separately for the attacker and the defender, and combined

Why the role separation matters. Attack used as a Target Stat ("+5 Attack buff") resolves Modifier_Applying → AttackModifier. The same Attack used as an Attribute Stat ("deal damage using Attack") resolves Modifier_ApplyingAS → AttackDamageModifier. Two different modifiers, two different intents, one stat — with no chance of an Attack buff accidentally inflating outgoing damage.


Data Organization​

AssetRole
Stat RepositoryThe full stat set an Actor uses at runtime
EnvironmentGroups Containers — one Actor can have several
ContainerGroups Stat Definitions of the same type
Stat KeyLayered addressing for any Stat
SigSep Stat KeyAddresses a Stat inside a Signature Separated Stat
TagsLet one Effect target many Stats at once

Multiple Environments in practice. A robot with independently damageable limbs: give each limb its own Environment with its own Health, damage multipliers and reactions. Shoot the arm to zero and disable just that limb — no bespoke limb system required.

Reusable authoring packs​

AssetWhat it saves you
Premade Relation PackDefine a common relation setup once, reuse it across stats and projects
Premade Asset PackSame idea for frequently created assets without relations

Injectors and Linkers​

Modifiers expire. Injectors are persistent transformations applied on every stat update, in a configurable Injection Order.

Injector Models — inject a fixed value​

ModelBehaviour
Absolute ValueOverrides the stat with a fixed value
CombineModifies by Flat / Rate / Multiplier
LimitClamps the stat value
Alter ModifiersRewrites the Modifier values applied to the stat — "reduce all debuff values by 50%"

Linker Models — inject another Stat's value​

ModelBehaviour
CombineCombines one stat into another — Flat / Rate / Multiplier
Combine By ConditionAdds / rates / multiplies by a constant, but only while a condition holds (on the injector Stat or several Stats)
Absolute ValueOverrides the target with the source stat's value
LimitClamps using another stat as the bound
Eased ValueMultiplies by an eased curve of the source stat
Alter ModifiersRewrites the target's Modifier values by another stat
Multiplicative Reduction TransformerStacked reductions multiply instead of adding — they never reach 100 %
Add Attribute Value By ConditionAdds Effect / Result Attribute flags while a condition holds
Insert / Merge SigSep StatsCompose Signature Separated stats at runtime
Just NotifyOnly makes the target update when the source changes

A common pattern: a Combine By Condition Linker Definition injects +1 into a skill's UseBlockers while its cooldown is above zero. That single injector is the cooldown gate.


Conditions, Scalers and Adapters​

The connective tissue that keeps everything data-driven.

Stat Conditions​

ConditionChecks
Numerable ComparerA number against a comparison rule
StringString equality
Actor Null CheckWhether a referenced Actor still exists
Vector Index / MagnitudeA vector component, or its length
DistanceDistance between two vector stats — proximity mechanics
DotFacing checks — "is the enemy looking at me?"
Sum / DifferenceCombined or compared stat values
DispatcherMany conditions evaluated together
DynamicBoth sides of the comparison read from Stats — thresholds that move at runtime

Stat Scalers​

Stat Scalers return a multiplier derived from stats — including Map Value (remap one range onto another), Distance, Dot, Map Sum Value and Map Dif Value.

Deadeye String in 3DCells uses this to scale the critical multiplier by how close the release was to the perfect window.

Value Adapters​

Value and Stat Adapters convert and transform values in flight — including type conversion, so a Float stat can drive a Vector effect.

Vector operations available out of the box: Direction, Normalize, Dot, Cross, Reflect, Project On Plane, Sum, Subtract, To Uniform Vector, To Vector Index. Adapters can be chained, and a Tree Operation merges two stats — so a dash destination (Position + Direction × 4, flattened) is one adapter, with no script.


Turn-Based and Real-Time​

Power treats pacing as configuration.

  • Updaters drive time-dependent elements — Effects, Effectors and Stats. Which Updater an Effect uses is a field.
  • Every duration has a Turn counterpart: Effects, Generators and Modifiers can all live on a turn clock.
  • You can run both in the same project.

The proof ships with the plugin: 3DCells is real-time action, Slay The Sphere is a turn-based deck builder, and both are built from the same assets.


World Systems​

SystemPurpose
DiplomacyTeams and relations — every targeting and filtering option reads from it
UpdaterTime and turn progression
LogRuntime logging with category and per-object filtering
PowerWorldThe world Actor: global stats, static Actor lookup, the home of Diplomacy and the Updater
SaveSave Profiles capture static Actors' stats to JSON and restore them when the Actors spawn again
ActorRuntime entity holding Stats, extendable via Extensions
EffectorDelivers Effect Packs to targets

Tooling​

Power is a framework you live in daily, so it ships with editor tooling that respects that.

ToolWhat it gives you
Power EditorOne window to create, organize and manage every Power asset
Power FlowRuntime debugger showing an Effect's complete journey — every Processor that ran and what it produced. Plus a Trigger tab to fire Effects from the editor before any gameplay exists to fire them
RelationsThe relation graph of one or more Stats: every Stat and Effect connected to them, before you change them
SearchFind Stats by name inside an Environment or Repository
ValidatorCatch setup mistakes (missing Keys, misplaced Processors, SigSep collisions) before Play mode
OrphansFind and clean up Power assets nothing references
AccessPin frequently used assets and jump back through recent history
Log FilteringNarrow logs to one system, or one Actor instance

Power Flow is the answer to the usual complaint about data-driven systems. When a number comes out wrong, you don't guess — you open the flow and read exactly which Processor changed it.


Mechanics Cookbook​

Every mechanic below is achievable by configuring assets. No custom code required unless noted.

Damage and defence​

MechanicBuilt from
Weapon damage range 95–126Min Max Offset Processor
Critical hits — 20% rate, 150% multiplierCritical Hit Processor
Conditional crits — +50% crit vs. UndeadConditional Modifier + Stat Condition
Crit multiplier that scales with charge accuracyConditional Modifier + Map Value Scaler
Attack vs. Defense curveMultiplier Against Suppressor
Shields that absorb before HealthShield Processor
Damage cap — "never more than 2% of target Health"Limiter, Percentage Of Range
Damage floor — "any hit deals at least 5"Limiter, Min
Dodge and accuracy — 80% hit rateHit Rate Processor
Block critical hitsBlock By Result Attribute
Prevent crits from a whole enemy typeEffect Attribute Eliminator (remove Critable)

Buffs, debuffs and status​

MechanicBuilt from
+20% Defense buffModifier Stat, Rate contribution
Temporary buff — 50 Shield for 10 secondsTemporary Effect + Duration
Delayed damage — −40 after 3 secondsEffect Use Delay
Poison / regeneration ticking over timeGenerator Stat
"Only one Poison per enemy"Modifier Count Limit
"Re-applying Poison refreshes it"Modifier Replacer
"Only one Poison per attacker"Modifier Count Limit, source side
Remove a specific attacker's debuffSource Separated Stat + filtered Modifier Remover
Cleanse all debuffsTagged Stats targeting + Modifier Remover
Buffs last twice as longDuration Modifier, Multiplier
Longer duration on critical effects onlyDuration Modifier + Result Attribute check
Aura active while standing in a zoneManaged By Code Modifier, or State Based Effect
"Gain 50% Defense below 50% Health"State Based Effect
Stat immunity — "immune to stun"Immune Processor
Immune to damage but still healableSigned Immune Processor
Silence — "cannot cast magic damage"Cast Restrictor

Reactions and redirection​

MechanicBuilt from
Life steal — 5% of damage dealtReflector
Thorns — deal damage back to attackersReflector or Counter Effect
Slow whoever attacks meCounter Effect
Reflect damage to nearby enemies, weighted by distanceReflector + Value Distributer
Taunt — redirect Effects to the guardianDirector
Redirect incoming healing to the whole teamDirector + Team targeting
"When this enemy dies, damage every other enemy"Counter Effect on the death condition
"Gain energy and draw a card on any kill"Counter Effect linked into KillCounterEffects

Scaling and relationships​

MechanicBuilt from
"Every 100 Dexterity increases Move Speed by 20%"Linker + Stat Injector
Max Health scales with LevelClamped Stat with a Stat Border
Parent stats — Debuff Immunity implies Stun ImmunityRelative Stat Keys
Cooldown reduction on kill — −0.2sEffect Timer Modifier
Cooldowns that gate ability useStat Injector into UseBlockers
Cost that grows each time you take damageCounter Effect + Linker into the cost stat
Cost that drops per card discarded this turnLinker from a per-turn counter

Attributes and typing​

MechanicBuilt from
Physical / Magical, Fire / Water / Electric, Orc / HumanAttribute Stats
One attack that is Magic and Lightning and Orb at onceMulti Attribute Stat Effect
"Immune to Physical, but Fire still lands"Attribute Stat Eliminator
"Ignore Lightning damage effects"Attribute Stat Eliminator
Reduce all elemental defences at onceTagged Stats targeting

Resources and movement​

MechanicBuilt from
Clamped resources — Max Health: 100Clamped Stat
Ammo that refills on killClamped Int Stat + Counter Effect
Charge meters that build while heldGenerator with Toggle Stat
Absolute overrides — "set Defense to 50,000 for 5s"Absolute Value Injector, temporary
Knockback, pulls, dashes without physicsTweener + one Tween Effect
Facing-based mechanics — "crit enemies facing you"Dot Condition
Proximity mechanicsDistance Condition

See It Running​

Everything on this page is demonstrated in projects that ship with Power — with full source.

  • 3DCells — a real-time action demo with 15 weapons and a shield. Conditional crits, charge states, status effects, animation-driven multi-state skills, collision Effects, environmental interaction.
  • Slay The Sphere — a turn-based deck builder with 20 cards, 7 relics and 3 potions, all composed from a shared library of reusable value Stats and generic Effects.
  • General Expansions — collision-based Effectors and a full Skill system, source included and free to modify.

Each sample page walks through the actual assets used, so you can open the same setup in the Editor and take it apart.


Extending Power​

Power is deliberately unopinionated about your game. Every system has an extension point:

  • Custom Processors for rules Power doesn't ship
  • Custom Feedback Processors for your presentation layer
  • Custom Targeters, Value Distributers, Value Adapters, Conditions and Scalers
  • Custom Actor Extensions
  • Injector and Linker models of your own
  • Custom Custom Actors and Targeting Filters

And Power stays in its lane — it operates within a well-defined scope and never asks you to route your whole game through it.

Ready to try it? Start with Getting Started.