Skip to content
smartargs
VantageDocumentation

Abilities reference

The component that casts abilities, the ability and effect assets, input and ground targeting, and the API for writing your own effects and executors. For how to use it, see Abilities.

VtUnitAbilities

Component. Add it with Add Component → Vantage → Abilities → VtUnitAbilities. Adds VtUnitStats, VtCombatEngagement automatically.

Casts a unit’s abilities: keeps the granted abilities, runs cast bars, channels, cooldowns, the global cooldown and the auto-attack slot, and raises an event for each step. Every unit gets it with VtUnit; cast with TryCast or through VtAbilityHotkeys.

Scripting API

Member Description
IReadOnlyList<VtAbilityScheduler.AbilityInstance> Granted { get; } Read-only snapshot of granted abilities.
float GCDRemaining { get; } Seconds remaining on the global cooldown. 0 = off GCD.
VtAbilityDefinition CurrentCast { get; } Definition of the ability currently being cast, or null if idle.
float CurrentCastRemaining { get; } Seconds remaining on the current cast bar. 0 if not casting.
float CurrentCastTotal { get; } Full cast-time of the current cast. 0 if not casting.
VtAbilityDefinition AutoCastDefinition { get; } Ability in the auto-fire slot, or null.
IVtAttackable AutoCastTarget { get; } Target in the auto-fire slot, or null.
VtAbilityScheduler Scheduler { get; } The scheduler behind this component, for advanced integrations such as driving abilities on a headless server. Prefer the other members of this component.
event Action<VtAbilityDefinition> OnAbilityCastStarted Fires when a non-zero-cast-time cast begins.
event Action<VtAbilityDefinition> OnAbilityCast Fires after the ability’s effects run.
event Action<VtAbilityDefinition> OnAbilityCastInterrupted Fires when an in-progress cast was cancelled.
event Action<VtAbilityDefinition, float> OnAbilityCastPushedBack Fires when a hit pushed back the cast or channel in progress. The float is the seconds now left.
event Action OnGCDStarted Fires when the GCD starts.
event Action<VtAbilityDefinition> OnAbilityChannelTick Fires every channel tick during an active channel.
event Action<VtAbilityDefinition> OnAbilityChannelEnded Fires when a channel completes its full duration. Interrupts emit OnAbilityCastInterrupted instead.
bool HasAbility(VtAbilityDefinition def) True if the ability is in the granted list.
float GetCooldown(VtAbilityDefinition def) Seconds remaining on the given ability’s cooldown.
float GetCooldownFraction(VtAbilityDefinition def) Current cooldown fraction for UI swirls.
void ApplyCastStartedFromNet(VtAbilityDefinition def) Raise OnAbilityCastStarted for a cast that started on another copy of this unit, so cast animations and cues play here. Runs nothing, charges nothing and starts no cast bar. Used by replication; never call it for a cast this copy started.
void ApplyCastFromNet(VtAbilityDefinition def) Raise OnAbilityCast for a cast another copy of this unit resolved. Runs no effects and starts no cooldown. Used by replication; never call it for a cast this copy resolved.
void ApplyCastInterruptedFromNet(VtAbilityDefinition def) Raise OnAbilityCastInterrupted for a cast another copy of this unit lost. Refunds nothing. Used by replication; never call it for a cast this copy lost.
void ApplyCastPushedBackFromNet(VtAbilityDefinition def, float secondsLeft) Raise OnAbilityCastPushedBack for a cast or channel another copy of this unit had pushed back, with the seconds it has left. Changes nothing here. Used by replication; never call it for a pushback on this copy.
void GrantAbility(VtAbilityDefinition def) Grant an ability to this unit. Idempotent.
void RevokeAbility(VtAbilityDefinition def) Revoke an ability — also clears auto-fire / interrupts if affected.
VtAbilityCastFailReason TryCast(VtAbilityDefinition def, VtAbilityTargetData targetData) Try to cast def at targetData. Returns Success when the cast started or resolved, otherwise why it was refused.
VtAbilityCastFailReason TryCastNow(VtAbilityDefinition def, VtAbilityTargetData targetData) Validate and resolve a cast this frame, without the cast bar. For an authoritative side replaying a cast a client already waited for.
void InterruptCast() Cancel the current cast (refund + drop queue).
void SetAutoCast(VtAbilityDefinition def, IVtAttackable target) Install a (def, target) pair in the auto-fire slot. Keeps VtCombatEngagement.Target in sync so range / chase queries agree.
void ClearAutoCast() Clear the auto-fire slot. Does not touch engagement or cast state.
void Tick(float deltaTime) Advance casts, channels and cooldowns by deltaTime seconds. Runs every frame on its own, or from VtTickManager when it drives the simulation.

VtAbilityHotkeys

Component. Add it with Add Component → Vantage → Movement → VtAbilityHotkeys. Adds VtUnitAbilities automatically.

Casts abilities from input actions. Put it on the player prefab, fill the slots with abilities, and each press casts at what makes sense for the ability’s targeting mode: self-cast abilities on the caster, single-target abilities on the unit under the cursor or else the current target, ground-point abilities at the point under the cursor. Failures surface through OnCastFailed for “out of range” feedback. A hotbar draws the slots from Slots and the cooldowns from VtUnitAbilities.

Inspector fields

Field Type Default Range Description
Slots (slots) VtAbilityHotkeys.Slot[] 5 entries Abilities in slot order. Slot 1 casts on Ability 1, key 1 by default.
Ground Mask (groundMask) LayerMask Everything Layers that count as ground for ground-point abilities.
Unit Mask (unitMask) LayerMask Everything Layers the hover check considers when looking for a unit under the cursor.
Ray Distance (rayDistance) float 500 ≥ 1 Maximum cursor raycast distance in world units.
Ground Targeting (groundTargeting) VtGroundTargeting CastAtCursor Cast At Cursor casts ground abilities the moment the key is pressed. Aim And Confirm shows where the ability will land and casts on Confirm Target or a second press; Command or Cancel aborts.
Cancel Aim Action (cancelAimAction) InputActionReference None Aborts aiming a ground ability. Empty uses Cancel from the Vantage input actions, Esc by default.
Confirm Target Action (confirmTargetAction) InputActionReference None Casts the ground ability being aimed. Empty uses Confirm Target, the left mouse button by default. When it shares a button with Command, confirming wins.
Command Action (commandAction) InputActionReference None Also aborts aiming. Empty uses Command, the right mouse button by default.

