Skip to main content

Combo cookbook

Combo cookbook

This page explains how real Evilsim configs are built.

The goal is not only to copy commands. The goal is to understand why a rotation uses if, while, print, pick_up_crystallize, or character fields like .navia.shrapnel.

First: read the patterns

Reusable patterns

These are the building blocks people see in strong configs. Read them as small programs: variables remember values, conditions choose a path, loops repeat while a state is active, and overrides can intercept every action before the simulator executes it.

How to read a combo block

fn name() { ... }

Creates a reusable helper. Nothing happens until you call it with `name();`.

if / else

Chooses one route. Example: full stacks use tap skill, low stacks use hold skill.

while condition

Repeats while the condition is true. Always add a timeout if the condition may never change.

action:param

`attack:3` means repeat attack three times. `skill[hold=1]` means skill with a parameter.

print(...)

Debug helper. It prints a value so you can learn how many stacks you have at that exact frame.

Override every action: Petra before dash

This is advanced but very useful. You save the original action runner, replace it with your own function, do something before a specific action, then return the original result.

let _execute_action = execute_action;

Backs up the real simulator function before you replace it.

fn execute_action(...)

Overrides the action pipeline. Every character action passes through here.

action_id == .action.dash

Checks whether the next action is dash. You can change this to skill, burst, attack, etc.

pick_up_crystallize("any")

Picks up a Crystallize shard before the dash, useful for Archaic Petra uptime.

return _execute_action(...)

Do not forget this. Without it, the original action never runs.

Code

let _execute_action = execute_action;

fn execute_action(char_id number, action_id number, p map) {
  if action_id == .action.dash {
    pick_up_crystallize("any");
  }

  return _execute_action(char_id, action_id, p);
}

Debug stacks like Navia

The trick is not guessing. Print the field, see the value, then write the condition. This is how people discover whether their combo reaches full stacks before spending them.

.navia.shrapnel

Current Crystal Shrapnel stacks.

== 6

Exact comparison. This route only happens at full stacks.

skill[hold=1]

The hold route. In this example it is used when stacks are not full.

print

Remove print calls once your rotation is final; they are for learning and debugging.

Code

fn naviaskill() {
  if .navia.shrapnel == 6 {
    navia skill;
  } else {
    navia skill[hold=1];
  }
}

navia burst;
print(.navia.shrapnel);
naviaskill();

Wait for an aura with timeout

Use this pattern before a hit that must Vaporize/Melt/React. The timeout stops deadlocks.

.element.t0.cryo

Reads Cryo aura on target 0. Use `.element.t0.pyro`, `.hydro`, etc. for other auras.

f()

Current frame. 60 frames is about 1 second.

< 120

The wait ends after 120 frames even if the aura never appears.

Code

fn wait_for_cryo() {
  let start = f();
  while !.element.t0.cryo && f() - start < 120 {
    wait(1);
  }
}

Cooldown switch block

Use `switch` when a character has a priority list: skill first, burst second, filler last.

case

The first true case wins. Put the highest priority action first.

default

Fallback route. This keeps the rotation alive when cooldowns are not ready.

Code

switch {
  case .character.skill.ready:
    character skill;
  case .character.burst.ready:
    character burst;
  default:
    character attack;
}

Petra pickup

Use after creating Crystallize shards. `any` picks the oldest shard, or use an element name.

any

Lets the sim pick any available shard. Good for quick testing.

pyro / hydro / cryo

Use a specific element when your Petra buff must match the DPS element.

Code

pick_up_crystallize("any");
pick_up_crystallize("pyro");
pick_up_crystallize("hydro");

Manual Leaf pickup

Leaf weapons such as Sapwood Blade, Forest Regalia, and Moonpiercer can use the normal `pickup` action. This is separate from Petra's `pick_up_crystallize` function.

nefer pickup;

Runs the pickup action with Nefer. Use the character that should receive the Leaf buff.

event.OnPickup

The weapon listens to this event and applies the Leaf buff if a Leaf currently exists.

Leaf must exist

First trigger the weapon through its reaction rule. Pickup before proc does nothing.

Not Crystallize

Use `pick_up_crystallize("any")` for shards/Petra, but `character pickup;` for Leaf weapon buffs.

Code

bennett add weapon="sapwoodblade" refine=5 lvl=90/90 +params=[pickup_delay=0];

# Trigger the Leaf weapon first.
bennett skill;

# Then make the intended receiver pick it up.
nefer pickup;

Then: copy character recipes

Every character that exists in the simulator gets a safe starter recipe. Characters with known mechanics also get stronger manual recipes.

This section is for copying and adapting. Every character has at least one safe loop generated from its actions/fields, and some characters have manual combos for delicate mechanics.

Albedo albedo

Aliases: None listed.

Code

albedo char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Use skill only when elevator is gone

Prevents wasting time recasting when the field object is already active.

Code

if !.albedo.elevator {
  albedo skill;
}
albedo burst;

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn albedo_basic_loop() {
  if .albedo.skill.ready {
    albedo skill;
  }
  if .albedo.burst.ready {
    albedo burst;
  }
  albedo attack:3;
}

Wait while .albedo.elevator is active

Evaluates to 1 if skill is currently active

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .albedo.elevator > 0 && f() - start < 300 {
  albedo attack;
}

Wait while .albedo.c2stacks is active

Current number of C2 stacks

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .albedo.c2stacks > 0 && f() - start < 300 {
  albedo attack;
}

Wait while .<character>.mods.albedo-a4 is active

