Key EV and $bw Calculator Beta

Expected keys per hour for wishlist characters across different $bw values
Mode:
Paste your $bonus output
Run $bonus in Mudae, copy the reply, paste it here.
A few other details
How to find pool size
Standard ($wa/$ha/$wg/$hg)
$limroul
1. Run $left — note the total roulette size.
2. Run $dld or $dl — note how many are disabled.
3. Run $adl — note antidisabled count. For precision, run $imat <series> for each series and sum.
4. Enter: (total from $left) − (disabled) + (antidisabled)

$ma/$mg, $wx/$hx, $serverdisable may also affect pool size.

1. Run $limroul — note the value.
2. Find antidisabled for your roulette type:
$wa → $adltwg-   $ha → $adlthg-
$wg → $adltwg   $hg → $adlthg
3. The number in parentheses at the top is antidisabled size.
4. Enter: (limroul) + (antidisabled)
Your optimal $bw
How to use this calculator
1
Run $bonus in Discord and paste the bot reply into the left box.
2
Run $wlsz+z! in Discord and paste the bot reply into the right box.
3
Under Other inputs, fill in Base pool size (see the hint in that field), $setrolls bonus if applicable, and check Uses slash commands to roll if you roll with / commands. Then click Calculate.
Tip: Both copy methods work — select the message text and copy (Ctrl+C), or right-click the Discord message → Copy Text. It's fine if extra text gets included (timestamps, username, other lines) — the calculator only looks for the relevant lines and ignores everything else.
Paste $bonus output here:
Paste $wlsz+z! output here:
Values auto-populated from $bonus paste — edit to override
From $bonus
The +N value on the Rolls per hour line
Your current $bw investment
Rolls locked in $bk
"Spawn bonus for wishes" — combined total ($bw + $k + slash) at current $bw
Combined total, e.g. "(= 3779%)" from the starwish line
"Chance to get an additional key on wishes"
Base rolls from $setrolls (leave blank if unused)
Each level = 10% of perk 1 bonus applied to the character itself (0–10). Auto-inferred from wishlist.
Rolling with / commands gives a +10% spawn bonus to both wishes and starwishes
Total characters in the roulette pool
How to find this
Standard ($wa/$ha/$wg/$hg)
$limroul
1. Run $left — note the total roulette size.
2. Run $dld or $dl — note how many are disabled.
3. Run $adl — note antidisabled count. For precision, run $imat <series> for each series and sum.
4. Enter: (total from $left) − (disabled) + (antidisabled)

$ma/$mg, $wx/$hx, $serverdisable may also affect pool size.

1. Run $limroul — note the value.
2. Find antidisabled for your roulette type:
$wa → $adltwg-   $ha → $adlthg-
$wg → $adltwg   $hg → $adlthg
3. The number in parentheses at the top is antidisabled size.
4. Enter: (limroul) + (antidisabled)
Advanced inputs
Claimed characters that are not on your wishlist. Enter an absolute count, or switch to Ratio % to enter the claimed fraction of the base pool. Leave blank or 0 for no persrare effect (same as N=1).
Maximum rerolls per roll ($persrare). Mudae rerolls until an unclaimed or wish result, up to N attempts. N=1 means no rerolling. Valid range: 1–10.
How it works
1 Net rolls per hour rolls available for wishes

Every roll in $bw or $bk is one fewer roll on actual characters. Net rolls = your base rolls minus whatever is locked in $bw and $bk.

net_rolls(bw) = base_rolls + setrolls bw bk
2 Spawn bonus at each $bw variable + static sources

The bonus shown in $bonus combines several sources. The calculator strips out the $bw portion and keeps the rest ($k, slash, $kt/$tuto) as a fixed offset, then recomputes the full bonus at every hypothetical $bw. Slash commands add a flat +10% to both wish and starwish.

Wish bonus from $bw (%) rolls 1–5: +20% each
rolls 6–15: +15% each
rolls 16–100: +10% each
rolls 101–200: +5% each
rolls 201+: +1% each

Extra starwish bonus from $bw (%) rolls 1–100: +10% each
rolls 101–200: +5% each
rolls 201+: +1% each