Scripting API

Member Description
IReadOnlyList<VtAbilityHotkeys.Slot> Slots { get; } The slots in order, for drawing a hotbar.
VtAbilityHotkeys.CursorRayProvider CursorRay { get; set; } Where the cursor ray comes from. Defaults to the main camera through the mouse; replace it for gamepad cursors or a custom camera.
VtGroundTargeting GroundTargeting { get; set; } How ground abilities are cast. Switching to Cast At Cursor cancels aiming.
bool IsAiming { get; } True while a ground ability waits for its confirm click.
VtAbilityDefinition AimAbility { get; } The ability being aimed, or null.
Vector3 AimPoint { get; } The ground point under the cursor while aiming.
bool HasAimPoint { get; } True while the cursor is over ground.
bool IsAimInRange { get; } True while the aim point is within the ability’s range.
float AimRadius { get; } The area radius of the ability being aimed, or 0.
bool BlocksPointerThisFrame { get; } True while aiming and on the frame aiming ended. Click input and selection ignore pointer presses then, so a confirm or cancel click does not also walk or select.
event Action<int, VtAbilityDefinition> OnSlotPressed Fires when a slot with an ability is pressed, before the cast is attempted.
event Action<VtAbilityDefinition, VtAbilityCastFailReason> OnCastFailed Fires when a press did not result in a cast, with the reason.
event Action<VtAbilityDefinition> OnAimStarted Fires when aiming a ground ability starts.
event Action<VtAbilityDefinition, bool> OnAimEnded Fires when aiming ends: true when the ability was cast, false when aiming was cancelled or the cast was refused.
void Assign(int slotIndex, VtAbilityDefinition ability) Put ability in slot slotIndex, growing the list if needed. Null clears the slot.
void Bind(int slotIndex, InputActionReference action) Cast slot slotIndex from action, growing the list if needed. Null goes back to the slot’s default Ability action.
InputAction GetAction(int slotIndex) The action slot slotIndex casts on, for key labels. Null when the slot has none.
VtAbilityCastFailReason Press(int slotIndex) Cast the ability in slotIndex as if its key was pressed. UI buttons call this. With Aim And Confirm, a ground ability starts aiming and returns Success; pressing the same slot again casts it at the cursor.
VtAbilityCastFailReason PressAbility(VtAbilityDefinition ability) Cast ability the way a slot press would, whether or not it sits in a slot: at the hovered or selected unit, at the cursor, or by starting to aim. A VtHotbar casts its abilities through this. Pressing it again while it is being aimed casts it.
VtAbilityCastFailReason ConfirmAim() Cast the ability being aimed at the ground under the cursor. Returns why it was refused, or NotGranted when nothing is being aimed.
void CancelAim() Stop aiming without casting.
bool TryResolveTarget(VtAbilityDefinition ability, out VtAbilityTargetData targetData) The target a press of ability would use right now: the caster for a self-cast, the hovered, selected or engaged unit for a single-target ability, the ground under the cursor for a ground ability. False when there is none.

VtGroundTargetIndicator

Component. Add it with Add Component → Vantage → Visuals → VtGroundTargetIndicator. Adds VtAbilityHotkeys automatically.

Draws a ring on the ground where a ground ability will land while VtAbilityHotkeys is aiming it. The ring has the ability’s VtAbilityDefinition.AreaRadius, or reticleRadius for an ability without an area, and turns outOfRangeColor when the point is beyond range. Put it next to the hotkeys on the player. Replace it with your own component that reads VtAbilityHotkeys.IsAiming, VtAbilityHotkeys.AimPoint and VtAbilityHotkeys.AimRadius for a different look.

Inspector fields

Field Type Default Range Description
In Range Color (inRangeColor) Color #FFFFFFD9 Ring colour while the point is in range.
Out Of Range Color (outOfRangeColor) Color #F75959D9 Ring colour while the point is out of range.
Thickness (thickness) float 0.12 ≥ 0.01 Width of the ring in world units.
Reticle Radius (reticleRadius) float 0.5 ≥ 0.1 Ring radius for ground abilities without an area.

VtLocalAbilityExecutor

Component. Add it with Add Component → Vantage → Abilities → VtLocalAbilityExecutor.

The default ability executor: runs each of the ability’s effects in order on this machine. Right for single-player and for the host in co-op. Added automatically when a unit has no other IVtAbilityExecutor.

Scripting API

Member Description
void Execute(in VtAbilityContext ctx) Run every effect of the cast ability in order, skipping empty slots.

VtProjectileMover

Component. Add it with Add Component → Vantage → Combat → VtProjectileMover.

Runtime component that flies a spawned projectile prefab from a caster toward a target, then resolves damage on arrival. Attached automatically at launch time by Launch; consumers only author the visual prefab (mesh, trail VFX, sound) — the flight + impact behavior ships with Vantage.

Scripting API

Member Description
static VtProjectileMover Launch(GameObject prefab, Vector3 spawnPosition, IVtAttackable target, float speed, float arcHeight, bool homing, VtDamageInfo damageInfo, Action onImpact = null) Spawn a projectile prefab at spawnPosition, attach a mover, and launch toward target. Returns the mover for advanced callers; most just fire-and-forget.
void Tick(float deltaTime) Advance the projectile by deltaTime seconds: lifetime, homing, arc, and impact resolution. The only time input this component consumes; Update forwards Time.deltaTime.

VtGroundAoeAnchor

Component. Add it with Add Component → Vantage → Combat → VtGroundAoeAnchor.

Runtime “ground anchor” that lingers at a world position and fires AoE damage pulses at a fixed cadence until its duration expires. Spawned by VtPersistentAoeDamageEffect — the cast that creates it is a fire-and-forget instant; the anchor handles the persistence.

Scripting API

