DESIGN
Encampments as instanced sites
A design document: planned unless a "Prototype" note says it's built.
Status: BUILT in v0.1.38 (2026-09-05) — the slice below is in the game. Answers Eric's playtest question: "Should we make enemy encampments on the overworld something the player phases into, so the overworld is less cluttered?" — Yes.
Prototype notes (v0.1.38):World.camps["bandit_camp"]record {name, kind, site [x,y], guards/guards_max 4, chief_alive, hoard {}, captive "Ida", captive_t, broken_t, visit, breaks}; saved/merged like rivals.scripts/camp_site.gd(CampSite, group "camp_sites") = the overworld marker (campfire + hay + logs, label "Bandit Camp · 4 guards + chief" or "ashes (Ns)"), trigger radius 34 →World.travel(CAMP, (-260, 0)).scenes/camp.tscn/scripts/camp.gd(name "Camp"): Ground ext 16 / ring 11×8, fire at origin, hoard LootSack withon_taken→camp_take_hoard, 2 Enemies + 2 Patrols (rival_id"" → spotting calls_alert_camp), allcamp_id "camp"+camp_rec(their_die→World.camp_kill), Champion withcamp_chief(60 hp / 12 dmg, drops 2 potions + essence + 6 gold; death →camp_chief_dead), captive Npc at the cage (rescue→camp_rescue). Broken = guards 0 and chief dead →broken_t= CAMP_REGROW 480 s;_camps_tickregrows everything while the hero is elsewhere; captive respawns as "a traveller" after 600 s. Exit west → wilds at site + (-80, 50). Music: rift, battle while hunted. Smoke: two visits (hoard; break + regrow).
Why
- The wilds are getting busy: a camp is four bandits, a fire, a hoard sack, a captive, plus roaming pairs. Two more camps and the map reads as noise.
- A camp that is its own scene can be as big as it wants (tents, a palisade, a cage, a chief) without eating the overworld.
- It reuses what Ironhold already proved: a record (World data) rendered by a scene, entered through a door on the road, left by the same door. The rival-city slice is the template; a camp is a small rival city with no hall and no dial.
The model
- Camp record in
World.camps[id]: kind (bandit / boar warren / cult later), era band,guards(count + kinds),chief_alive+ respawn clock,hoard(loot table rolls, restock clock),captive(who is caged, respawn),broken_t(how long it stays quiet after you break it). - Overworld marker: one tile-sized site (tent + smoke) with a name label and a danger tag ("bandit camp · 4"), placed on the wilds map where the clump of enemies is today. Walking onto it phases in (same transition as the Ironhold road). No enemies wander the overworld near it; the overworld keeps only lone wanderers and animals.
- Camp scene:
scenes/camp.tscnrendering the record — a ring of tents around a fire, guards on patrol routes (Patrol) until alerted, a chief (Champion-lite) by the hoard, a caged captive (Npc with rescue), a couple of gather nodes (the camp's own deadfall / stone). One exit back to the road. Stealth applies: sneak in, backstab the sentry, pick the cage, leave with the captive before the fire circle wakes. - Breaking a camp: all guards down →
broken_tstarts; the marker turns to an ash ring for that time; quest hooks (break_camp, bounties) count the camp id as today. The camp regrows on the world clock like Ironhold's garrison (raid-system doc), stronger if the town's Prosperity has risen. - Camps scale with the world wedge: era-1 wilds have one bandit camp; each wedge adds one to two sites of its era band (world-structure doc).
What changes in the prototype
- Arena loses the four campers + fire + hoard + captive; gains a camp marker at (520, 260) with a phase-in trigger.
- New
Campscene ~ Rival minus the plots;World.camps, saved likerivals. - Smoke: camp record roundtrip, phase in / out, break → broken_t, hoard restock, captive rescue from inside.
Not now
- Camps that attack the town themselves (they feed the raid clock instead).
- Player-built outposts on a broken camp's ring (future: a wedge foothold).
v0.1.39 (2026-09-05): second camp Wolfhead Camp (north_camp, kind "raider", site (160, -720) on the north meadow): 5 guards (3 at the fire, 2 sentries —Camp.SENTRIES2, fire guards = the rest, six GUARD_SPOTS), chief 75 hp / 13 dmg (record fieldschief_hp,chief_dmg), hoard copper mace + 2 stamina draughts + fragment + 2 hide, captive Rook the Trapper (captive_npc"captive2", Journeyman, villager_07 sheet).World.pending_campis set by the CampSite before travel so one Camp scene renders any record. Adding a third camp is one record + oneCampSite.new(id)line in the wilds.
v0.1.40 (2026-09-05): third camp Thornback Camp (south_camp, kind "outlaw", site (-260, 740) in the south brakes): 4 guards, chief 65 hp / 12 dmg, hoard quilted coat + 2 healing potions + fragment + 2 tusks, captive Wen the Forager (captive3, villager_08). Three camps ring the wilds: east (bandit), north (raider), south (outlaw).
v0.1.41 (2026-09-06): fourth camp Greywater Camp (west_camp, kind "marauder", site (-780, 340) west, south of the home road): 5 guards, chief 70 hp / 13 dmg, hoard copper ring + 2 smoked fish + fragment + 2 cloth, captive Halla the Netmender (captive4, villager_09). LootSack "item" entries now name viaItems.infoso trinkets can sit in a hoard. Four camps: E bandit, N raider, S outlaw, W marauder.
v0.1.42 (2026-09-06) — era scaling: a camp regrows as strong ascity.eraat that moment (recordera, default 1): guards_max + era−1, guard hp ×(1 + 0.25·(era−1)) and dmg 12 + 2·(era−1), chief hp ×(1 + 0.5·(era−1)) and dmg + 2·(era−1), hoard = base + cumulativeCAMP_ERA_EXTRAS(Era 2: cut stone, charcoal, 6 gold; Era 3: rough gem, fittings, 10 gold; Era 4: essence, raw essence, 16 gold — "loot" in a hoard is gold).World.camp_era/camp_guards_max/camp_guard_hp/ camp_guard_dmg/camp_chief_hp/camp_chief_dmg/camp_hoard_for; the Camp scene sets hp/lunge_dmg on spawn; site label and camp title show the era. Unbroken camps keep their era.