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
- Healing & Raid Tokens
- Toggles & Settings
- Unit Aliases & Properties
- Auras (Buffs, Debuffs, DoTs)
- Absorbs
- Spells & Cooldowns
- Cast History
- Talents & Hero Trees
- Trinkets & Equipment
- Pets
- Variables
- Macros
- 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 |
Macro
# worldy:macro id=cancels text="/cancelaura Whirlwind\n/cast Rampage"
Access as an action: actions+=/<macro_id>
Access in expressions: <macro_id>.usable or <macro_id>.ready
| Parameter | Type | Description |
|---|---|---|
id |
string |
Unique macro identifier (required) |
text |
string |
The macro text to execute (supports \n) |
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 (alias: use_off_gcd) |
use_while_casting |
1 or true — can be queued during another cast |
allow_while_mounted |
1 or true — can be cast while mounted |
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 |
allow_while_mounted |
1 or true — can be executed while mounted |
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).
actions+=/log,msg="Healing %s at %s%% HP",args=heal_target.name,heal_target.hp.pct
| 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 |
Macro (<macro_id>)
Execute a custom macro defined via # worldy:macro.
| Parameter | Description |
|---|---|
if |
Boolean condition expression |
usable |
1 or true — only execute if keybind is assigned |
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 |
enemies |
execute_time |
fight_remains |
full_recharge_time |
gcd |
gcd.max |
gcd.remains |
group.non_player_count |
health.max |
health.pct |
in_combat |
interruptible_count |
is_cc |
is_feared |
is_mounted |
is_stunned |
mounted |
moving |
pull.timer |
pull_timer |
raid_marker |
raid_target_index |
recharge_time |
refreshable |
remains |
spell_targets |
stealthed |
target.health.max |
target.health.pct |
target.is_boss |
target.time_to_die |
target.time_to_die.remains |
ticking |
time |
time_to_die.remains |
usable_in |
Special Global Tokens
| Pattern | Description |
|---|---|
instance.in_dungeon |
1 if inside a dungeon |
instance.in_raid |
1 if inside a raid boss encounter |
stealthed.all |
1 if any stealth is active |
stealthed.rogue |
1 if rogue stealth is active |
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
Healing & Raid Tokens
| Token Pattern | Description |
|---|---|
injured_allies.<threshold> |
Count of group members below HP % threshold (within 40 yards) |
injured_allies_with_buff.<name>.<threshold> |
Count of group members with buff and below HP % |
injured_allies_without_buff.<name>.<threshold> |
Count of group members without buff and below HP % |
active_dot.<name> |
Count of enemies with the specified DoT active |
spell_targets.<name> |
Count of enemies hit by the specified spell |
Examples from rotations:
- Shaman Enhancement:
lava_lash,if=active_enemies>3&active_dot.flame_shock<=2 - Demonhunter Devourer:
soul_immolation,if=active_dot.soul_immolation=0&!buff.metamorphosis.up
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
arena1, arena2, arena3, beacon_target, beacon_target_secondary, desnare_target, focus, heal_target, lowest_friend, mouseover, pet, player, priority_friend, tank_target, target, unit
Simple Properties
| Property |
|---|
.exists |
.friend |
.enemy |
.dead |
.player |
.is_player |
.is_group_member |
.is_boss |
.valid_friend |
.valid_enemy |
.in_melee |
.casting |
.channeling |
.hp |
.hp.pct |
.health.pct |
.health.max |
.health |
.distance |
.is_stunned |
.is_feared |
.is_cc |
.in_dungeon |
.in_raid |
.should_interrupt |
.should_stun |
.should_purge_magic |
.should_purge_enrage |
.has_aggro |
.raid_marker |
.raid_target_index |
.mounted |
.is_mounted |
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 |
.shield.<suffix> |
Absorb suffixes |
.absorb.<suffix> |
Absorb suffixes |
.cooldown.<name>.<suffix> |
Cooldown suffixes |
.casting.<spell> |
Spell name |
.channeling.<spell> |
Spell name |
.is_dispellable.<type> |
magic, curse, poison, disease, bleed |
.should_dispel.<type> |
magic, curse, poison, disease, bleed |
Auras (Buffs, Debuffs, DoTs)
Syntax: buff.<name>.<suffix>, debuff.<name>.<suffix>, dot.<name>.<suffix>
| Suffix |
|---|
.active_dots |
.at_max_stacks |
.down |
.duration |
.max_stack |
.pmultiplier |
.react |
.refreshable |
.remains |
.stack |
.tick_time |
.tick_time_remains |
.ticking |
.ticks_remain |
.up |
.value |
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
Absorbs
Syntax: shield.<suffix>, absorb.<suffix>
| Suffix |
|---|
.amount |
.down |
.up |
.value |
Spells & Cooldowns
action.<name>.<suffix>
| Suffix |
|---|
.cast_time |
.channeling |
.charges |
.charges_fractional |
.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 |
.max_charges |
.persistent_multiplier |
.pmultiplier |
.ready |
.recharge_time |
.refreshable |
.remains |
.souls_consumed |
.ticking |
.usable |
.usable_in |
cooldown.<name>.<suffix>
| Suffix |
|---|
.charges |
.charges_fractional |
.duration |
.full_recharge_time |
.max_charges |
.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 |
.max_charges |
.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 Devourer:
call_action_list,name=reaps,if=buff.voidfall_spending.stack>=3&prev_gcd.1.void_ray|buff.voidfall_spending.react>=3 - 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)
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: any, chiji, darkglare, demonic_tyrant, gargoyle, 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
Macros
Macros allow executing custom WoW macro text. They must be defined via # worldy:macro.
# Define
# worldy:macro id=cancels text="/cancelaura Whirlwind\n/cast Rampage"
# Use as an action
actions+=/cancels,if=usable
# Use as a token
actions+=/some_spell,if=cancels.usable
| Token Pattern | Description |
|---|---|
<macro_id>.usable |
1 if a keybind is assigned to this macro |
<macro_id>.ready |
Alias for .usable |
usable |
Implicitly checks current macro action (when used as action name) |
ready |
Alias for implicit usable |
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 |
is_cc |
is_feared |
is_stunned |
judgment_holy_power |
last_gcd_id |
lightning_rod |
max_charges |
max_prio_damage |
moving |
next_armament |
persistent_multiplier |
pmultiplier |
priority_rotation |
pull.timer |
pull_timer |
raid_marker |
raid_target_index |
random |
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 |
void_metamorphosis_base_drain_ps |