Member Description
void Configure(VtSplashSpec splash, float duration, float tickInterval, int minDamage, int maxDamage, VtDamageType damageType, VtAttackType attackType, VtDamageChannel channel, bool ignoreArmor, VtUnitId attackerId, VtStatDefinition damageBonusStat, bool fireFirstTickImmediately = true) Configure and start ticking. Call once after instantiation. fireFirstTickImmediately controls whether the AoE fires at t=0 (cast moment) or only after the first tickInterval has elapsed — typical fire-and-forget feel is “first tick at t=0”.
void SetPulseCue(VtPresentationCue cue) Cue played at the anchor on every damage pulse. Set by the effect that spawns the anchor.
void Tick(float dt) Advance the area by dt seconds, firing any pulses that are due and removing the area once its duration is over. Runs every frame on its own, or from VtTickManager when it drives the simulation.

VtAbilityDefinition

Asset. Create it with Create → Vantage → Abilities → Ability Definition.

Designer-authored description of a single ability — identity, targeting, cost, timing (cast + cooldown + GCD), auto-fire behavior, and the effects that run on resolution. Granted to a unit at spawn (via VtUnitDefinition.basicAttack / VtUnitDefinition.grantedAbilities) or at runtime via VtUnitAbilities.GrantAbility.

Inspector fields

Identity

Field Type Default Range Description
Id (id) string Empty Stable string identifier used in saves and network messages. Lowercase dotted, e.g. ‘ability.basic_attack’, ‘ability.fireball’, ‘ability.charge’. Unique across all ability definitions. Changing it breaks saved data and anything that still refers to the old id.
Display Name (displayName) string Empty UI display name (hotbar tooltip, cast bar label).
Description (description) string Empty Tooltip / codex description.
Icon (icon) Sprite None Hotbar / cast-bar icon.
Icon Id (iconId) string Empty An icon from the Vantage icon set by name, such as flame or sword, drawn when Icon is empty, so an ability has art on the action bar before its own sprite exists.

Targeting

Field Type Default Range Description
Targeting Mode (targetingMode) VtTargetingMode SingleTarget How this ability picks its target. Self = no target needed. SingleTarget = requires IVtAttackable. GroundPoint = requires a world-space point.
Range (range) float 2 ≥ 0 Maximum distance (world units) between caster and target at cast time. Auto-fire abilities also use this to decide chase-into-range behavior.

Cost

Field Type Default Range Description
Resource Kind (resourceKind) VtResourceKind MP Resource pool drained by a successful cast. Ignored when resourceCost = 0.
Resource Cost (resourceCost) int 0 ≥ 0 Amount of the resource drained at cast-start. 0 = free. Refunded if the cast is interrupted before resolution.

Timing

Field Type Default Range Description
Cast Time (castTime) float 0 ≥ 0 Seconds of cast bar before the ability resolves. 0 = instant (resolves the same frame as TryCast). Non-zero casts can be interrupted by deliberate movement or stun, and by damage as Damage Reaction says.
Damage Reaction (damageReaction) VtCastDamageReaction Interrupt What damage taken while casting or channeling does. Interrupt stops the cast and refunds the cost. Pushback adds time to a cast bar or shortens a channel, by the amounts on the tuning asset. Ignore does nothing.
Cooldown (cooldown) float 0 ≥ 0 Seconds the ability is unavailable after resolution. 0 = governed only by the GCD (or not at all if ignoresGcd = true).

GCD (Global Cooldown)

Field Type Default Range Description
Triggers Gcd (triggersGcd) bool On If true, a successful cast starts the global cooldown, whose length is set on the tuning asset. Default true. The basic-attack ability ships with this set to false so auto-attacks never start the global cooldown.
Ignores Gcd (ignoresGcd) bool Off If true, this ability can be cast even while the GCD is active. Default false. The basic-attack ability ships with this set to true. Useful for instant defensives, movement dashes, and auto-attacks.

Auto-Fire

Field Type Default Range Description
Can Auto Cast (canAutoCast) bool Off If true, VtUnitAbilities.SetAutoCast will repeatedly re-cast this ability whenever its target is valid, in range, and the ability is off cooldown. Used for the basic attack. Active abilities (player-triggered) should leave this off.
Scales With Attack Speed (scalesWithAttackSpeed) bool Off If true, stat.attack_speed modifies this ability’s effective cooldown: effectiveCooldown = cooldown / (1 + attackSpeedSum). Used by the basic attack so Haste / Attack Speed items work without special-casing. Ignored on manual-cast abilities.
Scales With Range Bonus (scalesWithRangeBonus) bool Off If true, stat.attack_range_bonus (flat) is added to this ability’s range at cast time: effectiveRange = range + bonus. Used by the basic attack so ‘Reach’ / ‘Long Arms’ items extend swing range. Applies to the ValidateTargeting range check, auto-fire in-range check, and chase-into-range request. Ignored on self-targeted abilities (they have no meaningful range).
Source Cooldown From Unit Attack Interval (sourceCooldownFromUnitAttackInterval) bool Off If true, the ability’s base cooldown comes from the caster’s VtUnitDefinition.attackInterval instead of this asset’s ‘cooldown’ field. Used by the shared basic-attack ability so every mob can have its own attack cadence via a single ability asset (each mob tunes the number on its own def). ‘scalesWithAttackSpeed’ still applies on top.
Source Range From Unit Attack Range (sourceRangeFromUnitAttackRange) bool Off If true, the ability’s base range comes from the caster’s VtUnitDefinition.attackRange instead of this asset’s ‘range’ field. Used by the shared basic-attack ability so per-mob reach lives on the def. ‘scalesWithRangeBonus’ still applies on top.

Presentation

Field Type Default Range Description
Cast Start Cue (castStartCue) VtPresentationCue — Animator trigger, sound and effect played on the caster when the cast bar starts.
Cast Cue (castCue) VtPresentationCue — Played on the caster when the ability resolves.
Impact Cue (impactCue) VtPresentationCue — Played on each target the ability damages.

Effects