Whether or not Albedo A4 buff is active on the specified character

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .<character>.mods.albedo-a4 > 0 && f() - start < 300 {
  albedo attack;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

albedo low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

albedo high_plunge[collision=0];
Alhaitham alhaitham

Aliases: haitham

Code

alhaitham char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Mirror-aware filler

Reads mirror count before deciding whether to refresh or keep attacking.

Code

fn alhaitham_combo() {
  if .alhaitham.mirrors < 2 && .alhaitham.skill.ready {
    alhaitham skill;
  }
  while .alhaitham.mirrors > 0 {
    alhaitham attack:3, charge;
  }
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn alhaitham_basic_loop() {
  if .alhaitham.skill.ready {
    alhaitham skill;
  }
  if .alhaitham.burst.ready {
    alhaitham burst;
  }
  alhaitham attack:3;
}

Wait while .alhaitham.mirrors is active

Current number of Mirrors that Alhaitham has.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .alhaitham.mirrors > 0 && f() - start < 300 {
  alhaitham attack;
}

Wait while .alhaitham.c2-stacks is active

Number of C2 stacks that are currently active.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .alhaitham.c2-stacks > 0 && f() - start < 300 {
  alhaitham attack;
}

Use skill[hold=...]

0 for Tap (default), 1 for Hold.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

alhaitham skill[hold=1];

Use low_plunge[short=...]

0 for normal low plunge (default), 1 for short low plunge. The short version is 20 frames shorter.

low_plunge[short=...]

Action params go inside brackets on the exact action you are casting.

Code

alhaitham low_plunge[short=1];
Aloy aloy

Aliases: None listed.

Code

aloy char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Coil check

Use Coil count to decide whether Aloy is ready to continue her Cryo-infused route.

Code

if .aloy.coil >= 4 {
  aloy attack:3;
} else if .aloy.skill.ready {
  aloy skill;
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn aloy_basic_loop() {
  if .aloy.skill.ready {
    aloy skill;
  }
  if .aloy.burst.ready {
    aloy burst;
  }
  aloy attack:3;
}

Wait while .aloy.coil is active

Current number of coil stacks.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .aloy.coil > 0 && f() - start < 300 {
  aloy attack;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

aloy attack[travel=10];

Use aim[hold=...]

0 for Physical Aimed Shot, 1 for Fully-Charged Aimed Shot (default).

aim[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

aloy aim[hold=1];
Amber amber

Aliases: None listed.

Code

amber char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn amber_basic_loop() {
  if .amber.skill.ready {
    amber skill;
  }
  if .amber.burst.ready {
    amber burst;
  }
  amber attack:3;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

amber attack[travel=10];

Use aim[hold=...]

0 for Physical Aimed Shot, 1 for Fully-Charged Aimed Shot (default).

aim[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

amber aim[hold=1];
Arlecchino arlecchino

Aliases: arle

Code

arlecchino char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Wait for Cryo before Arle hits

Use this when a rotation can miss Cryo timing. The timeout prevents an infinite loop.

.element.t0.cryo

Checks whether target 0 currently has Cryo aura. Change the element if your reaction setup is different.

f() - start < 120

Stops waiting after 120 frames, about 2 seconds. This avoids a dead rotation if Cryo never appears.

wait_for_cryo();

Call the helper immediately before Arlecchino hits that need the aura.

Code

fn wait_for_cryo() {
  let start = f();
  if !.element.t0.pyro {
    while !.element.t0.cryo && f() - start < 120 {
      wait(1);
    }
  }
}

active arlecchino;

for let i=0; i<4; i=i+1 {
  arlecchino skill;
  bennett skill, dash, burst;
  citlali skill, burst;
  arlecchino charge;
  sleep(30);
  wait_for_cryo();
  arlecchino attack:2, walk, attack:2;
  citlali attack:2;
  arlecchino attack:2, walk, attack:2, walk, attack:4;
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn arlecchino_basic_loop() {
  if .arlecchino.skill.ready {
    arlecchino skill;
  }
  if .arlecchino.burst.ready {
    arlecchino burst;
  }
  arlecchino attack:3;
}

Use charge[early_cancel=...]

Cancel the CA immediately after absorbing nearby Blood-Debt Directives. The next action must be Dash or Jump. Default 0 (false), 1 for true

charge[early_cancel=...]

Action params go inside brackets on the exact action you are casting.

Code

arlecchino charge[early_cancel=1];

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

arlecchino low_plunge[collision=0];
Kamisato Ayaka ayaka

Aliases: kamisatoayaka

Code

ayaka char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn ayaka_basic_loop() {
  if .ayaka.skill.ready {
    ayaka skill;
  }
  if .ayaka.burst.ready {
    ayaka burst;
  }
  ayaka attack:3;
}

Use dash[f=...]

Number of frames to add to minimum dash length. Default 0 frames.

dash[f=...]

Action params go inside brackets on the exact action you are casting.

Code

ayaka dash[f=1];

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

ayaka low_plunge[collision=0];
Kamisato Ayato ayato

Aliases: kamisatoayato

Code

ayato char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn ayato_basic_loop() {
  if .ayato.skill.ready {
    ayato skill;
  }
  if .ayato.burst.ready {
    ayato burst;
  }
  ayato attack:3;
}

Use skill[illusion_delay=...]

Illusion explosion delay in frames. Default 35 frames.

skill[illusion_delay=...]

Action params go inside brackets on the exact action you are casting.

Code

ayato skill[illusion_delay=10];

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

ayato low_plunge[collision=0];
Baizhu baizhu

Aliases: None listed.

Code

baizhu char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn baizhu_basic_loop() {
  if .baizhu.skill.ready {
    baizhu skill;
  }
  if .baizhu.burst.ready {
    baizhu burst;
  }
  baizhu attack:3;
}
Barbara barbara

Aliases: barb

Code

barbara char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn barbara_basic_loop() {
  if .barbara.skill.ready {
    barbara skill;
  }
  if .barbara.burst.ready {
    barbara burst;
  }
  barbara attack:3;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

barbara low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

barbara high_plunge[collision=0];
Beidou beidou

Aliases: None listed.

Code

beidou char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn beidou_basic_loop() {
  if .beidou.skill.ready {
    beidou skill;
  }
  if .beidou.burst.ready {
    beidou burst;
  }
  beidou attack:3;
}

Use skill[counter=...]

Number of counter hits. Default 0. 2 for perfect counter. Does not affect frames.

skill[counter=...]

Action params go inside brackets on the exact action you are casting.

Code

beidou skill[counter=1];
Bennett bennett

Aliases: None listed.

Code

bennett char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn bennett_basic_loop() {
  if .bennett.skill.ready {
    bennett skill;
  }
  if .bennett.burst.ready {
    bennett burst;
  }
  bennett attack:3;
}

Use skill[hold=...]

0 for Tap (default), 1 for Hold Lv. 1, 2 for Hold Lv. 2.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

bennett skill[hold=1];

Use skill[hold_c4=...]

If 1, trigger C4. Default 0.

skill[hold_c4=...]

Action params go inside brackets on the exact action you are casting.

Code

bennett skill[hold_c4=1];
Candace candace

Aliases: None listed.

Code

candace char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn candace_basic_loop() {
  if .candace.skill.ready {
    candace skill;
  }
  if .candace.burst.ready {
    candace burst;
  }
  candace attack:3;
}

Use skill[hold=...]

0 for Tap (default), 1 for Hold.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

candace skill[hold=1];

Use skill[perfect=...]

0 for no A1 (default), non-zero value for A1. This sets hold to 1.

skill[perfect=...]

Action params go inside brackets on the exact action you are casting.

Code

candace skill[perfect=1];
Charlotte charlotte

Aliases: None listed.

Code

charlotte char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn charlotte_basic_loop() {
  if .charlotte.skill.ready {
    charlotte skill;
  }
  if .charlotte.burst.ready {
    charlotte burst;
  }
  charlotte attack:3;
}

Use skill[hold=...]

0 for Tap (default), value between 1 and 809 for Hold. The number determines the E duration in frames.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

charlotte skill[hold=1];

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

charlotte low_plunge[collision=0];
Chasca chasca

Aliases: None listed.

Code

chasca char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn chasca_basic_loop() {
  if .chasca.skill.ready {
    chasca skill;
  }
  if .chasca.burst.ready {
    chasca burst;
  }
  chasca attack:3;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

chasca attack[travel=10];

Use aim[hold=...]

0 for Physical Aimed Shot, 1 for Fully-Charged Aimed Shot (default).

aim[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

chasca aim[hold=1];
Chevreuse chevreuse

Aliases: chev

Code

chevreuse char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Overcharged Ball spender

Hold the skill when she has an Overcharged Ball; otherwise use the normal skill route.

Code

if .chevreuse.overcharged-ball {
  chevreuse skill[hold=1];
} else {
  chevreuse skill;
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn chevreuse_basic_loop() {
  if .chevreuse.skill.ready {
    chevreuse skill;
  }
  if .chevreuse.burst.ready {
    chevreuse burst;
  }
  chevreuse attack:3;
}

Wait while .chevreuse.overcharged-ball is active

Whether Chevreuse has an Overcharged Ball or not.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .chevreuse.overcharged-ball > 0 && f() - start < 300 {
  chevreuse attack;
}

Use skill[hold=...]

0 for Tap (default), value between 1 and 301 for Hold. The number determines the E duration in frames.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

chevreuse skill[hold=1];
Chiori chiori

Aliases: None listed.

Code

chiori char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn chiori_basic_loop() {
  if .chiori.skill.ready {
    chiori skill;
  }
  if .chiori.burst.ready {
    chiori burst;
  }
  chiori attack:3;
}

Use skill[hold=...]

0 for Tap (default), 1 for Hold.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

chiori skill[hold=1];
Chongyun chongyun

Aliases: chong

Code

chongyun char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn chongyun_basic_loop() {
  if .chongyun.skill.ready {
    chongyun skill;
  }
  if .chongyun.burst.ready {
    chongyun burst;
  }
  chongyun attack:3;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

chongyun low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

chongyun high_plunge[collision=0];
Citlali citlali

Aliases: None listed.

Code

citlali char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Opal Fire check

Checks whether Itzpapa is in Opal Fire before deciding to refresh.

Code

if !.citlali.opal-fire && .citlali.skill.ready {
  citlali skill;
}
if .citlali.burst.ready {
  citlali burst;
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn citlali_basic_loop() {
  if .citlali.skill.ready {
    citlali skill;
  }
  if .citlali.burst.ready {
    citlali burst;
  }
  citlali attack:3;
}

Wait while .citlali.stellar-blade is active

Number of Stellar Blade (C1) stacks.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .citlali.stellar-blade > 0 && f() - start < 300 {
  citlali attack;
}

Wait while .citlali.opal-fire is active

Whether Itzpapa is in the Opal Fire state.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .citlali.opal-fire > 0 && f() - start < 300 {
  citlali attack;
}

Wait while .citlali.c6-stacks is active

Number of Cifra of the Secret Law (C6) points.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .citlali.c6-stacks > 0 && f() - start < 300 {
  citlali attack;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

citlali attack[travel=10];

Use charge[travel=...]

Projectile travel time. Default 10 frames.

charge[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

citlali charge[travel=10];
Clorinde clorinde

Aliases: None listed.

Code

clorinde char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Night Watch loop

During skill state, attack until Bond of Life is high enough, then press skill again.

.clorinde.status.clorinde-night-watch

True while Clorinde is inside her skill stance. The loop ends when the stance ends.

.clorinde.bolratio >= 1

Reads Bond of Life as a ratio. When it is high enough, skill becomes the spender.

while status

Only loop while the status exists. Avoid `while 1` for stance-only logic.

Code

fn clorinde_combo() {
  clorinde skill;
  while .clorinde.status.clorinde-night-watch {
    if .clorinde.bolratio >= 1 {
      clorinde skill;
    } else {
      clorinde attack;
    }
  }
}

Combo into burst

Same loop, then burst after the stance ends.

Code

clorinde skill;
while .clorinde.status.clorinde-night-watch {
  if .clorinde.bolratio >= 1 {
    clorinde skill;
  } else {
    clorinde attack;
  }
}
clorinde burst;

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn clorinde_basic_loop() {
  if .clorinde.skill.ready {
    clorinde skill;
  }
  if .clorinde.burst.ready {
    clorinde burst;
  }
  clorinde attack:3;
}
Collei collei

Aliases: None listed.

Code

collei char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn collei_basic_loop() {
  if .collei.skill.ready {
    collei skill;
  }
  if .collei.burst.ready {
    collei burst;
  }
  collei attack:3;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

collei attack[travel=10];

Use aim[hold=...]

0 for Physical Aimed Shot, 1 for Fully-Charged Aimed Shot (default).

aim[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

collei aim[hold=1];
Columbina columbina

Aliases: None listed.

Code

columbina char lvl=90/90 cons=0 talent=9,9,9;

Special notes

Burst area matters

Her burst only gives the Lunar reaction bonus while the team is inside the burst area.

Code

columbina burst;

Special dew cap

Lunar Bloom inside the burst area can feed special dew, but the window is capped, so do not expect infinite procs.

Code

columbina burst;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn columbina_basic_loop() {
  if .columbina.skill.ready {
    columbina skill;
  }
  if .columbina.burst.ready {
    columbina burst;
  }
  columbina attack:3;
}
Cyno cyno

Aliases: None listed.

Code

cyno char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn cyno_basic_loop() {
  if .cyno.skill.ready {
    cyno skill;
  }
  if .cyno.burst.ready {
    cyno burst;
  }
  cyno attack:3;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

cyno low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

cyno high_plunge[collision=0];
Dahlia dahlia

Aliases: None listed.

Code

dahlia char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn dahlia_basic_loop() {
  if .dahlia.skill.ready {
    dahlia skill;
  }
  if .dahlia.burst.ready {
    dahlia burst;
  }
  dahlia attack:3;
}

Use skill[short_hold=...]

0 for Tap (default), 1 for Short Hold.

skill[short_hold=...]

Action params go inside brackets on the exact action you are casting.

Code

dahlia skill[short_hold=1];
Dehya dehya

Aliases: None listed.

Code

dehya char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn dehya_basic_loop() {
  if .dehya.skill.ready {
    dehya skill;
  }
  if .dehya.burst.ready {
    dehya burst;
  }
  dehya attack:3;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

dehya low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

dehya high_plunge[collision=0];
Diluc diluc

Aliases: None listed.

Code

diluc char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn diluc_basic_loop() {
  if .diluc.skill.ready {
    diluc skill;
  }
  if .diluc.burst.ready {
    diluc burst;
  }
  diluc attack:3;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

diluc low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

diluc high_plunge[collision=0];
Diona diona

Aliases: None listed.

Code

diona char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn diona_basic_loop() {
  if .diona.skill.ready {
    diona skill;
  }
  if .diona.burst.ready {
    diona burst;
  }
  diona attack:3;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

diona attack[travel=10];

Use aim[hold=...]

0 for Physical Aimed Shot, 1 for Fully-Charged Aimed Shot (default).

aim[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

diona aim[hold=1];
Dori dori

Aliases: None listed.

Code

dori char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn dori_basic_loop() {
  if .dori.skill.ready {
    dori skill;
  }
  if .dori.burst.ready {
    dori burst;
  }
  dori attack:3;
}

Use skill[travel=...]

Projectile travel time for Troubleshooter Shot. Default 10 frames.

skill[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

dori skill[travel=10];

Use burst[c2_travel=...]

Projectile travel time for Jinni Toop. Default 10 frames.

burst[c2_travel=...]

Action params go inside brackets on the exact action you are casting.

Code

dori burst[c2_travel=10];
Durin durin

Aliases: None listed.

Code

durin char lvl=90/90 cons=0 talent=9,9,9;

Special notes

Hexerei toggle

Durin is Hexerei by default. Set `hexerei=0` only when you want to test him outside that team tag.

Code

durin char lvl=90/90 cons=0 talent=9,9,9 +params=[hexerei=0];

Skill recast

The first skill opens the transformation window. Casting skill again inside the window uses the recast.

Code

durin skill;
durin skill;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn durin_basic_loop() {
  if .durin.skill.ready {
    durin skill;
  }
  if .durin.burst.ready {
    durin burst;
  }
  durin attack:3;
}
Emilie emilie

Aliases: None listed.

Code

emilie char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn emilie_basic_loop() {
  if .emilie.skill.ready {
    emilie skill;
  }
  if .emilie.burst.ready {
    emilie burst;
  }
  emilie attack:3;
}

Use skill[travel=...]

Level 1/2 Lumidouce Case Attack travel time. Default 5 frames.

skill[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

emilie skill[travel=10];

Use burst[travel=...]

Level 1/2 Lumidouce Case Attack travel time. Default 5 frames.

burst[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

emilie burst[travel=10];
Escoffier escoffier

Aliases: esco

Code

escoffier char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Constellation stack monitor

Useful while testing C2/C4/C6 variants. Print counters before the DPS window.

Code

print(.escoffier.c2-count);
print(.escoffier.c4-count);
print(.escoffier.c6-count);
escoffier skill, attack;

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn escoffier_basic_loop() {
  if .escoffier.skill.ready {
    escoffier skill;
  }
  if .escoffier.burst.ready {
    escoffier burst;
  }
  escoffier attack:3;
}

Wait while .escoffier.c2-count is active

Number of Cold Dish (C2) stacks

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .escoffier.c2-count > 0 && f() - start < 300 {
  escoffier attack;
}

Wait while .escoffier.c4-count is active

Number of extra healing and energy restore effects (C4) left

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .escoffier.c4-count > 0 && f() - start < 300 {
  escoffier attack;
}

Wait while .escoffier.c6-count is active

Number of Special-Grade Frosty Parfait (C6) attacks left

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .escoffier.c6-count > 0 && f() - start < 300 {
  escoffier attack;
}

Use skill[travel=...]

Frosty Parfait travel time. Default 5 frames.

skill[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

escoffier skill[travel=10];

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

escoffier low_plunge[collision=0];
Eula eula

Aliases: None listed.

Code

eula char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn eula_basic_loop() {
  if .eula.skill.ready {
    eula skill;
  }
  if .eula.burst.ready {
    eula burst;
  }
  eula attack:3;
}

Use skill[hold=...]

0 for Tap (default), 1 for Hold.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

eula skill[hold=1];

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

eula low_plunge[collision=0];
Faruzan faruzan

Aliases: faru

Code

faruzan char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Hurricane arrow spender

Use the field to fire charged shots only while Hurricane arrows remain.

Code

faruzan skill;
while .faruzan.hurricane-count > 0 {
  faruzan aim;
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn faruzan_basic_loop() {
  if .faruzan.skill.ready {
    faruzan skill;
  }
  if .faruzan.burst.ready {
    faruzan burst;
  }
  faruzan attack:3;
}

Wait while .faruzan.hurricane-count is active

Current number of Hurricane Arrows that Faruzan can fire off.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .faruzan.hurricane-count > 0 && f() - start < 300 {
  faruzan attack;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

faruzan attack[travel=10];

Use aim[hold=...]

0 for Physical Aimed Shot, 1 for Fully-Charged Aimed Shot (default).

aim[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

faruzan aim[hold=1];
Fischl fischl

Aliases: fish, amy

Code

fischl char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Oz uptime guard

Refresh Oz only when he is missing or close to ending.

Code

if !.fischl.oz && .fischl.skill.ready {
  fischl skill;
}
if .fischl.oz-duration < 120 && .fischl.burst.ready {
  fischl burst;
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn fischl_basic_loop() {
  if .fischl.skill.ready {
    fischl skill;
  }
  if .fischl.burst.ready {
    fischl burst;
  }
  fischl attack:3;
}

Wait while .fischl.oz is active

Whether Oz is active or not.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .fischl.oz > 0 && f() - start < 300 {
  fischl attack;
}

Wait while .fischl.oz-source is active

The source frame Oz is spawned on.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .fischl.oz-source > 0 && f() - start < 300 {
  fischl attack;
}

Wait while .fischl.oz-duration is active

Number of frames until Oz disappears if he is active, 0 otherwise.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .fischl.oz-duration > 0 && f() - start < 300 {
  fischl attack;
}

Start with oz_travel

Projectile travel time for Oz. Default 10 frames. Set via '+params=[oz_travel=...]' in Fischl's 'char' line.

+params=[...]

Character params go on the `char` line.

Code

fischl char lvl=90/90 cons=0 talent=9,9,9 +params=[oz_travel=10];

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

fischl attack[travel=10];
Freminet freminet

Aliases: None listed.

Code

freminet char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn freminet_basic_loop() {
  if .freminet.skill.ready {
    freminet skill;
  }
  if .freminet.burst.ready {
    freminet burst;
  }
  freminet attack:3;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

freminet low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

freminet high_plunge[collision=0];
Furina furina

Aliases: furinadefontaine

Code

furina char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Fanfare debug

Print fanfare around the burst window to see whether the team is feeding enough HP change.

Code

furina skill;
furina burst;
print(.furina.fanfare);

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn furina_basic_loop() {
  if .furina.skill.ready {
    furina skill;
  }
  if .furina.burst.ready {
    furina burst;
  }
  furina attack:3;
}

Wait while .furina.ousia is active

Whether Furina is in the Ousia Arke.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .furina.ousia > 0 && f() - start < 300 {
  furina attack;
}

Wait while .furina.fanfare is active

Current amount of fanfare.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .furina.fanfare > 0 && f() - start < 300 {
  furina attack;
}

Wait while .furina.c6-count is active

Number of c6 effects triggered.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .furina.c6-count > 0 && f() - start < 300 {
  furina attack;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

furina low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

furina high_plunge[collision=0];
Gaming gaming

Aliases: None listed.

Code

gaming char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn gaming_basic_loop() {
  if .gaming.skill.ready {
    gaming skill;
  }
  if .gaming.burst.ready {
    gaming burst;
  }
  gaming attack:3;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg. Does not apply to the Plunge from E.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

gaming low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg. Does not apply to the Plunge from E.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

gaming high_plunge[collision=0];
Ganyu ganyu

Aliases: None listed.

Code

ganyu char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn ganyu_basic_loop() {
  if .ganyu.skill.ready {
    ganyu skill;
  }
  if .ganyu.burst.ready {
    ganyu burst;
  }
  ganyu attack:3;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

ganyu attack[travel=10];

Use aim[hold=...]

0 for Physical Aimed Shot, 1 for Fully-Charged Aimed Shot, 2 for Frostflake Arrow (default).

aim[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

ganyu aim[hold=1];
Gorou gorou

Aliases: None listed.

Code

gorou char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn gorou_basic_loop() {
  if .gorou.skill.ready {
    gorou skill;
  }
  if .gorou.burst.ready {
    gorou burst;
  }
  gorou attack:3;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

gorou attack[travel=10];

Use aim[hold=...]

0 for Physical Aimed Shot, 1 for Fully-Charged Aimed Shot (default).

aim[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

gorou aim[hold=1];
Shikanoin Heizou heizou

Aliases: shikanoinheizou

Code

heizou char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Declension skill

Hold skill when Declension is stacked; otherwise keep building stacks.

Code

if .heizou.declension >= 4 {
  heizou skill[hold=1];
} else {
  heizou attack:3;
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn heizou_basic_loop() {
  if .heizou.skill.ready {
    heizou skill;
  }
  if .heizou.burst.ready {
    heizou burst;
  }
  heizou attack:3;
}

Wait while .heizou.declension is active

Number of Declension stacks.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .heizou.declension > 0 && f() - start < 300 {
  heizou attack;
}

Use skill[hold=...]

Hold until max stacks. Default 0 (false), non-zero value for true.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

heizou skill[hold=1];

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

heizou low_plunge[collision=0];
Hu Tao hutao

Aliases: tao, ht

Code

hutao char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn hutao_basic_loop() {
  if .hutao.skill.ready {
    hutao skill;
  }
  if .hutao.burst.ready {
    hutao burst;
  }
  hutao attack:3;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

hutao low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

hutao high_plunge[collision=0];
Iansan iansan

Aliases: None listed.

Code

iansan char lvl=90/90 cons=0 talent=9,9,9;

Special notes

Burst tuning

Use `global` as the default burst point gain, then override a single character with `name=value` when needed.

Code

iansan char lvl=90/90 cons=0 talent=9,9,9 +params=[global=15,bennett=3];

Movement restore

The burst can also read a `movement` value on the action that is restoring points, so walking or moving tests can be modeled too.

Code

iansan burst[movement=12];

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn iansan_basic_loop() {
  if .iansan.skill.ready {
    iansan skill;
  }
  if .iansan.burst.ready {
    iansan burst;
  }
  iansan attack:3;
}
Illuga illuga

Aliases: None listed.

Code

illuga char lvl=90/90 cons=0 talent=9,9,9;

Special notes

Tap vs hold skill

Tap skill is the short Geo hit. Hold skill uses the `hold` param and pushes the hitmark later.

Code

illuga skill[hold=30];

Burst stack spender

After burst, active Geo hits consume burst stacks and add EM-scaling flat damage. Lunar Crystallize uses the stronger branch.

Code

illuga burst;
illuga skill;
illuga attack:3;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn illuga_basic_loop() {
  if .illuga.skill.ready {
    illuga skill;
  }
  if .illuga.burst.ready {
    illuga burst;
  }
  illuga attack:3;
}
Ineffa ineffa

Aliases: None listed.

Code

ineffa char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn ineffa_basic_loop() {
  if .ineffa.skill.ready {
    ineffa skill;
  }
  if .ineffa.burst.ready {
    ineffa burst;
  }
  ineffa attack:3;
}
Arataki Itto itto

Aliases: aratakiitto, aratakitheoneandoniitto

Code

itto char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Slash-state charged loop

Uses Itto's slash fields to keep charged attacks moving until the final slash path ends.

Code

while .itto.slash.next != .itto.slash-type.idle {
  itto charge;
}
if .itto.burst.ready {
  itto burst;
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn itto_basic_loop() {
  if .itto.skill.ready {
    itto skill;
  }
  if .itto.burst.ready {
    itto burst;
  }
  itto attack:3;
}

Wait while .itto.slash.current is active

Returns the current CA Slash. Perform checks on this by using the values under .itto.slash-type.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .itto.slash.current > 0 && f() - start < 300 {
  itto attack;
}

Wait while .itto.slash.next is active

Returns the next CA Slash that will be performed based on the stack count at the time that this is evaluated. Perform checks on this by using the values under .itto.slash-type.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .itto.slash.next > 0 && f() - start < 300 {
  itto attack;
}

Wait while .itto.slash-type.idle is active

Returns the number that represents the CA Idle state.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .itto.slash-type.idle > 0 && f() - start < 300 {
  itto attack;
}

Use skill[travel=...]

Projectile travel time. Default 4 frames.

skill[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

itto skill[travel=10];

Use skill[ushihit=...]

Number of stacks gained via Ushi getting hit. Max 3 stacks. Stacks are gained at random points during Ushi uptime while respecting 2s stack gain cooldown. Default 0.

skill[ushihit=...]

Action params go inside brackets on the exact action you are casting.

Code

itto skill[ushihit=1];
Jean jean

Aliases: None listed.

Code

jean char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn jean_basic_loop() {
  if .jean.skill.ready {
    jean skill;
  }
  if .jean.burst.ready {
    jean burst;
  }
  jean attack:3;
}

Use burst[enter=...]

Number of times enemies enter or leave the field. Default 0 times.

burst[enter=...]

Action params go inside brackets on the exact action you are casting.

Code

jean burst[enter=1];

Use burst[enter_delay=...]

Time between enter/leave hits. Default 600 / enter (frames).

burst[enter_delay=...]

Action params go inside brackets on the exact action you are casting.

Code

jean burst[enter_delay=10];
Kaeya kaeya

Aliases: None listed.

Code

kaeya char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn kaeya_basic_loop() {
  if .kaeya.skill.ready {
    kaeya skill;
  }
  if .kaeya.burst.ready {
    kaeya burst;
  }
  kaeya attack:3;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

kaeya low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

kaeya high_plunge[collision=0];
Kaveh kaveh

Aliases: None listed.

Code

kaveh char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn kaveh_basic_loop() {
  if .kaveh.skill.ready {
    kaveh skill;
  }
  if .kaveh.burst.ready {
    kaveh burst;
  }
  kaveh attack:3;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

kaveh low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

kaveh high_plunge[collision=0];
Kaedehara Kazuha kazuha

Aliases: kaedeharakazuha, kaz

Code

kazuha char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn kazuha_basic_loop() {
  if .kazuha.skill.ready {
    kazuha skill;
  }
  if .kazuha.burst.ready {
    kazuha burst;
  }
  kazuha attack:3;
}

Use skill[hold=...]

0 for Tap (default), 1 for Hold.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

kazuha skill[hold=1];

Use skill[glide_cancel=...]

0 for no Glide Cancel (default), 1 for Glide Cancel. Using high_plunge after Skill with a Glide Cancel is not allowed.

skill[glide_cancel=...]

Action params go inside brackets on the exact action you are casting.

Code

kazuha skill[glide_cancel=1];
Keqing keqing

Aliases: keq

Code

keqing char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn keqing_basic_loop() {
  if .keqing.skill.ready {
    keqing skill;
  }
  if .keqing.burst.ready {
    keqing burst;
  }
  keqing attack:3;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

keqing low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

keqing high_plunge[collision=0];
Kinich kinich

Aliases: None listed.

Code

kinich char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Cannon loop

Attack to build Nightsoul points, wait until 20 points, then fire held skill.

.kinich.nightsoul.points

Current Nightsoul points. His cannon route usually waits for 20.

.kinich.nightsoul.state

Prevents casting the cannon after Nightsoul ended.

skill[hold=1]

This is Kinich's cannon/held skill branch, not the opener skill.

Code

fn kinich_combo() {
  kinich skill;

  for let c=0; c<5; c=c+1 {
    kinich attack[direction=1]:2;
    while .kinich.nightsoul.points < 20 && .kinich.nightsoul.state {
      wait(1);
    }
    if .kinich.nightsoul.state {
      kinich skill[hold=1];
    }
  }
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn kinich_basic_loop() {
  if .kinich.skill.ready {
    kinich skill;
  }
  if .kinich.burst.ready {
    kinich burst;
  }
  kinich attack:3;
}

Wait while .kinich.blind_spot is active

The direction of the Blind Spot relatively to Kinich. -1 - in clock-wise direction; 1 - in counter clock-wise direction; 0 - does not exist at the moment.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .kinich.blind_spot > 0 && f() - start < 300 {
  kinich attack;
}

Use attack[direction=...]

Direction in which Kinich move when attached to the opponent: -1 - in clock-wise direction; 1 - in counter clock-wise direction. Default: -1

attack[direction=...]

Action params go inside brackets on the exact action you are casting.

Code

kinich attack[direction=1];

Use skill[travel=...]

Scalespiker projectile travel time. Default: 13 frames.

skill[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

kinich skill[travel=10];
Kirara kirara

Aliases: None listed.

Code

kirara char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn kirara_basic_loop() {
  if .kirara.skill.ready {
    kirara skill;
  }
  if .kirara.burst.ready {
    kirara burst;
  }
  kirara attack:3;
}

Use skill[short_hold=...]

0 for Tap (default), 1 for Short Hold. The Short Hold version is the shortest possible Hold.

skill[short_hold=...]

Action params go inside brackets on the exact action you are casting.

Code

kirara skill[short_hold=1];

Use skill[hold=...]

0 for Tap (default), value between 1 and 600 for Hold. The number determines the E duration in frames.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

kirara skill[hold=1];
Klee klee

Aliases: None listed.

Code

klee char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn klee_basic_loop() {
  if .klee.skill.ready {
    klee skill;
  }
  if .klee.burst.ready {
    klee burst;
  }
  klee attack:3;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

klee attack[travel=10];

Use charge[travel=...]

Projectile travel time. Default 10 frames.

charge[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

klee charge[travel=10];
Sangonomiya Kokomi kokomi

Aliases: sangonomiyakokomi, koko

Code

kokomi char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn kokomi_basic_loop() {
  if .kokomi.skill.ready {
    kokomi skill;
  }
  if .kokomi.burst.ready {
    kokomi burst;
  }
  kokomi attack:3;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

kokomi attack[travel=10];
Kuki Shinobu kuki

Aliases: kukishinobu

Code

kuki char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn kuki_basic_loop() {
  if .kuki.skill.ready {
    kuki skill;
  }
  if .kuki.burst.ready {
    kuki burst;
  }
  kuki attack:3;
}
Lan Yan lanyan

Aliases: None listed.

Code

lanyan char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn lanyan_basic_loop() {
  if .lanyan.skill.ready {
    lanyan skill;
  }
  if .lanyan.burst.ready {
    lanyan burst;
  }
  lanyan attack:3;
}

Use skill[hold=...]

0 for Tap (default), value between 1 and 610 for Hold.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

lanyan skill[hold=1];

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

lanyan low_plunge[collision=0];
Layla layla

Aliases: None listed.

Code

layla char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn layla_basic_loop() {
  if .layla.skill.ready {
    layla skill;
  }
  if .layla.burst.ready {
    layla burst;
  }
  layla attack:3;
}

Use burst[travel=...]

Projectile travel time for Starlight Slugs. Default 22 frames.

burst[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

layla burst[travel=10];
Linnea linnea

Aliases: None listed.

Code

linnea char lvl=90/90 cons=0 talent=9,9,9;

Special notes

Tap routes

Skill supports `tap`, `hold`, and `feed`. `hold=1` is treated like enough taps to feed Lumi.

Code

linnea skill[tap=3];
linnea skill[hold=1];
linnea skill[feed=1];

Lumi timing

Recasting skill resets Lumi. Tap routes change the summon loop, so use explicit tap counts when comparing rotations.

Code

linnea skill[tap=0];
linnea burst;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn linnea_basic_loop() {
  if .linnea.skill.ready {
    linnea skill;
  }
  if .linnea.burst.ready {
    linnea burst;
  }
  linnea attack:3;
}
Lisa lisa

Aliases: None listed.

Code

lisa char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn lisa_basic_loop() {
  if .lisa.skill.ready {
    lisa skill;
  }
  if .lisa.burst.ready {
    lisa burst;
  }
  lisa attack:3;
}

Use skill[hold=...]

0 for Tap (default), 1 for Hold.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

lisa skill[hold=1];

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

lisa low_plunge[collision=0];
Lynette lynette

Aliases: None listed.

Code

lynette char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn lynette_basic_loop() {
  if .lynette.skill.ready {
    lynette skill;
  }
  if .lynette.burst.ready {
    lynette burst;
  }
  lynette attack:3;
}

Use skill[hold=...]

0 for Tap (default), value between 1 and 150 for Hold. The number determines the E duration in frames.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

lynette skill[hold=1];

Use burst[vivid_travel=...]

Projectile travel time for Vivid Shots. Default 15 frames.

burst[vivid_travel=...]

Action params go inside brackets on the exact action you are casting.

Code

lynette burst[vivid_travel=10];
Lyney lyney

Aliases: None listed.

Code

lyney char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Prop Surplus spender

Use skill after building Prop Surplus stacks with charged shots.

Code

while .lyney.propSurplusStacks < 5 {
  lyney aim;
}
lyney skill;

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn lyney_basic_loop() {
  if .lyney.skill.ready {
    lyney skill;
  }
  if .lyney.burst.ready {
    lyney burst;
  }
  lyney attack:3;
}

Wait while .lyney.propSurplusStacks is active

Number of Prop Surplus stacks.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .lyney.propSurplusStacks > 0 && f() - start < 300 {
  lyney attack;
}

Start with pyrotechnic_travel

Projectile travel time for Pyrotechnic Strike via Grin-Malkin Hat expiry. Default 36 frames. Set via '+params=[pyrotechnic_travel=...]' in Lyney's 'char' line.

+params=[...]

Character params go on the `char` line.

Code

lyney char lvl=90/90 cons=0 talent=9,9,9 +params=[pyrotechnic_travel=10];

Start with c2_stacks

Number of C2 stacks to gain at the beginning. Default 0, maximum 3. Set via '+params=[c2_stacks=...]' in Lyney's 'char' line.

+params=[...]

Character params go on the `char` line.

Code

lyney char lvl=90/90 cons=0 talent=9,9,9 +params=[c2_stacks=1];
Mavuika mavuika

Aliases: None listed.

Code

mavuika char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Fighting Spirit burst gate

Waits for enough Fighting Spirit before burst, then times out if the team never feeds it.

Code

let start = f();
while .mavuika.fightingspirit < 100 && f() - start < 300 {
  wait(1);
}
if .mavuika.burst.ready {
  mavuika burst;
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn mavuika_basic_loop() {
  if .mavuika.skill.ready {
    mavuika skill;
  }
  if .mavuika.burst.ready {
    mavuika burst;
  }
  mavuika attack:3;
}

Wait while .mavuika.fightingspirit is active

Amount of Fighting Spirit.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .mavuika.fightingspirit > 0 && f() - start < 300 {
  mavuika attack;
}

Use charge[hold=...]

Number of frames to extend Charge Attack by. Min 1, max 45, can only be used after a Charge attack has started.

charge[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

mavuika charge[hold=1];

Use charge[final=...]

Used to explicitly initiate the Flamestrider's final hit of the charge attack.

charge[final=...]

Action params go inside brackets on the exact action you are casting.

Code

mavuika charge[final=1];
Mika mika

Aliases: None listed.

Code

mika char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn mika_basic_loop() {
  if .mika.skill.ready {
    mika skill;
  }
  if .mika.burst.ready {
    mika burst;
  }
  mika attack:3;
}

Use skill[hold=...]

0 for Tap (default), 1 for Hold.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

mika skill[hold=1];
Yumemizuki Mizuki mizuki

Aliases: None listed.

Code

mizuki char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Dreamdrifter decision block

Skill starts Dreamdrifter. Burst during the state if ready, otherwise wait briefly or continue normal flow.

switch { case ... }

A priority list. The first true case runs, so put the most important action first.

.mizuki.status.dreamdrifter-state

Checks the remaining stance time. The example waits for burst inside the stance.

default

Always keep a fallback action so the simulator has something to do.

Code

switch {
  case .mizuki.skill.ready:
    mizuki skill;
    while .mizuki.status.dreamdrifter-state > 190 {
      if .mizuki.burst.ready {
        mizuki burst;
      } else {
        wait(1);
      }
    }
  case .mizuki.normal > 1:
    mizuki charge;
  default:
    mizuki attack;
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn mizuki_basic_loop() {
  if .mizuki.skill.ready {
    mizuki skill;
  }
  if .mizuki.burst.ready {
    mizuki burst;
  }
  mizuki attack:3;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

mizuki attack[travel=10];

Use skill[travel=...]

Projectile travel time for Continuous Attack. Default 30 frames.

skill[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

mizuki skill[travel=10];
Mona mona

Aliases: None listed.

Code

mona char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn mona_basic_loop() {
  if .mona.skill.ready {
    mona skill;
  }
  if .mona.burst.ready {
    mona burst;
  }
  mona attack:3;
}

Use dash[f=...]

Number of frames to add to minimum dash length. Default 0 frames.

dash[f=...]

Action params go inside brackets on the exact action you are casting.

Code

mona dash[f=1];

Use skill[hold=...]

0 for Tap (default), 1 for Hold.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

mona skill[hold=1];
Mualani mualani

Aliases: None listed.

Code

mualani char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

One 3-stack bite

Walk until 3 momentum, then bite once.

.mualani.momentum < 3

Momentum is the bite stack counter. Walking advances it during Nightsoul.

mualani attack;

When momentum reaches 3, normal attack spends the bite.

Code

fn mualani_combo1() {
  while .mualani.nightsoul.state {
    while .mualani.momentum < 3 {
      mualani walk[f=1];
    }
    mualani attack;
    break;
  }
}

Three 3-stack bites

Same idea, repeated three times inside Nightsoul.

for let k=0; k<3

Repeats the same 3-stack bite three times, as long as Nightsoul is still active.

break

Leaves the outer Nightsoul loop after the planned bites so the script can continue.

Code

fn mualani_combo3() {
  while .mualani.nightsoul.state {
    for let k=0; k<3; k=k+1 {
      while .mualani.momentum < 3 {
        mualani walk[f=1];
      }
      mualani attack;
    }
    break;
  }
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn mualani_basic_loop() {
  if .mualani.skill.ready {
    mualani skill;
  }
  if .mualani.burst.ready {
    mualani burst;
  }
  mualani attack:3;
}

Wait while .mualani.momentum is active

Number of Wave Momentum stacks.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .mualani.momentum > 0 && f() - start < 300 {
  mualani attack;
}

Use attack[travel=...]

Projectile travel time for Shark Missiles. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

mualani attack[travel=10];

Use burst[travel=...]

Projectile travel time for the Super Shark Missile. Default 70 frames.

burst[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

mualani burst[travel=10];
Nahida nahida

Aliases: kusanali, lesserlordkusanali

Code

nahida char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn nahida_basic_loop() {
  if .nahida.skill.ready {
    nahida skill;
  }
  if .nahida.burst.ready {
    nahida burst;
  }
  nahida attack:3;
}

Use skill[hold=...]

0 for Tap (default), value between 1 and 300 for Hold. The number is added to the minimum holding frames for Tap to turn into Hold (16).

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

nahida skill[hold=1];
Navia navia

Aliases: navia, demoiselle

Code

navia char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Tap or hold skill by shrapnel

Navia wants to spend 6 Crystal Shrapnel cleanly. This helper taps skill at 6 stacks and holds skill when she needs to collect/aim.

.navia.shrapnel == 6

Reads Navia's current stack count. Six is the full stack value.

navia skill[hold=1];

The hold branch aims/collects. Use it when stacks are not full yet.

Do not guess stacks

Use `print(.navia.shrapnel);` while testing to see if your rotation reaches 6 before skill.

Code

fn naviaskill() {
  if .navia.shrapnel == 6 {
    navia skill;
  } else {
    navia skill[hold=1];
  }
}

navia burst;
naviaskill();
navia attack:2, dash, attack:2;
print(.navia.shrapnel);
naviaskill();

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn navia_basic_loop() {
  if .navia.skill.ready {
    navia skill;
  }
  if .navia.burst.ready {
    navia burst;
  }
  navia attack:3;
}

Wait while .navia.shrapnel is active

Number of Crystal Shrapnel stacks.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .navia.shrapnel > 0 && f() - start < 300 {
  navia attack;
}

Use skill[hold=...]

0 for Tap (default), value between 1 and 241 for Hold. The number is added to the minimum holding frames for Tap to turn into Hold (41), subtracted by 1 to account for requiring a 1 to activate.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

navia skill[hold=1];

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

navia low_plunge[collision=0];
Nefer nefer

Aliases: None listed.

Code

nefer char lvl=90/90 cons=0 talent=9,9,9;

Special notes

Test toggle

Use `permaveil=1` only for testing. It forces the permanent Veil path and should not be used for a normal rotation.

Code

nefer char lvl=90/90 cons=0 talent=9,9,9 +params=[permaveil=1];

Stance loop

The first `skill` enters the stance. While the status is active, a second `skill` uses the alternate route.

Code

nefer skill;
nefer skill;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn nefer_basic_loop() {
  if .nefer.skill.ready {
    nefer skill;
  }
  if .nefer.burst.ready {
    nefer burst;
  }
  nefer attack:3;
}
Neuvillette neuvillette

Aliases: neuv, chiefjusticeoffontaine

Code

neuvillette char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Droplet charged attack

Use charged attack when enough droplets are in range; otherwise create droplets first.

Code

if .neuvillette.droplets >= 3 {
  neuvillette charge;
} else if .neuvillette.skill.ready {
  neuvillette skill;
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn neuvillette_basic_loop() {
  if .neuvillette.skill.ready {
    neuvillette skill;
  }
  if .neuvillette.burst.ready {
    neuvillette burst;
  }
  neuvillette attack:3;
}

Wait while .neuvillette.droplets is active

Number of Sourcewater droplets in range for Charged Attack Empowerment: Legal Evaluation.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .neuvillette.droplets > 0 && f() - start < 300 {
  neuvillette attack;
}

Wait while .neuvillette.droplets-c6 is active

Number of Sourcewater droplets in range for C6.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .neuvillette.droplets-c6 > 0 && f() - start < 300 {
  neuvillette attack;
}

Use charge[short=...]

0 for Charged Attack: Equitable Judgment (default), 1 for Charged Attack. Charged Attack will still absorb droplets if possible. This mirrors in game behaviour.

charge[short=...]

Action params go inside brackets on the exact action you are casting.

Code

neuvillette charge[short=1];

Use charge[ticks=...]

Number of ticks for Charged Attack: Equitable Judgment. Default is maximum number of ticks, minimum 1. Only works if short = 0. If the number of ticks is not the maximum, the next action must be Burst, Skill, Dash, or Jump.

charge[ticks=...]

Action params go inside brackets on the exact action you are casting.

Code

neuvillette charge[ticks=1];
Nilou nilou

Aliases: None listed.

Code

nilou char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn nilou_basic_loop() {
  if .nilou.skill.ready {
    nilou skill;
  }
  if .nilou.burst.ready {
    nilou burst;
  }
  nilou attack:3;
}

Use skill[travel=...]

Projectile travel time for Luminous Illusion. Default 0 frames.

skill[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

nilou skill[travel=10];
Ningguang ningguang

Aliases: ning

Code

ningguang char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Jade count charger

Build Star Jades before charged attack.

Code

while .ningguang.jadeCount < 3 {
  ningguang attack;
}
ningguang charge;

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn ningguang_basic_loop() {
  if .ningguang.skill.ready {
    ningguang skill;
  }
  if .ningguang.burst.ready {
    ningguang burst;
  }
  ningguang attack:3;
}

Wait while .ningguang.prevAttack is active

Returns a number representing the previous N1 version. Possible values are: 0 = Left, 1 = Right, 2 = Twirl.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .ningguang.prevAttack > 0 && f() - start < 300 {
  ningguang attack;
}

Wait while .ningguang.jadeCount is active

Number of Star Jades.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .ningguang.jadeCount > 0 && f() - start < 300 {
  ningguang attack;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

ningguang attack[travel=10];

Use charge[travel=...]

Projectile travel time. Default 10 frames.

charge[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

ningguang charge[travel=10];
Noelle noelle

Aliases: None listed.

Code

noelle char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn noelle_basic_loop() {
  if .noelle.skill.ready {
    noelle skill;
  }
  if .noelle.burst.ready {
    noelle burst;
  }
  noelle attack:3;
}

Use charge[final=...]

0 for inserting a finisher based on next action, 1 for executing a finisher immediately. Default 0.

charge[final=...]

Action params go inside brackets on the exact action you are casting.

Code

noelle charge[final=1];

Use charge[no_limit=...]

Whether to ignore charge attack duration limit. Default 0.

charge[no_limit=...]

Action params go inside brackets on the exact action you are casting.

Code

noelle charge[no_limit=1];
Ororon ororon

Aliases: olorun

Code

ororon char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn ororon_basic_loop() {
  if .ororon.skill.ready {
    ororon skill;
  }
  if .ororon.burst.ready {
    ororon burst;
  }
  ororon attack:3;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

ororon attack[travel=10];

Use aim[hold=...]

0 for Physical Aimed Shot, 1 for Fully-Charged Aimed Shot (default).

aim[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

ororon aim[hold=1];
Qiqi qiqi

Aliases: None listed.

Code

qiqi char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn qiqi_basic_loop() {
  if .qiqi.skill.ready {
    qiqi skill;
  }
  if .qiqi.burst.ready {
    qiqi burst;
  }
  qiqi attack:3;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

qiqi low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

qiqi high_plunge[collision=0];
Raiden Shogun raiden

Aliases: raidenshogun, herexcellencythealmightynarukamiogoshogodofthunder

Code

raiden char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn raiden_basic_loop() {
  if .raiden.skill.ready {
    raiden skill;
  }
  if .raiden.burst.ready {
    raiden burst;
  }
  raiden attack:3;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

raiden low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

raiden high_plunge[collision=0];
Razor razor

Aliases: None listed.

Code

razor char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn razor_basic_loop() {
  if .razor.skill.ready {
    razor skill;
  }
  if .razor.burst.ready {
    razor burst;
  }
  razor attack:3;
}

Use skill[hold=...]

0 for Tap (default), 1 for Hold.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

razor skill[hold=1];

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

razor low_plunge[collision=0];
Rosaria rosaria

Aliases: rosa

Code

rosaria char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn rosaria_basic_loop() {
  if .rosaria.skill.ready {
    rosaria skill;
  }
  if .rosaria.burst.ready {
    rosaria burst;
  }
  rosaria attack:3;
}

Use skill[nobehind=...]

Default 0. 1 for disabling striking behind for A1 purposes.

skill[nobehind=...]

Action params go inside brackets on the exact action you are casting.

Code

rosaria skill[nobehind=1];

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

rosaria low_plunge[collision=0];
Kujou Sara sara

Aliases: kujousara, kujosara

Code

sara char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn sara_basic_loop() {
  if .sara.skill.ready {
    sara skill;
  }
  if .sara.burst.ready {
    sara burst;
  }
  sara attack:3;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

sara attack[travel=10];

Use aim[hold=...]

0 for Physical Aimed Shot, 1 for Fully-Charged Aimed Shot (default).

aim[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

sara aim[hold=1];
Sayu sayu

Aliases: None listed.

Code

sayu char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn sayu_basic_loop() {
  if .sayu.skill.ready {
    sayu skill;
  }
  if .sayu.burst.ready {
    sayu burst;
  }
  sayu attack:3;
}

Use skill[short_hold=...]

0 for Tap (default), 1 for Short Hold. The Short Hold version is the shortest possible Hold.

skill[short_hold=...]

Action params go inside brackets on the exact action you are casting.

Code

sayu skill[short_hold=1];

Use skill[hold=...]

0 for Tap (default), value between 1 and 600 for Hold. The number determines the E duration in frames.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

sayu skill[hold=1];
Sethos sethos

Aliases: None listed.

Code

sethos char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn sethos_basic_loop() {
  if .sethos.skill.ready {
    sethos skill;
  }
  if .sethos.burst.ready {
    sethos burst;
  }
  sethos attack:3;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

sethos attack[travel=10];

Use aim[hold=...]

0 for Physical Aimed Shot, 1 for Fully-Charged Aimed Shot (default), 2 for Shadowpiercing Shot.

aim[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

sethos aim[hold=1];
Shenhe shenhe

Aliases: None listed.

Code

shenhe char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn shenhe_basic_loop() {
  if .shenhe.skill.ready {
    shenhe skill;
  }
  if .shenhe.burst.ready {
    shenhe burst;
  }
  shenhe attack:3;
}

Use skill[hold=...]

0 for Tap (default), 1 for Hold.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

shenhe skill[hold=1];
Sigewinne sigewinne

Aliases: None listed.

Code

sigewinne char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn sigewinne_basic_loop() {
  if .sigewinne.skill.ready {
    sigewinne skill;
  }
  if .sigewinne.burst.ready {
    sigewinne burst;
  }
  sigewinne attack:3;
}

Use dash[pickup_droplets=...]

Number of picked up Sourcewater Droplets. Default 0.

dash[pickup_droplets=...]

Action params go inside brackets on the exact action you are casting.

Code

sigewinne dash[pickup_droplets=1];

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

sigewinne attack[travel=10];
Skirk skirk

Aliases: None listed.

Code

skirk char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

First rotation nuke toggle

Use a boolean to run the heavy first rotation once, then fall back to the normal route.

let first_rot_nuke = true

A variable you control. Flip it to false when you want the normal route only.

attack:5, dash

Comma chains actions in order. This is easier to read than one action per line.

Code

let first_rot_nuke = true;

if first_rot_nuke {
  skirk burst;
  skirk skill,
        attack:5, dash,
        attack:2, charge, dash,
        attack:5, dash,
        attack:5, dash,
        attack:2, charge, dash,
        attack:5, dash,
        attack;
} else {
  skirk skill;
  skirk attack:5, dash, attack:2, charge;
}

Serpent's Subtlety guard

If you need enough resource before bursting, wait with a timeout.

.skirk.serpents_subtlety < 50

Waits until Skirk has enough resource for the planned burst route.

timeout 180

If the resource never arrives, the script continues instead of freezing.

Code

let start = f();
while .skirk.serpents_subtlety < 50 && f() - start < 180 {
  wait(1);
}
if .skirk.burst.ready {
  skirk burst;
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn skirk_basic_loop() {
  if .skirk.skill.ready {
    skirk skill;
  }
  if .skirk.burst.ready {
    skirk burst;
  }
  skirk attack:3;
}

Wait while .skirk.serpents_subtlety is active

Amount of Serpent's Subtlety.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .skirk.serpents_subtlety > 0 && f() - start < 300 {
  skirk attack;
}

Wait while .skirk.void_rifts is active

Number of Void Rifts on the field.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .skirk.void_rifts > 0 && f() - start < 300 {
  skirk attack;
}

Wait while .skirk.a4_stacks is active

Number of A4 stacks.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .skirk.a4_stacks > 0 && f() - start < 300 {
  skirk attack;
}

Start with start_serpents_subtlety

Set the starting amount of Serpent's Subtlety stacks. Default 100.

+params=[...]

Character params go on the `char` line.

Code

skirk char lvl=90/90 cons=0 talent=9,9,9 +params=[start_serpents_subtlety=1];

Use skill[hold=...]

0 for Tap (default), value between 1 and 184 for Hold. The number determines the hold E duration in frames.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

skirk skill[hold=1];
Sucrose sucrose

Aliases: None listed.

Code

sucrose char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn sucrose_basic_loop() {
  if .sucrose.skill.ready {
    sucrose skill;
  }
  if .sucrose.burst.ready {
    sucrose burst;
  }
  sucrose attack:3;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

sucrose low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

sucrose high_plunge[collision=0];
Tartaglia tartaglia

Aliases: childe

Code

tartaglia char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn tartaglia_basic_loop() {
  if .tartaglia.skill.ready {
    tartaglia skill;
  }
  if .tartaglia.burst.ready {
    tartaglia burst;
  }
  tartaglia attack:3;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

tartaglia attack[travel=10];

Use aim[hold=...]

0 for Physical Aimed Shot, 1 for Fully-Charged Aimed Shot (default).

aim[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

tartaglia aim[hold=1];
Thoma thoma

Aliases: None listed.

Code

thoma char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn thoma_basic_loop() {
  if .thoma.skill.ready {
    thoma skill;
  }
  if .thoma.burst.ready {
    thoma burst;
  }
  thoma attack:3;
}
Tighnari tighnari

Aliases: None listed.

Code

tighnari char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn tighnari_basic_loop() {
  if .tighnari.skill.ready {
    tighnari skill;
  }
  if .tighnari.burst.ready {
    tighnari burst;
  }
  tighnari attack:3;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

tighnari attack[travel=10];

Use aim[hold=...]

0 for Physical Aimed Shot, 1 for Fully-Charged Aimed Shot (default), 2 for Wreath Arrow. If his E state is active, then hold is 2 by default.

aim[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

tighnari aim[hold=1];
Traveler (Anemo) traveleranemo

Aliases: aether-anemo, lumine-anemo, aetheranemo, lumineanemo

Code

traveleranemo char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn traveleranemo_basic_loop() {
  if .traveleranemo.skill.ready {
    traveleranemo skill;
  }
  if .traveleranemo.burst.ready {
    traveleranemo burst;
  }
  traveleranemo attack:3;
}

Start with base_atk_buff

0 for no +3 base atk, 1 (default) for +3 base atk. Set via '+params=[base_atk_buff=...]' in the char's line.

+params=[...]

Character params go on the `char` line.

Code

traveleranemo char lvl=90/90 cons=0 talent=9,9,9 +params=[base_atk_buff=1];

Start with skirk_story_buff

0 for no buffs, 1 (default) for +7 base atk, +15 EM, +50 base HP. Set via '+params=[skirk_story_buff=...]' in the char's line.

+params=[...]

Character params go on the `char` line.

Code

traveleranemo char lvl=90/90 cons=0 talent=9,9,9 +params=[skirk_story_buff=1];
Traveler (Dendro) travelerdendro

Aliases: aether-dendro, lumine-dendro, aetherdendro, luminedendro

Code

travelerdendro char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn travelerdendro_basic_loop() {
  if .travelerdendro.skill.ready {
    travelerdendro skill;
  }
  if .travelerdendro.burst.ready {
    travelerdendro burst;
  }
  travelerdendro attack:3;
}

Start with base_atk_buff

0 for no +3 base atk, 1 (default) for +3 base atk. Set via '+params=[base_atk_buff=...]' in the char's line.

+params=[...]

Character params go on the `char` line.

Code

travelerdendro char lvl=90/90 cons=0 talent=9,9,9 +params=[base_atk_buff=1];

Start with skirk_story_buff

0 for no buffs, 1 (default) for +7 base atk, +15 EM, +50 base HP. Set via '+params=[skirk_story_buff=...]' in the char's line.

+params=[...]

Character params go on the `char` line.

Code

travelerdendro char lvl=90/90 cons=0 talent=9,9,9 +params=[skirk_story_buff=1];
Traveler (Electro) travelerelectro

Aliases: aether-electro, lumine-electro, aetherelectro, lumineelectro

Code

travelerelectro char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn travelerelectro_basic_loop() {
  if .travelerelectro.skill.ready {
    travelerelectro skill;
  }
  if .travelerelectro.burst.ready {
    travelerelectro burst;
  }
  travelerelectro attack:3;
}

Start with base_atk_buff

0 for no +3 base atk, 1 (default) for +3 base atk. Set via '+params=[base_atk_buff=...]' in the char's line.

+params=[...]

Character params go on the `char` line.

Code

travelerelectro char lvl=90/90 cons=0 talent=9,9,9 +params=[base_atk_buff=1];

Start with skirk_story_buff

0 for no buffs, 1 (default) for +7 base atk, +15 EM, +50 base HP. Set via '+params=[skirk_story_buff=...]' in the char's line.

+params=[...]

Character params go on the `char` line.

Code

travelerelectro char lvl=90/90 cons=0 talent=9,9,9 +params=[skirk_story_buff=1];
Traveler (Geo) travelergeo

Aliases: aether-geo, lumine-geo, aethergeo, luminegeo

Code

travelergeo char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn travelergeo_basic_loop() {
  if .travelergeo.skill.ready {
    travelergeo skill;
  }
  if .travelergeo.burst.ready {
    travelergeo burst;
  }
  travelergeo attack:3;
}

Start with base_atk_buff

0 for no +3 base atk, 1 (default) for +3 base atk. Set via '+params=[base_atk_buff=...]' in the char's line.

+params=[...]

Character params go on the `char` line.

Code

travelergeo char lvl=90/90 cons=0 talent=9,9,9 +params=[base_atk_buff=1];

Start with skirk_story_buff

0 for no buffs, 1 (default) for +7 base atk, +15 EM, +50 base HP. Set via '+params=[skirk_story_buff=...]' in the char's line.

+params=[...]

Character params go on the `char` line.

Code

travelergeo char lvl=90/90 cons=0 talent=9,9,9 +params=[skirk_story_buff=1];
Traveler (Hydro) travelerhydro

Aliases: aether-hydro, lumine-hydro, aetherhydro, luminehydro

Code

travelerhydro char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn travelerhydro_basic_loop() {
  if .travelerhydro.skill.ready {
    travelerhydro skill;
  }
  if .travelerhydro.burst.ready {
    travelerhydro burst;
  }
  travelerhydro attack:3;
}

Start with base_atk_buff

0 for no +3 base atk, 1 (default) for +3 base atk. Set via '+params=[base_atk_buff=...]' in the char's line.

+params=[...]

Character params go on the `char` line.

Code

travelerhydro char lvl=90/90 cons=0 talent=9,9,9 +params=[base_atk_buff=1];

Start with skirk_story_buff

0 for no buffs, 1 (default) for +7 base atk, +15 EM, +50 base HP. Set via '+params=[skirk_story_buff=...]' in the char's line.

+params=[...]

Character params go on the `char` line.

Code

travelerhydro char lvl=90/90 cons=0 talent=9,9,9 +params=[skirk_story_buff=1];
Traveler (Pyro) travelerpyro

Aliases: None listed.

Code

travelerpyro char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn travelerpyro_basic_loop() {
  if .travelerpyro.skill.ready {
    travelerpyro skill;
  }
  if .travelerpyro.burst.ready {
    travelerpyro burst;
  }
  travelerpyro attack:3;
}

Start with base_atk_buff

0 for no +3 base atk, 1 (default) for +3 base atk. Set via '+params=[base_atk_buff=...]' in the char's line.

+params=[...]

Character params go on the `char` line.

Code

travelerpyro char lvl=90/90 cons=0 talent=9,9,9 +params=[base_atk_buff=1];

Start with skirk_story_buff

0 for no buffs, 1 (default) for +7 base atk, +15 EM, +50 base HP. Set via '+params=[skirk_story_buff=...]' in the char's line.

+params=[...]

Character params go on the `char` line.

Code

travelerpyro char lvl=90/90 cons=0 talent=9,9,9 +params=[skirk_story_buff=1];
Varesa varesa

Aliases: None listed.

Code

varesa char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn varesa_basic_loop() {
  if .varesa.skill.ready {
    varesa skill;
  }
  if .varesa.burst.ready {
    varesa burst;
  }
  varesa attack:3;
}
Varka varka

Aliases: None listed.

Code

varka char lvl=90/90 cons=0 talent=9,9,9;

Special notes

Hexerei toggle

Varka is Hexerei by default. Use `hexerei=0` only to test him without that team tag.

Code

varka char lvl=90/90 cons=0 talent=9,9,9 +params=[hexerei=0];

Sturm state

While Sturm is active, the second skill path depends on special skill charges and the absorbed / priority element.

Code

varka skill;
varka attack:3;
varka skill;

Useful fields

These fields are exposed for conditions: `sturm`, `secret_rite`, `absorb`, `wind_oath`, `wind_oath_mult`, `march_mult`.

Code

if .varka.sturm {
  varka skill;
}
if .varka.wind_oath > 0 {
  varka attack:3;
}

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn varka_basic_loop() {
  if .varka.skill.ready {
    varka skill;
  }
  if .varka.burst.ready {
    varka burst;
  }
  varka attack:3;
}
Venti venti

Aliases: None listed.

Code

venti char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn venti_basic_loop() {
  if .venti.skill.ready {
    venti skill;
  }
  if .venti.burst.ready {
    venti burst;
  }
  venti attack:3;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

venti attack[travel=10];

Use aim[hold=...]

0 for Physical Aimed Shot, 1 for Fully-Charged Aimed Shot (default).

aim[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

venti aim[hold=1];
Wanderer wanderer

Aliases: scaramouche, scara, kunikuzushi, kuni, kabukimono

Code

wanderer char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Windfavored loop

Attack only while Kuugoryoku points remain.

Code

wanderer skill;
while .wanderer.skydweller-points > 0 {
  wanderer attack:3, charge;
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn wanderer_basic_loop() {
  if .wanderer.skill.ready {
    wanderer skill;
  }
  if .wanderer.burst.ready {
    wanderer burst;
  }
  wanderer attack:3;
}

Wait while .wanderer.skydweller-points is active

Amount of Kuugoryoku Points that Wanderer has. A value greater than 0 indicates that Wanderer is in the Windfavored state.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .wanderer.skydweller-points > 0 && f() - start < 300 {
  wanderer attack;
}

Use attack[travel=...]

Projectile travel time. Default 5 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

wanderer attack[travel=10];

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

wanderer low_plunge[collision=0];
Wriothesley wriothesley

Aliases: wrio

Code

wriothesley char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Gracious Rebuke spender

Use charged attack when the rebuke flag is active, otherwise continue normals.

Code

if .wriothesley.gracious-rebuke {
  wriothesley charge;
} else {
  wriothesley attack:3;
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn wriothesley_basic_loop() {
  if .wriothesley.skill.ready {
    wriothesley skill;
  }
  if .wriothesley.burst.ready {
    wriothesley burst;
  }
  wriothesley attack:3;
}

Wait while .wriothesley.gracious-rebuke is active

Whether Wriothesley currently has a Gracious Rebuke or not.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .wriothesley.gracious-rebuke > 0 && f() - start < 300 {
  wriothesley attack;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

wriothesley low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

wriothesley high_plunge[collision=0];
Xiangling xiangling

Aliases: xl

Code

xiangling char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn xiangling_basic_loop() {
  if .xiangling.skill.ready {
    xiangling skill;
  }
  if .xiangling.burst.ready {
    xiangling burst;
  }
  xiangling attack:3;
}

Use skill[a4_delay=...]

Number of frames until the active character picks up the Chili Pepper (A4) relative to Guoba Expiry. A negative value indicates that it is not picked up. Default -1, maximum 600.

skill[a4_delay=...]

Action params go inside brackets on the exact action you are casting.

Code

xiangling skill[a4_delay=10];

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

xiangling low_plunge[collision=0];
Xianyun xianyun

Aliases: liuyun, cloudretainer

Code

xianyun char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Adeptal Assistance monitor

Good for testing plunge teams: print or guard the remaining stacks before the plunge window.

Code

xianyun skill, high_plunge, burst;
print(.xianyun.adeptal-assistance);

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn xianyun_basic_loop() {
  if .xianyun.skill.ready {
    xianyun skill;
  }
  if .xianyun.burst.ready {
    xianyun burst;
  }
  xianyun attack:3;
}

Wait while .xianyun.adeptal-assistance is active

Number of Adeptal Assistance stacks.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .xianyun.adeptal-assistance > 0 && f() - start < 300 {
  xianyun attack;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

xianyun attack[travel=10];

Use charge[travel=...]

Projectile travel time. Default 10 frames.

charge[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

xianyun charge[travel=10];
Xiao xiao

Aliases: None listed.

Code

xiao char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn xiao_basic_loop() {
  if .xiao.skill.ready {
    xiao skill;
  }
  if .xiao.burst.ready {
    xiao burst;
  }
  xiao attack:3;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

xiao low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

xiao high_plunge[collision=0];
Xilonen xilonen

Aliases: xilo

Code

xilonen char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn xilonen_basic_loop() {
  if .xilonen.skill.ready {
    xilonen skill;
  }
  if .xilonen.burst.ready {
    xilonen burst;
  }
  xilonen attack:3;
}
Xingqiu xingqiu

Aliases: xq

Code

xingqiu char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn xingqiu_basic_loop() {
  if .xingqiu.skill.ready {
    xingqiu skill;
  }
  if .xingqiu.burst.ready {
    xingqiu burst;
  }
  xingqiu attack:3;
}
Xinyan xinyan

Aliases: None listed.

Code

xinyan char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn xinyan_basic_loop() {
  if .xinyan.skill.ready {
    xinyan skill;
  }
  if .xinyan.burst.ready {
    xinyan burst;
  }
  xinyan attack:3;
}

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

xinyan low_plunge[collision=0];

Use high_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

high_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

xinyan high_plunge[collision=0];
Yae Miko yaemiko

Aliases: yae

Code

yaemiko char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn yaemiko_basic_loop() {
  if .yaemiko.skill.ready {
    yaemiko skill;
  }
  if .yaemiko.burst.ready {
    yaemiko burst;
  }
  yaemiko attack:3;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

yaemiko attack[travel=10];

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

yaemiko low_plunge[collision=0];
Yanfei yanfei

Aliases: None listed.

Code

yanfei char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Scarlet Seal charged attack

Build seals, then spend them with charged attack.

Code

while .yanfei.seal-count < 3 {
  yanfei attack;
}
yanfei charge;

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn yanfei_basic_loop() {
  if .yanfei.skill.ready {
    yanfei skill;
  }
  if .yanfei.burst.ready {
    yanfei burst;
  }
  yanfei attack:3;
}

Wait while .yanfei.seal-count is active

Number of Scarlet Seals.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .yanfei.seal-count > 0 && f() - start < 300 {
  yanfei attack;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

yanfei attack[travel=10];

Use low_plunge[collision=...]

0 for no collision dmg (default), 1 for collision dmg.

low_plunge[collision=...]

Action params go inside brackets on the exact action you are casting.

Code

yanfei low_plunge[collision=0];
Yaoyao yaoyao

Aliases: None listed.

Code

yaoyao char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn yaoyao_basic_loop() {
  if .yaoyao.skill.ready {
    yaoyao skill;
  }
  if .yaoyao.burst.ready {
    yaoyao burst;
  }
  yaoyao attack:3;
}
Yelan yelan

Aliases: None listed.

Code

yelan char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Breakthrough barb

Use aim only when Breakthrough is ready; otherwise use the normal skill/burst route.

Code

if .yelan.breakthrough {
  yelan aim;
}
if .yelan.skill.ready {
  yelan skill;
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn yelan_basic_loop() {
  if .yelan.skill.ready {
    yelan skill;
  }
  if .yelan.burst.ready {
    yelan burst;
  }
  yelan attack:3;
}

Wait while .yelan.breakthrough is active

Whether Yelan is in the Breakthrough state or not.

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .yelan.breakthrough > 0 && f() - start < 300 {
  yelan attack;
}

Start with breakthrough

0 for no Breakthrough state at start of sim, 1 (default) for Breakthrough state at start of sim. Set via '+params=[breakthrough=...]' in Yelan's 'char' line.

+params=[...]

Character params go on the `char` line.

Code

yelan char lvl=90/90 cons=0 talent=9,9,9 +params=[breakthrough=1];

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

yelan attack[travel=10];
Yoimiya yoimiya

Aliases: yoi

Code

yoimiya char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn yoimiya_basic_loop() {
  if .yoimiya.skill.ready {
    yoimiya skill;
  }
  if .yoimiya.burst.ready {
    yoimiya burst;
  }
  yoimiya attack:3;
}

Use attack[travel=...]

Projectile travel time. Default 10 frames.

attack[travel=...]

Action params go inside brackets on the exact action you are casting.

Code

yoimiya attack[travel=10];

Use aim[hold=...]

0 for Physical Aimed Shot, 1 for Fully-Charged Aimed Shot (default), 2/3/4 for Fully-Charged Aimed Shot (1/2/3 Kindling Arrow).

aim[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

yoimiya aim[hold=1];
Yun Jin yunjin

Aliases: None listed.

Code

yunjin char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn yunjin_basic_loop() {
  if .yunjin.skill.ready {
    yunjin skill;
  }
  if .yunjin.burst.ready {
    yunjin burst;
  }
  yunjin attack:3;
}

Use skill[hold=...]

0 for Tap (default), 1 for Hold Lv. 1, 2 for Hold Lv. 2.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

yunjin skill[hold=1];

Use skill[perfect=...]

If 1, perform perfect counter (Hold Lv. 2 frames). Default 0.

skill[perfect=...]

Action params go inside brackets on the exact action you are casting.

Code

yunjin skill[perfect=1];
Zhongli zhongli

Aliases: zhong, zl

Code

zhongli char lvl=90/90 cons=0 talent=9,9,9;

Combo recipes

Shield refresh

Refresh the shield only when it is missing.

Code

if !.zhongli.shielded {
  zhongli skill[hold=1];
}

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn zhongli_basic_loop() {
  if .zhongli.skill.ready {
    zhongli skill;
  }
  if .zhongli.burst.ready {
    zhongli burst;
  }
  zhongli attack:3;
}

Wait while .zhongli.shielded is active

Evaluates to 1 if player is currently shielded

Live state

This is not a setup value. It is the current simulator state at that frame.

Timeout

The frame limit stops the config from freezing if the state never changes.

Code

let start = f();
while .zhongli.shielded > 0 && f() - start < 300 {
  zhongli attack;
}

Use skill[hold=...]

0 for Tap (default), 1 for Hold.

skill[hold=...]

Action params go inside brackets on the exact action you are casting.

Code

zhongli skill[hold=1];

Use skill[hold_nostele=...]

If 1, no Stone Stele will be created (i.e. shield only) and Hold will be performed. Default 0.

skill[hold_nostele=...]

Action params go inside brackets on the exact action you are casting.

Code

zhongli skill[hold_nostele=1];
Zibai zibai

Aliases: None listed.

Code

zibai char lvl=90/90 cons=0 talent=9,9,9;

Special notes

Stance vs stride

The first `skill` starts the stance. The second `skill` inside that status is the stride / alternate hit.

Code

zibai skill;
zibai skill;

Radiance gate

Radiance is what unlocks the alternate flow. If you stay below the required amount, the second part will not open cleanly.

Code

zibai skill;

Combo recipes

Safe basic loop

This is the safest starter pattern. It checks if skill/burst are ready before pressing them, then uses attacks as filler. Use it when you do not know a character combo yet.

if .character.skill.ready

This reads the cooldown. If it says ready, the action can be used now. If it is false, the sim skips that action.

attack:3

`attack:3` means three normal attacks in a row. Change the number while you test.

No infinite loop here

This helper runs once when you call it. Put the repeated rotation outside, in your main `for` loop.

Code

fn zibai_basic_loop() {
  if .zibai.skill.ready {
    zibai skill;
  }
  if .zibai.burst.ready {
    zibai burst;
  }
  zibai attack:3;
}

Weapon recipes

Weapons usually fail because the wrong character triggered the passive, the hit did not crit, the buff went to the wrong teammate, or a starting stack was assumed without being configured.

Favonius: keep hitting until it procs

Favonius weapons need a real crit from the weapon holder. If you want a support to stay on field until the particles arrive, store the starting energy, attack in a loop, and stop after a timeout so the config never freezes.

Important pieces

  • .energy.bennett reads Bennett's current energy.
  • start_energy=20 makes sure Bennett does not start full, so the proc can be detected.
  • f() - start_frame < 240 prevents the loop from running forever.
  • cr=0.80 improves the test, but it is still a real proc check.
bennett char lvl=90/90 cons=0 talent=9,9,9 +params=[start_energy=20];
bennett add weapon="favoniussword" refine=5 lvl=90/90;
bennett add stats cr=0.80 er=0.518 atk=311;

fn bennett_fav_until_proc() {
  let start_energy = .energy.bennett;
  let start_frame = f();

  while .energy.bennett <= start_energy && f() - start_frame < 240 {
    bennett attack;
  }
}

bennett_fav_until_proc();

For other Favonius weapons, use the same idea and change the holder.

xiangling char lvl=90/90 cons=0 talent=9,9,9 +params=[start_energy=20];
xiangling add weapon="favoniuslance" refine=5 lvl=90/90;
xiangling add stats cr=0.80 er=0.518 atk=311;

fn xiangling_fav_skill_then_retry() {
  let start_energy = .energy.xiangling;
  let start_frame = f();

  xiangling skill;

  while .energy.xiangling <= start_energy && f() - start_frame < 300 {
    xiangling attack;
  }
}

xiangling_fav_skill_then_retry();

Favonius: check cooldown before extra hits

When you see .shenhe.mods.favonius-cd, it means Favonius is already on cooldown. Another crit will not create particles yet, so optional filler attacks can be skipped.

if .shenhe.weapon == .keys.weapon.favlance && !.shenhe.mods.favonius-cd {
  shenhe attack;
}
if .furina.weapon == .keys.weapon.favsword && (!.furina.mods.favonius-cd || !.furina.burst.ready) {
  furina attack;
}

furina skill, dash;

if !.furina.mods.favonius-cd {
  furina attack;
}

Quick read

  • .furina.weapon == .keys.weapon.favsword confirms Furina has Favonius Sword.
  • !.furina.mods.favonius-cd means Favonius is not on cooldown.
  • !.furina.burst.ready means her burst still needs energy.
  • The second if avoids wasting time after Favonius already entered cooldown.

Setup recipes people search for

Start at 1 HP

bennett char lvl=90/90 cons=0 talent=9,9,9 +params=[start_hp=1];

Start at low HP percentage

hutao char lvl=90/90 cons=1 talent=9,9,9 +params=[start_hp%=49];

Start with specific energy

xiangling char lvl=90/90 cons=4 talent=9,9,9 +params=[start_energy=20];

Start with 3 lunar characters / 3 moons

Moonsign is team-based. Put lunar characters in the team; do not invent a fake global param.

aino char lvl=90/90 cons=0 talent=9,9,9;
columbina char lvl=90/90 cons=0 talent=9,9,9;
nefer char lvl=90/90 cons=0 talent=9,9,9;
bennett char lvl=90/90 cons=6 talent=9,9,9;

active nefer;

Weapons are explained as combat passives: who holds them, which action triggers them, whether they depend on crit/reaction/swap, and how to test them without guessing.

Absolution absolution

Aliases: None listed.

Code

character add weapon="absolution" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="absolution" refine=1 lvl=90/90;
character skill;
Akuoumaru akuoumaru

Aliases: None listed.

Code

character add weapon="akuoumaru" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="akuoumaru" refine=1 lvl=90/90;
character skill;
Alley Hunter alleyhunter

Aliases: None listed.

Code

character add weapon="alleyhunter" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="alleyhunter" refine=1 lvl=90/90;
character skill;

Test stacks

Number of stacks to gain at the beginning. Default 0, maximum 10.

+params=[...]

Weapon params go on the weapon line.

Testing state

Starting params are useful for comparisons, but may skip natural ramp-up.

Code

character add weapon="alleyhunter" refine=1 lvl=90/90 +params=[stacks=1];
Amenoma Kageuchi amenomakageuchi

Aliases: amenoma, ak

Code

character add weapon="amenomakageuchi" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="amenomakageuchi" refine=1 lvl=90/90;
character skill;
Amos' Bow amosbow

Aliases: amos

Code

character add weapon="amosbow" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="amosbow" refine=1 lvl=90/90;
character skill;
Apprentice's Notes apprenticesnotes

Aliases: apprentices, apprentice

Code

character add weapon="apprenticesnotes" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="apprenticesnotes" refine=1 lvl=90/90;
character skill;
Aqua Simulacra aquasimulacra

Aliases: aqua

Code

character add weapon="aquasimulacra" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="aquasimulacra" refine=1 lvl=90/90;
character skill;
Aquila Favonia aquilafavonia

Aliases: aquila

Code

character add weapon="aquilafavonia" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="aquilafavonia" refine=1 lvl=90/90;
character skill;
Ash-Graven Drinking Horn ashgravendrinkinghorn

Aliases: ashgraven

Code

character add weapon="ashgravendrinkinghorn" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="ashgravendrinkinghorn" refine=1 lvl=90/90;
character skill;
Astral Vulture's Crimson Plumage astralvulturescrimsonplumage

Aliases: avcp

Code

character add weapon="astralvulturescrimsonplumage" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="astralvulturescrimsonplumage" refine=1 lvl=90/90;
character skill;
A Thousand Blazing Suns athousandblazingsuns

Aliases: tbs

Code

character add weapon="athousandblazingsuns" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="athousandblazingsuns" refine=1 lvl=90/90;
character skill;
A Thousand Floating Dreams athousandfloatingdreams

Aliases: thousandfloatingdreams, tfd

Code

character add weapon="athousandfloatingdreams" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="athousandfloatingdreams" refine=1 lvl=90/90;
character skill;
Ballad of the Boundless Blue balladoftheboundlessblue

Aliases: boundlessblue

Code

character add weapon="balladoftheboundlessblue" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="balladoftheboundlessblue" refine=1 lvl=90/90;
character skill;
Ballad of the Fjords balladofthefjords

Aliases: ballad, fjords

Code

character add weapon="balladofthefjords" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="balladofthefjords" refine=1 lvl=90/90;
character skill;
Beacon of the Reed Sea beaconofthereedsea

Aliases: beacon

Code

character add weapon="beaconofthereedsea" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="beaconofthereedsea" refine=1 lvl=90/90;
character skill;
Beginner's Protector beginnersprotector

Aliases: beginners, beginner

Code

character add weapon="beginnersprotector" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="beginnersprotector" refine=1 lvl=90/90;
character skill;
Blackcliff Agate blackcliffagate

Aliases: None listed.

Code

character add weapon="blackcliffagate" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="blackcliffagate" refine=1 lvl=90/90;
character skill;
Blackcliff Longsword blackclifflongsword

Aliases: None listed.

Code

character add weapon="blackclifflongsword" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="blackclifflongsword" refine=1 lvl=90/90;
character skill;
Blackcliff Pole blackcliffpole

Aliases: None listed.

Code

character add weapon="blackcliffpole" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="blackcliffpole" refine=1 lvl=90/90;
character skill;
Blackcliff Slasher blackcliffslasher

Aliases: None listed.

Code

character add weapon="blackcliffslasher" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="blackcliffslasher" refine=1 lvl=90/90;
character skill;
Blackcliff Warbow blackcliffwarbow

Aliases: None listed.

Code

character add weapon="blackcliffwarbow" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="blackcliffwarbow" refine=1 lvl=90/90;
character skill;
Black Tassel blacktassel

Aliases: None listed.

Code

character add weapon="blacktassel" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="blacktassel" refine=1 lvl=90/90;
character skill;
Bloodtainted Greatsword bloodtaintedgreatsword

Aliases: bloodtainted

Code

character add weapon="bloodtaintedgreatsword" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="bloodtaintedgreatsword" refine=1 lvl=90/90;
character skill;
Calamity of Eshu calamityofeshu

Aliases: eshu

Code

character add weapon="calamityofeshu" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="calamityofeshu" refine=1 lvl=90/90;
character skill;
Calamity Queller calamityqueller

Aliases: calamity

Code

character add weapon="calamityqueller" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="calamityqueller" refine=1 lvl=90/90;
character skill;
Cashflow Supervision cashflowsupervision

Aliases: cashflow

Code

character add weapon="cashflowsupervision" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="cashflowsupervision" refine=1 lvl=90/90;
character skill;
Chain Breaker chainbreaker

Aliases: None listed.

Code

character add weapon="chainbreaker" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="chainbreaker" refine=1 lvl=90/90;
character skill;
Cinnabar Spindle cinnabarspindle

Aliases: cinnabar

Code

character add weapon="cinnabarspindle" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="cinnabarspindle" refine=1 lvl=90/90;
character skill;
Cloudforged cloudforged

Aliases: None listed.

Code

character add weapon="cloudforged" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="cloudforged" refine=1 lvl=90/90;
character skill;
Compound Bow compoundbow

Aliases: compound

Code

character add weapon="compoundbow" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="compoundbow" refine=1 lvl=90/90;
character skill;
Cool Steel coolsteel

Aliases: None listed.

Code

character add weapon="coolsteel" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="coolsteel" refine=1 lvl=90/90;
character skill;
Crane's Echoing Call cranesechoingcall

Aliases: crane

Code

character add weapon="cranesechoingcall" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="cranesechoingcall" refine=1 lvl=90/90;
character skill;
Crescent Pike crescentpike

Aliases: cpike, pike

Code

character add weapon="crescentpike" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="crescentpike" refine=1 lvl=90/90;
character skill;
Crimson Moon's Semblance crimsonmoonssemblance

Aliases: crimsonmoon

Code

character add weapon="crimsonmoonssemblance" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="crimsonmoonssemblance" refine=1 lvl=90/90;
character skill;
Dark Iron Sword darkironsword

Aliases: None listed.

Code

character add weapon="darkironsword" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="darkironsword" refine=1 lvl=90/90;
character skill;
Deathmatch deathmatch

Aliases: None listed.

Code

character add weapon="deathmatch" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="deathmatch" refine=1 lvl=90/90;
character skill;
Debate Club debateclub

Aliases: None listed.

Code

character add weapon="debateclub" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="debateclub" refine=1 lvl=90/90;
character skill;
Dialogues of the Desert Sages dialoguesofthedesertsages

Aliases: dialogues

Code

character add weapon="dialoguesofthedesertsages" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="dialoguesofthedesertsages" refine=1 lvl=90/90;
character skill;
Dodoco Tales dodocotales

Aliases: None listed.

Code

character add weapon="dodocotales" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="dodocotales" refine=1 lvl=90/90;
character skill;
Dragon's Bane dragonsbane

Aliases: dbane

Code

character add weapon="dragonsbane" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="dragonsbane" refine=1 lvl=90/90;
character skill;
Dragonspine Spear dragonspinespear

Aliases: None listed.

Code

character add weapon="dragonspinespear" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="dragonspinespear" refine=1 lvl=90/90;
character skill;
Dull Blade dullblade

Aliases: None listed.

Code

character add weapon="dullblade" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="dullblade" refine=1 lvl=90/90;
character skill;
Earth Shaker earthshaker

Aliases: None listed.

Code

character add weapon="earthshaker" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="earthshaker" refine=1 lvl=90/90;
character skill;
Elegy for the End elegyfortheend

Aliases: elegy

Code

character add weapon="elegyfortheend" refine=1 lvl=90/90;

Combo recipes

Stack before team window

Use skill/burst hits from the Elegy holder before the team damage window.

holder hits

Elegy needs hits from the equipped character's skill/burst to build sigils.

burst then carry

Common pattern: support burst first, carry after the buff exists.

Code

yelan add weapon="elegyfortheend" refine=1 lvl=90/90;
yelan burst;
mavuika burst;

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="elegyfortheend" refine=1 lvl=90/90;
character skill;
Emerald Orb emeraldorb

Aliases: None listed.

Code

character add weapon="emeraldorb" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="emeraldorb" refine=1 lvl=90/90;
character skill;
End of the Line endoftheline

Aliases: None listed.

Code

character add weapon="endoftheline" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="endoftheline" refine=1 lvl=90/90;
character skill;
Engulfing Lightning engulfinglightning

Aliases: engulfing

Code

character add weapon="engulfinglightning" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="engulfinglightning" refine=1 lvl=90/90;
character skill;
Etherlight Spindlelute etherlightspindlelute

Aliases: None listed.

Code

character add weapon="etherlightspindlelute" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="etherlightspindlelute" refine=1 lvl=90/90;
character skill;
Everlasting Moonglow everlastingmoonglow

Aliases: moonglow, donut

Code

character add weapon="everlastingmoonglow" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="everlastingmoonglow" refine=1 lvl=90/90;
character skill;
Eye of Perception eyeofperception

Aliases: None listed.

Code

character add weapon="eyeofperception" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="eyeofperception" refine=1 lvl=90/90;
character skill;
Fading Twilight fadingtwilight

Aliases: twilight

Code

character add weapon="fadingtwilight" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="fadingtwilight" refine=1 lvl=90/90;
character skill;
Fang of the Mountain King fangofthemountainking

Aliases: fotmk

Code

character add weapon="fangofthemountainking" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="fangofthemountainking" refine=1 lvl=90/90;
character skill;
Favonius Codex favoniuscodex

Aliases: favcodex

Code

character add weapon="favoniuscodex" refine=1 lvl=90/90;

Special notes

Proc rule

The proc only happens if the hit deals damage, crits, is from the holder, and the holder is active.

Code

sucrose add weapon="favoniuscodex" refine=5 lvl=90/90;

Combo recipes

Force real proc chances through CR

Favonius does not proc by command. Give the holder enough Crit Rate, then keep the holder active for the hit.

sucrose skill

A fast holder hit for testing Codex procs.

reaction damage

Favonius wants the holder's damage hit to crit, not just reaction text.

Code

sucrose add weapon="favoniuscodex" refine=5 lvl=90/90;
sucrose add stats cr=0.80 er=0.518 em=187;
sucrose skill;

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="favoniuscodex" refine=1 lvl=90/90;
character skill;

Favonius: keep attacking until particles arrive

Use this when the holder should stay on field until Favonius actually procs. The energy check proves that particles arrived, and the timeout avoids a frozen rotation.

.energy.sucrose

Reads the holder's current energy. Start below max energy so the increase is visible.

start_energy=20

Keeps the character from starting full; otherwise the energy field may not move.

while ... < 240

Keeps attacking only for a limited time. Raise it if the holder has slow attacks.

Favonius RNG

Favonius still needs a crit from the holder and follows its cooldown. This only retries safely.

Code

sucrose char lvl=90/90 cons=0 talent=9,9,9 +params=[start_energy=20];
sucrose add weapon="favoniuscodex" refine=5 lvl=90/90;
sucrose add stats cr=0.80 er=0.518 em=187;

fn sucrose_fav_until_proc() {
  let start_energy = .energy.sucrose;
  let start_frame = f();

  while .energy.sucrose <= start_energy && f() - start_frame < 240 {
    sucrose attack;
  }
}

sucrose_fav_until_proc();

Skill first, then basics until particles arrive

This is the practical version: use the best Favonius trigger first, then keep using basic attacks only if energy did not move yet.

sucrose skill;

First real hit that can crit and trigger Favonius.

.energy check

If particles already arrived, the loop ends. If not, it keeps using basic attacks.

Particle travel

Energy can arrive a little after the hit, so the loop checks the result, not only the cast.

Code

sucrose char lvl=90/90 cons=0 talent=9,9,9 +params=[start_energy=20];
sucrose add weapon="favoniuscodex" refine=5 lvl=90/90;
sucrose add stats cr=0.80 er=0.518 em=187;

fn sucrose_fav_skill_then_retry() {
  let start_energy = .energy.sucrose;
  let start_frame = f();

  sucrose skill;

  while .energy.sucrose <= start_energy && f() - start_frame < 300 {
    sucrose attack;
  }
}

sucrose_fav_skill_then_retry();

Check Favonius cooldown before wasting attacks

Use this around optional filler hits. If Favonius is already on cooldown, the holder does not need to stay on field trying again.

.sucrose.mods.favonius-cd

This mod exists while the Favonius cooldown is active.

.sucrose.weapon == .keys.weapon.favcodex

This protects shared helper code so it only runs when the holder really has that Favonius weapon equipped.

Optional filler

Put this around extra attacks, not around required setup actions like skill or burst.

Code

if .sucrose.weapon == .keys.weapon.favcodex && !.sucrose.mods.favonius-cd {
  sucrose attack;
}

sucrose skill;

if !.sucrose.mods.favonius-cd {
  sucrose attack;
}

Retry later after Favonius cooldown

Use this when the first window can miss and you want a second attempt later in the rotation.

wait(360)

About 6 seconds at 60 fps. Adjust it for lower refinement or a different timing window.

Cooldown exists

If you hit during cooldown, a crit still will not create another Favonius proc.

Code

sucrose add weapon="favoniuscodex" refine=5 lvl=90/90;
sucrose add stats cr=0.80 er=0.518 em=187;

sucrose skill;
wait(360);
sucrose skill;
Favonius Greatsword favoniusgreatsword

Aliases: favgs

Code

character add weapon="favoniusgreatsword" refine=1 lvl=90/90;

Special notes

Proc rule

The proc only happens if the hit deals damage, crits, is from the holder, and the holder is active.

Code

beidou add weapon="favoniusgreatsword" refine=5 lvl=90/90;

Combo recipes

Force real proc chances through CR

Favonius does not proc by command. Give the holder enough Crit Rate, then keep the holder active for the hit.

refine=5

Higher refine lowers cooldown and improves proc reliability.

critical hit

No crit means no Favonius particle.

Code

beidou add weapon="favoniusgreatsword" refine=5 lvl=90/90;
beidou add stats cr=0.80 er=0.518 atk=311;
beidou skill;

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="favoniusgreatsword" refine=1 lvl=90/90;
character skill;

Favonius: keep attacking until particles arrive

Use this when the holder should stay on field until Favonius actually procs. The energy check proves that particles arrived, and the timeout avoids a frozen rotation.

.energy.beidou

Reads the holder's current energy. Start below max energy so the increase is visible.

start_energy=20

Keeps the character from starting full; otherwise the energy field may not move.

while ... < 240

Keeps attacking only for a limited time. Raise it if the holder has slow attacks.

Favonius RNG

Favonius still needs a crit from the holder and follows its cooldown. This only retries safely.

Code

beidou char lvl=90/90 cons=0 talent=9,9,9 +params=[start_energy=20];
beidou add weapon="favoniusgreatsword" refine=5 lvl=90/90;
beidou add stats cr=0.80 er=0.518 atk=311;

fn beidou_fav_until_proc() {
  let start_energy = .energy.beidou;
  let start_frame = f();

  while .energy.beidou <= start_energy && f() - start_frame < 240 {
    beidou attack;
  }
}

beidou_fav_until_proc();

Skill first, then basics until particles arrive

This is the practical version: use the best Favonius trigger first, then keep using basic attacks only if energy did not move yet.

beidou skill;

First real hit that can crit and trigger Favonius.

.energy check

If particles already arrived, the loop ends. If not, it keeps using basic attacks.

Particle travel

Energy can arrive a little after the hit, so the loop checks the result, not only the cast.

Code

beidou char lvl=90/90 cons=0 talent=9,9,9 +params=[start_energy=20];
beidou add weapon="favoniusgreatsword" refine=5 lvl=90/90;
beidou add stats cr=0.80 er=0.518 atk=311;

fn beidou_fav_skill_then_retry() {
  let start_energy = .energy.beidou;
  let start_frame = f();

  beidou skill;

  while .energy.beidou <= start_energy && f() - start_frame < 300 {
    beidou attack;
  }
}

beidou_fav_skill_then_retry();

Check Favonius cooldown before wasting attacks

Use this around optional filler hits. If Favonius is already on cooldown, the holder does not need to stay on field trying again.

.beidou.mods.favonius-cd

This mod exists while the Favonius cooldown is active.

.beidou.weapon == .keys.weapon.favgreatsword

This protects shared helper code so it only runs when the holder really has that Favonius weapon equipped.

Optional filler

Put this around extra attacks, not around required setup actions like skill or burst.

Code

if .beidou.weapon == .keys.weapon.favgreatsword && !.beidou.mods.favonius-cd {
  beidou attack;
}

beidou skill;

if !.beidou.mods.favonius-cd {
  beidou attack;
}

Retry later after Favonius cooldown

Use this when the first window can miss and you want a second attempt later in the rotation.

wait(360)

About 6 seconds at 60 fps. Adjust it for lower refinement or a different timing window.

Cooldown exists

If you hit during cooldown, a crit still will not create another Favonius proc.

Code

beidou add weapon="favoniusgreatsword" refine=5 lvl=90/90;
beidou add stats cr=0.80 er=0.518 atk=311;

beidou skill;
wait(360);
beidou skill;
Favonius Lance favoniuslance

Aliases: favlance, favspear

Code

character add weapon="favoniuslance" refine=1 lvl=90/90;

Special notes

Proc rule

The proc only happens if the hit deals damage, crits, is from the holder, and the holder is active.

Code

xiangling add weapon="favoniuslance" refine=5 lvl=90/90;

Combo recipes

Force real proc chances through CR

Favonius does not proc by command. Give the holder enough Crit Rate, then keep the holder active for the hit.

skill hit

Use a real damaging hit from the holder to test the proc.

not guaranteed

Even high Crit Rate still follows crit/proc logic unless you force stats extremely high.

Code

xiangling add weapon="favoniuslance" refine=5 lvl=90/90;
xiangling add stats cr=0.80 er=0.518 atk=311;
xiangling skill;

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="favoniuslance" refine=1 lvl=90/90;
character skill;

Favonius: keep attacking until particles arrive

Use this when the holder should stay on field until Favonius actually procs. The energy check proves that particles arrived, and the timeout avoids a frozen rotation.

.energy.xiangling

Reads the holder's current energy. Start below max energy so the increase is visible.

start_energy=20

Keeps the character from starting full; otherwise the energy field may not move.

while ... < 240

Keeps attacking only for a limited time. Raise it if the holder has slow attacks.

Favonius RNG

Favonius still needs a crit from the holder and follows its cooldown. This only retries safely.

Code

xiangling char lvl=90/90 cons=0 talent=9,9,9 +params=[start_energy=20];
xiangling add weapon="favoniuslance" refine=5 lvl=90/90;
xiangling add stats cr=0.80 er=0.518 atk=311;

fn xiangling_fav_until_proc() {
  let start_energy = .energy.xiangling;
  let start_frame = f();

  while .energy.xiangling <= start_energy && f() - start_frame < 240 {
    xiangling attack;
  }
}

xiangling_fav_until_proc();

Skill first, then basics until particles arrive

This is the practical version: use the best Favonius trigger first, then keep using basic attacks only if energy did not move yet.

xiangling skill;

First real hit that can crit and trigger Favonius.

.energy check

If particles already arrived, the loop ends. If not, it keeps using basic attacks.

Particle travel

Energy can arrive a little after the hit, so the loop checks the result, not only the cast.

Code

xiangling char lvl=90/90 cons=0 talent=9,9,9 +params=[start_energy=20];
xiangling add weapon="favoniuslance" refine=5 lvl=90/90;
xiangling add stats cr=0.80 er=0.518 atk=311;

fn xiangling_fav_skill_then_retry() {
  let start_energy = .energy.xiangling;
  let start_frame = f();

  xiangling skill;

  while .energy.xiangling <= start_energy && f() - start_frame < 300 {
    xiangling attack;
  }
}

xiangling_fav_skill_then_retry();

Check Favonius cooldown before wasting attacks

Use this around optional filler hits. If Favonius is already on cooldown, the holder does not need to stay on field trying again.

.xiangling.mods.favonius-cd

This mod exists while the Favonius cooldown is active.

.xiangling.weapon == .keys.weapon.favlance

This protects shared helper code so it only runs when the holder really has that Favonius weapon equipped.

Optional filler

Put this around extra attacks, not around required setup actions like skill or burst.

Code

if .xiangling.weapon == .keys.weapon.favlance && !.xiangling.mods.favonius-cd {
  xiangling attack;
}

xiangling skill;

if !.xiangling.mods.favonius-cd {
  xiangling attack;
}

Retry later after Favonius cooldown

Use this when the first window can miss and you want a second attempt later in the rotation.

wait(360)

About 6 seconds at 60 fps. Adjust it for lower refinement or a different timing window.

Cooldown exists

If you hit during cooldown, a crit still will not create another Favonius proc.

Code

xiangling add weapon="favoniuslance" refine=5 lvl=90/90;
xiangling add stats cr=0.80 er=0.518 atk=311;

xiangling skill;
wait(360);
xiangling skill;
Favonius Sword favoniussword

Aliases: favsword

Code

character add weapon="favoniussword" refine=1 lvl=90/90;

Special notes

Proc rule

The proc only happens if the hit deals damage, crits, is from the holder, and the holder is active.

Code

bennett add weapon="favoniussword" refine=5 lvl=90/90;

Combo recipes

Force real proc chances through CR

Favonius does not proc by command. Give the holder enough Crit Rate, then keep the holder active for the hit.

cr=0.80

Raises the chance to trigger Favonius naturally during testing.

holder active

Favonius checks the weapon holder's hit. Off-field or wrong-holder hits can fail.

Code

bennett add weapon="favoniussword" refine=5 lvl=90/90;
bennett add stats cr=0.80 er=0.518 atk=311;
bennett skill;

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="favoniussword" refine=1 lvl=90/90;
character skill;

Favonius: keep attacking until particles arrive

Use this when the holder should stay on field until Favonius actually procs. The energy check proves that particles arrived, and the timeout avoids a frozen rotation.

.energy.bennett

Reads the holder's current energy. Start below max energy so the increase is visible.

start_energy=20

Keeps the character from starting full; otherwise the energy field may not move.

while ... < 240

Keeps attacking only for a limited time. Raise it if the holder has slow attacks.

Favonius RNG

Favonius still needs a crit from the holder and follows its cooldown. This only retries safely.

Code

bennett char lvl=90/90 cons=0 talent=9,9,9 +params=[start_energy=20];
bennett add weapon="favoniussword" refine=5 lvl=90/90;
bennett add stats cr=0.80 er=0.518 atk=311;

fn bennett_fav_until_proc() {
  let start_energy = .energy.bennett;
  let start_frame = f();

  while .energy.bennett <= start_energy && f() - start_frame < 240 {
    bennett attack;
  }
}

bennett_fav_until_proc();

Skill first, then basics until particles arrive

This is the practical version: use the best Favonius trigger first, then keep using basic attacks only if energy did not move yet.

bennett skill;

First real hit that can crit and trigger Favonius.

.energy check

If particles already arrived, the loop ends. If not, it keeps using basic attacks.

Particle travel

Energy can arrive a little after the hit, so the loop checks the result, not only the cast.

Code

bennett char lvl=90/90 cons=0 talent=9,9,9 +params=[start_energy=20];
bennett add weapon="favoniussword" refine=5 lvl=90/90;
bennett add stats cr=0.80 er=0.518 atk=311;

fn bennett_fav_skill_then_retry() {
  let start_energy = .energy.bennett;
  let start_frame = f();

  bennett skill;

  while .energy.bennett <= start_energy && f() - start_frame < 300 {
    bennett attack;
  }
}

bennett_fav_skill_then_retry();

Check Favonius cooldown before wasting attacks

Use this around optional filler hits. If Favonius is already on cooldown, the holder does not need to stay on field trying again.

.bennett.mods.favonius-cd

This mod exists while the Favonius cooldown is active.

.bennett.weapon == .keys.weapon.favsword

This protects shared helper code so it only runs when the holder really has that Favonius weapon equipped.

Optional filler

Put this around extra attacks, not around required setup actions like skill or burst.

Code

if .bennett.weapon == .keys.weapon.favsword && !.bennett.mods.favonius-cd {
  bennett attack;
}

bennett skill;

if !.bennett.mods.favonius-cd {
  bennett attack;
}

Retry later after Favonius cooldown

Use this when the first window can miss and you want a second attempt later in the rotation.

wait(360)

About 6 seconds at 60 fps. Adjust it for lower refinement or a different timing window.

Cooldown exists

If you hit during cooldown, a crit still will not create another Favonius proc.

Code

bennett add weapon="favoniussword" refine=5 lvl=90/90;
bennett add stats cr=0.80 er=0.518 atk=311;

bennett skill;
wait(360);
bennett skill;
Favonius Warbow favoniuswarbow

Aliases: favbow

Code

character add weapon="favoniuswarbow" refine=1 lvl=90/90;

Special notes

Proc rule

The proc only happens if the hit deals damage, crits, is from the holder, and the holder is active.

Code

yelan add weapon="favoniuswarbow" refine=5 lvl=90/90;

Combo recipes

Force real proc chances through CR

Favonius does not proc by command. Give the holder enough Crit Rate, then keep the holder active for the hit.

yelan skill

A direct holder hit that can crit and trigger the bow.

field time

Swap away too early and you may test the wrong hit.

Code

yelan add weapon="favoniuswarbow" refine=5 lvl=90/90;
yelan add stats cr=0.80 er=0.518 hp=4780;
yelan skill;

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="favoniuswarbow" refine=1 lvl=90/90;
character skill;

Favonius: keep attacking until particles arrive

Use this when the holder should stay on field until Favonius actually procs. The energy check proves that particles arrived, and the timeout avoids a frozen rotation.

.energy.yelan

Reads the holder's current energy. Start below max energy so the increase is visible.

start_energy=20

Keeps the character from starting full; otherwise the energy field may not move.

while ... < 240

Keeps attacking only for a limited time. Raise it if the holder has slow attacks.

Favonius RNG

Favonius still needs a crit from the holder and follows its cooldown. This only retries safely.

Code

yelan char lvl=90/90 cons=0 talent=9,9,9 +params=[start_energy=20];
yelan add weapon="favoniuswarbow" refine=5 lvl=90/90;
yelan add stats cr=0.80 er=0.518 hp=4780;

fn yelan_fav_until_proc() {
  let start_energy = .energy.yelan;
  let start_frame = f();

  while .energy.yelan <= start_energy && f() - start_frame < 240 {
    yelan attack;
  }
}

yelan_fav_until_proc();

Skill first, then basics until particles arrive

This is the practical version: use the best Favonius trigger first, then keep using basic attacks only if energy did not move yet.

yelan skill;

First real hit that can crit and trigger Favonius.

.energy check

If particles already arrived, the loop ends. If not, it keeps using basic attacks.

Particle travel

Energy can arrive a little after the hit, so the loop checks the result, not only the cast.

Code

yelan char lvl=90/90 cons=0 talent=9,9,9 +params=[start_energy=20];
yelan add weapon="favoniuswarbow" refine=5 lvl=90/90;
yelan add stats cr=0.80 er=0.518 hp=4780;

fn yelan_fav_skill_then_retry() {
  let start_energy = .energy.yelan;
  let start_frame = f();

  yelan skill;

  while .energy.yelan <= start_energy && f() - start_frame < 300 {
    yelan attack;
  }
}

yelan_fav_skill_then_retry();

Check Favonius cooldown before wasting attacks

Use this around optional filler hits. If Favonius is already on cooldown, the holder does not need to stay on field trying again.

.yelan.mods.favonius-cd

This mod exists while the Favonius cooldown is active.

.yelan.weapon == .keys.weapon.favwarbow

This protects shared helper code so it only runs when the holder really has that Favonius weapon equipped.

Optional filler

Put this around extra attacks, not around required setup actions like skill or burst.

Code

if .yelan.weapon == .keys.weapon.favwarbow && !.yelan.mods.favonius-cd {
  yelan attack;
}

yelan skill;

if !.yelan.mods.favonius-cd {
  yelan attack;
}

Retry later after Favonius cooldown

Use this when the first window can miss and you want a second attempt later in the rotation.

wait(360)

About 6 seconds at 60 fps. Adjust it for lower refinement or a different timing window.

Cooldown exists

If you hit during cooldown, a crit still will not create another Favonius proc.

Code

yelan add weapon="favoniuswarbow" refine=5 lvl=90/90;
yelan add stats cr=0.80 er=0.518 hp=4780;

yelan skill;
wait(360);
yelan skill;
Ferrous Shadow ferrousshadow

Aliases: None listed.

Code

character add weapon="ferrousshadow" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="ferrousshadow" refine=1 lvl=90/90;
character skill;
Festering Desire festeringdesire

Aliases: festering

Code

character add weapon="festeringdesire" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="festeringdesire" refine=1 lvl=90/90;
character skill;
Fillet Blade filletblade

Aliases: None listed.

Code

character add weapon="filletblade" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="filletblade" refine=1 lvl=90/90;
character skill;
Finale of the Deep finaleofthedeep

Aliases: finale

Code

character add weapon="finaleofthedeep" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="finaleofthedeep" refine=1 lvl=90/90;
character skill;
Fleuve Cendre Ferryman fleuvecendreferryman

Aliases: fleuve, pipe

Code

character add weapon="fleuvecendreferryman" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="fleuvecendreferryman" refine=1 lvl=90/90;
character skill;
Flower-Wreathed Feathers flowerwreathedfeathers

Aliases: None listed.

Code

character add weapon="flowerwreathedfeathers" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="flowerwreathedfeathers" refine=1 lvl=90/90;
character skill;
Flowing Purity flowingpurity

Aliases: None listed.

Code

character add weapon="flowingpurity" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="flowingpurity" refine=1 lvl=90/90;
character skill;
Flute of Ezpitzal fluteofezpitzal

Aliases: ezpital

Code

character add weapon="fluteofezpitzal" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="fluteofezpitzal" refine=1 lvl=90/90;
character skill;
Footprint of the Rainbow footprintoftherainbow

Aliases: footprint, fotr

Code

character add weapon="footprintoftherainbow" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="footprintoftherainbow" refine=1 lvl=90/90;
character skill;
Forest Regalia forestregalia

Aliases: regalia

Code

character add weapon="forestregalia" refine=1 lvl=90/90;

Special notes

Leaf pickup delay

This belongs to the Leaf weapon series. `pickup_delay` controls how many frames pass before the active character picks up the Leaf after the weapon procs.

Code

dehya add weapon="forestregalia" refine=5 lvl=90/90 +params=[pickup_delay=60];

Manual Leaf pickup

Use the `pickup` action when the Leaf exists and you want the current/called character to receive the buff.

Code

dehya add weapon="forestregalia" refine=5 lvl=90/90 +params=[pickup_delay=0];
dehya skill;
nefer pickup;

Immediate pickup

Use `pickup_delay=0` when you want the current active character to pick the Leaf immediately after the proc.

Code

dehya add weapon="forestregalia" refine=5 lvl=90/90 +params=[pickup_delay=0];

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="forestregalia" refine=1 lvl=90/90;
character skill;

Test pickup_delay

Number of frames until the Leaf is picked up by the active character after every proc.

+params=[...]

Weapon params go on the weapon line.

Testing state

Starting params are useful for comparisons, but may skip natural ramp-up.

Code

character add weapon="forestregalia" refine=1 lvl=90/90 +params=[pickup_delay=10];
Freedom-Sworn freedomsworn

Aliases: freedom, fs

Code

character add weapon="freedomsworn" refine=1 lvl=90/90;

Combo recipes

Reaction before carry

Freedom-Sworn is best documented as a timing weapon: trigger reactions, then swap into the carry.

Code

kazuha add weapon="freedomsworn" refine=1 lvl=90/90;
kazuha skill, high_plunge;
arlecchino attack:3;

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="freedomsworn" refine=1 lvl=90/90;
character skill;
Frostbearer frostbearer

Aliases: None listed.

Code

character add weapon="frostbearer" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="frostbearer" refine=1 lvl=90/90;
character skill;
Fruitful Hook fruitfulhook

Aliases: None listed.

Code

character add weapon="fruitfulhook" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="fruitfulhook" refine=1 lvl=90/90;
character skill;
Fruit of Fulfillment fruitoffulfillment

Aliases: fruit, fof

Code

character add weapon="fruitoffulfillment" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="fruitoffulfillment" refine=1 lvl=90/90;
character skill;
Gestofthemightywolf gestofthemightywolf

Aliases: None listed.

Code

character add weapon="gestofthemightywolf" refine=1 lvl=90/90;

Special notes

Not the same as Wolf's Gravestone

This is its own claymore. It gives ATK SPD and stacks from normal attacks, skill, and charged attacks.

Code

varka add weapon="gestofthemightywolf" refine=1 lvl=90/90;

Stack timing

Each Hymn stack lasts 4s. Normal attacks add 1, while skill and charged attacks add 2 when the holder is active.

Code

varka skill;
varka attack;
varka charge;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="gestofthemightywolf" refine=1 lvl=90/90;
character skill;
Hakushin Ring hakushinring

Aliases: hakushin

Code

character add weapon="hakushinring" refine=1 lvl=90/90;

Combo recipes

Electro reaction setup

Trigger an Electro reaction with the holder before the teammate damage window.

Code

sucrose add weapon="hakushinring" refine=5 lvl=90/90;
fischl skill;
sucrose skill;
yae skill;

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="hakushinring" refine=1 lvl=90/90;
character skill;
Halberd halberd

Aliases: None listed.

Code

character add weapon="halberd" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="halberd" refine=1 lvl=90/90;
character skill;
Hamayumi hamayumi

Aliases: None listed.

Code

character add weapon="hamayumi" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="hamayumi" refine=1 lvl=90/90;
character skill;
Haran Geppaku Futsu harangeppakufutsu

Aliases: haran

Code

character add weapon="harangeppakufutsu" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="harangeppakufutsu" refine=1 lvl=90/90;
character skill;
Harbinger of Dawn harbingerofdawn

Aliases: harbinger

Code

character add weapon="harbingerofdawn" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="harbingerofdawn" refine=1 lvl=90/90;
character skill;
Hunter's Bow huntersbow

Aliases: None listed.

Code

character add weapon="huntersbow" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="huntersbow" refine=1 lvl=90/90;
character skill;
Hunter's Path hunterspath

Aliases: None listed.

Code

character add weapon="hunterspath" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="hunterspath" refine=1 lvl=90/90;
character skill;
Ibis Piercer ibispiercer

Aliases: ibis

Code

character add weapon="ibispiercer" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="ibispiercer" refine=1 lvl=90/90;
character skill;
Iron Point ironpoint

Aliases: None listed.

Code

character add weapon="ironpoint" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="ironpoint" refine=1 lvl=90/90;
character skill;
Iron Sting ironsting

Aliases: None listed.

Code

character add weapon="ironsting" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="ironsting" refine=1 lvl=90/90;
character skill;
Jadefall's Splendor jadefallssplendor

Aliases: jadefall

Code

character add weapon="jadefallssplendor" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="jadefallssplendor" refine=1 lvl=90/90;
character skill;
Kagotsurube Isshin kagotsurubeisshin

Aliases: isshin

Code

character add weapon="kagotsurubeisshin" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="kagotsurubeisshin" refine=1 lvl=90/90;
character skill;
Kagura's Verity kagurasverity

Aliases: kagura

Code

character add weapon="kagurasverity" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="kagurasverity" refine=1 lvl=90/90;
character skill;
Katsuragikiri Nagamasa katsuragikirinagamasa

Aliases: nagamasa

Code

character add weapon="katsuragikirinagamasa" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="katsuragikirinagamasa" refine=1 lvl=90/90;
character skill;
Key of Khaj-Nisut keyofkhajnisut

Aliases: key, khajnisut

Code

character add weapon="keyofkhajnisut" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="keyofkhajnisut" refine=1 lvl=90/90;
character skill;
King's Squire kingssquire

Aliases: None listed.

Code

character add weapon="kingssquire" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="kingssquire" refine=1 lvl=90/90;
character skill;
Kitain Cross Spear kitaincrossspear

Aliases: kitain

Code

character add weapon="kitaincrossspear" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="kitaincrossspear" refine=1 lvl=90/90;
character skill;
Light of Foliar Incision lightoffoliarincision

Aliases: lofi, foliar, foliarincision, incision

Code

character add weapon="lightoffoliarincision" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="lightoffoliarincision" refine=1 lvl=90/90;
character skill;
Lion's Roar lionsroar

Aliases: None listed.

Code

character add weapon="lionsroar" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="lionsroar" refine=1 lvl=90/90;
character skill;
Lithic Blade lithicblade

Aliases: None listed.

Code

character add weapon="lithicblade" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="lithicblade" refine=1 lvl=90/90;
character skill;
Lithic Spear lithicspear

Aliases: None listed.

Code

character add weapon="lithicspear" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="lithicspear" refine=1 lvl=90/90;
character skill;
Lost Prayer to the Sacred Winds lostprayertothesacredwinds

Aliases: lostprayer

Code

character add weapon="lostprayertothesacredwinds" refine=1 lvl=90/90;

Combo recipes

Start stacks for tests

Use its param when you want a fixed stack count instead of waiting on field.

Code

wanderer add weapon="lostprayertothesacredwinds" refine=1 lvl=90/90 +params=[stacks=4];

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="lostprayertothesacredwinds" refine=1 lvl=90/90;
character skill;

Test stacks

Number of stacks to gain at the beginning. Default 0, maximum 4.

+params=[...]

Weapon params go on the weapon line.

Testing state

Starting params are useful for comparisons, but may skip natural ramp-up.

Code

character add weapon="lostprayertothesacredwinds" refine=1 lvl=90/90 +params=[stacks=1];
Lumidouce Elegy lumidouceelegy

Aliases: None listed.

Code

character add weapon="lumidouceelegy" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="lumidouceelegy" refine=1 lvl=90/90;
character skill;
Luxurious Sea-Lord luxurioussealord

Aliases: sealord

Code

character add weapon="luxurioussealord" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="luxurioussealord" refine=1 lvl=90/90;
character skill;
Magic Guide magicguide

Aliases: None listed.

Code

character add weapon="magicguide" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="magicguide" refine=1 lvl=90/90;
character skill;
Mailed Flower mailedflower

Aliases: mailed

Code

character add weapon="mailedflower" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="mailedflower" refine=1 lvl=90/90;
character skill;
Makhaira Aquamarine makhairaaquamarine

Aliases: aquamarine

Code

character add weapon="makhairaaquamarine" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="makhairaaquamarine" refine=1 lvl=90/90;
character skill;
Mappa Mare mappamare

Aliases: mappa

Code

character add weapon="mappamare" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="mappamare" refine=1 lvl=90/90;
character skill;
Memory of Dust memoryofdust

Aliases: None listed.

Code

character add weapon="memoryofdust" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="memoryofdust" refine=1 lvl=90/90;
character skill;
Messenger messenger

Aliases: None listed.

Code

character add weapon="messenger" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="messenger" refine=1 lvl=90/90;
character skill;
Missive Windspear missivewindspear

Aliases: missive

Code

character add weapon="missivewindspear" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="missivewindspear" refine=1 lvl=90/90;
character skill;
Mistsplitter Reforged mistsplitterreforged

Aliases: mistsplitter, mist

Code

character add weapon="mistsplitterreforged" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="mistsplitterreforged" refine=1 lvl=90/90;
character skill;
Mitternachts Waltz mitternachtswaltz

Aliases: mitternacht, mitternachts, waltz

Code

character add weapon="mitternachtswaltz" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="mitternachtswaltz" refine=1 lvl=90/90;
character skill;
Moonpiercer moonpiercer

Aliases: None listed.

Code

character add weapon="moonpiercer" refine=1 lvl=90/90;

Special notes

Leaf pickup delay

This belongs to the Leaf weapon series. `pickup_delay` controls how many frames pass before the active character picks up the Leaf after the weapon procs.

Code

xiangling add weapon="moonpiercer" refine=5 lvl=90/90 +params=[pickup_delay=60];

Manual Leaf pickup

Use `pickup` after the Dendro reaction creates the Leaf, then continue with the character that should hold the buff.

Code

xiangling add weapon="moonpiercer" refine=5 lvl=90/90 +params=[pickup_delay=0];
nahida skill;
xiangling skill;
nefer pickup;

Carry pickup timing

Delay pickup if the holder procs the Leaf, then another character should receive it.

Code

nahida skill;
xiangling skill;
sleep(30);
mavuika burst; # active before the Leaf is picked up

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="moonpiercer" refine=1 lvl=90/90;
character skill;

Test pickup_delay

Number of frames until the Leaf is picked up by the active character after every proc.

+params=[...]

Weapon params go on the weapon line.

Testing state

Starting params are useful for comparisons, but may skip natural ramp-up.

Code

character add weapon="moonpiercer" refine=1 lvl=90/90 +params=[pickup_delay=10];
Mountain-Bracing Bolt mountainbracingbolt

Aliases: None listed.

Code

character add weapon="mountainbracingbolt" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="mountainbracingbolt" refine=1 lvl=90/90;
character skill;
Mouun's Moon mouunsmoon

Aliases: mouun, mouuns

Code

character add weapon="mouunsmoon" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="mouunsmoon" refine=1 lvl=90/90;
character skill;
Oathsworn Eye oathsworneye

Aliases: oathsworn

Code

character add weapon="oathsworneye" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="oathsworneye" refine=1 lvl=90/90;
character skill;
Old Merc's Pal oldmercspal

Aliases: None listed.

Code

character add weapon="oldmercspal" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="oldmercspal" refine=1 lvl=90/90;
character skill;
Otherworldly Story otherworldlystory

Aliases: otherworldly

Code

character add weapon="otherworldlystory" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="otherworldlystory" refine=1 lvl=90/90;
character skill;
Peak Patrol Song peakpatrolsong

Aliases: pps

Code

character add weapon="peakpatrolsong" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="peakpatrolsong" refine=1 lvl=90/90;
character skill;
Pocket Grimoire pocketgrimoire

Aliases: pocket

Code

character add weapon="pocketgrimoire" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="pocketgrimoire" refine=1 lvl=90/90;
character skill;
Polar Star polarstar

Aliases: polar

Code

character add weapon="polarstar" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="polarstar" refine=1 lvl=90/90;
character skill;
Portable Power Saw portablepowersaw

Aliases: powersaw

Code

character add weapon="portablepowersaw" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="portablepowersaw" refine=1 lvl=90/90;
character skill;
Predator predator

Aliases: None listed.

Code

character add weapon="predator" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="predator" refine=1 lvl=90/90;
character skill;

Test passive

0 for passive disabled, 1 for enabled (default).

+params=[...]

Weapon params go on the weapon line.

Testing state

Starting params are useful for comparisons, but may skip natural ramp-up.

Code

character add weapon="predator" refine=1 lvl=90/90 +params=[passive=1];
Primordial Jade Cutter primordialjadecutter

Aliases: jadecutter, pjc

Code

character add weapon="primordialjadecutter" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="primordialjadecutter" refine=1 lvl=90/90;
character skill;
Primordial Jade Winged-Spear primordialjadewingedspear

Aliases: jadespear, pjws

Code

character add weapon="primordialjadewingedspear" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="primordialjadewingedspear" refine=1 lvl=90/90;
character skill;
Prospector's Drill prospectorsdrill

Aliases: None listed.

Code

character add weapon="prospectorsdrill" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="prospectorsdrill" refine=1 lvl=90/90;
character skill;
Prototype Amber prototypeamber

Aliases: pamber

Code

character add weapon="prototypeamber" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="prototypeamber" refine=1 lvl=90/90;
character skill;
Prototype Archaic prototypearchaic

Aliases: archaic

Code

character add weapon="prototypearchaic" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="prototypearchaic" refine=1 lvl=90/90;
character skill;
Prototype Crescent prototypecrescent

Aliases: crescent

Code

character add weapon="prototypecrescent" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="prototypecrescent" refine=1 lvl=90/90;
character skill;
Prototype Rancour prototyperancour

Aliases: rancour

Code

character add weapon="prototyperancour" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="prototyperancour" refine=1 lvl=90/90;
character skill;
Prototype Starglitter prototypestarglitter

Aliases: starglitter

Code

character add weapon="prototypestarglitter" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="prototypestarglitter" refine=1 lvl=90/90;
character skill;
Rainslasher rainslasher

Aliases: None listed.

Code

character add weapon="rainslasher" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="rainslasher" refine=1 lvl=90/90;
character skill;
Range Gauge rangegauge

Aliases: None listed.

Code

character add weapon="rangegauge" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="rangegauge" refine=1 lvl=90/90;
character skill;
Raven Bow ravenbow

Aliases: raven

Code

character add weapon="ravenbow" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="ravenbow" refine=1 lvl=90/90;
character skill;
Recurve Bow recurvebow

Aliases: recurve

Code

character add weapon="recurvebow" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="recurvebow" refine=1 lvl=90/90;
character skill;
Redhorn Stonethresher redhornstonethresher

Aliases: redhorn

Code

character add weapon="redhornstonethresher" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="redhornstonethresher" refine=1 lvl=90/90;
character skill;
Rightful Reward rightfulreward

Aliases: None listed.

Code

character add weapon="rightfulreward" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="rightfulreward" refine=1 lvl=90/90;
character skill;
Ring of Yaxche ringofyaxche

Aliases: None listed.

Code

character add weapon="ringofyaxche" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="ringofyaxche" refine=1 lvl=90/90;
character skill;
Royal Bow royalbow

Aliases: None listed.

Code

character add weapon="royalbow" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="royalbow" refine=1 lvl=90/90;
character skill;
Royal Greatsword royalgreatsword

Aliases: None listed.

Code

character add weapon="royalgreatsword" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="royalgreatsword" refine=1 lvl=90/90;
character skill;
Royal Grimoire royalgrimoire

Aliases: None listed.

Code

character add weapon="royalgrimoire" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="royalgrimoire" refine=1 lvl=90/90;
character skill;
Royal Longsword royallongsword

Aliases: None listed.

Code

character add weapon="royallongsword" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="royallongsword" refine=1 lvl=90/90;
character skill;
Royal Spear royalspear

Aliases: None listed.

Code

character add weapon="royalspear" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="royalspear" refine=1 lvl=90/90;
character skill;
Rust rust

Aliases: None listed.

Code

character add weapon="rust" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="rust" refine=1 lvl=90/90;
character skill;
Sacrificial Bow sacrificialbow

Aliases: sacbow

Code

character add weapon="sacrificialbow" refine=1 lvl=90/90;

Combo recipes

Skill reset testing

Sacrificial weapons reset skill through their own proc logic. Test with real skill hits.

skill twice only after reset

Do not blindly cast the second skill unless your rotation confirms it is ready.

.character.skill.ready

Use this field to check if Sacrificial reset happened.

Code

diona add weapon="sacrificialbow" refine=5 lvl=90/90;
diona skill;
if .diona.skill.ready {
  diona skill;
}

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="sacrificialbow" refine=1 lvl=90/90;
character skill;
Sacrificial Fragments sacrificialfragments

Aliases: sacfragments, sacfrags, sacfrag

Code

character add weapon="sacrificialfragments" refine=1 lvl=90/90;

Combo recipes

Skill reset testing

Use cooldown checks to avoid writing a second skill that only works when Sacrificial resets.

Code

sucrose add weapon="sacrificialfragments" refine=5 lvl=90/90;
sucrose skill;
if .sucrose.skill.ready {
  sucrose skill;
}

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="sacrificialfragments" refine=1 lvl=90/90;
character skill;
Sacrificial Greatsword sacrificialgreatsword

Aliases: sacgs

Code

character add weapon="sacrificialgreatsword" refine=1 lvl=90/90;

Combo recipes

Skill reset testing

Use cooldown checks to avoid dead or illegal second skill casts.

Code

beidou add weapon="sacrificialgreatsword" refine=5 lvl=90/90;
beidou skill;
if .beidou.skill.ready {
  beidou skill;
}

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="sacrificialgreatsword" refine=1 lvl=90/90;
character skill;
Sacrificial Jade sacrificialjade

Aliases: sacjade

Code

character add weapon="sacrificialjade" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="sacrificialjade" refine=1 lvl=90/90;
character skill;

Test stacks

1 to enable the passive in the beginning, 0 default.

+params=[...]

Weapon params go on the weapon line.

Testing state

Starting params are useful for comparisons, but may skip natural ramp-up.

Code

character add weapon="sacrificialjade" refine=1 lvl=90/90 +params=[stacks=1];
Sacrificial Sword sacrificialsword

Aliases: sacsword

Code

character add weapon="sacrificialsword" refine=1 lvl=90/90;

Combo recipes

Skill reset testing

Use cooldown checks to confirm the reset before casting the second skill.

Code

xingqiu add weapon="sacrificialsword" refine=5 lvl=90/90;
xingqiu skill;
if .xingqiu.skill.ready {
  xingqiu skill;
}

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="sacrificialsword" refine=1 lvl=90/90;
character skill;
Sapwood Blade sapwoodblade

Aliases: sapwood

Code

character add weapon="sapwoodblade" refine=1 lvl=90/90;

Special notes

Leaf pickup delay

This belongs to the Leaf weapon series. `pickup_delay` controls how many frames pass before the active character picks up the Leaf after the weapon procs.

Code

bennett add weapon="sapwoodblade" refine=5 lvl=90/90 +params=[pickup_delay=60];

Manual Leaf pickup

Use the `pickup` action when you want a specific character to grab the Leaf manually instead of relying only on `pickup_delay`.

Code

bennett add weapon="sapwoodblade" refine=5 lvl=90/90 +params=[pickup_delay=0];
bennett skill;
nefer pickup;

Who receives the Leaf

The active character at pickup time gets the Leaf. If you need the carry to receive it, swap before the delay ends.

Code

nahida skill;
bennett skill;
sleep(30);
alhaitham attack; # active before pickup_delay=60 ends

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="sapwoodblade" refine=1 lvl=90/90;
character skill;

Test pickup_delay

Number of frames until the Leaf is picked up by the active character after every proc.

+params=[...]

Weapon params go on the weapon line.

Testing state

Starting params are useful for comparisons, but may skip natural ramp-up.

Code

character add weapon="sapwoodblade" refine=1 lvl=90/90 +params=[pickup_delay=10];
Scion of the Blazing Sun scionoftheblazingsun

Aliases: scion

Code

character add weapon="scionoftheblazingsun" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="scionoftheblazingsun" refine=1 lvl=90/90;
character skill;
Seasoned Hunter's Bow seasonedhuntersbow

Aliases: seasoned

Code

character add weapon="seasonedhuntersbow" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="seasonedhuntersbow" refine=1 lvl=90/90;
character skill;
Sequence of Solitude sequenceofsolitude

Aliases: solitude

Code

character add weapon="sequenceofsolitude" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="sequenceofsolitude" refine=1 lvl=90/90;
character skill;
Serpent Spine serpentspine

Aliases: serpent

Code

character add weapon="serpentspine" refine=1 lvl=90/90;

Special notes

Starting stacks

You can force the starting stack count with `stacks=n` for testing.

Code

beidou add weapon="serpentspine" refine=5 lvl=90/90 +params=[stacks=5];

Stack rules

It gains 1 stack every 4s while on field and loses 1 stack when the active holder takes external HP drain.

Code

beidou add weapon="serpentspine" refine=5 lvl=90/90;

Combo recipes

Pre-stack for testing

Start stacked when you are comparing damage instead of ramp time.

+params=[stacks=5]

Starts Serpent Spine at max stacks.

Shortcut

This is not the same as naturally waiting on field to gain stacks.

Code

beidou add weapon="serpentspine" refine=5 lvl=90/90 +params=[stacks=5];

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="serpentspine" refine=1 lvl=90/90;
character skill;

Test stacks

Number of stacks to gain at the beginning. Default 0, maximum 5.

+params=[...]

Weapon params go on the weapon line.

Testing state

Starting params are useful for comparisons, but may skip natural ramp-up.

Code

character add weapon="serpentspine" refine=1 lvl=90/90 +params=[stacks=1];
Sharpshooter's Oath sharpshootersoath

Aliases: sharpshooters, sharpshooter

Code

character add weapon="sharpshootersoath" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="sharpshootersoath" refine=1 lvl=90/90;
character skill;
Silvershower Heartstrings silvershowerheartstrings

Aliases: silvershower, heartstrings

Code

character add weapon="silvershowerheartstrings" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="silvershowerheartstrings" refine=1 lvl=90/90;
character skill;
Silver Sword silversword

Aliases: None listed.

Code

character add weapon="silversword" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="silversword" refine=1 lvl=90/90;
character skill;
Skyrider Greatsword skyridergreatsword

Aliases: None listed.

Code

character add weapon="skyridergreatsword" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="skyridergreatsword" refine=1 lvl=90/90;
character skill;
Skyrider Sword skyridersword

Aliases: None listed.

Code

character add weapon="skyridersword" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="skyridersword" refine=1 lvl=90/90;
character skill;
Skyward Atlas skywardatlas

Aliases: atlas

Code

character add weapon="skywardatlas" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="skywardatlas" refine=1 lvl=90/90;
character skill;

Test travel

Projectile travel time. Default 10 frames.

+params=[...]

Weapon params go on the weapon line.

Testing state

Starting params are useful for comparisons, but may skip natural ramp-up.

Code

character add weapon="skywardatlas" refine=1 lvl=90/90 +params=[travel=10];
Skyward Blade skywardblade

Aliases: None listed.

Code

character add weapon="skywardblade" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="skywardblade" refine=1 lvl=90/90;
character skill;
Skyward Harp skywardharp

Aliases: harp

Code

character add weapon="skywardharp" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="skywardharp" refine=1 lvl=90/90;
character skill;
Skyward Pride skywardpride

Aliases: pride

Code

character add weapon="skywardpride" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="skywardpride" refine=1 lvl=90/90;
character skill;
Skyward Spine skywardspine

Aliases: None listed.

Code

character add weapon="skywardspine" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="skywardspine" refine=1 lvl=90/90;
character skill;
Slingshot slingshot

Aliases: None listed.

Code

character add weapon="slingshot" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="slingshot" refine=1 lvl=90/90;
character skill;
Snow-Tombed Starsilver snowtombedstarsilver

Aliases: snowtombed

Code

character add weapon="snowtombedstarsilver" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="snowtombedstarsilver" refine=1 lvl=90/90;
character skill;
Solar Pearl solarpearl

Aliases: None listed.

Code

character add weapon="solarpearl" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="solarpearl" refine=1 lvl=90/90;
character skill;
Song of Broken Pines songofbrokenpines

Aliases: pines, sobp

Code

character add weapon="songofbrokenpines" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="songofbrokenpines" refine=1 lvl=90/90;
character skill;
Song of Stillness songofstillness

Aliases: stillness

Code

character add weapon="songofstillness" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="songofstillness" refine=1 lvl=90/90;
character skill;
Splendor of Tranquil Waters splendoroftranquilwaters

Aliases: splendoroftranquilwaters, tranquilwaters, sotw, splendor

Code

character add weapon="splendoroftranquilwaters" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="splendoroftranquilwaters" refine=1 lvl=90/90;
character skill;
Staff of Homa staffofhoma

Aliases: homa

Code

character add weapon="staffofhoma" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="staffofhoma" refine=1 lvl=90/90;
character skill;
Staff of the Scarlet Sands staffofthescarletsands

Aliases: scarletsands, scarlet, sss

Code

character add weapon="staffofthescarletsands" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="staffofthescarletsands" refine=1 lvl=90/90;
character skill;
Starcaller's Watch starcallerswatch

Aliases: scw

Code

character add weapon="starcallerswatch" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="starcallerswatch" refine=1 lvl=90/90;
character skill;
Sturdy Bone sturdybone

Aliases: None listed.

Code

character add weapon="sturdybone" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="sturdybone" refine=1 lvl=90/90;
character skill;
Summit Shaper summitshaper

Aliases: summit

Code

character add weapon="summitshaper" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="summitshaper" refine=1 lvl=90/90;
character skill;
Sunny Morning Sleep-In sunnymorning

Aliases: sunnymorningsleepin

Code

character add weapon="sunnymorning" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="sunnymorning" refine=1 lvl=90/90;
character skill;
Surf's Up surfsup

Aliases: None listed.

Code

character add weapon="surfsup" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="surfsup" refine=1 lvl=90/90;
character skill;
Sword of Descension swordofdescension

Aliases: descension

Code

character add weapon="swordofdescension" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="swordofdescension" refine=1 lvl=90/90;
character skill;

Test passive

0 for passive disabled, 1 for enabled (default).

+params=[...]

Weapon params go on the weapon line.

Testing state

Starting params are useful for comparisons, but may skip natural ramp-up.

Code

character add weapon="swordofdescension" refine=1 lvl=90/90 +params=[passive=1];
Sword of Narzissenkreuz swordofnarzissenkreuz

Aliases: narzissenkreuz

Code

character add weapon="swordofnarzissenkreuz" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="swordofnarzissenkreuz" refine=1 lvl=90/90;
character skill;

Test arkhe

0 for Pneuma, 1 for Ousia (default).

+params=[...]

Weapon params go on the weapon line.

Testing state

Starting params are useful for comparisons, but may skip natural ramp-up.

Code

character add weapon="swordofnarzissenkreuz" refine=1 lvl=90/90 +params=[arkhe=1];
Symphonist of Scents symphonistofscents

Aliases: symphonist

Code

character add weapon="symphonistofscents" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="symphonistofscents" refine=1 lvl=90/90;
character skill;
Talking Stick talkingstick

Aliases: None listed.

Code

character add weapon="talkingstick" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="talkingstick" refine=1 lvl=90/90;
character skill;
Tamayuratei no Ohanashi tamayurateinoohanashi

Aliases: tamayuratei, lamppost

Code

character add weapon="tamayurateinoohanashi" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="tamayurateinoohanashi" refine=1 lvl=90/90;
character skill;
The Alley Flash thealleyflash

Aliases: alleyflash

Code

character add weapon="thealleyflash" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="thealleyflash" refine=1 lvl=90/90;
character skill;
The Bell thebell

Aliases: bell

Code

character add weapon="thebell" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="thebell" refine=1 lvl=90/90;
character skill;
The Black Sword theblacksword

Aliases: blacksword

Code

character add weapon="theblacksword" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="theblacksword" refine=1 lvl=90/90;
character skill;
The Catch thecatch

Aliases: catch

Code

character add weapon="thecatch" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="thecatch" refine=1 lvl=90/90;
character skill;
The Dockhand's Assistant thedockhandsassistant

Aliases: dockhand

Code

character add weapon="thedockhandsassistant" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="thedockhandsassistant" refine=1 lvl=90/90;
character skill;
The First Great Magic thefirstgreatmagic

Aliases: firstgreatmagic, tfgm, fgm

Code

character add weapon="thefirstgreatmagic" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="thefirstgreatmagic" refine=1 lvl=90/90;
character skill;
The Flute theflute

Aliases: flute

Code

character add weapon="theflute" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="theflute" refine=1 lvl=90/90;
character skill;
The Stringless thestringless

Aliases: stringless

Code

character add weapon="thestringless" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="thestringless" refine=1 lvl=90/90;
character skill;
The Unforged theunforged

Aliases: unforged

Code

character add weapon="theunforged" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="theunforged" refine=1 lvl=90/90;
character skill;
The Viridescent Hunt theviridescenthunt

Aliases: viridescenthunt, vhunt

Code

character add weapon="theviridescenthunt" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="theviridescenthunt" refine=1 lvl=90/90;
character skill;
The Widsith thewidsith

Aliases: widsith

Code

character add weapon="thewidsith" refine=1 lvl=90/90;

Combo recipes

Random buff warning

Widsith depends on which song rolls. Use multiple iterations or controlled tests when comparing.

RNG

Do not judge a rotation from one iteration if Widsith is part of the setup.

iteration=1000

Higher iterations smooth out random buff differences.

Code

options iteration=1000;
yae add weapon="thewidsith" refine=5 lvl=90/90;
yae skill:3;

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="thewidsith" refine=1 lvl=90/90;
character skill;
Thrilling Tales of Dragon Slayers thrillingtalesofdragonslayers

Aliases: ttds

Code

character add weapon="thrillingtalesofdragonslayers" refine=1 lvl=90/90;

Combo recipes

Swap into the carry

TTDS buffs the next character after the holder swaps out. Put the holder immediately before the carry.

next character

The order matters. The character after the TTDS holder receives the buff.

Wrong swap

If you swap to a support first, the buff goes to the support.

Code

sucrose add weapon="thrillingtalesofdragonslayers" refine=5 lvl=90/90;
sucrose skill;
mavuika burst;

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="thrillingtalesofdragonslayers" refine=1 lvl=90/90;
character skill;
Thundering Pulse thunderingpulse

Aliases: tpulse

Code

character add weapon="thunderingpulse" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="thunderingpulse" refine=1 lvl=90/90;
character skill;
Tidal Shadow tidalshadow

Aliases: None listed.

Code

character add weapon="tidalshadow" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="tidalshadow" refine=1 lvl=90/90;
character skill;
Tome of the Eternal Flow tomeoftheeternalflow

Aliases: eternalflow

Code

character add weapon="tomeoftheeternalflow" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="tomeoftheeternalflow" refine=1 lvl=90/90;
character skill;
Toukabou Shigure toukaboushigure

Aliases: shigure, umbrella

Code

character add weapon="toukaboushigure" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="toukaboushigure" refine=1 lvl=90/90;
character skill;
Traveler's Handy Sword travelershandysword

Aliases: None listed.

Code

character add weapon="travelershandysword" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="travelershandysword" refine=1 lvl=90/90;
character skill;
Tulaytullah's Remembrance tulaytullahsremembrance

Aliases: tulaytullah, tula

Code

character add weapon="tulaytullahsremembrance" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="tulaytullahsremembrance" refine=1 lvl=90/90;
character skill;
Twin Nephrite twinnephrite

Aliases: None listed.

Code

character add weapon="twinnephrite" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="twinnephrite" refine=1 lvl=90/90;
character skill;
Ultimate Overlord's Mega Magic Sword ultimateoverlordsmegamagicsword

Aliases: megamagicsword, uomms, melusineclaymore

Code

character add weapon="ultimateoverlordsmegamagicsword" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="ultimateoverlordsmegamagicsword" refine=1 lvl=90/90;
character skill;

Test melusines

Number of melusines that have been helped. Default 6, min 0, max 6. The atk% gained per melusine is 1/6 of the base atk% from the passive.

+params=[...]

Weapon params go on the weapon line.

Testing state

Starting params are useful for comparisons, but may skip natural ramp-up.

Code

character add weapon="ultimateoverlordsmegamagicsword" refine=1 lvl=90/90 +params=[melusines=1];
Uraku Misugiri urakumisugiri

Aliases: uraku, misugiri

Code

character add weapon="urakumisugiri" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="urakumisugiri" refine=1 lvl=90/90;
character skill;
Verdict verdict

Aliases: None listed.

Code

character add weapon="verdict" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="verdict" refine=1 lvl=90/90;
character skill;
Vivid Notions vividnotions

Aliases: None listed.

Code

character add weapon="vividnotions" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="vividnotions" refine=1 lvl=90/90;
character skill;
Vortex Vanquisher vortexvanquisher

Aliases: vortex

Code

character add weapon="vortexvanquisher" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="vortexvanquisher" refine=1 lvl=90/90;
character skill;
Wandering Evenstar wanderingevenstar

Aliases: evenstar

Code

character add weapon="wanderingevenstar" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="wanderingevenstar" refine=1 lvl=90/90;
character skill;
Waster Greatsword wastergreatsword

Aliases: None listed.

Code

character add weapon="wastergreatsword" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="wastergreatsword" refine=1 lvl=90/90;
character skill;
Wavebreaker's Fin wavebreakersfin

Aliases: wavebreaker

Code

character add weapon="wavebreakersfin" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="wavebreakersfin" refine=1 lvl=90/90;
character skill;
Waveriding Whirl waveridingwhirl

Aliases: None listed.

Code

character add weapon="waveridingwhirl" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="waveridingwhirl" refine=1 lvl=90/90;
character skill;
Whiteblind whiteblind

Aliases: None listed.

Code

character add weapon="whiteblind" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="whiteblind" refine=1 lvl=90/90;
character skill;
White Iron Greatsword whiteirongreatsword

Aliases: None listed.

Code

character add weapon="whiteirongreatsword" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="whiteirongreatsword" refine=1 lvl=90/90;
character skill;
White Tassel whitetassel

Aliases: None listed.

Code

character add weapon="whitetassel" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="whitetassel" refine=1 lvl=90/90;
character skill;
Windblume Ode windblumeode

Aliases: ode

Code

character add weapon="windblumeode" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="windblumeode" refine=1 lvl=90/90;
character skill;
Wine and Song wineandsong

Aliases: None listed.

Code

character add weapon="wineandsong" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="wineandsong" refine=1 lvl=90/90;
character skill;
Wolf-Fang wolffang

Aliases: None listed.

Code

character add weapon="wolffang" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="wolffang" refine=1 lvl=90/90;
character skill;
Wolf's Gravestone wolfsgravestone

Aliases: gravestone, wgs

Code

character add weapon="wolfsgravestone" refine=1 lvl=90/90;

Special notes

Low HP proc

The team ATK buff only procs in damage mode, from the active holder, when the enemy is at or below 30% HP.

Code

diluc add weapon="wolfsgravestone" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="wolfsgravestone" refine=1 lvl=90/90;
character skill;
Xiphos' Moonlight xiphosmoonlight

Aliases: xiphos

Code

character add weapon="xiphosmoonlight" refine=1 lvl=90/90;

Combo recipes

Equip and test with one real hit

Weapons usually trigger from the holder's own hits, stacks, swaps, reactions, or starting params. Put the weapon on the real holder and test one simple action first.

Holder

The equipped character is the one whose hits and passive checks matter.

Do not assume

If the passive needs crit, reaction, swap, or field time, a random teammate action will not prove it works.

Code

character add weapon="xiphosmoonlight" refine=1 lvl=90/90;
character skill;

Artifact recipes

Artifact sets usually fail because the activation happened too early, the wrong reaction was swirled or picked up, or the set condition never happened.

Artifacts are explained by activation: which event turns the set on, where it belongs in the rotation, and which mistake usually makes it fail.

Archaic Petra archaicpetra

Aliases: ap

Code

character add set="archaicpetra" count=4;

Special notes

Crystal pickup rule

The holder must be active when picking up the Crystallize shield for the party buff to trigger.

Code

zhongli add set="archaicpetra" count=4;

Lunar special path

The current implementation also reacts to Lunar Crystallize, so Hydro can be buffed in that branch.

Code

zhongli skill;

Combo recipes

Pick up any Crystallize shard

Use the system function after creating shards. This is how Petra gets its 4pc buff.

Crystallize first

Petra has nothing to pick up unless Geo already created a shard.

any

Quick testing mode. The sim picks an available shard without forcing an element.

Buff element

For final configs, prefer a specific element if the DPS needs one exact Petra buff.

Code

zhongli skill;
pick_up_crystallize("any");

Pick up a specific shard

Use a real element when the buff must be Pyro/Hydro/Cryo/Electro/etc.

pyro / hydro / cryo

This tells Petra which shard element to collect.

Missing shard

If that shard does not exist, the pickup will not give the buff you expect.

Code

zhongli skill;
pick_up_crystallize("pyro");

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="archaicpetra" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Aubade of Morningstar and Moon aubadeofmorningstarandmoon

Aliases: None listed.

Code

character add set="aubadeofmorningstarandmoon" count=4;

Special notes

Off-field lunar buff

The 4pc is meant for off-field Lunar reaction damage. Going on-field starts the 3s grace timer.

Code

columbina add set="aubadeofmorningstarandmoon" count=4;

Combo recipes

Keep Lunar damage off-field

Use it on an off-field Lunar reaction unit and avoid wasting the buff window by swapping at the wrong time.

off-field

The set is meant to support Lunar reaction damage while another character acts.

3s grace

Going on-field starts the grace timing mentioned in the note.

Code

columbina add set="aubadeofmorningstarandmoon" count=4;
columbina skill;
nefer skill;

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="aubadeofmorningstarandmoon" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Berserker berserker

Aliases: None listed.

Code

character add set="berserker" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="berserker" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Blizzard Strayer blizzardstrayer

Aliases: blizzard, bs

Code

character add set="blizzardstrayer" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="blizzardstrayer" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Bloodstained Chivalry bloodstainedchivalry

Aliases: bloodstained, bsc

Code

character add set="bloodstainedchivalry" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="bloodstainedchivalry" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Brave Heart braveheart

Aliases: brave

Code

character add set="braveheart" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="braveheart" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Crimson Witch of Flames crimsonwitchofflames

Aliases: cwof, cw, crimson, witch

Code

character add set="crimsonwitchofflames" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="crimsonwitchofflames" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Deepwood Memories deepwoodmemories

Aliases: deepwood

Code

character add set="deepwoodmemories" count=4;

Special notes

Trigger rule

Skill or burst from the set holder must hit an enemy to apply the 8s Dendro RES shred.

Code

nahida add set="deepwoodmemories" count=4;

Combo recipes

Keep Deepwood before Dendro damage

Cast the Deepwood holder's hit before your Dendro carry starts dealing damage.

4pc debuff

Deepwood is valuable because it lowers enemy Dendro RES after skill/burst hits.

nahida skill

Use any reliable hit from the Deepwood holder; Nahida skill is a common example.

Code

nahida add set="deepwoodmemories" count=4;
nahida skill;
alhaitham skill, attack:3;

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="deepwoodmemories" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Defender's Will defenderswill

Aliases: defenders, defender

Code

character add set="defenderswill" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="defenderswill" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Desert Pavilion Chronicle desertpavilionchronicle

Aliases: desertpavilion, dpc

Code

character add set="desertpavilionchronicle" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="desertpavilionchronicle" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Echoes of an Offering echoesofanoffering

Aliases: echoes

Code

character add set="echoesofanoffering" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="echoesofanoffering" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Emblem of Severed Fate emblemofseveredfate

Aliases: emblem, eosf, esf

Code

character add set="emblemofseveredfate" count=4;

Special notes

Burst only

The 4pc bonus scales from Energy Recharge and only applies to burst damage.

Code

xiangling add set="emblemofseveredfate" count=4;

Combo recipes

Energy recharge scaling

Emblem is mostly a setup/stat decision. Put enough ER in stats, then spend burst inside the buffed window.

er=0.518

Percent stats are decimals. This means 51.8 percent Energy Recharge.

burst DPS

Use this on characters whose damage is concentrated in burst.

Code

xiangling add set="emblemofseveredfate" count=4;
xiangling add stats er=0.518 atk%=0.466 pyro%=0.466 cr=0.311 cd=0.622;
xiangling burst;

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="emblemofseveredfate" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Finale of the Deep Galleries finaleofthedeepgalleries

Aliases: deepgalleries

Code

character add set="finaleofthedeepgalleries" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="finaleofthedeepgalleries" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Flower of Paradise Lost flowerofparadiselost

Aliases: paradiselost, fopl

Code

character add set="flowerofparadiselost" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="flowerofparadiselost" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Fragment of Harmonic Whimsy fragmentofharmonicwhimsy

Aliases: harmonicwhimsy, fohw

Code

character add set="fragmentofharmonicwhimsy" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="fragmentofharmonicwhimsy" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Gambler gambler

Aliases: None listed.

Code

character add set="gambler" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="gambler" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Gilded Dreams gildeddreams

Aliases: gilded, gd

Code

character add set="gildeddreams" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="gildeddreams" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Gladiator's Finale gladiatorsfinale

Aliases: glad, gladiators

Code

character add set="gladiatorsfinale" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="gladiatorsfinale" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Golden Troupe goldentroupe

Aliases: gt

Code

character add set="goldentroupe" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="goldentroupe" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Heart of Depth heartofdepth

Aliases: hod

Code

character add set="heartofdepth" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="heartofdepth" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Husk of Opulent Dreams huskofopulentdreams

Aliases: husk, hood

Code

character add set="huskofopulentdreams" count=4;

Special notes

Starting stacks

Use `stacks=4` if you want to test the set fully stacked from frame 0.

Code

itto add set="huskofopulentdreams" count=4 +params=[stacks=4];

Gain and decay

On-field Geo hits gain stacks with a 0.3s ICD, off-field gains 1 stack every 3s, and stacks fall off after 6s without refresh.

Code

itto add set="huskofopulentdreams" count=4;

Combo recipes

Start with stacks for comparison

Use the `stacks` param when you want to compare damage without simulating Husk ramp-up.

+params=[stacks=4]

Starts the set at 4 stacks.

Testing shortcut

Remove it if you want the rotation to earn stacks naturally.

Code

itto add set="huskofopulentdreams" count=4 +params=[stacks=4];

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="huskofopulentdreams" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;

Start with stacks

Number of stacks for the 4pc affect to gain at the beginning. Default 0, maximum 4.

+params=[...]

Artifact params go on the set line.

Testing state

Use this for controlled comparisons; remove it to simulate natural ramp-up.

Code

character add set="huskofopulentdreams" count=4 +params=[stacks=1];
Instructor instructor

Aliases: ins

Code

character add set="instructor" count=4;

Combo recipes

Trigger reaction before carry window

Instructor buffs the team after the holder triggers a reaction. Make sure the holder is on field for that reaction.

holder triggers

The character wearing Instructor should be the one causing the reaction.

Wrong trigger

If another teammate triggers the reaction, Instructor may not activate when expected.

Code

bennett add set="instructor" count=4;
bennett skill;
nahida skill;

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="instructor" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Lavawalker lavawalker

Aliases: lw

Code

character add set="lavawalker" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="lavawalker" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Long Night's Oath longnightsoath

Aliases: lno

Code

character add set="longnightsoath" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="longnightsoath" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Maiden Beloved maidenbeloved

Aliases: maiden, mb

Code

character add set="maidenbeloved" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="maidenbeloved" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Marechaussee Hunter marechausseehunter

Aliases: mh

Code

character add set="marechausseehunter" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="marechausseehunter" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Martial Artist martialartist

Aliases: None listed.

Code

character add set="martialartist" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="martialartist" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Nighttime Whispers in the Echoing Woods nighttimewhispersintheechoingwoods

Aliases: nighttimewhispers, echoingwoods, nighttime

Code

character add set="nighttimewhispersintheechoingwoods" count=4;

Special notes

Geo timing

The 4pc reacts to shield / Crystallize timing and then buffs Geo after skill use. Nearby Lunar Crystallize can strengthen it.

Code

zhongli add set="nighttimewhispersintheechoingwoods" count=4;

Use case

This is a timing set, not just a stat set. Cast the skill when you actually want the buff window.

Code

zhongli skill;

Combo recipes

Geo skill before Geo window

This set is timing-sensitive. Cast skill when the Geo damage window is about to start.

Geo window

Do not trigger the buff too early if the carry attacks later.

navia skill

Navia commonly wants the set active before her skill damage.

Code

navia add set="nighttimewhispersintheechoingwoods" count=4;
navia skill;

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="nighttimewhispersintheechoingwoods" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Noblesse Oblige noblesseoblige

Aliases: noblesse, no

Code

character add set="noblesseoblige" count=4;

Special notes

Burst team buff

Burst damage gets its own bonus, and the 4pc gives the party ATK buff after burst.

Code

bennett burst;

Special-case delay

Some holders need a 1-frame delay for the 4pc application, so do not panic if one burst looks slightly late.

Code

bennett burst;

Combo recipes

Burst before team damage

The 4pc team ATK buff starts after the holder casts burst, so place it before the DPS window.

bennett burst

Classic Noblesse timing: buff first, then swap to the damage dealer.

No burst, no 4pc

Normal skill/attack does not activate the 4pc team buff.

Code

bennett add set="noblesseoblige" count=4;
bennett burst;
xiangling burst;

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="noblesseoblige" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Nymph's Dream nymphsdream

Aliases: nymph

Code

character add set="nymphsdream" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="nymphsdream" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Obsidian Codex obsidiancodex

Aliases: oc

Code

character add set="obsidiancodex" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="obsidiancodex" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Ocean-Hued Clam oceanhuedclam

Aliases: ohc, clam

Code

character add set="oceanhuedclam" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="oceanhuedclam" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Pale Flame paleflame

Aliases: pf

Code

character add set="paleflame" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="paleflame" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Resolution of Sojourner resolutionofsojourner

Aliases: sojourner

Code

character add set="resolutionofsojourner" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="resolutionofsojourner" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Retracing Bolide retracingbolide

Aliases: bolide

Code

character add set="retracingbolide" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="retracingbolide" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Scholar scholar

Aliases: None listed.

Code

character add set="scholar" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="scholar" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Scroll of the Hero of Cinder City scrolloftheheroofcindercity

Aliases: scroll, sothocc

Code

character add set="scrolloftheheroofcindercity" count=4;

Combo recipes

Natlan support timing

Use the Scroll holder before the carry window so the team buff exists while the DPS is active.

xilonen skill

A common Scroll setup action.

Reaction timing

Check that the reaction or Nightsoul condition happens before the carry spends damage.

Code

xilonen add set="scrolloftheheroofcindercity" count=4;
xilonen skill, attack:2;
mavuika burst;

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="scrolloftheheroofcindercity" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Shimenawa's Reminiscence shimenawasreminiscence

Aliases: shimenawa, shime, shim, sr

Code

character add set="shimenawasreminiscence" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="shimenawasreminiscence" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Song of Days Past songofdayspast

Aliases: sodp

Code

character add set="songofdayspast" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="songofdayspast" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Tenacity of the Millelith tenacityofthemillelith

Aliases: tom, totm, tenacity, millelith

Code

character add set="tenacityofthemillelith" count=4;

Combo recipes

Refresh through skill hits

Tenacity needs skill damage to keep the team buff active. Use it on off-field skill tickers.

skill hit

The set refreshes from elemental skill damage, not from every random hit.

zhongli skill

A common example because the pillar can keep ticking.

Code

zhongli add set="tenacityofthemillelith" count=4;
zhongli skill[hold=1];

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="tenacityofthemillelith" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
The Exile theexile

Aliases: exile

Code

character add set="theexile" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="theexile" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Thundering Fury thunderingfury

Aliases: tf

Code

character add set="thunderingfury" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="thunderingfury" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Thundersoother thundersoother

Aliases: ts

Code

character add set="thundersoother" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="thundersoother" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Unfinished Reverie unfinishedreverie

Aliases: ur

Code

character add set="unfinishedreverie" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="unfinishedreverie" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Vermillion Hereafter vermillionhereafter

Aliases: vermillion, vh

Code

character add set="vermillionhereafter" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="vermillionhereafter" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Viridescent Venerer viridescentvenerer

Aliases: viridescent, vv

Code

character add set="viridescentvenerer" count=4;

Combo recipes

Swirl the correct aura

VV only shreds the element you swirl. Apply aura first, then Anemo.

.element.t0.pyro

Check target aura when debugging whether your swirl is hitting the right element.

Wrong aura

If Hydro is on the target, you will not get Pyro shred.

Code

bennett skill;
sucrose add set="viridescentvenerer" count=4;
sucrose skill;

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="viridescentvenerer" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Vourukasha's Glow vourukashasglow

Aliases: vourukasha, vg

Code

character add set="vourukashasglow" count=4;

Special notes

Drain rule

Only external HP drain on the holder counts. Each drain event adds a stack, up to the set limit.

Code

dehya add set="vourukashasglow" count=4;

Combo recipes

Damage-taken ramp

Use this only when the character actually receives damage/drain events that can stack the set.

takes damage

The set is not just a passive always-on bonus; it cares about damage taken.

Rotation dependent

If the team never drains or takes damage, the stack value may be lower than expected.

Code

dehya add set="vourukashasglow" count=4;

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="vourukashasglow" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;
Wanderer's Troupe wandererstroupe

Aliases: wanderers, wt

Code

character add set="wandererstroupe" count=4;

Combo recipes

Equip the set and trigger its real condition

Artifact sets are usually timing pieces. Cast the action or reaction that activates the set before the damage window.

count=4

Use `count=2` for a 2-piece bonus and `count=4` for the full set effect.

Activation condition

A set may need burst, skill damage, reaction, shield, field time, or damage taken. The line alone does not always activate it.

Code

character add set="wandererstroupe" count=4;
character add stats hp=4780 atk=311 atk%=0.466 cr=0.311 cd=0.622;
character skill;