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.
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 upCombo 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 endsCombo 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;