Field Type Default Range Description
Effects (effects) VtAbilityEffect[] Empty Pluggable VtAbilityEffect SO children that run in order when the ability resolves. For non-channeled abilities: fires once at instant cast or end-of-cast. For channeled abilities: fires once at channel START — useful for one-shot setup (spawn VFX, place ground anchor). Per-tick effects during a channel go in tickEffects below.

Channeling

Field Type Default Range Description
Is Channeled (isChanneled) bool Off If true, the ability enters a channel state after cast time elapses. The channel fires tickEffects every channelTickInterval seconds for channelDuration seconds. Interrupt rules are identical to cast interrupts (damage / movement / stun / manual). Cooldown begins after channel ends — natural completion or interrupt.
Channel Duration (channelDuration) float 5 ≥ 0.1 How long the channel lasts after cast time elapses. Only meaningful when isChanneled = true.
Channel Tick Interval (channelTickInterval) float 1 ≥ 0.05 Seconds between per-tick effect firings during the channel. Only meaningful when isChanneled = true.
Fire First Channel Tick Immediately (fireFirstChannelTickImmediately) bool On If true, the first channel tick fires the moment the channel starts (recommended for instant-feeling channels such as a life drain). If false, the first tick fires after one tickInterval has elapsed.
Tick Effects (tickEffects) VtAbilityEffect[] Empty Per-tick effects fired during a channel. Empty for non-channeled abilities. Each tick re-runs every effect in this array — VtDamageEffect / VtAoeDamageEffect / VtHealEffect all work as channel ticks.

Scripting API

Member Description
float AreaRadius { get; } The largest radius among this ability’s area effects, or 0 when it has none. Ground targeting previews and tooltips read it.

VtDamageEffect

Asset. Create it with Create → Vantage → Abilities → Effects → Damage. Inherits VtAbilityEffect.

Ability effect: roll a damage value in [minDamage, maxDamage] and apply it to the ability’s target. Optional projectile — if a VtProjectileSpec.prefab is assigned, the effect launches the prefab toward the target via VtProjectileMover and damage resolves on impact; otherwise damage is hitscan (applied inline at cast).

Inspector fields

Damage

Field Type Default Range Description
Min Damage (minDamage) int 1 ≥ 0 Inclusive minimum damage rolled at cast time.
Max Damage (maxDamage) int 1 ≥ 0 Inclusive maximum damage. Must be >= minDamage; the roll uses VtCombatRng.
Damage Type (damageType) VtDamageType Physical Element of the hit — routes through the target’s per-element resistance.
Attack Type (attackType) VtAttackType Normal Matrix axis. Default flat matrix → no damage-math impact; keep at Normal unless your game extends VtAttackType for unit-counter mechanics.
Channel (channel) VtDamageChannel Magic RPG class channel — Magic for spells (default), Melee or Ranged for weapon-class abilities. Drives power-stat scaling: Magic → spellPower, Melee/Ranged → physicalPower.
Ignore Armor (ignoreArmor) bool Off If true, the hit bypasses armor reduction (pure-magic abilities). Element resistance + damage matrix still apply.
Damage Bonus Stat (damageBonusStat) VtStatDefinition None Optional: stat whose flat + percent totals scale this effect’s rolled damage. Null = no scaling. Typical choices: stat.damage_bonus (generic), stat.spell_damage_bonus / stat.elemental_damage_bonus (per-school). An attribute formula feeds the relevant stat via VtAttributeDerivedStatsBinding.

Projectile (optional)

Field Type Default Range Description
Projectile (projectile) VtProjectileSpec — Leave prefab empty for hitscan (damage applies instantly). Assign a prefab to launch a projectile that flies to the target and applies damage on impact. The ability’s visual — fire-orb, ice-shard, arrow. Spec also controls speed, arc, and homing. Only applies in SingleTarget mode.

Splash (optional)

Field Type Default Range Description
Splash (splash) VtSplashSpec — Leave radius=0 for single-target. Radius > 0 applies secondary damage to every IVtAttackable within the radius (excluding the primary target). Damage is scaled by the falloff curve (default linear 1→0 at the edge) and inherits the primary hit’s type / attackType / ignoreArmor. Secondary hits carry source=VtDamageSource.Splash so procs / resistance systems can discriminate. Fires only when the primary hit landed.

On-Hit Chained Effects

Field Type Default Range Description
On Hit Effects (onHitEffects) VtAbilityEffect[] Empty Additional VtAbilityEffect SOs run on the target AFTER damage lands. Use for on-hit stuns (VtApplyBuffEffect → stun buff), debuffs, secondary damage rolls. On projectile hits, these fire at impact time — synchronized with the damage — not at cast time. On hitscan hits, they fire immediately after damage applies. Skipped when the target becomes invalid mid-flight or the damage is cancelled.

Scripting API

Member Description
override void Execute(in VtAbilityContext ctx) Roll the damage and hit the target, or launch the projectile that hits it on arrival.

VtUnitBasicAttackDamageEffect

Asset. Create it with Create → Vantage → Abilities → Effects → Basic Attack Damage. Inherits VtAbilityEffect.

Ability effect: roll a basic-attack damage value using the caster’s VtUnitDefinition.minDamage / VtUnitDefinition.maxDamage / VtUnitDefinition.damageType / VtUnitDefinition.attackType fields, then apply it to the target through the full damage pipeline.

Inspector fields

Field Type Default Description
Damage Bonus Stat (damageBonusStat) VtStatDefinition None Optional: stat whose flat + percent totals scale basic-attack damage. Null = no scaling. Assign stat.damage_bonus for generic scaling, or a per-school stat (e.g. stat.physical_damage_bonus) for builds where different weapon types scale off different attributes. Same asset can be shared across Warrior / Archer / Dragon basic attacks, or each archetype can reference a school-specific stat via a different basic-attack effect asset.

Scripting API

Member Description
override void Execute(in VtAbilityContext ctx) Roll the caster’s basic-attack damage and hit the target, or launch the caster’s projectile.

VtHealEffect

Asset. Create it with Create → Vantage → Abilities → Effects → Heal. Inherits VtAbilityEffect.

Ability effect: directly restore HP on the target (or caster, for VtTargetingMode.Self). The heal can crit and shows as floating heal text.

