Holozing · Wilds · alpha-tester reference

Deep Mechanics Guide

Every system, the real formulas, and the exact numbers — pulled straight from the code, for testers who want to take a deep look (and try to break it).

encounterscapturecombatluckgather + refineeconomyscorePvP

A complete, number-exact reference to how the game actually works — every system, the real formulas, worked examples, and the edge cases worth stress-testing. Gameplay/logic only (no networking/deploy).

All numbers are pulled straight from lib/ (tuning.ts is the source of truth for constants; engine.ts/combat.ts/creatures.ts/resources.ts/buildings.ts/gear.ts/classes.ts/evolution.ts/ pvp.ts/score.ts/wild.ts/statuses.ts). This is the fable5 rebalance branch; values get re-tuned — when a number here and the code disagree, the code wins.

How to read this

each section gives the system → the formula/constants → worked examples, with 🔍 Probe notes for what to verify or try to break. A final §24 Quirks & dead constants section lists known oddities (great targets for testers).

00

The loop in one paragraph

You're a Healer fielding creatures that auto-battle wilds through escalating zones. Your only direct combat input is the heal (tap the active creature). You weaken wilds below 60% HP and capture them (Dust) to grow your roster, run a Sanctuary economy (gather → refine → craft) for buildings, gear, gems, potions, and eventually prestige for a permanent paragon level. Bracketed PvP on top. Sim runs at 10 Hz (TICK_MS = 100).

01

Encounters, zones & wilds

Zones & cells

  • cellsForZone(zone) = 12 + floor(zone / 2) (CELLS_PER_ZONE = 12, CELLS_PER_ZONE_GROWTH = 2). Zone 1 = 12 cells, zone 10 = 17, zone 30 = 27.
  • A cell advances only on a wild defeat (s.cell += 1). Clearing the last cell (always the Alpha) advances the zone.
  • Three zone counters: zone/cell (current), maxZone (lifetime high-water, survives prestige), runMaxZone (this-run high-water, resets on prestige — gates your next paragon).

Wild level

wildLevelFor(zone, cell) = 1 + floor((zone − 1 + cell/cellsForZone(zone)) × 0.95) (WILD_LEVEL_PER_ZONE = 0.95).

  • + paragon (depth-split): ENEMY_LEVEL_PER_PARAGON = 1.0. Deep zones (≥21, PARAGON_RAMP_FULL_ZONE) shift the whole level window up by the full round(paragon × 1.0) — full scaling. Bracket zones (<21) keep the natural zone level as the floor and spread it UP by a random 0..W, where W = round(paragon × (0.3 + (zone−1)×0.02)) (BRACKET_SPREAD_PER_PARAGON / _PER_ZONE). So a bracket-ceiling wild (zone 10 → L10, zone 20 → L20) is always reachable (roll 0) but becomes a smaller slice of a widening range each paragon — rarer to farm the higher your paragon, faster in deeper brackets, never 0%. A halt-XP PvP player (ceilings 1/10/20) can keep capturing within their cap, just with diminishing odds. Frequency of the exact ceiling level: z1 60%→30%→3.8% (p0/p10/p100), z10 20%→12%→1.5%, z20 20%→10%→1.2%.
  • Normal wilds then get ±2 jitter (EVO_WILD_LEVEL_RNG = 2, uniform [−2,+2]), clamped to [wildLevelFloor = max(1, ceil(zone×0.5)), wildLevelCeil]. Bosses skip the jitter (keep exact level). Zone 1 is hard-capped at L2 (gentle on-ramp); zone ≥2 is uncapped above.
  • Low zones keep their weaklings through paragon: because the bracket-zone spread only widens upward from the natural floor, the low end never moves. Zone 1 stays ~60% L1 / 40% L2 (its level ceiling clamps the spread; the L1 share shrinks with paragon — 60%→30% by p10 — but never to 0). This is the lever that keeps PvP-bracket captures (L1/10/20) reachable after prestige, with diminishing odds.

Wild stats

Wilds use the same stat engine as your creatures (statsAtLevel), then a tier power multiplier:

  • WILD_BASE_FACTOR = 1.0 — a normal wild is at parity with a same-level, same-rarity roster creature on all four stats (was 0.85 = −15%; raised to make normal wilds a real fight, not soft filler).
  • ELITE_MULT = 1.45 on HP/ATK; DEF & AGI stay ×1.0 (bosses are never a mitigation/speed wall).
  • ALPHA_MULT = 1.55 × (1 + min(0.35, (zone−1)×0.04) + max(0, zone−30)×0.03) on HP/ATK; DEF/AGI ×1.0. The first growth term plateaus at ≈2.09× from ~zone 10, then a deep-zone ramp resumes past zone 30 (ALPHA_DEEP_GROWTH 0.03/zone, uncapped) so pushing past the first prestige gate keeps getting harder: z30 ≈ 2.09×, z40 ≈ 2.56×, z50 ≈ 3.02×, z60 ≈ 3.49×.
  • Evolved-form wilds also get the +10% evolution stat boost (pro-rated by stage, see §7).

Wild rarity

Per-stat uniform roll 0..100000 (4 independent draws); rarityAverage = round(mean). Normal wilds are unfloored. Bosses roll inside a random WINDOW (each stat mapped uniformly into [min, max] — strong but unpredictable, not floor-pinned): Elite 50k–80k, Alpha 65k–100k. Past zone 30 the window MIN climbs +1000/zone (capped at max) for both, so deep bosses trend toward max rarity (e.g. Alpha z40 → 75k–100k, z60 → 95k–100k; Elite z50 → 70k–80k, z60 → maxed at 80k).

Elite & Alpha bosses

  • Alpha = the last cell of every zone (deterministic — one per zone).
  • Elite = a random roll on non-Alpha cells: chance = min(0.30, 0.01 + (zone − 3) × 0.005) for zone ≥ 3, else 0. So z3 = 1%, z10 = 4.5%, z20 = 9.5%, caps at 30% (~zone 61). No elites before zone 3.
  • Below zone 6, bosses spawn as base forms (still boss-statted); from zone 6 up they're evolved forms (uniform pick over the evolved pool).
  • Bosses are never capturable. They resist hard CC: a Freeze attempt lands as Chill; a Shock lands as a 1200 ms Chill. They still take all DoTs/debuffs in full.

Boss multiplier cheat-sheet:

