A single function level(biome, wave) that reproduces Claw Master's per-wave enemy level for biomes 1–16 and extrapolates beyond — for auto-generating new biomes with CM-approximate balance. This is the input to Enemy Progression, which turns the level into HP/DMG.
x = (w−1)/(W(b)−1) — normalised wave position, 0→1W(b) = 10 if biome odd, 15 if evenS(b) = floor (wave-1 level) · E(b) = boss (last-wave level)p(b) = clamp(1.05 + 0.095·b, 1.1, 3.0) — ramp steepens with biomeBiomes 1–16: use CM's real anchors S(b), E(b) (table below) — exact boss match. Biome ≥17: extrapolate E(b)=128.5·1.236b (boss grows +23.6%/biome, log-R² 0.98), S(b)=r·E(b), r=0.72 (10-wave) / 0.55 (15-wave). The dip at each biome start (floor < previous boss) is preserved automatically — CM's intentional "breather + power fantasy" on entering a new biome.
Boss (last-wave) levels reproduced within ±1% for every biome. Worst single cell (28.6%) is an early onboarding wave in Biome 1 where the true level is single-digit — a 1–2 level miss reads large in % but is trivial in play.
Global wave index left→right (B1·W1 … B16·W15). Note the saw-tooth: each biome starts below the previous biome's boss. — actual (CM) - - model
// Claw-Master-style mob level for an auto-generated biome. biome & wave are 1-based.
public static class MobLevels
{
// CM anchors, biomes 1-16: (floor S = wave 1, boss E = last wave).
static readonly (int S, int E)[] Anchors = {
(1,12),(11,100),(85,180),(144,370),(278,430),(301,500),(425,575),(403,700),
(595,850),(595,1000),(850,1150),(805,1650),(1403,2000),(1400,2500),(2125,2750),(1925,4500)
};
public static int Get(int biome, int wave)
{
int W = (biome % 2 == 1) ? 10 : 15; // odd biome = 10 waves, even = 15
double S, E;
if (biome >= 1 && biome <= 16) { S = Anchors[biome-1].S; E = Anchors[biome-1].E; }
else { E = 128.5 * System.Math.Pow(1.236, biome); S = (W==10 ? 0.72 : 0.55) * E; }
double p = System.Math.Clamp(1.05 + 0.095 * biome, 1.1, 3.0);
double x = (wave - 1.0) / (W - 1); // 0 at wave 1, 1 at boss wave
return (int)System.Math.Round(S + (E - S) * System.Math.Pow(x, p));
}
}
| Biome | Waves | S — floor (wave 1) | E — boss (last wave) |
|---|---|---|---|
| 1 | 10 | 1 | 12 |
| 2 | 15 | 11 | 100 |
| 3 | 10 | 85 | 180 |
| 4 | 15 | 144 | 370 |
| 5 | 10 | 278 | 430 |
| 6 | 15 | 301 | 500 |
| 7 | 10 | 425 | 575 |
| 8 | 15 | 403 | 700 |
| 9 | 10 | 595 | 850 |
| 10 | 15 | 595 | 1,000 |
| 11 | 10 | 850 | 1,150 |
| 12 | 15 | 805 | 1,650 |
| 13 | 10 | 1,403 | 2,000 |
| 14 | 15 | 1,400 | 2,500 |
| 15 | 10 | 2,125 | 2,750 |
| 16 | 15 | 1,925 | 4,500 |
From E(b)=128.5·1.236b; feed into the same ramp. Wave-count parity assumed to keep alternating (odd 10 / even 15).
| Biome | Waves | S — floor | E — boss |
|---|---|---|---|
| 17 | 10 | 3,388 | 4,706 |
| 18 | 15 | 3,199 | 5,816 |
| 19 | 10 | 5,175 | 7,188 |
| 20 | 15 | 4,886 | 8,883 |
| 21 | 10 | 7,905 | 10,979 |
| 22 | 15 | 7,463 | 13,568 |
| 23 | 10 | 12,074 | 16,769 |
| 24 | 15 | 11,399 | 20,725 |
Top = Claw Master actual · bottom = model. Right column = biome mean error.
| Biome | W1 | W2 | W3 | W4 | W5 | W6 | W7 | W8 | W9 | W10 | W11 | W12 | W13 | W14 | W15 | err |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| B1 · Enchanted Forest | 1 1 | 2 2 | 3 3 | 5 4 | 7 5 | 8 7 | 9 8 | 10 9 | 11 11 | 12 12 | 8.2% | |||||
| B2 · Mystic Woods | 11 11 | 16 14 | 21 19 | 26 24 | 32 30 | 38 36 | 44 42 | 50 49 | 57 55 | 64 62 | 71 70 | 78 77 | 85 85 | 93 92 | 100 100 | 3.9% |
| B3 · Frozen Tundra | 85 85 | 92 90 | 101 98 | 110 107 | 120 117 | 131 128 | 142 140 | 155 153 | 167 166 | 180 180 | 1.6% | |||||
| B4 · Crystal Caves | 144 144 | 155 149 | 168 158 | 181 169 | 196 182 | 211 196 | 227 211 | 243 228 | 260 246 | 277 264 | 295 284 | 314 304 | 332 325 | 351 347 | 370 370 | 4.3% |
| B5 · Molten Fields | 278 278 | 284 283 | 292 293 | 303 306 | 317 322 | 334 340 | 354 360 | 377 382 | 402 405 | 430 430 | 0.9% | |||||
| B6 · Clockwork Factory | 301 301 | 305 304 | 310 310 | 317 317 | 325 327 | 336 339 | 348 351 | 361 366 | 376 381 | 393 398 | 412 416 | 431 436 | 453 456 | 476 477 | 500 500 | 0.6% |
| B7 · Desert Oasis | 425 425 | 430 428 | 439 436 | 450 448 | 463 462 | 480 480 | 500 500 | 522 522 | 548 548 | 575 575 | 0.2% | |||||
| B8 · Abandoned City | 403 403 | 407 406 | 413 412 | 421 421 | 432 434 | 446 449 | 463 467 | 482 488 | 505 511 | 530 536 | 558 565 | 589 595 | 623 628 | 660 663 | 700 700 | 0.6% |
| B9 · Poisonous Marsh | 595 595 | 600 599 | 609 610 | 624 626 | 645 649 | 671 678 | 705 713 | 746 753 | 794 799 | 850 850 | 0.5% | |||||
| B10 · Glacial Peaks | 595 595 | 598 597 | 604 603 | 613 614 | 626 628 | 643 647 | 664 669 | 689 696 | 718 727 | 753 762 | 792 802 | 836 845 | 886 893 | 940 944 | 1,000 1,000 | 0.6% |
| B11 · Scrapyard | 850 850 | 855 853 | 865 863 | 881 880 | 904 905 | 934 938 | 974 978 | 1,023 1,027 | 1,081 1,084 | 1,150 1,150 | 0.2% | |||||
| B12 · Blazing Caves | 805 805 | 810 808 | 820 817 | 836 834 | 859 859 | 891 894 | 931 937 | 982 990 | 1,042 1,053 | 1,113 1,126 | 1,195 1,209 | 1,290 1,303 | 1,397 1,408 | 1,517 1,523 | 1,650 1,650 | 0.5% |
| B13 · Dark Catacombs | 1,403 1,403 | 1,409 1,407 | 1,424 1,422 | 1,450 1,452 | 1,490 1,497 | 1,547 1,559 | 1,625 1,639 | 1,724 1,739 | 1,849 1,859 | 2,000 2,000 | 0.4% | |||||
| B14 · Ancient Ruins | 1,400 1,400 | 1,406 1,402 | 1,417 1,411 | 1,436 1,428 | 1,464 1,456 | 1,502 1,495 | 1,553 1,546 | 1,616 1,611 | 1,693 1,690 | 1,785 1,784 | 1,893 1,894 | 2,018 2,020 | 2,160 2,162 | 2,321 2,322 | 2,500 2,500 | 0.2% |
| B15 · Neon District | 2,125 2,125 | 2,131 2,128 | 2,146 2,140 | 2,173 2,166 | 2,215 2,209 | 2,275 2,271 | 2,355 2,354 | 2,460 2,461 | 2,591 2,592 | 2,750 2,750 | 0.1% | |||||
| B16 · Ghostly Swamp | 1,925 1,925 | 1,932 1,928 | 1,949 1,942 | 1,980 1,974 | 2,031 2,028 | 2,105 2,108 | 2,207 2,217 | 2,341 2,359 | 2,510 2,536 | 2,719 2,752 | 2,972 3,009 | 3,273 3,311 | 3,626 3,658 | 4,033 4,053 | 4,500 4,500 | 0.6% |
FACT Source: biome_waves_detailed.json (per-enemy level) + boss_data.json→biomeOrder, CM 1.15.4 teardown. 16 biomes, 200 waves. All enemies in a wave share one level; biomes alternate 10/15 waves.
ASSUMPTION No closed-form in the binary — per-wave levels are authored content, so this formula approximates designer-tuned data. It is intentionally smooth and won't be bit-exact on the hand-rounded boss numbers or the two deliberate outliers (Biome 5 boss unusually low; Biome 16 jumps 1.64× as an end-wall).
VERIFY This maps the level index, not difficulty. Level→HP/DMG lives in Enemy Progression (HP=base×(1+0.14(L−1)), DMG=base×(1+(L−1)/20)1.18). To difficulty-match Claw Fight (not just level-match CM), apply CF's own base stats. Enemy composition per wave (types/counts/lanes) is separate data, not modelled here.