Co-op does not make the Spire harder by feel — it multiplies. The game carries an exact scaling formula, and every number below is read straight from it.
Enemy HP/block scaling by act
HP: scaledHp = hp * playerCount * perActFactor (applied whenever player
count ≠ 1; current HP resets to the new max). Block: enemy block from
moves or powered cards multiplies by the same playerCount * perActFactor.
The per-act factor:
| Act | Factor |
|---|---|
| Act 1 | 1.1 |
| Act 2 | 1.2 |
| Act 3 | 1.2 |
| Act 3 boss | 1.3 |
So two players fight act-1 enemies at ×2.2, and the final boss at ×2.6. With three players it's ×3.3 rising to ×3.9. Linear in players, mildly progressive in acts — but every extra player also brings a whole second deck, relic set, and potion belt. The multiplier is the game's way of saying one body per player.
One more wrinkle the extraction records: monsters that share a max-HP pool
among side-mates roll identical HP (Creature.SetInitialHp), so you'll see
matching health bars on grouped spawns.
Why AoE and frontline roles emerge
The formula scales HP but not enemy count. A fight with three enemies at
×2.4 HP has three separate health bars to burn through — single-target damage
hasn't gotten any better per cast. Meanwhile ten powers carry
ShouldScaleInMultiplayer=true and scale their amounts up with the same
factor: ARTIFACT, CURL_UP, FLUTTER, HARDENED_SHELL, PLATING, PLOW, RAMPART,
REATTACH, REGEN, SHRIEK. Enemy defense compounds exactly when you're least
able to punch through it. AoE converts the HP multiplier from a problem into
a rounding error, and someone has to stand in front of block-scaled hits —
roles aren't assigned anywhere in the code, they fall out of this arithmetic.
Multiplayer-only support cards enumerated
Card generation filters by constraint: co-op runs exclude singleplayer-only cards, solo runs exclude multiplayer-only ones. Exactly 21 cards are co-op-only:
| Pool | Cards |
|---|---|
| COLORLESS | Beacon of Hope, Believe in You, Coordinate, Gang Up, Huddle Up, Intercept, Knockdown, Lift, Mimic, Rally, Tag Team |
| Ironclad | Demonic Shield, Tank |
| Silent | Flanking, Sneaky |
| Defect | Energy Surge, Ignition |
| Regent | Hammer Time, Largesse |
| Necrobinder | Glimpse Beyond, Legion of Bone |
The reverse direction holds exactly one card: Silent's Well-Laid Plans
(SingleplayerOnly). Every other card in the game appears in both modes.
The colorless eleven are shared across the table; the character-bound ten are
each pool's co-op signature. Flanking,
Gang Up, and
Huddle Up read as a set: reward attacking
a shared target, reward focusing together, reward defending each other — the
deck-level expression of those frontline/AoE roles above.
Shorter maps change campfire economics
Standard acts generate BaseNumberOfRooms − 1 rooms in multiplayer
(ActModel.GetNumberOfRooms) — every co-op map is exactly one room shorter.
The golden-path tutorial map drops its third point (the Monster) entirely.
One room sounds cosmetic until you price what campfires compete for: the same
upgrade/duplicate decisions spread over fewer nodes means each rest site is
worth slightly more of your run's total value, and the
act structure you memorized solo ends one floor
early. There's also a hard cutoff shift: relics that stop spawning "before
the act-3 treasure chest" test TotalFloor < 38 in co-op versus < 41
solo (RelicModel.IsBeforeAct3TreasureChest).
Shared loot and draft etiquette
Encounter gold formulas don't change in co-op — but rewards generate per player, from each player's own Rewards stream, so two players killing the same pack each draw their own card reward. Treasure-room conflicts route through a dedicated TreasureRoomRelics stream ("who gets the relic when multiple players pick the same one"), and the shared relic chest deals from per-player RelicGrabBags with a multiplayer fallback queue. The code already splits loot fairly; etiquette only needs to cover what the code doesn't: colorless co-op cards and who takes the last potion slot.
Who scales worst into the 1.3 boss factor
Scaling punishes decks whose damage is capped per-turn rather than scalable
per-hit. The extraction doesn't record win rates — there is no key for
"strongest character" in either file, and none should be inferred. What the
numbers do say: block values scale on both sides of the table
(playerCount × perActFactor), so chip-damage strategies face enemies whose
block grew while their hits didn't; and the boss factor jumps to 1.3 exactly
where encounter design concentrates its largest single health pools. Decks
that multiply — poison stacks, strength-stacked AoE, the Necrobinder's Soul
engine — convert the multiplier into fuel; everything else pays it.