Skip to content

Gear & Progression (meta loop)

Source: PROJECT_CONTEXT.md §5, §8.7; config.js loot, player; game.js SLOT_ORDER, computeStats, autoEquipEmpty. Status: ⚠️ Partial — 7-slot loadout, rarities, sets, and blueprint upgrades are built; loot scarcity / source-gating is config-gated (the parked-inventory pass tunes which sources yield gear).

What it is

The out-of-raid meta loop: the inventory is the main meta loop (reference: Survivor.io). You collect gear across raids, upgrade it by spending blueprints (the upgrade resource), and craft builds that fit a play style. Better gear raises your stats — primarily Power — and the rarest pieces grant passive abilities. Loot is deliberately scarce and source-gated so finding a real gear piece stays meaningful.

How it works

  • 7 equipment slots (SLOT_ORDER): melee weapon, ranged weapon, armor, belt, gloves, boots, accessory.
  • Items raise stats, primarily Power (overall strength). The bulk of power growth comes from gear, not the base character.
  • Rarer items grant passive abilities. Rarity tiers: common / rare / epic / legendary.
  • Builds — players assemble gear toward a style: aggressive, stealthy, fast, or tanky.
  • Set bonuses specialize the build (vs mobs, vs players, or vs a mob type). Three sets exist (Hunter / Stalker / Bulwark), each activating at 3 matching pieces.
  • Core stats: ATK, HP, Crit (Damage), Speed. Power is a weighted sum of these (player.powAtk/powHp/powCrit/powSpeed).
  • Upgrade resource = blueprints. The current loop is farm blueprints → upgrade gear, because gear itself is rare (see scarcity below).
  • Loot scarcity / source-gating (economy framing, §8.7):
  • loot.gearChance is low — a loot roll is rarely a gear piece.
  • loot.maxGearPerMap hard-caps gear a single map's procedural loot can yield (_gearSpawned).
  • Gear is earned, not found loose: it comes only from >t1 mobs, rival raiders, and rare+ containers.
  • Tier-1 trash mobs and common containers drop only blueprints/materials, never gear or valuables (loot.t1Valuables = false; t1 material drop chance via loot.t1MaterialChance).
  • Scattered floor loot carries no equipment at all (loot.floorGear = false → valuables/blueprints only).
  • On extract with the in-run inventory parked, autoEquipEmpty fills empty loadout slots from the banked haul (builds the starter kit, esp. for the gearless tutorial start).

Tunables

config.js loot: | Key | Default | Note | |---|---|---| | gearChance | 0.06 | chance a loot roll is a gear piece (else valuable/material) | | valuableChance | 0.25 | of non-gear rolls, chance it's a valuable (else a blueprint material) | | maxGearPerMap | 5 | hard cap on gear pieces a map's procedural loot yields (-1 = no cap) | | t1Valuables | false | may tier-1 trash drop gear/valuables? off → blueprints only | | t1MaterialChance | 0.5 | chance a slain tier-1 mob drops a blueprint material | | floorGear | false | may scattered floor loot contain equipment? off → valuables/blueprints | | autoEquipEmpty | true | fill empty loadout slots from the haul on extract |

config.js player (stat baseline + Power weights): | Key | Default | Note | |---|---|---| | baseAtk | 30 | base ATK before gear | | baseHp | 190 | base HP before gear | | baseCrit | 50 | base Crit before gear | | baseSpeed | 60 | base Speed before gear | | powAtk | 6 | Power weight on ATK | | powHp | 0.9 | Power weight on HP | | powCrit | 4 | Power weight on Crit | | powSpeed | 2 | Power weight on Speed |

Rarity value multipliers (RAR_MULT, game.js): common 1 · rare 1.8 · epic 3.0 · legendary 5.0.

Design intent

The meta loop is what turns single raids into long-term retention — the Survivor.io "collect and upgrade" hook (PROJECT_CONTEXT §5). Source-gating gear so it only drops from real threats (>t1 mobs, rivals, rich containers) keeps finding a weapon meaningful and ties power growth back to the hide-and-kill risk gradient (§2): you have to fight or sneak past the dangerous sources to grow, while trash farming yields only the blueprints that feed slow, safe upgrading.

Open questions / deltas

  • "Crit Damage" (concept) vs crit (code) — the concept lists Crit Damage as a core stat; the prototype tracks a single crit value. Naming/semantics need reconciling, especially for the Unity port (§9).
  • Scarcity / source-gating values (gearChance, maxGearPerMap, t1Valuables, floorGear) are the parked Diablo-2 pass's economy dials (§8.7); all revert to higher values / true to restore the looser old economy. Tuning these against the intended upgrade cadence is an open balance TODO.