Worldy+ SimC APL Documentation
This guide covers the complete Action Priority List (APL) syntax supported by Worldy.
All logic expressions evaluate to 1 (true) or 0 (false).
Table of Contents
- File Structure
- Worldy Metadata Directives
- Entry Types & Parameters
- Expression Syntax & Operators
- Global & Combat Tokens
- Resources
- Toggles & Settings
- Unit Aliases & Properties
- Auras (Buffs, Debuffs, DoTs)
- Spells & Cooldowns
- Cast History
- Talents & Hero Trees
- Trinkets & Equipment
- Pets
- Variables
- Weapon Enchants
- Class-Specific Tokens
- Bare Tokens (Implicit Context)
File Structure
A .simc file consists of comments and action lines:
# Comments start with #
# worldy:name=My Rotation
# worldy:version=1.0.0
# Precombat list (non-harmful only)
actions.precombat=snapshot_stats
# Default action list (main rotation)
actions=auto_attack
actions+=/call_action_list,name=cooldowns
actions+=/call_action_list,name=rotation
# Named action lists
actions.rotation=spell_name,if=condition
actions.rotation+=/other_spell,if=other_condition
Line format: actions[.listname][+=]/action_name[,param=value,...]
actions=oractions.listname=— first entry in a list (resets the list)actions+=/oractions.listname+=/— append to the list- The first matching action in each tick wins (priority-based)
Special non-harmful actions: snapshot_stats, auto_attack, potion, mana_potion, pool, pool_resource, wait
Worldy Metadata Directives
Worldy-specific metadata is declared in comments using # worldy:<directive>.
Metadata
# worldy:name=Holy Priest
# worldy:version=1.2.3
# worldy:class=5
# worldy:spec=257
| Parameter | Type | Description |
|---|---|---|
name |
string |
Rotation display name |
version |
semver |
Rotation version (e.g. 1.2.3) |
class |
uint |
WoW class ID |
spec |
uint |
WoW specialization ID |
Setting
# worldy:setting id=heal_threshold type=int default=70 min=10 max=100 step=5 label="Heal Threshold"
# worldy:setting id=mode type=enum default=aggressive options="aggressive|defensive|balanced" label="Mode"
Access in expressions: worldy.<setting_id>
| Parameter | Type | Description |
|---|---|---|
id |
string |
Unique setting identifier (required) |
type |
string |
bool, int, float, enum, string |
label |
string |
UI display label |
default |
string |
Default value |
description |
string |
Tooltip description |
group |
string |
Group label for UI grouping |
min |
number |
Minimum value (int/float) |
max |
number |
Maximum value (int/float) |
step |
number |
Step increment (int/float) |
options |
string |
Pipe-separated options (enum) |
Toggle
# worldy:toggle id=use_cds label="Cooldowns" default=true auto_off=30
Access in expressions: toggle.<toggle_id>
| Parameter | Type | Description |
|---|---|---|
id |
string |
Unique toggle identifier (required) |
label |
string |
UI display label |
overlay |
string |
Overlay display label |
default |
bool |
Default on/off (true/false/1/0) |
auto_off |
number |
Auto-disable after N seconds |
Entry Types & Parameters
Each action line is parsed into one of the following entry types:
Spell (<spell_name>)
Cast an ability. This is the default entry type.
| Parameter | Description |
|---|---|
if |
Boolean condition expression |
target |
Cast on specific unit (target, focus, etc.) |
target_if |
min:/max: |
cancel_if |
Cancel current cast if expression is true |
off_gcd |
1 or true — can be cast during GCD |
use_while_casting |
1 or true — can be queued during another cast |
cycle_targets |
1 or true — cycle through available targets |
empower_to |
|
line_cd |
CallList (call_action_list, run_action_list)
Call or run another named action list.
| Parameter | Description |
|---|---|
name |
Name of the action list to call (required) |
if |
Boolean condition expression |
Variable (variable)
Define, update, or reset a variable.
| Parameter | Description |
|---|---|
name |
Variable name (required) |
default |
Default value (required for first declaration) |
op |
set (default), reset, add, sub, setif |
value |
Expression to evaluate as the new value |
value_else |
Alternative value (used with setif) |
condition |
Condition for setif: condition ? value : value_else |
if |
Boolean condition — only execute if true |
Item (use_item, use_items)
Use equipped items or trinkets.
| Parameter | Description |
|---|---|
name |
Item name (SimC-normalized) |
id |
Item ID (numeric) |
slot |
trinket1, trinket2, main_hand, off_hand, neck |
slots |
Colon-separated slots for use_items (e.g. trinket1:trinket2) |
if |
Boolean condition expression |
SetFocus (set_focus)
Set the player's focus target.
| Parameter | Description |
|---|---|
target |
Unit to set as focus |
if |
Boolean condition expression |
Utility (desnare)
Utility actions (e.g. automatic snare removal).
| Parameter | Description |
|---|---|
target |
Unit to desnare |
if |
Boolean condition expression |
Log (log)
Debug logging (development only).
| Parameter | Description |
|---|---|
message |
Log message (supports %s placeholders) |
msg |
Alias for message |
level |
debug, info, warning, error |
args |
Comma-separated expressions for %s substitution |
if |
Boolean condition expression |
Expression Syntax & Operators
Expressions are used in if, target_if, cancel_if, value, value_else, and condition parameters.
Precedence (1 = highest / binds tightest):
| Operator | Description | Precedence |
|---|---|---|
! |
Logical NOT (unary) | 1 |
- |
Negation (unary) | 1 |
* |
Multiplication | 2 |
/ |
Division | 2 |
% |
Division (SimC alias) | 2 |
%% |
Modulo | 2 |
+ |
Addition | 3 |
- |
Subtraction | 3 |
<? |
Minimum of two values | 3 |
>? |
Maximum of two values | 3 |
= |
Equal | 4 |
!= |
Not equal | 4 |
< |
Less than | 4 |
> |
Greater than | 4 |
<= |
Less than or equal | 4 |
>= |
Greater than or equal | 4 |
& |
Logical AND | 5 |
| |
Logical OR | 6 |
Notes:
%is a SimC alias for division (not modulo) — use%%for modulo- Truthiness: a value is true if
abs(value) > 0.0001 - Parentheses
()override precedence - Token characters: letters, digits,
_,.,:
Example:
if=cooldown.avenging_wrath.ready&(holy_power>=3|buff.divine_purpose.up)&fight_remains>30
Global & Combat Tokens
Tokens to check the general state of combat.
| Token |
|---|
active_enemies |
cast_time |
charges |
charges_fractional |
cooldown_react |
execute_time |
fight_remains |
full_recharge_time |
gcd |
gcd.max |
gcd.remains |
group.non_player_count |
health.max |
health.pct |
in_combat |
interruptible_count |
moving |
recharge_time |
refreshable |
remains |
spell_targets |
stealthed |
target.health.max |
target.health.pct |
target.is_boss |
target.time_to_die |
ticking |
time |
time_to_die.remains |
usable_in |
Examples from rotations:
- Deathknight Blood:
dancing_rune_weapon,if=target.distance<=20 - Deathknight Blood:
heart_strike,if=buff.gift_of_the_sanlayn.up&target.distance<=8
Resources
Replace <resource> with any of: astral_power, chi, combo_points, energy, essence, focus, fury, holy_power, insanity, maelstrom, mana, pain, rage, rune, runic_power, soul_shard, stagger
| Token Pattern | Description |
|---|---|
<resource> |
Current amount |
<resource>.pct |
Percentage (0–100) |
<resource>.deficit |
Missing amount to cap |
<resource>.base_deficit |
Base deficit (without procs) |
<resource>.max |
Maximum capacity |
<resource>.regen |
Regeneration rate per second |
<resource>.time_to_max |
Seconds until resource is full |
<resource>.base_time_to_max |
Base time to max (without procs) |
Additional: health, health.pct, health.max, target.health.pct, injured_allies.<threshold>, injured_allies.worldy.<setting_id>
Toggles & Settings
React to toggles set in the Worldy Loader UI.
| Token | Description |
|---|---|
toggle.cooldowns |
Major cooldowns allowed |
toggle.dispels |
Automatic dispels enabled |
toggle.interrupts |
Automatic interrupts enabled |
toggle.desnares |
Automatic snare removal enabled |
toggle.<custom_id> |
Custom toggle defined via # worldy:toggle |
Unit Aliases & Properties
Syntax: <unit>.<property>
Available Units
beacon_target, beacon_target_secondary, desnare_target, focus, heal_target, lowest_friend, mouseover, pet, player, priority_friend, tank_target, target
Simple Properties
| Property |
|---|
.exists |
.friend |
.enemy |
.dead |
.player |
.is_player |
.valid_friend |
.valid_enemy |
.in_melee |
.casting |
.channeling |
.hp |
.hp.pct |
.health.pct |
.health.max |
.health |
.distance |
.in_dungeon |
.in_raid |
.should_interrupt |
.should_stun |
.should_purge_magic |
.should_purge_enrage |
.has_aggro |
Parameterized Properties
| Pattern | Values |
|---|---|
.role.<role> |
tank, heal, attack, dps, spell |
.in_range.<yards> |
Numeric yard value |
.valid_friend.<yards> |
Numeric yard value |
.valid_enemy.<yards> |
Numeric yard value |
.interruptible_count.<yards> |
Numeric yard value |
.buff.<name>.<suffix> |
Aura suffixes |
.debuff.<name>.<suffix> |
Aura suffixes |
.dot.<name>.<suffix> |
Aura suffixes |
.cooldown.<name>.<suffix> |
Cooldown suffixes |
.casting.<spell> |
Spell name |
.channeling.<spell> |
Spell name |
.is_dispellable.<type> |
magic, curse, poison, disease, bleed |
Auras (Buffs, Debuffs, DoTs)
Syntax: buff.<name>.<suffix>, debuff.<name>.<suffix>, dot.<name>.<suffix>
| Suffix |
|---|
.at_max_stacks |
.down |
.duration |
.max_stack |
.pmultiplier |
.react |
.refreshable |
.remains |
.stack |
.ticking |
.ticks_remain |
.up |
.value |
Additional: active_dot.<name> — count of enemies with this DoT applied
Examples from rotations:
- Deathknight Blood:
death_and_decay,if=target.distance<=6&buff.death_and_decay.down - Deathknight Blood:
reapers_mark,if=debuff.reapers_mark_debuff.down
Examples from rotations:
- Deathknight Blood:
blood_boil,if=target.distance<=10&active_dot.blood_plague<=0&charges>=2 - Deathknight Unholy:
outbreak,if=!dot.virulent_plague.ticking
Spells & Cooldowns
action.<name>.<suffix>
| Suffix |
|---|
.cast_time |
.channeling |
.charges |
.cooldown |
.cooldown_react |
.cost |
.damage |
.demonsurge_available |
.duration |
.enabled |
.energize_amount |
.execute_remains |
.execute_time |
.executing |
.full_recharge_time |
.in_flight |
.in_flight_remains |
.in_flight_to_target |
.in_flight_to_target_count |
.last_used |
.pmultiplier |
.ready |
.recharge_time |
.souls_consumed |
.usable |
.usable_in |
cooldown.<name>.<suffix>
| Suffix |
|---|
.charges |
.charges_fractional |
.duration |
.full_recharge_time |
.ready |
.remains |
.remains_expected |
.up |
spell.<name>.<suffix>
| Suffix |
|---|
.aura_active_count |
.cast_count |
.charges |
.charges_fractional |
.cooldown |
.cooldown_react |
.friendly_aura_active_count |
.hostile_aura_active_count |
.usable |
Examples from rotations:
- Deathknight Frost:
actions.assisted_combat=pillar_of_frost,if=cooldown.frost_strike.ready&target.distance<=8 - Demonhunter Havoc:
essence_break,if=target.distance<=8&buff.metamorphosis.up&cooldown.blade_dance.ready
Cast History
| Token Pattern | Description |
|---|---|
prev_gcd.<offset>.<spell> |
1 if the GCD spell at |
prev_off_gcd.<spell> |
1 if the last off-GCD ability matches |
prev.<spell> |
Alias for prev_gcd.1. |
last_gcd_id |
Spell ID of the last GCD ability |
current_action_id |
Spell ID of the current action being evaluated |
combo_strike |
1 if current spell differs from last (Monk Mastery) |
Examples from rotations:
- Demonhunter Havoc:
reavers_glaive,target_if=max:debuff.reavers_mark.remains,if=buff.glaive_flurry.down&buff.rending_strike.down&(buff.thrill_of_the_fight_damage.up|!prev_gcd.1.death_sweep|!variable.rg_inc)&active_enemies>=2&(variable.pull_remains>=10|fight_remains<10) - Demonhunter Havoc:
actions.cooldown=metamorphosis,if=((buff.metamorphosis.up|cooldown.eye_beam.remains>=10-2talent.collective_anguish|talent.cycle_of_hatred&cooldown.eye_beam.remains>=13|raid_event.adds.remains>8&raid_event.adds.remains<cooldown.eye_beam.remains|!talent.chaotic_transformation|buff.empowered_eye_beam.up&hero_tree.felscarred)&(raid_event.adds.in>40|active_enemies>desired_targets|fight_style.dungeonroute&!raid_event.adds.in<=120)|fight_remains<30)&!buff.inner_demon.up&(cooldown.blade_dance.remains&(cooldown.blade_dance.remains>gcd.max3|prev_gcd.1.death_sweep|prev_gcd.2.death_sweep|prev_gcd.3.death_sweep)|!talent.chaotic_transformation)&(!action.annihilation.demonsurge_available&!action.death_sweep.demonsurge_available)
Talents & Hero Trees
| Token Pattern | Description |
|---|---|
talent.<name>.enabled |
1 if the talent is selected |
talent.<name>.disabled |
1 if the talent is NOT selected |
hero_tree.<name>.enabled |
1 if the hero talent tree is active |
set_bonus.<name> |
1 if the tier set bonus is active |
Examples from rotations:
- Deathknight Frost:
remorseless_winter,if=target.distance<=10&!talent.frozen_dominion - Demonhunter Devourer:
immolation_aura,if=!talent.spontaneous_immolation&dot.soul_immolation.down
Trinkets & Equipment
| Token Pattern | Description |
|---|---|
equipped.<item_name> |
1 if item is equipped |
trinket.1.<suffix> |
Top trinket slot |
trinket.2.<suffix> |
Bottom trinket slot |
trinket.<name>.cooldown.ready |
1 if named trinket is off cooldown |
this_trinket.<suffix> |
Current trinket being evaluated |
other_trinket.<suffix> |
The other trinket slot |
Trinket suffixes: has_use_buff, has_cooldown, cooldown.remains, cooldown.duration
Examples from rotations:
- Deathknight Frost:
use_item,slot=trinket1,if=!trinket.1.cast_time>0&variable.trinket_1_buffs&!variable.trinket_1_manual&buff.pillar_of_frost.remains&(!trinket.2.has_cooldown|trinket.2.cooldown.remains|variable.trinket_priority=1) - Deathknight Frost:
use_item,slot=trinket2,if=!trinket.2.cast_time>0&variable.trinket_2_buffs&!variable.trinket_2_manual&buff.pillar_of_frost.remains&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|variable.trinket_priority=2)
Pets
Syntax: pet.<name>.<suffix>
Known pets: chiji, darkglare, demonic_tyrant, infernal, lesser_ghoul_army, mindbender, searing_totem, shadowfiend, surging_totem, voidwraith, whitemane, xuen_the_white_tiger, yulon
Suffixes: active, up, down, remains, stack
Pets also support all unit properties (e.g. pet.yulon.hp.pct).
Additional: raid_event.adds.exists, raid_event.adds.up, raid_event.adds.count
Examples from rotations:
- Deathknight Unholy:
actions.assisted_combat=raise_dead,if=!pet.any.active - Deathknight Unholy:
dark_transformation,if=pet.any.active
Variables
Variables allow storing computed values for reuse across action lines.
# Declare and set
actions+=/variable,name=burn_phase,default=0,op=set,value=cooldown.combustion.ready
# Use in conditions
actions+=/fireball,if=variable.burn_phase
# Conditional set (ternary)
actions+=/variable,name=target_count,default=1,op=setif,condition=active_enemies>3,value=active_enemies,value_else=1
# Arithmetic
actions+=/variable,name=counter,default=0,op=add,value=1,if=time<5
actions+=/variable,name=counter,op=reset,if=time>=5
Operations: set (default), reset, add, sub, setif
Examples from rotations:
- Deathknight Frost:
actions.aoe=frostscythe,if=buff.killing_machine.react=2&active_enemies>=variable.frostscythe_priority - Deathknight Frost:
frostscythe,if=buff.killing_machine.react&rune>=3&active_enemies>=variable.frostscythe_priority
Weapon Enchants
Syntax: main_hand.<enchant>.<suffix> or off_hand.<enchant>.<suffix>
Suffixes: at_max_stacks, down, max_stack, react, remains, stack, ticking, up, value
Additional: main_hand.1h, main_hand.2h, off_hand.1h, off_hand.2h
Class-Specific Tokens
The following prefixes are recognized for class-specific tokens. Their sub-tokens are defined by each class's implementation.
Class prefixes: death_knight., demon_hunter., druid., evoker., hunter., mage., monk., paladin., priest., rogue., shaman., warlock., warrior.
Special prefixes:
| Pattern | Description |
|---|---|
consecration.<suffix> |
Paladin consecration state |
death_and_decay.<suffix> |
Death Knight D&D state |
any_dnd.<suffix> |
Any Death and Decay variant |
scorch_execute.<suffix> |
Mage scorch execute state |
drw.<suffix> |
Death Knight Dancing Rune Weapon state |
Stat tokens: crit_rating, haste_rating, mastery_rating, versatility_rating
Bare Tokens (Implicit Context)
These tokens can be used without a prefix and resolve based on the current context (e.g. charges implicitly refers to the current spell's charges).
| Token |
|---|
active_enemies |
astral_power |
attack_haste |
cast_time |
charges |
charges_fractional |
combo_strike |
cooldown |
cooldown_react |
cost |
cp_max_spend |
current_action_id |
demonic_art |
demonsurge_available |
desired_targets |
diabolic_ritual |
duration |
energize_amount |
essence |
execute_time |
expected_combat_length |
fight_remains |
floor |
full_recharge_time |
fury_of_the_wyvern_extendable |
gcd |
havoc_active |
havoc_remains |
health |
holy_bulwark |
hot_streak_spells_in_flight |
icicles |
in_boss_encounter |
in_combat |
interruptible_count |
judgment_holy_power |
last_gcd_id |
lightning_rod |
max_charges |
max_prio_damage |
moving |
next_armament |
persistent_multiplier |
pmultiplier |
priority_rotation |
recharge_time |
refreshable |
remains |
rtb_buffs |
rune |
runic_power |
sacred_weapon |
soul_fragments |
soul_shard |
spell_haste |
spell_targets |
target |
ti_chain_lightning |
ti_lightning_bolt |
tick_time |
ticking |
ticks |
ticks_remain |
time |
time_to_bloodlust |
time_to_die |
travel_time |
two_cast_imps |