NormalEliteAlpha
HP/ATK power mult×1.0×1.45×1.55·(1+min(.35,(z−1)·.04)+max(0,z−30)·.03)
DEF/AGI mult×1.0×1.0×1.0
Dust mult×1×4×6
Creature kill-XP mult×1×1.5×1.2
Material-drop amount mult×1×5×14
Per-stat rarity window50k–80k65k–100k (min +1k/zone past z30)

Spawn weights (normal wilds)

Weighted random over species with spawnPct > 0 (same pool at every zone — depth changes level/rarity/boss-rate, not the species mix):

Miu 30 · Larvie 25 · Fal 16 · Chirple 15 · Woolio 15 · Cinella 15 · Naara 15 · Ermy 12 · Arachlet 6 · Glimmo 5 · Tuskle 4.5 · Xolo 4 · Panyin 3 · Zingu 3 · Frostle 3 · Drazing 1.5 (total ≈173). Probability = weight/total (Drazing ≈ 0.87%, the rarest normal). The NFT-starter lines (zappit/walle/wrackoo/infurno) and beta-starters (bramblo/ripplet) have spawnPct 0 — they only appear as bosses (their evolved forms) via the evolved pool.

Normal wilds can spawn evolved (and are capturable)

Once a normal wild's level passes a species' evo gate, it has a rising chance to spawn AS the evolved form: chance = min(0.9, 0.15 + (level − gate) × 0.05) (EVO_WILD_CHANCE_BASE 0.15, PER_LVL 0.05, MAX 0.9). These evolved normals are catchable (Dust cost ×1.5).

Timers

SPAWN_DELAY_MS 1600 (between fights) · PREP_MS 4000 (pick-your-starter countdown on a new wild) · WILD_DEATH_MS 450 (faint anim) · FAINT_BEAT_MS 550 (your creature faints) · WILD_FLEE_MS 1200 (a wild that survived your wipe lingers; next spawn after 1200+1600 = 2800 ms).

Flee / wipe setback