Total at each bw wish_bonus = wishBwBonus(bw) + kBonus + slashBonus
sw_bonus = wish_bonus + starwishBwBonus(bw) + ktBonusSW
3 Spawn chance your character vs the whole pool

The spawn rate of a character can be approximated by the character's weight / total pool weight. A character's weight is determined by the bonuses it gets — the global wish/starwish spawn bonus from $bw, $k, and slash commands, plus any perk 1 bonus from adjacent wishlist neighbours (shop upgrade 1 feeds a portion back to the character itself).

The total pool weight is determined by the base pool size (1 per character) with all wishlist character weights added.

Treat numbers as relative comparisons, not exact rates.

Character weight wish: 1 + (wish_bonus(bw) + perk1) / 100
starwish: 1 + (sw_bonus(bw) + perk1) / 100

p = char_wt / (base_pool + char_wt + Σ other wish wts)
4 Keys per spawn three independent sources

Every spawn of an owned character gives 1 guaranteed key, plus two independent chances for extras: the global KT tower bonus (from $bonus), which can give one or two additional keys, and perk 4 per character, which can give one additional key on top. Because expected values are additive, the formula is simply the sum of the three independent probabilities.

Perk 4 levels: lv1=+4%, lv2=+8%, lv3=+12%, lv4=+16%, lv5=+20%, lv6=+25% (+30% fully upgraded).

keys = 1 ← guaranteed
       + kt_key% / 100 ← KT tower (global)
       + perk4% / 100 ← perk 4 (per-char)
5 EV keys per hour the final number

Multiply net rolls × spawn chance × expected keys per roll. The calculator shows this for every bw value from 0 to your max.

Three rows are highlighted: your current $bw, the bw that maximises EV for the selected character, and the bw that maximises total EV across your full wishlist.

EV keys/hr (one character) EV = net_rolls(bw)
   × p(char, bw)
   × keys(char)
6 persrare reroll system claimed characters get skipped

When $persrare is active, any roll that lands on a claimed (but non-wished) character is rerolled up to N times. Only the Nth attempt is a forced accept — if all N rolls hit claimed characters, you get a claimed character. Enter the count of claimed non-wish characters (C) and the reroll limit (N) in the Advanced inputs section to model this.

This boosts effective spawn chance for wish and unclaimed characters. The boost is bw-dependent: at lower $bw the total pool weight is smaller, so the claimed fraction r = C / totalWt is larger and the reroll benefit is greater. This means the reroll system slightly favours lower $bw values — the optimal $bw may shift downward compared to the no-reroll case, by an amount that grows with C's share of the pool.

When C = 0 or N = 1, the formula reduces to the standard spawn probability.

persrare-adjusted spawn chance r = C / totalWt(bw) ← claimed fraction

P'_wish = p_wish × (1 rN) / (1 r)
P'_unclaimed = p_uncl × (1 rN) / (1 r)
P'_claimed = rN
7 Hourly limits key cap and slash roll bonus cap

Two per-hour limits affect $bw optimisation:

Key cap (2,200/hr). You cannot earn more than 2,200 keys per hour. If your total wishlist EV exceeds 2,200, the excess is wasted. In that case, the calculator shows the lowest $bw that reaches the cap — any additional $bw beyond that point provides no extra keys and costs net rolls.

Slash command bonus cap (1,440/hr). Discord rate-limits slash commands to roughly 2 per 5 seconds (1,440/hr). The first 1,440 rolls each hour receive the +10% slash spawn bonus; any rolls beyond 1,440 still work but must use $-prefix commands, which don't get the bonus. The calculator models this split when "Uses slash commands to roll" is checked — overflow rolls use a lower spawn rate.

You can combine slash and $-commands to roll faster than 1,440/hr, but only the slash rolls get the +10% spawn bonus.

Key cap effective_keys(bw) = min(totalEV(bw), 2200)

Slash bonus split slashRolls = min(netRolls(bw), 1440)
overflowRolls = netRolls(bw) slashRolls
ev(bw) = slashRolls·pslash·keys + overflowRolls·pno−slash·keys