Inspector fields

Field Type Default Range Description
Min Amount (minAmount) int 1 ≥ 0 Inclusive minimum HP restored. Rolled via VtCombatRng.
Max Amount (maxAmount) int 1 ≥ 0 Inclusive maximum HP restored. Must be >= minAmount.

Scripting API

Member Description
override void Execute(in VtAbilityContext ctx) Roll the heal and restore it on the target, or on the caster for self-cast abilities.

VtApplyBuffEffect

Asset. Create it with Create → Vantage → Abilities → Effects → Apply Buff. Inherits VtAbilityEffect.

Ability effect: apply a VtBuffDefinition to the ability’s target (or caster, for VtTargetingMode.Self). Delegates to VtUnitBuffs.ApplyBuff so the buff’s stacking policy, tick effect, and modifier grants all flow through the existing system.

Inspector fields

Field Type Default Range Description
Buff (buff) VtBuffDefinition None The buff definition to apply. Required — effect no-ops if null.
Duration Override (durationOverride) float 0 ≥ 0 Override duration in seconds. 0 = use the buff’s own defaultDuration field. Negative values are clamped to 0.

Scripting API

Member Description
override void Execute(in VtAbilityContext ctx) Apply the buff to the target, or to the caster for self-cast abilities.

VtAoeDamageEffect

Asset. Create it with Create → Vantage → Abilities → Effects → AoE Damage. Inherits VtAbilityEffect.

Ability effect: resolve an AoE center based on the ability’s targeting mode (VtTargetingMode.Self / VtTargetingMode.SingleTarget / VtTargetingMode.GroundPoint) and apply rolled damage to every IVtAttackable in splash’s radius via VtSplashResolver.

Inspector fields

Damage

Field Type Default Range Description
Min Damage (minDamage) int 1 ≥ 0 Inclusive minimum damage rolled at cast time, before falloff.
Max Damage (maxDamage) int 1 ≥ 0 Inclusive maximum damage. Must be >= minDamage; rolled via VtCombatRng.
Damage Type (damageType) VtDamageType Fire Element of the hit — routes through each victim’s per-element resistance.
Attack Type (attackType) VtAttackType Normal Matrix axis. Default flat matrix → no damage-math impact; keep at Normal unless your game extends VtAttackType for unit-counter mechanics.
Channel (channel) VtDamageChannel Magic RPG class channel — Magic for AoE spells (default), Melee or Ranged for weapon-class AoE (e.g. whirlwind = Melee). Drives power-stat scaling.
Ignore Armor (ignoreArmor) bool Off If true, armor reduction is skipped on every hit. Element resist + matrix still apply.
Damage Bonus Stat (damageBonusStat) VtStatDefinition None Optional: stat that scales the rolled damage (flat + percent). Null = no scaling. stat.spell_damage_bonus / stat.elemental_damage_bonus / stat.damage_bonus all valid candidates.

Area

Field Type Default Range Description
Splash (splash) VtSplashSpec — Radius / falloff / faction filter / target mask / cone angle. radius = 0 → no-op (use VtDamageEffect for single-target instead).
Area Cue (areaCue) VtPresentationCue — Played at the centre of the area when the effect resolves. Tick Scale To Area on the cue to size the effect to the splash radius.

On-Hit Chained Effects

Field Type Default Range Description
On Hit Effects (onHitEffects) VtAbilityEffect[] Empty Effects run on each unit in the AoE after damage lands. Skipped on any individual hit that absorbed / evaded to zero. Useful for applying a ‘Burn’ DoT to everyone caught in the blast.

Scripting API

Member Description
float AreaRadius { get; } Radius of the damaged area in world units, from splash.
override void Execute(in VtAbilityContext ctx) Roll the damage once and hit every valid unit in the area around the resolved centre.

VtAoeHealEffect

Asset. Create it with Create → Vantage → Abilities → Effects → AoE Heal. Inherits VtAbilityEffect.

Ability effect: heal every VtUnit in the AoE radius around the resolved center (VtTargetingMode.Self → caster, VtTargetingMode.SingleTarget → target, VtTargetingMode.GroundPoint → ground point).

Inspector fields

Heal

Field Type Default Range Description
Min Heal (minHeal) int 1 ≥ 0 Inclusive minimum heal rolled at cast time, before falloff scaling.
Max Heal (maxHeal) int 1 ≥ 0 Inclusive maximum heal. Must be >= minHeal; rolled via VtCombatRng.
Can Crit (canCrit) bool On If true, heal can roll a crit on the caster’s stat.crit_chance — doubled (or stat.crit_multiplier-scaled) like direct damage. False = flat.

Area

Field Type Default Range Description
Splash (splash) VtSplashSpec — Radius / falloff / target mask / cone angle. friendlyFire is ignored — see healAnyFaction below for ally-only vs all-faction control.
Area Cue (areaCue) VtPresentationCue — Played at the centre of the area when the effect resolves. Tick Scale To Area on the cue to size the effect to the splash radius.
Heal Any Faction (healAnyFaction) bool Off If false (default), only same-faction units as the caster get healed. If true, every unit in radius is healed regardless of faction.
Party Only (partyOnly) bool Off Heal only the caster and members of the caster’s party. Overrides Heal Any Faction.

Scripting API

Member Description
float AreaRadius { get; } Radius of the healed area in world units, from splash.
override void Execute(in VtAbilityContext ctx) Roll the heal once and heal every eligible unit in the area, scaled by distance from the centre.

VtAoeBuffEffect

Asset. Create it with Create → Vantage → Abilities → Effects → AoE Buff. Inherits VtAbilityEffect.

Ability effect: apply a VtBuffDefinition to every VtUnit in the AoE radius around the resolved center (VtTargetingMode.Self → caster, VtTargetingMode.SingleTarget → target, VtTargetingMode.GroundPoint → ground point).

Inspector fields

Buff

Field Type Default Range Description
Buff (buff) VtBuffDefinition None Buff applied to every unit in the AoE radius. Required.
Override Duration (overrideDuration) float 0 ≥ 0 Optional override duration. <= 0 falls back to the buff definition’s authored duration.

