◀ survival.aether-shard.com
AETHER SHARD SURVIVAL WIKI
built from v0.1.73 · 2026-10-06
DESIGN

Inn Ladder (service-building example)

A design document: planned unless a "Prototype" note says it's built.
Part of The design hub; follows the template in Blacksmith Ladder (building template). Drafted 2026-08-30. Unlocks Era 1, full 5-tier ladder. The worked example of a service building: no crafting — its "recipes" are meal recipes, its "quality steps" are buff tiers, and its unique output is the recruitment pipeline (visitors you can hire).

Role: stamina recovery (division of duties: Chapel = health, Inn = stamina), food buffs, and the front door for NPC recruitment — better inns attract better visitors.


Prototype (v0.1.13, 2026-09-02): tier 1 stands in the arena — plot by the road, BUILD = 8 timber + 2 stone + 25s. Service: TAKE A ROOM (3 loot: full stamina, +25 HP, instant — the Inn-restores-stamina duty). Module: KITCHEN (4 timber + 2 stone, 10s) unlocks COOK; the Boar Stew recipe is taught by Marla's "A Proper Stew" quest. Eating stew = full hunger + the food buff (+10% power, 120s, one active, replaces rather than stacks) — the first compounding layer live.

Tier 1 — Roadside Rest (Era 1 / Copper)

Construction: logs, fieldstone, cloth. Shell function: rest — recovers stamina + some health. NPC: any recruit (innkeeper).

ModuleEffect
KitchenServe meals → food stat buffs (Q1) from Farmer/Fisherman ingredients
CellarFood storage; slows spoilage (upkeep efficiency)

Ships with: 2 basic meal recipes. More are collected — travelers teach them, rival-city loot includes cookbooks.

Tier 2 — Traveler's Inn (Era 2 / Iron)

Upgrade cost: iron fittings, cut stone, time. Category unlocks: lodging — visitors start arriving.

ModuleEffect
Guest roomsWandering NPCs and traders stop over — the recruitment pipeline: hire them, or buy recipes/goods
BreweryDrinks: short social buffs + steady money income

Tier 3 — Great Inn (Era 3 / Steel)

Upgrade cost: steel fittings, glass (Engineer), time. Category unlocks: the common hall — city-level effects.

ModuleEffect
Feast hallRaises the city's morale anchor (Morale (city mood system)); hosts the "feast" morale-shock action
Rumor boardVisitors leave map intel — points of interest, rescue leads, rival-city hints (exploration synergy)

Tier 4 — Grand Lodge (Era 4 / Mithril) — Journeyman required

Upgrade cost: mithril fittings, instruments (Blacksmith), time.

ModuleEffect
Premium kitchenQ3 meal buffs; two-course meals (bigger single buff, still one food slot)
Traveler's suiteAttracts Journeyman+ visitors — the recruitment pipeline's quality rises with the inn

Tier 5 — The Hearthstone (Era 5 / Aetherite) — Master required

Upgrade cost: aetherite, capstone goods, time.

ModuleEffect
Aether kitchenQ4 meal buffs (top food tier)
Hero's rest"Well-rested": resting here grants a bonus buff; rare chance a Master NPC visits

Inputs / outputs summary

Template notes proven here

Open questions

Prototype v0.1.49 (2026-09-06) — the room and the prayer scale with the era: World.room_hp() = 25 + 25·(era−1), room_feeds() from Era 2, room_buff() 1.05 for room_buff_time() 180 s from Era 3 (only if better than the active meal buff); pray_ward() = 1 − 0.05·(era−1) from Era 2 for 120 + 60·(era−1) s (only if better than the active tonic); service_era_cost() = era−1 added to both prices. Building. service_blurb(sid) feeds the dialog button text and toasts.
Prototype v0.1.59 (2026-09-11) — recruitment is loot (owner: "the design was primarily the player finding/rescuing NPCs"): the four camps' captives are the Era-1 keepers (captive_npc miner / shopkeeper / farmer / woodcutter on the camp records; Npc.captive → RESCUE recruits a keeper as keeper, later captives are villagers); Ironhold's prison frees World.next_prisoner() — the first unrecruited era-eligible of PRISONERS (mason, alchemist, jeweler, engineer, enchanter, scribe) — else a villager. The Inn is the SECONDARY channel: VISITOR_EVERY 180 s, INN_ARRIVALS (herbalist, weaver, miller, fisher, drillmaster) first, then anyone still missing so a run never dead-ends. Earlier draft of the same note (inn-first) follows for the mechanics: owner: "hard to judge pacing when the player is dropped into a town full of NPCs". World.FOUNDERS (innkeeper, smith, priest) start in town; city.recruits grows via World.recruit(id); while the Inn stands _visitors_tick seats the next of World.ARRIVALS (era-gated by the keeper's building) as city.visitor every VISITOR_EVERY 90 s; the Town spawns the guest at VISITOR_SPOT by the inn door with a "!" marker; the quest dialog shows RECRUIT/LATER for a visitor; Building. keeper_ready() gates start_build and the plot dialog. --built / recruit_all() seat everyone; load_game reconciles old saves (built plot ⇒ keeper recruited). Only recruited people can be appointed mayor.
Prototype v0.1.60 (2026-09-12) — the player is the founder (owner: "No founders. The player is the founder. Game needs to start with the player saving someone. That person and the player decide to search for more people to start the town"). World.FOUNDERS is empty; city.intro = "ambush" on a fresh city; new_game / a fresh Town redirect to the wilds at INTRO_SPAWN (-880, 10) where the Arena spawns two bandits (camp_id "ambush") and Marla as a captive; World.ambush_broken() gates her rescue; rescuing her recruits the innkeeper, sets intro done and auto-accepts quest the_others (kind "recruit", count 4 — Player.quest_progress reads city.recruits.size()). Ansel is a found hermit at a wayside stone (-120, -520): COME TO TOWN recruits him. Camp captives: bandit → smith (Orrin), north → miner (Bram), south → farmer, west → woodcutter; PRISONERS now starts with shopkeeper (Wren). Old saves get intro = "done". Debug: --no-intro on the town.
v0.1.61 (2026-09-12) — strict (owner: "Make it strict, keep your softener"): next_visitor() = INN_ARRIVALS only (era-gated), plus a camp-held keeper ONLY if camps[camp_holding(id)].breaks >= 1 (the camp was broken at least once, so the rescue could have been missed). Ironhold's prisoners never come by inn. World.camp_holding(id) reads the fresh camp records' captive_npc.