Wilds never flee from damage — a wild only "flees" when it outlasts your whole team (team wipe). On a wipe: if you'd cleared <50% of the zone's cells (WIPE_SETBACK_THRESHOLD 0.5, zone>1, and you haven't already passed halfway in a higher zone), you're knocked back a full zone; otherwise you just restart the current zone. (A failed capture is a separate "broke free and fled" event — see §6.)

🔍 Probe

verify Alpha always on the final cell; that elites never appear before zone 3; that a sub-50% wipe at zone N drops you to N−1; that below zone 21 paragon spreads the wild level UP from the natural floor (so the zone's ceiling level still appears, rarer each paragon, never 0) while zone 21+ takes the full shift.

Faint & the free-revive timer

A fainted creature auto-revives for free after a timer — no Dust, no potion. The wait is the lapse penalty; a Revive Potion is the normal way to skip it (see §15). Base timer: freeRevive = (90000 + 10000×level) ms × rarityFactor, rarityFactor = 1 + rarityAvg/100000 × 0.75 (max-rarity ≈ +75%) (REVIVE_FREE_BASE_MS 90000, PER_LEVEL_MS 10000, RARITY_K 0.75).

  • Noob-friendly early ramp (below L10 the base is replaced by a gentler two-segment ramp joining the line at L10). At avg (50k) rarity: L1 ≈ 0:30 → L5 ≈ 1:30 → L10 ≈ 4:00.
  • First-faint cap 10 min (REVIVE_FREE_MAX_MS 600000 — raised from the fable5 4-min cap so deep-zone wipes are a real time sink again).
  • Per-zone re-faint escalation: each time the same creature faints again in the same zone, its free-revive timer ×3 — ×3^min(faints−1, 3)1st ×1 · 2nd ×3 · 3rd ×9 · 4th+ ×27 (REVIVE_ZONE_ESCALATION 3, MAX_STEPS 3), climbing past the 10-min cap toward a 30-min hard ceiling (REVIVE_FREE_HARD_MAX_MS 1800000). Resets on any zone change (advance or setback). Pushes you to field a fresh creature instead of throwing the same carry at a wall.
🔍 Probe

faint a fresh L1 → back in ~30s; chain-faint one creature in a single zone and confirm the timer triples each time (×1/×3/×9/×27) and never exceeds 30 min; confirm advancing/wiping a zone resets the counter; confirm a Revive Potion still skips the wait entirely.

02

Combat math

Swing cadence

attackInterval(agi): effAgi = 100 + 0.45×(agi−100); raw = 4180 × (100/effAgi); clamped to [1881 ms, 3511.2 ms] (BASE_ATTACK_INTERVAL_MS 4180, floor frac 0.45, ceil frac 0.84). Note: at agi 100 the raw (4180) already exceeds the ceiling, so reference-agi attackers sit at 3511 ms; only higher agi speeds you up, toward the 1881 ms floor.

  • Stack slow: interval × (1 + 0.06 × (stackSize − 1)) (STACK_SPEED_PENALTY_PER 0.06).
  • Tailwind: interval × 0.72 while active (STATUS.tailwindSpeed).
  • Chill slows the timer's advance rate to 55% (STATUS.chillSlow 0.55), not the interval.
  • Switch-in/wind-up sets the next cooldown to interval × 0.5 (wild's first swing at battle start = ×0.85).

Damage — computeHit

mult       = typeMultiplier(attacker.type, defender.type)        # 0.8 / 1.0 / 1.2
crit       = rng() < critChance
critMult   = crit ? (1.5 + critDmgBonus) : 1                     # CRIT_MULT 1.5
variance   = 1 + rng()*0.2                                       # VARIANCE 0.2 → [1.0, 1.2)
mitigation = min(0.8, def / (def + 900))                         # ARMOR_K 900, cap 0.8
raw        = atk × mult × critMult × variance × (1 − mitigation) × (1 − incomingResist)
damage     = max(1, round(raw))                                  # every hit ≥ 1
  • Armor is a curve, not flat subtraction: def/(def+900), capped at 80% reduction. A L40 tank (~470 def) ≈ 34% reduction; 80% needs ~3600 def (prestige territory). Offense always lands ≥20% before type/variance.
  • effAtk (sundered → ×0.80) and effDef (soaked → ×0.75) feed in (see §3).
  • incomingResist = healer class defensive synergy, only on wild→player hits (see §4).

Crit / dodge (shared "curve + sawtooth" shape)

curvePeak(cap, level, stat, ref, scale, zoneBonus): eff = max(1,level) × (stat/ref) + zoneBonus; peak = cap × eff/(eff+scale). sawtooth(peak, dip, xpFrac) = peak × (1 − dip + dip×clamp(xpFrac)) — a 15% dip right after each level-up, recovering to peak as the XP bar fills (*_LEVELUP_DIP = 0.15 everywhere).

  • Crit chance: min(0.30, sawtooth(curvePeak(0.30, level, agi, 100, 80, zone×1.5), 0.15, xpFrac)). Player creatures get the zone bonus (CRIT_ZONE_WEIGHT 1.5); wilds use zone=0, xpFrac=1 (always peak).
  • Crit damage bonus: min(0.30, …(0.30, level, atk, 100, 80)) (no zone term). Total crit = 1.5–1.8×.
  • Dodge: min(0.15, …(0.15, level, def, 100, 80, zone×1.0)). Dodge negates the whole hit. Per-species override: seal line ripplet ×1.35 cap 0.22, rippleon ×1.5 cap 0.25. Wilds dodge your hits at zone=0/xpFrac=1.

Type chart — 9 types, ±20% steps (0.8 / 1.0 / 1.2)

Applies to every auto-attack (there's no "special vs normal" split in Wilds). Order: Fire, Grass, Electric, Water, Bug, Ground, Ice, Normal, Flying.

Atk\DefFireGrassElecWaterBugGrndIceNormFly
Fire0.81.210.81.20.81.211
Grass0.80.80.81.211.2111
Electric10.80.81.211.2111.2
Water1.20.810.811.2111
Bug11.211.2110.811
Ground1.20.81.210.81111
Ice0.81.210.81.21.2111.2
Normal111110.8111
Flying11.2111.21111
🔍 Probe

confirm dodge caps at 15% (22/25% for seals); that a max-def tank can't exceed 80% mitigation; that type multipliers are exactly 0.8/1.0/1.2 (not 0.75/1.25).

03

Status effects

Two dials: STATUS_PROC (proc chances, the fallback — most named creatures override via per-creature loadouts) and STATUS (magnitudes/durations). DoT ticks are RNG-free (replay-deterministic). The type defaults below are the reference; each creature has an explicit elemental loadout.

Status (type)Proc (type default)Effect
Burn (Fire)0.18DoT, refreshes (no stack). 3500 ms, ticks/1000 ms, perTick = atk×0.14×power.
Venom (Bug)0.20Stacking DoT, up to 4 stacks ×5% atk = 20%/s. 4000 ms, refreshes.
Rend/Bleed— (loadout)DoT = 2.5%×power of current HP/tick (self-tapering). 4000 ms.
Chill→Freeze (Ice)0.20Chill 3000 ms (swing timer at 55% speed). A 2nd Ice proc on an already-chilled non-boss (past the immune window) Freezes 1300 ms (can't act), then 2800 ms re-freeze immunity.
Shock (Electric)0.16Sets a boolean. On the target's next swing it fizzles with prob 0.5^chain: 1st fizzle 100%, 2nd 50%, 3rd 25%… A landed swing resets the chain (no perma-lock).
Soak (Water)0.20DEF ×0.75 for 4000 ms.
Sunder (Ground)0.20ATK ×0.80 for 4000 ms.
Tailwind (Flying)0.18Self-buff: own swing interval ×0.72 for 3000 ms.
Recoil/Thorns (Grass, reactive)0.30Hits the attacker back for dealt×0.22×power.
Bruise (Normal)0.18Follow-up hit(s) = firstHit×0.20 (carries crit+type); power = #follow-ups (Frosthydra = triple-strike).
  • Boss CC resist (STATUS_BOSS_CC_RESIST true): Freeze→Chill, Shock→1200 ms Chill on Alpha/Elite. You never resist CC — enemies can freeze/shock you.
  • Notable loadout powers: gemino recoil p1.3, frosthydra bruise p2 (triple-strike), terrarox recoil p1.15. Infurno's reactive burn comes from its per-creature loadout (c:.20).
🔍 Probe

stack Venom to 4 and confirm 20%/s; chain-Freeze a non-boss and verify the 2.8 s immunity blocks re-freeze; confirm a boss can't be frozen (lands as chill); confirm Shock can't perma-lock (resets on a landed swing).

04

The Healer & the heal

Your one combat input. Per heal pulse:

healAmount = HEALER_HEAL_BASE(30) + HEALER_HEAL_PER_LEVEL(7)×(level−1) + gear healPower + talent + relic
           , × healerEnergyFactor
pulse      = max(1, round(healAmount × signatureMult × variance × (crit ? 1.5 : 1)))     # ±10% variance
cost       = round(PULSE_COST(12) + PULSE_COST_PER_LEVEL(0.5)×(level−1))  mana
energy     = −1.2 per heal cast
  • Gear healPower: 5 + 1.0×statpoints per slot, summed. Keystone signatureMult = 1 + 0.025×rank.
  • Heal-crit chance uses a class-weighted "stat", not raw luck: healCritStat = luck×0.5 + classPrimary×sig, where classPrimary = Forest manaRegen×6 / Ocean gearHealPower×0.4 / Light maxMana×0.07. Capped 30%.
  • Mana: maxMana = 80 + 3×(level−1) + gear/talent/relic; regen = (0.6 + 0.03×(level−1) + relic + elixir) × healerEnergyFactor per second. Mana is scarce by design.
  • Heal is blocked while the Sanctuary is busy (build/forge/brew/bake) and when the active is already full with nothing to shield.

Class heal shapes

  • Ocean (and unset): one instant burst ×1.15. Keystone Riptide splashes the burst to the next 2 creatures (min(0.6, 0.15×rank) of it).
  • Light: instant ×0.6 plus a barrier per pulse (H×0.7 + maxMana×0.04, capped at 70% of max HP). Barrier absorbs first.
  • Forest: banks a heal-over-time pool (1.4× total spread at 0.45× rate), draining 1 tick/sec, each tick rolling its own variance+crit.
  • Defensive resist (incomingResist): vs the wild's attacker type — Forest resists Grass/Bug, Ocean resists Water/Ice, Light resists Fire/Electric. min(0.5, 0.12 + ward-talent) reduction. Absorption order: barrier → shield → HP.
  • Over-heal → shield (all classes): banks min(1.0, 0.25 + maxMana×0.003) of overheal as a shield, capped at 25% of max HP; can shield-crit (min(0.30, luck×0.01), ×1.5).
  • Relics (one per class, level = paragon+1, bounded curve): Forest → mana regen 0.05→1.0; Ocean → heal power 3→60; Light → max mana 5→100.

Class quick-table

ClassResistsHeal shapeHeal-crit primaryRelic
ForestGrass, BugHoT (1.4 total / 0.45 rate)mana regen ×6regen 0.05→1.0
OceanWater, Iceinstant ×1.15 (+Riptide splash)gear healPower ×0.4heal power 3→60
LightFire, Electricinstant ×0.6 + barriermax mana ×0.07max mana 5→100
🔍 Probe

confirm pulse cost rises 0.5/level; that healing a higher-level creature grants more healer XP (§18); Light barrier cap = 70% max HP; Forest HoT keeps ticking after you switch.

05

Creatures, stats & rarity

Rarity (the headline collectible axis)

  • Per-stat rarity 0..100000, four independent uniform rolls (atk/agi/def/hp). rarityAverage = round(mean). A fresh roll averages ~50000. RARITY_MAX = 100000 = full "holo".
  • Rarity picks the point in each stat window — both the base value and the per-level gain (pick = lerp(window, rarity/100000)). Higher rarity = better base AND faster growth on that stat.
  • There is no mutated/holo proc/variant system in Wilds — rarity is a continuous per-stat number; "holo" just means a stat near 100000. (Boss rarity windows are the only forced tiering.)

Stats & focus

4 stats: HP, ATK, DEF, AGI. Each species focuses 2 (high windows), the other 2 use low windows; Drazing is neutral (all mid). Windows (base / per-level gain): Combat HI [100,120]/[6,9], LO [72,90]/[4,6], MID [88,105]/[5,7]; HP HI [313,375]/[19,28], LO [231,275]/[11,18], MID [269,319]/[15,21]. Global CREATURE_HP_MULT = 1.5 (+50% HP on every creature, player and wild). What the stats do: ATK→damage, AGI→swing speed + crit, DEF→armor + dodge, HP→survivability.

🔍 Probe

capture two of the same species at very different rarities and confirm the high-rarity one out-bases AND out-grows the low one; verify avg rarity drives capture difficulty (§6) and Power Score (§20).

06

Capturing

The capture chance is hidden (never sent to the client — it would leak rarity).

belowness    = clamp01( (0.6 − hpFrac) / 0.6 )          # CAPTURE_HP_THRESHOLD 0.6
hpTerm       = 0.25 + belowness × 0.6                    # 0.25 at 60% HP → 0.85 at 0% HP
rarityFactor = 1 − (avgRarity/100000) × 0.4             # 1.0 (rarity 0) → 0.6 (full holo)
speciesFactor= clamp( sqrt(spawnPct/20), 0.15, 1 )      # rarer-spawning species are harder
luckBonus    = luckCaptureBonusFor(luck, healerLevel, xpFrac)   # additive, ≤ +0.30
chance       = min(0.95, hpTerm × speciesFactor × rarityFactor + luckBonus)
  • You can only attempt below 60% HP. Lower HP helps linearly (up to +0.60 absolute).
  • speciesFactor is a second, hidden difficulty from spawn rarity: spawnPct≥20 → 1.0; 5 → 0.5; ≤0.45 → floor 0.15.
  • Luck is additive (after the multiplications), curve-capped at +0.30, scaling with gear luck AND healer level: eff = healerLevel×(luck/5), peak = 0.3×eff/(eff+80), with the level-up sawtooth.
  • Hard cap 0.95 — never a sure thing.

Cost & resolution

  • Dust only (no ammo, no mana, no cooldown; Ore cost was removed). cost = (15 + 6×level) × zoneMult × evoMult, where zoneMult = 1 through zone 10 then +5%/zone, and evoMult = 1.5 for evolved-form wilds. (L5 base-form zone 1 = 45 Dust.)
  • Blocked if: boss, HP >60%, roster full, Sanctuary busy, or not enough Dust.
  • Success: the wild becomes a roster creature inheriting its exact level & rarity, auto-assigned to whichever gather job it's better at (tie → herbs). Healer XP granted after a 2 s reveal.
  • Failure: the wild breaks free and flees (removed — does not keep fighting). Dust is still spent. Healer keeps 30% of the capture XP; creatures get 30% of the would-be kill XP.

Roster cap

rosterCap = 4 + habitatLevel + paragon (ROSTER_CAP_BASE 4, max 64). Frozen creatures don't count — freezing frees capture room.

🔍 Probe

confirm captures fail more on rarer wilds and rarer-spawning species even at the same HP; that a failed capture still burns Dust; that luck visibly raises catch rate; that the captured creature's rarity == the wild's.

07

Evolution

  • Gates are per-target levels (e.g. miumiu 20, chirpily 24, frostduo 18, brambledon 24; fallback 12). canEvolve needs: valid target, level ≥ gate, solo (unstacked), alive, not already evolving. One creature evolves at a time.
  • Branching lines evolve RANDOMLY: a species with multiple targets (e.g. Drazing → one of its 5 elementals) rolls a random form — the player does not pick. The roll is seeded (replay-deterministic) and the result is hidden ("Evolving → ???") until the chrysalis hatches. Single-target lines just use their one form.
  • The stat rule (current): evolving adds a clean % of base stats, pro-rated across the line's steps — EVO_TOTAL_BONUS = 0.10, frac = 0.10 × (stage / lineSteps). A fully-evolved form = +10%; a stage-1-of-2 = +5%; stage-1-of-3 = +3.33%. It boosts stats (base×(1+frac)), not rarity — rarity is untouched by evolution (that's the Paragon mechanic). Applied retroactively to already-evolved creatures via a one-time migration.
  • Evolving recomputes stats at your effective level and keeps uid/level/xp/rarity — so an evolved-into form == one captured-as that form. Evolving later = a bigger absolute jump.
  • Cost: round(120 × levelF × rarityF × speciesF) Dust + a flat typed-herb recipe; time ≈ 20 s × (1 + level×0.05) × speciesF.
🔍 Probe

evolve a creature and confirm the boost is ~10% of base (not 25%); that a 2-step line gives +5% then +10%; that you can't evolve a stacked creature.

08

Stacking

Merge two same-species units into one (lead = highest rarity; HP sums, stats/rarity average). Effects:

  • Slower swings: +6% interval per extra member.
  • More gathering: every alive member forages — a stack of N out-gathers a solo ≈N× (refine speed carries the stack too).
  • N× energy drain — one per alive member (it also gathers N×); a fainted stack member neither works nor drains (see §14).
  • XP split toward lower-level members (catch-up), then ÷ by each member's own level-gap mult.
  • No mixing loyal + defiant: a stack can't hold both a creature that obeys and one that's ≥RESPECT_LEVEL_GAP over the healer (§22) — otherwise a defiant creature could hide inside an obedient stack and still feed combat. Stacking is refused if it would mix them, and an existing stack that crosses into mixed (a member levels past the gap, or the healer falls behind) auto-unstacks.
  • Must unstack to evolve or to enter PvP. Frozen creatures don't stack.
09

Gathering (Herbalism / Mining)

gatherRatePerSec(c) = Σ over alive members:  0.25 × (1 + memberLevel × 0.04) × prodRarityFactor(member)
prodRarityFactor    = 1 + (avgRarity/100000) × 0.3            # ×1.0 → ×1.3
effective raw/sec   = gatherRatePerSec × energyFactor × gatherEff(species, stream) × streamMult
  • JOB_GATHER_BASE 0.25, JOB_GATHER_PER_LEVEL 0.04 (+4%/level). Dojo is removed (its +dojoLevels term is always 0).
  • Stream multipliers (raw only): HERB_GATHER_MULT 1.5, ORE_GATHER_MULT 3.0.
  • gatherEff is a per-species percent (5–100%), independent for herb vs ore (default 100% if unlisted). Examples (herb/ore): larvie 100/5, wrackoo 100/20, woolio 85/8, naara 70/30, drazing 60/50, zappit 55/45, ermy 45/50, xolo 30/80, infurno 25/70, zingu 20/60, glimmo 20/100, wuzaru 15/82. Captured creatures auto-pick their better stream.
🔍 Probe

confirm a glimmo mines far better than it forages; that a stack of 3 gathers ~3×; that low energy throttles output (and 0 energy = idle).

10

Refining (raw Herb/Ore → typed materials)

A refiner is dedicated to one stream. Throughput:

refMult = 0.06 × (1 + 0.6×(refineryLevel − 1))     # L1 ×1, L2 ×1.6, L3 ×2.2 … (global: herb + ore alike)
speed   = gatherRatePerSec / 0.25                   # carries stack + level + rarity
take    = min( refMult × speed × energyFactor × refineEff(species,stream), raw available )
junk    = take × junkFrac ;  usable = take − junk
junkFrac = max(0.10, 0.82 − 0.02×refineryLevel)     # L1 = 0.80, falls to floor 0.10 at L36
  • Herbs convert fully; ore is lean: REFINE_ORE_METAL_YIELD 0.6 (40% of usable ore → trace Dust).
  • All junk/lean/rejected units → trace Dust at 0.05/unit (REFINE_DUST_PER_JUNK).
  • refineEff is per-species percent (5–100%), separate table from gather (e.g. arachlet 90/45 herb/ore, panyin 75/60, infurno 20/75, glimmo 15/40).
  • Affinity bonus +20% for a type-suited refiner (Grass/Bug→herbs, Ground/Fire→ore).
  • Tier access gating (soft): which typed materials come out is gated by bestAccessLevel = your highest-level non-frozen creature. Each material has a gatherLevel; below it the yield decays steeply (×0.12^(levels short)) — a faint trickle that grows as you approach, never craftable bulk until reached. Refined-material unlocks (gatherLevel): herbs greenleaf 1 → lotus/cloverleaf/marigold 6 → foxglove 12 → sunpetal 18 → moonflower 22 → starflower 25; metals copper 2 → cobalt 6 → silver 10 → gold 14 → osmium 18; revive flora aloe 5 → ginseng 15 → rose of jericho 25; fibers cotton 1, linen 10.
  • Bag-full: a refiner whose stream's bag is full auto-switches to gathering the raw instead (and restores when room frees).
🔍 Probe

raise Refinery level and confirm less junk + faster output; confirm a level-1 roster can't refine high-tier metals (only a trickle); that ore yields ~60% metal + dust while herbs convert fully.

11

Materials, drops & the bag

Wild drops on faint

  • Dust: max(0.1, round2(1 × level × tierMult × rarityMult)), tierMult 1/4/6 (normal/elite/alpha), rarityMult = 0.5 + 1.5×(avgRarity/100000) (0.5–2.0). A L10 50k-rarity normal = ~12.5 Dust.
  • Materials: per drop-table entry that procs, amount = max(0.01, round2(0.05 × tierAmt × levelFactor × dropRarity)), tierAmt 1/5/14 (normal/elite/alpha), levelFactor = 1 + 0.05×(level−1), dropRarity 1.0–2.0 by rarity. Bosses (esp. Alpha ×14) are the dominant material source.
  • Typed-material drops are only kept if a Refinery is built (else discarded). Gem drops are instanced (carat is its own roll; amount/level/rarity don't apply).
  • Drop table highlights: Wool ← woolly lines (woolio/tuskle/…); Charcoal ← Fire lines; Sand ← Water/Ice lines; Silk ← spiders; Chitin ← bugs; Bark ← wrackoo/bramblo; Down ← birds; raw Ore ← glimmo/gemino/terrarox; gems at tiny chances on elites/alphas.

Materials catalog (kind · tier · gatherLevel · stack/slot)

  • Herbs (stack 100): greenleaf 1·1, lotus/cloverleaf/marigold 2·6, foxglove 3·12, sunpetal 4·18, moonflower 5·22, starflower 6·25.
  • Revive flora (100): aloe 1·5, ginseng 2·15, rose of jericho 3·25.
  • Fibers: cotton 1·1 (120), linen 2·10 (120); drop-only: wool 1 (120), down 2 (150), silk 3 (120).
  • Plating (drop-only, 60): chitin, bark.
  • Metals (20, osmium 15): copper 1·2, cobalt 2·6, silver 3·10, gold 4·14, osmium 5·18.
  • Glass/Fuel (dual-source: refine + drop): sand 1·1 (40), charcoal 1·3 (80).
  • Gems (instanced, 20/slot): quartz 1·1, topaz/amethyst 2·3, emerald/sapphire/ruby 3·5, diamond 4·7.

Sell values

  • Material: max(1, round(amount × 2 × rarityMult)), rarityMult common 1 / uncommon 2 / rare 4 / epic 7 / legendary 12. (Selling sells the whole stack.)
  • Gem: max(1, round(12 × rarityMult × carat × cutMult)), cutMult rough 0.7 / cut 1.0 / brilliant 1.4.
  • Bag: round(80 × 0.5 × (1 + rank)) → uncommon 40, rare 80, epic 120, legendary 160, holo 200 Dust.

Bag (backpack)

  • Slots by rarity: uncommon 24, rare 30, epic 38, legendary 46, holo 56. All gems share ONE slot total.
  • Bag must match your healer class. Equip is a free reversible swap.
  • Craft (gacha): costs 80 Dust + 15 cotton + 3 wool; rolls a random rarity weighted base × lift^rank, base {unc 100, rare 34, epic 12, leg 4, holo 1}, lift = 1 + 0.14×workshopLevel. So Workshop 1 ≈ unc 61% / rare 24% / epic 9.5% / leg 4.1% / holo 1.8%; Workshop 10 ≈ unc 30% / rare 24% / epic 20% / leg 16% / holo 10%. Always your class now.
🔍 Probe

kill an Alpha and confirm the ×14 material burst vs a normal; confirm typed drops vanish with no Refinery; that the gem pouch only ever eats 1 bag slot; that Workshop level visibly improves bag-roll odds.

12

Gems

  • Found only while refining ORE: per-refiner-second chance = 0.006 × (1 + 1.5×luck/(luck+40)) (×sec). Luck pushes it toward 0.015 (2.5×). No gems from raw mining.
  • Type roll weighted by gem.weight × accessReach (rarer types gated by gatherLevel). Carat roll: 0.2 + (max − 0.2)×rng^skew, per-type max (quartz 10 … diamond 5); higher luck flattens skew (4 → floor 2.0) → bigger stones more often. Found rough.
  • Cut (rough→cut→brilliant): fee 30 × tier × max(1,carat) Dust per step, loses 12% carat/step (~22–25% total). Needs Workshop ≥1.
  • Socket into neck/ring/earring (fee 50 × tier × carat Dust): bonus = GEM_STAT[type] × carat × cutMult. Per-type (per 1 ct, cut ×1): topaz +4 luck, amethyst +4 manaPool, sapphire +0.06 manaRegen, emerald +3 healPower, ruby +4 healPower, quartz +0.03 manaRegen, diamond +2 of all stats.
13

Buildings (the Sanctuary)

buildingCost(id, lvl) = ceil(base × mult^lvl) per resource; build time 9000 ms × 1.15^lvl (compounding); cancel refunds 80%. Build/craft/brew/bake share one production slot (the healer can't heal while producing).

BuildingUnlockBase (dust/herb/ore)multEffect per level
Habitatalways50/10/401.20+1 roster slot (max 60)
Bakeryalways40/12/401.25food tier + −5% worker energy drain (floor −60% @ L12)
Apothecaryzone ≥290/20/681.25brew-tier cap (min(6, level)) + revive tiers
Workshopzone ≥2130/35/1901.12gear item-level bracket (min(ws, healer)) + bag-roll lift + gem cutting
Refineryzone ≥2110/28/1151.22refine throughput (×1, ×1.6, ×2.2…), less junk, gem finds, keeps typed drops

(Dojo, Greenhouse, Lab, Research, Healing Pools are removed.)

14

Energy & food

  • Worker energy factor: full rate at/above 20% of max energy, ramping linearly to 0 (idle) at empty. maxEnergy = 100 + 10×(level−1).
  • Drain: 0.25/s × max(0.4, 1 − 0.05×bakeryLevel) per worker (Bakery cuts it, floor 40% of base ≈ L12). A stack drains N× — one per alive member, matching its N× energy tank; a fainted member neither works nor drains.
  • Auto-feed (on by default): a worker eats one Pet Food below 20% energy, hungriest-first, ties to highest rarity. Disobeying creatures are skipped (and consume no food).
  • Food restore = round(maxEnergy(level) × 0.65 × eff), eff = min(1, (foodTier+8)/(level+8)) — level-appropriate food restores 65% of the tank, under-leveled food less. Food tier = Bakery level when baked. Cost scales with Bakery level (petfood ≈ 6L + 0.2L² herbs + 2L dust; healermeal a bit more).
  • Healer energy is separate: full at ≥20%, never below 40% effectiveness even at empty; drains 1.2/heal and 0.4/s while the Sanctuary is producing; auto-eats a Healer Meal below 20%; no passive regen (Meals only).
🔍 Probe

confirm a stack of 3 workers drains ~3× food; that an under-leveled Pet Food restores noticeably less; that letting the Bakery lapse starves a big roster.

15

Consumables (the Apothecary)

A brew stores the herb tier (1–6) as its strength (not the building level — Apothecary just caps the tier and gates revives).

  • Mana Potion: instant 50 + 16×(tier−1) mana (T1 50 … T6 130). Cost 25 × (1 + 0.5×(tier−1)) Dust + herbs.
  • Mana Elixir: 0.5 + 0.3×(tier−1) mana/s for 2 min (T1 0.5 … T6 2.0). Cost ×1.5 of the potion.
  • Revive Potion: restores T1 34% / T2 67% / T3 100% HP (flora-tiered: aloe@Apoth L2, ginseng@L4, rose of jericho@L6). Each brew yields 2 potions. Cost 25 × (1 + tier) Dust + 1 flora.
16

Gear & the Workshop

  • 12 equip slots: head, eyewear, neck, clothing, gloves, boots, 2× earring, 4× ring (8 types). Cloth family = clothing/head/gloves/boots/eyewear; jewelry = neck/ring/earring (only jewelry has a gem socket).
  • Item level = min(workshopLevel, healerLevel). Rings & earrings unlock at item level 3; others at 1. Slots only get a "new version" every step levels (2–4).
  • Stats (healPower / manaPool / manaRegen / luck): each slot has a {key, base, per} per stat; a rolled value = lerp(band) of (base + per×(slotLevel − minLevel)), band by rarity tier: Uncommon [0.70,0.85] · Rare [0.90,1.05] · Epic [1.10,1.30] · Legendary [1.38,1.60] · Holo [1.70,2.00] (bands never overlap).
  • # stats by rarity & level: Uncommon 1; Rare +2nd@L12; Epic +2nd@12,+3rd@24; Legendary +2nd@9,+3rd@26; Holo +2nd@9,+3rd@19,+4th@29.
  • Rarity tiers (number → tier): ≥99991 Holo, ≥98001 Legendary, ≥85001 Epic, ≥50001 Rare, else Uncommon.
  • Craft roll rarity = floor(rng×100001) + craftLuckBonus (see §17 — luck adds up to +990, ~1% holo at cap).
  • Material bill per slot (cloth = cotton/linen/silk/wool/chitin/bark; jewelry = copper/cobalt/silver/gold/osmium + charcoal), amounts scale with item level. Dust = 60 × (1 + 0.35×(itemLevel−1)) × slotDustMult.
  • Craft time = (8000 + 700×workshopLevel) × slotMult (clothing 1.5 … earring 0.65).
  • Scrap refunds Dust+Ore scaled by gear level × rarity.
17

Luck — every place it matters

luck = total 'luck' stat on equipped gear (gear rolls + socketed gems). No base/class luck. Applications:

  1. Capture chance: additive bonus up to +0.30 (curve over healer level × luck).
  2. Heal-crit chance (weighted ×0.5, secondary to the class primary stat).
  3. Shield-crit chance: min(0.30, luck×0.01) (luck 30 = cap), ×1.5.
  4. Gem-find while refining ore: ×(1 + 1.5×luck/(luck+40)), up to 2.5× base.
  5. Gem carat size: flattens the skew (4 → 2.0) → bigger stones more often.
  6. Gear craft rarity: "keep-up" model eff = luck/healerLevel, adds up to +990 rarity points (~1% holo at cap) — so a fixed luck buys less as you out-level it.

Luck does NOT affect: creature crit/dodge, or wild Dust/material drop rates (those are level/agi/def/zone curves).

🔍 Probe

stack luck gear and verify higher catch rate + more/bigger gems + more holo crafts; confirm dropping below the dip after a level-up reduces luck effects briefly.

18

XP & leveling

  • Healer XP curve: xpToLevel = round(150 × 1.13^(level−1)) (HEALER_XP_BASE 150, GROWTH 1.13). Kept ~parallel to the creature curve (XP_GROWTH 1.12) on purpose: the old 1.27 grew far faster than creatures, so the healer fell ~1 level further behind every ~2 levels and hit the respect gap (§22) around L25-26 — a death spiral the capped catch-up multipliers couldn't fix. All healer XP × 0.85 (HEALER_XP_MULT, bumped 0.7→0.85 to keep the healer paced under the respect rule — see §22).
  • Capture: level × 9.8 × (1 + rarity/100000) × gapMult (full on success, 30% on flee).
  • Heal: 2 × healedCreatureLevel × gapMult per cast.
  • Creature XP curve: xpForLevel = round(100 × 1.12^(level−1)) (gentle, leveling continues all run). All creature XP × 0.7 (CREATURE_XP_MULT).
  • Kill XP pool: round((wildMaxHp/10) × (1 + level×0.06) × fraction × bossXp), bossXp 1/1.5/1.2 (normal/elite/alpha), fraction 1 on kill / 0.3 on flee. Split by damage dealt, then ÷ by each member's own gap mult; stacks bias toward lower-level members.
  • Level-gap multiplier (both): clamp(0.86^(yourLevel − targetLevel), 0.05, 3.0). Out-leveling earns less (floor 5%); punching up earns more (cap 3×). This is the built-in catch-up that keeps a lagging healer/creature growing.
  • No hard level cap — the only ceiling is Halt-XP (caps at the PvP bracket ceiling; see §22).
19

Paragon & prestige

  • Gate: max(runMaxZone, zone) ≥ 30 + paragon — zone 30 this run for your first ascend, +1 zone required per paragon already held. runMaxZone resets each prestige, so the bar is re-earned (no zone-1 spam).
  • Carries forward: paragon +1; up to min(6, paragon+1) carried creatures; +1 talent point; the talent tree; class/gender; relic (level+1); achievements & lifetime stats; +1 roster slot.
  • bankedPower += the finished run's full Power Score (banked before carried creatures reset, so no double count).
  • resetCarried (the carried creatures): level → 1, paragonLevel +1 (a hidden +1 effective-level offset each ascension), xp 0, rarity nudged toward holo on all 4 stats (paragonRarityStep: ~+0.03×(100000−r)^1.5/100000^0.5 per stat, persistent/compounding — ~116 paragons to take a 50k stat to 90k, ~1380 to full holo). Evolved form + rarity kept; dropped to a single member; returns active.
  • Infuse (manual frozen-bench rarity grooming): unlocks at paragon 7, costs 1 talent point per stat-nudge on a frozen creature (same curve).
  • Talent tree (1 pt/prestige, ~98 ranks total): core bigger_heal (+1 HP/pulse, max 30), deep_mana (+2 mana, max 30), ward (+1% resist, max 14); plus a class keystone (Evergrowth/Riptide/Aegis, +2.5%/rank to your heal/HoT/barrier + heal-crit, max 24).
  • Enemy scaling: +1 wild level per paragon (ENEMY_LEVEL_PER_PARAGON 1.0), matched to the carried-creature +1 effective level — each rung lands slightly harder. Depth-split (§1): full shift only at zone 21+; below that paragon spreads the level upward from the natural floor, so a post-prestige re-climb eases through low zones and bracket-legal captures stay available (rarer each paragon, never 0).
🔍 Probe

confirm the first prestige needs zone 30; that carried creatures come back level 1 but stronger (rarity + hidden paragon levels); that bankedPower makes your leaderboard score monotonic across prestiges.

20

Score & leaderboard

computeScore(s) = (healerLevel + Σ over all creatures/members (level + paragonLevel)) × 10    # SCORE_LEVEL_WEIGHT
                + currentZoneReach × 50                                                        # SCORE_ZONE_WEIGHT
                + Σ over creatures floor(avgRarity / 2000)                                      # 0–50 each
lifetimePower(s) = max(0, bankedPower) + computeScore(s)
  • So: every (creature level + paragon level) and your healer level = +10; this-run zone = +50; each creature's rarity adds floor(avgRarity/2000) (0–50). Elite/alpha kills and paragon count are not directly in the score (paragon shows as a ★ badge; bosses help only via XP/rarity).
  • currentZoneReach = max(runMaxZone, zone) — your this-run deepest (feeds the score). deepestZoneOf = lifetime high-water (UI/achievements).
  • Leaderboard: ranked by score desc; the stored value is high-watered (monotonic) and combined with bankedPower, so a transient in-run dip never lowers your standing. Qualification: lifetime peak zone ≥ 2 (bare zone-1 runs excluded). The "alpha" ★ = your team holds an NFT-starter line (infurno/wrackoo/walle/zappit). With multiple healers, the board sums lifetimePower across all your healers.
21

PvP

  • Brackets by healer level: band 0 = L1 (its own ladder), band 1 = L2–10, band 2 = L11–20, band 3 = L21–30… Bracket ceiling (max creature/healer level allowed) = 1, 10, 20, 30… You only face the same band, and paragon is matched exactly.
  • Roster: ≥1 creature, all level ≤ ceiling, no stacks (unstack first), not mid-evolution; duplicate species allowed (max 6).
  • Elo: per-bracket rating (default 1000, K=32, zero-sum, floored at 0); matchmaking picks the nearest-rating opponent in your bracket. Climbing a band starts a fresh ladder. Matches time out at 5 min (HP-fraction tiebreak); the AI heals below 45% HP and swaps on a ≥1.0 type disadvantage.
22

Governors (respect, halt, foreign cap)

  • Respect / disobey: a creature 6+ levels above its healer (RESPECT_LEVEL_GAP 6) stops obeying — in battle it won't attack (emits "Won't obey", still takes damage), and it won't gather/refine (and eats no food), online or offline. Exactly 5 over is still loyal. Level the healer back within 5 to win it back. (Level-only by design.) Healer XP was bumped to ×0.85 partly to keep the healer paced with this rule.
  • Halt-XP: toggle to cap the healer and all creatures at the PvP bracket ceiling (1/10/20/30…) — they keep playing and top off to the cap, then park at a full XP bar. Lets you lock a roster to a bracket to farm gear/captures. Distinct from freeze.
  • Foreign-creature unfreeze cap: a creature received from another of your healers can't be unfrozen/fielded above this healer's level or paragon (anti zone-boosting). Home-grown creatures are never capped (that's what the respect rule then governs).
23

Multi-healer & freezing (account layer)

  • Freeze = cold storage: inert (no fight/farm/level/drain), off the roster cap. You can't freeze your last active creature, and a stacked unit must be unstacked first (the button reads "Unstack to freeze").
  • Freezing costs Dust and resets the creature to level 1 — its rarity and paragon star persist (it re-levels from 1 when you field it again). The Dust cost is the sink that stops you hoarding a huge frozen bench. It scales multiplicatively:

freezeCost = ceil(50 × (1 + 0.06×(cLvl−1)) × (1 + 0.04×(hLvl−1)) × (1 + 0.05×(zone−1)) × (1 + 0.10×(refineryLvl−1)) × paragonMult) where paragonMult = min(10, 1 + 0.04×healerParagon + 0.05×creatureParagon) (FREEZE_COST_BASE 50, per-creature-level 0.06, per-healer-level 0.04, per-zone 0.05, per-Refinery-level 0.10; paragon 0.04/healer + 0.05/creature, cap ×10). A fresh save (L1 creature, L1 healer, zone 1, no Refinery, no paragon) = 50 Dust; a deep-zone geared healer freezing a high-paragon carry runs into the thousands.

  • Unfreezing stays free (still gated by roster room + the foreign-level cap) — so even a fresh p0 player can field a creature transferred onto the account.
  • Multiple healers per account: each healer is its own save/roster/paragon/PvP-bracket/halt. Switch anytime. An account holds up to 6 healers — one of every class + gender combo (MAX_HEALERS 6 = 3 classes × 2 genders; the class picker greys out combos already bound to another of your healers, and the server enforces it). Creation is free in testing; later also gated on a healer NFT. You can transfer a frozen creature to another of your healers: it auto-unfreezes into the receiving roster the moment it clears that healer's level+paragon field gate and there's room, otherwise it waits in cold storage (still "foreign" → the unfreeze cap above applies). Landing fielded keeps the sink honest — sending it on again means re-freezing (re-paying the cost), which is cheaper on a lower-level/paragon healer. The leaderboard sums lifetimePower across all your healers.
  • No-duplicate starters: a new healer can't reuse the same NFT/item instance another of your healers started with — it's offered the next-best remaining.
24

Quirks, dead constants & things to stress-test

Things detail-hunters will want to know (and the dev may want to clean up):

  • Stack energy drain is intentionally N× (a stack gathers N× and holds an N× energy tank) — and as of this build it correctly counts only alive members for both drain and gathering (a fainted stack member does neither). (Earlier builds drained per total member incl. fainted — fixed.)
  • Dojo is removed (dojoWorkLevels → 0); DOJO_WORK_LEVELS_PER_LEVEL = 0.5 is a dead constant. MINERAL_DROP_BASE_BOSS = 3 is defined but unused (boss Ore now comes via per-creature drop entries). LUCK_CAPTURE_FACTOR = 0.004 is legacy/dead (live capture-luck is the luckCaptureBonusFor curve). DEF_FACTOR, MAT_DROP_BASE/MAT_DROP_GEM_BASE are superseded.
  • bramblo/ripplet never actually spawn (excluded from both the wild and evolved pools) despite comments; only their evolved forms (brambledon/rippleon) reach the field, as bosses.
  • Attack interval at reference agi (100) already sits at the slow ceiling (3511 ms) — the legacy ~3.2 s/1.7 s comments are stale vs the 4180 base.
  • Wilds compute crit/dodge/crit-dmg at xpFrac=1, zone=0 (always peak, no zone bonus) — only your creatures get the level-up sawtooth + zone bonus.
  • Type steps are 0.8/1.0/1.2 and there are 9 types (Flying added). The "1.25/0.75 on special moves" note in old docs refers to a different project (HolozingWorld), not Wilds.
  • Capture HP boundary: at exactly 60% HP the attempt proceeds (belowness 0) but the odds readout flags it non-attemptable — an off-by-epsilon edge.
  • Bag-full refine fallback gathers raw without the ×1.5/×3.0 stream mult — a refiner bumped onto raw by a full bag yields less than one explicitly assigned to gather.
🔍 Big-picture probes

Can you out-scale the healer with creatures and get punished by the respect rule? Does luck-stacked gear measurably bend capture/gem/craft odds? Can a deep Alpha farm (×14 mats, ×6 dust) trivialize the economy? Does the level-gap XP catch-up (cap 3×) let a fresh secondary creature recover fast? Is there a degenerate freeze/transfer loop across healers? Does the wipe-setback ever feel unfair near a zone boundary?

Numbers current as of the fable5 branch. When a value here disagrees with the code, trust lib/tuning.ts.