Area

Field Type Default Range Description
Splash (splash) VtSplashSpec — Radius / falloff / faction filter / cone angle. friendlyFire = false skips same-faction units (default — enemy-only debuff). friendlyFire = true hits everyone in range; pair with ignoreFactionFilter to make an ally-only buff.
Area Cue (areaCue) VtPresentationCue — Played at the centre of the area when the effect resolves. Tick Scale To Area on the cue to size the effect to the splash radius.
Ignore Faction Filter (ignoreFactionFilter) bool Off If true, the faction filter is bypassed entirely — every unit in radius gets the buff regardless of allegiance. Pair it with a buff that does nothing on enemies, or use Party Only to buff just the caster’s party.
Party Only (partyOnly) bool Off Buff only the caster and members of the caster’s party. Bypasses the faction filter.

Scripting API

Member Description
float AreaRadius { get; } Radius of the buffed area in world units, from splash.
override void Execute(in VtAbilityContext ctx) Apply the buff to every eligible unit in the area around the resolved centre.

VtPersistentAoeDamageEffect

Asset. Create it with Create → Vantage → Abilities → Effects → Persistent AoE Damage. Inherits VtAbilityEffect.

Ability effect: spawn a VtGroundAoeAnchor at the resolved AoE center that pulses periodic AoE damage at a fixed cadence until its authored duration expires. Cast → fire-and-forget anchor → caster is free to do other things (move, cast more spells, die — the anchor outlives them).

Inspector fields

Damage per pulse

Field Type Default Range Description
Min Damage (minDamage) int 5 ≥ 0 Inclusive minimum damage rolled for each pulse.
Max Damage (maxDamage) int 10 ≥ 0 Inclusive maximum damage. Must be >= minDamage; rolled per pulse via VtCombatRng.
Damage Type (damageType) VtDamageType Fire Element of each pulse — routes through victim’s per-element resistance.
Attack Type (attackType) VtAttackType Normal Matrix axis. Default flat matrix → no damage-math impact; keep at Normal unless your game extends VtAttackType for unit-counter mechanics.
Channel (channel) VtDamageChannel Magic RPG class channel — Magic for spell-class persistent AoE (default), Melee/Ranged for weapon-class lingering effects. Drives power-stat scaling of every pulse: Magic → spellPower, else physicalPower.
Ignore Armor (ignoreArmor) bool Off If true, every pulse skips armor reduction. Element resist + matrix still apply.
Damage Bonus Stat (damageBonusStat) VtStatDefinition None Optional: stat that scales the rolled per-pulse damage (flat + percent).

Timing

Field Type Default Range Description
Duration (duration) float 5 ≥ 0.1 Total seconds the AoE area persists.
Tick Interval (tickInterval) float 1 ≥ 0.05 Seconds between pulses. Lower = faster ticking.
Fire First Tick Immediately (fireFirstTickImmediately) bool On If true, fire the first pulse the moment the AoE spawns. If false, wait one tickInterval before the first pulse.

Area

Field Type Default Range Description
Splash (splash) VtSplashSpec — Radius / falloff / faction filter / cone angle. Same VtSplashSpec every other AoE effect uses.

Presentation

Field Type Default Range Description
Area Cue (areaCue) VtPresentationCue — Played at the centre when the area appears.
Pulse Cue (pulseCue) VtPresentationCue — Played at the centre on every damage pulse.
Loop Cue (loopCue) VtPresentationCue — Effect that stays on the area while it lasts and is removed with it. Tick Scale To Area to size it to the splash radius.

Scripting API

Member Description
float AreaRadius { get; } Radius of the lingering area in world units, from splash.
override void Execute(in VtAbilityContext ctx) Place a VtGroundAoeAnchor at the resolved centre that pulses damage until the duration ends.

VtTauntEffect

Asset. Create it with Create → Vantage → Abilities → Effects → Taunt. Inherits VtAbilityEffect.

Ability effect: force the caster to the top of the target’s threat table. Pair it with a single-target ability for a classic MMO taunt.

Inspector fields

Field Type Default Range Description
Baseline Threat If Empty (baselineThreatIfEmpty) float 1 ≥ 0 Baseline threat applied if the target’s table is currently empty (idle mob being pulled). Set to 1 or higher so the caster shows up as top after the taunt.

Scripting API

Member Description
override void Execute(in VtAbilityContext ctx) Taunt the ability’s target. Does nothing for abilities that are not single-target.
static void ApplyTauntTo(VtUnit target, VtUnit caster, float baselineThreatIfEmpty = 1f) Put caster at the top of target’s threat table, exactly as the taunt effects do. Call it from your own effects or scripted encounter mechanics. Shows Immune text when the target resists taunts.

VtAoeTauntEffect

Asset. Create it with Create → Vantage → Abilities → Effects → Aoe Taunt. Inherits VtAbilityEffect.

Ability effect: force the caster to the top of every hostile threat table inside a radius, so a tank can pull a whole group of monsters at once.

Inspector fields

Field Type Default Range Description
Radius (radius) float 8 ≥ 0 Effect radius in world units.
Target Mask (targetMask) LayerMask Everything Layer mask for the OverlapSphere — restrict to your unit-collider layer for performance.
Baseline Threat If Empty (baselineThreatIfEmpty) float 1 ≥ 0 Baseline threat applied if a target’s table is currently empty.
Overlap Buffer Size (overlapBufferSize) int 32 ≥ 4 Pre-allocated overlap buffer size. Increase for crowded boss arenas.

Scripting API

Member Description
override void Execute(in VtAbilityContext ctx) Taunt every hostile unit with a threat table around the caster, or around the ground point.

VtThreatOnApplyEffect

Asset. Create it with Create → Vantage → Abilities → Effects → Threat On Apply. Inherits VtAbilityEffect.

Ability effect: add an explicit threat amount on the target’s threat table for the caster. Use as a chained effect on buffs / debuffs / utility abilities that should generate threat without dealing damage.

Inspector fields

Field Type Default Description
Amount (amount) float 50 Threat amount to add (positive) or subtract (negative). Pre-multiplier; the caster’s stat.threat_multiplier is applied on top.
Apply To Caster On Self Targeted (applyToCasterOnSelfTargeted) bool Off Self-targeted abilities apply to the caster’s own table (rare — self-threat doesn’t make gameplay sense). Otherwise the ability’s TargetUnit gets the row.

Scripting API

Member Description
override void Execute(in VtAbilityContext ctx) Add the scaled threat amount for the caster to the target’s threat table.

VtThreatShedEffect

Asset. Create it with Create → Vantage → Abilities → Effects → Threat Shed. Inherits VtAbilityEffect.

Ability effect: clear the caster’s row from every nearby hostile threat table, for vanish and feign-death abilities. Monsters forget the caster and turn to the next-highest entry on their table.

Inspector fields

Field Type Default Range Description
Radius (radius) float 30 ≥ 0 Effect radius in world units — only hostiles within this sphere forget the caster. Bigger = more reliable shed; smaller = a ‘vanish but mobs at the edge of the room still remember you’ design choice.
Target Mask (targetMask) LayerMask Everything Layer mask for the OverlapSphere — restrict to your unit-collider layer.
Overlap Buffer Size (overlapBufferSize) int 32 ≥ 4 Pre-allocated overlap buffer size.

Scripting API

Member Description
override void Execute(in VtAbilityContext ctx) Remove the caster from the threat table of every hostile unit within the radius.

VtAbilityEffect

Abstract asset base. Shipped subclasses: VtAoeBuffEffect, VtAoeDamageEffect, VtAoeHealEffect, VtAoeTauntEffect, VtApplyBuffEffect, VtDamageEffect, VtHealEffect, VtLearnRecipeEffect, VtPersistentAoeDamageEffect, VtSummonEffect, VtTauntEffect, VtThreatOnApplyEffect, VtThreatShedEffect, VtUnitBasicAttackDamageEffect.

Abstract base for a pluggable ability effect. A VtAbilityDefinition carries an array of these; when the ability resolves, each effect’s Execute runs in order against the shared VtAbilityContext.

Scripting API

Member Description
abstract void Execute(in VtAbilityContext ctx) Run this effect for one cast. Called once each time the ability resolves, only on the side that owns the game state, so it may change units freely.

IVtAreaEffect

Interface. Implemented by VtAoeBuffEffect, VtAoeDamageEffect, VtAoeHealEffect, VtPersistentAoeDamageEffect.

An ability effect that covers an area. VtAbilityDefinition.AreaRadius reads it, so ground targeting previews and tooltips know how big the ability is. Implement it on your own area effects.

Scripting API

Member Description
float AreaRadius { get; } Radius of the covered area in world units.

IVtAbilityExecutor

Interface. Implemented by VtLocalAbilityExecutor.

Decides where a finished cast runs its effects. The default VtLocalAbilityExecutor runs them on this machine; implement this interface on a component to send casts to a server instead, and put it on the unit prefab.

Scripting API

Member Description
void Execute(in VtAbilityContext ctx) Resolve an ability cast. Called exactly once per cast, after the resource cost has been charged and (for non-instant casts) the cast bar has completed. Run each effect in ctx.Definition.effects, or forward the cast to the side that runs them.

VtAbilityContext

Struct.

The payload passed to each VtAbilityEffect.Execute when an ability resolves. Carries the caster, target data, and the ability definition itself so effects can read their own SO’s fields (damage ranges, buff refs, …) without a separate lookup.

Scripting API

Member Description
readonly VtUnit Caster Unit that cast the ability. Always non-null when an effect executes.
readonly IVtAttackable Target Single-target attackable (null for Self / GroundPoint modes).
readonly VtUnit TargetUnit Convenience cast of Target to VtUnit, or null if the target is not a unit (destructible, training dummy). Effects that need the typed damage pipeline should check this before building a VtDamageInfo.
readonly Vector3 TargetPoint World-space point for VtTargetingMode.GroundPoint abilities. Zero for other modes.
readonly VtAbilityDefinition Definition The ability being resolved. Effects read their own numbers from here (damage ranges, splash spec, buff ref, …) via Definition + the effect’s own inspector-authored fields.

VtAbilityTargetData

Struct.

The target payload passed to VtUnitAbilities.TryCast and carried through to each VtAbilityEffect. Immutable; build one of the three shapes via the static factories below.

Scripting API

Member Description
readonly IVtAttackable Target Single-target variants: the IVtAttackable picked by player click / AI targeting. Null for VtTargetingMode.Self and VtTargetingMode.GroundPoint.
readonly Vector3 Point Ground-point variants: the world-space click / AoE center. Zero for VtTargetingMode.Self and VtTargetingMode.SingleTarget.
readonly VtTargetingMode Mode Which variant this data represents. Must match the ability’s VtAbilityDefinition.targetingMode or the cast is refused with VtAbilityCastFailReason.InvalidTarget.
static VtAbilityTargetData Self() Self-targeted cast (buffs, heal-self, burst defensives).
static VtAbilityTargetData SingleTarget(IVtAttackable target) Target an IVtAttackable (most attacks, heals on allies). Null targets are permitted and produce VtAbilityCastFailReason.InvalidTarget at cast time — callers can still build this struct when the target may not exist.
static VtAbilityTargetData GroundPoint(Vector3 point) Target a world-space point (ground AoE, summons, teleports).

VtAbilityRequest

Serializable struct.

What a client sends when it asks the authoritative side to cast for it.

Inspector fields

Field Type Default Description
Ability Id (abilityId) string Empty Id of the ability to cast, looked up in the definition catalog.
Mode (mode) VtTargetingMode Self Which kind of target the cast uses: self, one unit or a ground point.
Point (point) Vector3 (0, 0, 0) World position for ground-point casts. Ignored otherwise.

VtAbilityRelay

Static class.

The two halves of a remote cast. A client-side IVtAbilityExecutor calls Pack when its scheduler resolves a cast and sends the request over the network with the target however its framework references objects; the server calls Apply to validate and run the cast on its own copy of the caster. The co-op sample shows both halves on Netcode for GameObjects.

Scripting API

Member Description
static VtAbilityRequest Pack(in VtAbilityContext ctx) Build the request for a resolved cast.
static VtAbilityCastFailReason Apply(VtUnit caster, in VtAbilityRequest request, IVtAttackable target, VtDefinitionCatalog catalog = null) Resolve the request against catalog (the shared instance when null) and cast it right away on caster through VtUnitAbilities.TryCastNow. Returns why it was refused otherwise.

VtAbilityHotkeys.Slot

Serializable struct.

One input bound to one ability. An empty ability leaves the input unused.

Inspector fields

Field Type Default Description
Action (action) InputActionReference None Action that casts this slot. Empty uses Ability 1 to 10 from the Vantage input actions by slot number; slots past 10 have no input until you set one.
Ability (ability) VtAbilityDefinition None Ability to cast. It must be granted to the unit.

Enums

VtAbilityCastFailReason

Result of VtUnitAbilities.TryCast. Success means the cast started (instant abilities resolve the same frame; casts with non-zero castTime begin their cast bar). All other values are soft failures — callers can surface them to UI as feedback (“not enough mana”, “out of range”, …) without exceptions.

Value Description
Success Cast accepted. Either resolved this frame (instant) or cast bar started.
NotGranted Ability is not in the caster’s granted list.
InvalidTarget Target does not match the ability’s VtTargetingMode (e.g. single-target ability cast with no target).
OutOfRange Target is out of the ability’s range.
NotEnoughResource Caster’s resource pool cannot cover the ability’s resourceCost.
OnCooldown Per-ability cooldown is still ticking.
OnGCD Global cooldown is active and this ability does not ignore it.
AlreadyCasting Caster is mid-cast of another ability (and the queue is full / disabled).
Incapacitated Caster’s traits forbid casting right now (silenced / stunned / CanCast=false).
CasterDead Caster is dead.

VtGroundTargeting

How VtAbilityHotkeys casts ground-point abilities.

Value Description
CastAtCursor Cast at the ground under the cursor the moment the key is pressed.
AimAndConfirm Show where the ability will land, then cast on a left-click or a second press of the key.

VtDamageType

The element of an attack — routed through the corresponding resistX stat on VtCoreStats in VtUnitStats.TakeDamage.

Value Description
Physical Weapons, claws and falling rocks. Reduced by armor; resisted by stat.resist_physical.
Fire Fire and burning. Resisted by stat.resist_fire.
Cold Frost and ice. Resisted by stat.resist_cold.
Poison Poison and venom, often dealt over time. Resisted by stat.resist_poison.
True Bypasses all mitigation (resistance, armor, matrix). Use sparingly.
Lightning Electricity / chain-lightning / EMP-flavor. Resisted by stat.resist_lightning.
Holy Paladin / priest school. Strong vs undead in many genres. Resisted by stat.resist_holy.
Shadow Warlock / necromancer school — corruption, agony, void. Resisted by stat.resist_shadow. Often paired oppositionally with Holy.
Arcane Mage’s “raw magic” school — distinct from elemental. Magic missile, polymorph. Resisted by stat.resist_arcane. Conventionally hardest to resist.
Nature Druid / shaman school — earth, plant, weather, wildlife. Resisted by stat.resist_nature.

VtAttackType

The matrix / unit-counter axis of a hit — paired with the defender’s VtArmorType in VtDamageMatrix to produce a multiplier. Pure RTS-flavor mechanic; default matrix is flat (every cell 1.0) for MMO/ARPG scope.

Value Description
Normal Default attack type. The matrix lookup against any armor type returns 1.0 (no multiplier) when the matrix is flat. Use as the catch-all when your game doesn’t care about unit-counter mechanics.

VtDamageChannel

The class / source channel of a hit — i.e. how it was delivered from the character-fantasy point of view. Hardwired and stable: the pipeline, gear procs, tooltips, and animation systems all key off these three values.

Value Description
Melee Touch-range weapon strikes — swords, daggers, fists, staves, hammers.
Ranged Projectile / thrown weapons — bows, guns, throwing knives, javelins.
Magic Casted spells — bolts, novas, missiles, channels, curses.

VtTargetingMode

How an VtAbilityDefinition picks its target.

Value Description
Self No target — the ability affects the caster directly.
SingleTarget A single IVtAttackable. Most melee / single-shot ranged abilities.
GroundPoint A world-space point. Ground-targeted AoE (meteor strike, blizzard, healing circle).

VtResourceKind

The kind of a resource pool on a unit, such as health, mana, stamina or rage. A unit definition lists the pools it has; read one with VtUnitStats.GetPool.

Value Description
HP Health. The unit dies when it reaches 0.
MP Mana, spent by spells.
Stamina Stamina, spent by physical actions such as sprinting or dodging.
Rage Rage, built by dealing and taking damage rather than regenerating.
Focus Focus, a small fast-refilling pool for ranged or precise actions.
Energy Energy, a fixed-size pool that refills quickly.
ComboPoints Combo points, built by some abilities and spent by finishers.
Charges Charges, discrete uses that refill one at a time.
Hunger Food pool: decreases over time, damages HP when empty.
Thirst Water pool: decreases over time, damages HP when empty.
Shield Secondary HP layer — sci-fi / mage-barrier style. Regenerates out of combat (per the configured VtRegenMode); takes damage before HP only when consumer code wires that interception (typically via an VtUnitStats.OnPreTakeDamage hook). Pair with stat.max_shield / stat.shield_regen.

VtCastDamageReaction

What damage taken by the caster does to an ability while it is being cast or channeled. Set per ability on VtAbilityDefinition.damageReaction. Stuns, silences, move orders and VtUnitAbilities.InterruptCast always interrupt, whatever this says.

Value Description
Interrupt The cast or channel stops and its resource cost is refunded.
Pushback A hit adds VtCombatConstants.CastPushbackSeconds to the cast bar, never past the full cast time, or removes VtCombatConstants.ChannelPushbackFraction of the full channel duration. At most VtCombatConstants.MaxPushbacks hits push back one cast or one channel. A channel pushed to zero ends as if it had completed.
Ignore Damage does not affect the cast or channel.