Companions

Two halves: the Player Guide is everything you need to play. There is no help screen in the game — this page is the manual, and every rule and every number lives here. The tooltips in the game are short on purpose: they name the thing, its value and the one rule that matters, and leave the rest to this page. The Developer Reference below it maps each mechanic to its files, seams, tunables and console commands.
What changed in v0.26.0 short form
Everything this build brought, one line each — so this page says what it is before it says how the game works. The long form, with every reason and number behind them, is CHANGELOG.md in the repository.
v0.26.0 this build 2026-10-28
Changes
- Changed: world sounds at the normal zoom, and the silent rows made audible
- Added: the dragon — fear, death, blight and terror (B8.9)
- Added: supply lines between named bases (B3.2)
- Fixed: wildlife is wary of every companion, not only the first (B1.7)
- Added: instruments on the chart (B11.5)
- Changed: the cold eats firewood
- Added: the four rules of the wild, on a parchment
- Changed: the sound library, reviewed row by row
- Fixed: foraging sounds like what is being foraged
- Fixed: no more sound storm when a save loads or a run starts
- Changed: lianas are cut, then twisted into cordage
- Changed: short, coloured tooltips
- Added: the Tooltip Desk (editor)
- Added: the Sound Desk (editor)
- Removed: the whistling wind
- Changed: ROADMAP_BETA's summary keeps only the count
- Added: F11 shows what is sounding, and why (dev builds)
- Added: the game is heard — 165 new sounds from one library
- Fixed: the river is quieter, fades with distance and stops when you zoom out
- Added: the chart — survey the island, ink it at a chart table (B11.1–B11.4)
- Fixed: a fire that fails to light for want of flint says so
- Changed: the tutorial's night is a lesson of its own — with a task
- Changed: the tutorial's camp wants three beds and a whole roof
- Changed: the tutorial's scouting lesson says to gather on the way
- Removed: the F1 help screen — the wiki is the manual
- Changed: the tutorial shows several task groups at once — and the axe asks for wood
- Changed: the tutorial's food lesson asks for a drink too
- Changed: the tutorial explains automation properly — and sets tasks for it
- Changed: the tutorial's needs press half as hard
- Changed: the cold kills more slowly, and a body warms up faster
- Changed: a finished campfire has to be lit
- Changed: a newly learned card points at the rule editor
- Changed: arrows are quicker to make, a bow slower
- Changed: the overgrown temple looks like the jungle inside
- Changed: the wreck looks like a ship inside
- New: the Tutorial difficulty — learn the game on a small island in plenty
- Fixed: you enter a dungeon at the south end of its first storey
- Changed: a fished-out water reads red in the info panel, a thin one yellow
- Fixed: the levelled earth a closed room stakes can be built by hand
- Added: what is equipped shows in the pack; the equipment row names durability
- Changed: a workshop order no longer shuts the rule program out
- Changed: every tool carries its own condition; eating a fresher batch eats THAT batch
- Changed: companions start empty-handed; the knife joins the kit
- Changed: no axe, no tree — and the branch
- Changed: a level-up pays 3 attribute points, and you can see them
- Changed: lighting a fire fails far more often
- Changed: the gatherer's hut gathers up to a limit
- Added: big game fights back, and the wound it leaves
- Changed: bears and wisents warn at any approach
- Added: wolves shadow the party in far snow
- Changed: twigs and leaves come back
- Fixed: a companion no longer starts the run cut off on an islet
- Changed: Camp stands directly under Build in the build menu
- Fixed: Tab with a group selected steps on from the companion the window shows
- Changed: the creator of a new run is three pages; each companion may bring one start item
- Changed: every seed is its own island now
- Changed: the title screen opens on Hard; a Hard run chooses its landing and its season
- Added: the island's seed and a preview of it, on Hard
- Added: you can see a drought and a flood on the water itself
- Changed: one companion per latrine, and the rest queue
- Changed: a Free time rule sends them home
- Fixed: a scrollbar no longer touches the window's content
- Changed: the companion window is one size for all eight
- Fixed: a waterskin filled at still water came up clean
- Changed: a stack in hand can be carried to any spot on the map
- Added: the moon and its phases
- Changed: the ship in the floe and the overgrown temple are drawn in detail
- Fixed: loose ends of the closed map edge
Fixed
- The rule editor wrote the wrong sensor for Relief and Hygiene
- A rare engine error from an animal that had not been set up yet
- Rain no longer drips off a roof that is not there
Overview
What the game is, and the shape of a run.
You control a party of three companions from an RTS-style top-down view: box-select, right-click to command. There is no player avatar — the three are equals, and the party grows to at most eight by taking in wanderers you meet (see Your party). Every one has the full set of survival stats and can die individually; losing one is meant to feel tragic. On the hardest difficulty that loss is permanent (see Difficulty & saving). The only threats are nature — food, water, temperature, weather, seasons and distance — plus wildlife that defends itself when hunted or crowded, helps itself to an open camp at night, and strikes whoever steps on it (the snake in the jungle, the scorpion in the desert). Nothing ever hunts the party and nothing ever attacks your base.
A run is a cycle of three phases
- The manual opening — everything by hand, no automation. Scout for a viable site, live hand-to-mouth off what you find.
- The automated base — buildings unlock jobs, each companion's rule program runs the day, the settlement hums.
- Exhaustion → migration — the land wears out, the party packs what it can carry, treks, and starts over stronger: skills, equipment and recruits persist, the place does not. Each of the first three years brings a harder winter than the one before.
The map is 768×768 cells — 2.25× the ground the run length was budgeted against, so how many settlement cycles fit on one is an open question rather than a settled number. Phases 1 and 2 are playable today; phase 3 is not built yet — nothing yet forces you off a working settlement, so a run ends when you stop, not when the land does.
Build your party before the world exists
Play does not drop you on the island. It opens the creator — the island, the three companions you are about to take there, and what each one carries — and you can press Start the run the second it appears. The Tutorial skips it: Play starts at once with three rolled companions.
The party you get without touching anything is already complete: three named, differently coloured people with rolled bodies and rolled dice, and nothing in their packs. Everything below is optional. The creator is three pages, leafed both ways by the step row under the title or the two arrows in the footer, and Start the run stands on every page:
| Page | What is on it | Brutal |
|---|---|---|
| 1 · The island | A seed field and Reroll island: type a number or any word — the same seed is always the same island — or leave it empty for one nobody has seen. A large preview draws the coast and the ranges at once, then the forests, lakes and rivers and where the desert, jungle, tundra, ice and bogs lie; it is coarse (a river runs down that valley, not through those exact cells) and shows no landing mark. Below it, Landing — temperate land, tundra, swamp, desert, ice or jungle — and Day 1 is in — spring, summer, autumn or winter. The run still starts on day 1 of year 1; only the calendar is shifted. A map with no such ground on its main land falls back to temperate land and says so | Locked: the island is rolled at the start and not shown; temperate land, spring |
| 2 · The companions | Names, looks and attributes — the tables below | Attributes locked |
| 3 · The kit | The three as large figures, each beside a slot for one personal start item, picked freely (two may bring the same): axe, knife, binoculars, fishing rod, bow (with 6 stone arrows), shovel, pickaxe, bedroll, flint. Click a palette tile, then the slot to put it down; a second click on the slot takes it back up, as does clicking the chosen tile again | Free — it is a choice, not a roll |
| What you can change | How | What it costs |
|---|---|---|
| Name | Type a first name and a patronymic, or press Roll name for another Nordic one. | Nothing. An empty name is filled in for you at Start. |
| Sex | The ◀ ▶ arrows. | Nothing — but it is drawn: shoulders, waist, jaw and brow all follow it, and so does the silhouette the dice would deal. It decides nothing this companion can do, and it leaves the name, the age and the dice exactly as they are. |
| Hairstyle, marks, accessories, face | Four more ◀ ▶ arrow rows — one each, the value between the arrows. | Nothing, on every difficulty. The arrows offer everything to everyone: all eighteen silhouettes whatever the sex above says. Only the dice are kept to it. |
| Hair colour, complexion, shirt | Click a swatch. These stay a grid because a palette is for comparing. | Nothing — but the shirt is the identity colour, and no two companions may share one: taking another's swaps them. |
| Age 18–60 | The slider. | Nothing. Age is not a stat — nothing gets worse with the years. It shows in the hair: grey creeps in from 38 and is full by 50. |
| Attributes | − / + per attribute. | Point buy against a fixed budget — see below. |
| The whole person | Reroll this one (that slot only) or Reroll all three. | New dice, new body, new budget — and the look goes back to the one their identity gives them. |
Every attribute bends something, and 6 is the average — a roll of 6 is worth nothing either way, and the spread between your three companions is the whole point. The range is 2 to 10. Nothing here is a party-wide bonus: a party of average people plays exactly the numbers this page quotes everywhere else.
| Attribute | What it does | Who to spend it on |
|---|---|---|
| Intelligence | Learns faster — experience on every skill, not one of them, and on the character level with it: a 10 learns 35 % faster, a 2 that much slower. | Whoever you mean to make your specialist. It compounds: the fast learner is the one who reaches the high levels. |
| Fitness | Tires slower and rests better — Tiredness falls off more slowly, and a night puts more back. | The one who walks the long errands, and the one to leave sitting up with the fire on a cold night. |
| Dexterity | Every kind of work goes faster — it multiplies the work clock of all the trades in Work & trades. | The one who will stand at a workbench. It is the broadest of the five. |
| Perception | Sight radius and weather lead. It sees further, so it uncovers more fog per step — and it moves how much warning a weather-reader gets, pivoting on 6 like everything else: a 10 is worth about 10 minutes of extra lead, a 2 costs about that much. | Your scout. High ground does not lift sight; the only other thing that does is a pair of binoculars — a start item, or bought off a trader. |
| Willpower | Carries exhaustion better — it shrinks the penalty for being tired, never the tiredness itself. | Whoever you know you will overwork. The bar still empties at the same rate; they just keep working through it. |
Willpower is the one to read carefully: it does not let anybody sleep less. The Tiredness bar and its alerts behave exactly as they do for everyone else — only the drag on speed and work is lighter.
- Everything a companion does feeds it. Walking, any trade, building, herbalism, reading the sky — the level rides the same experience the skills do, so there is no separate list of things that count. If it trains a skill, it levels the person. It is the answer to "how much has this one actually lived through", which the per-trade ladders never gave: a specialist could top one out with everything else at nought.
- A gold coin with a bright + struck into it appears on their status card the moment a point is waiting, and clears when there is none left to place, so a level-up cannot be quietly missed. Every other badge depicts the thing that is happening to a companion; this one is the only reward being held for you, and the rim is what says so. Place the points on the Skills tab, where the unspent ones stand as gold pips under the level line and each + takes one away. Nothing is ever lost by waiting.
- Points past 10 are worth steadily less. Up to 10 a point is worth exactly what this page quotes, and an average 6 is worth nothing. Above 10 the curve flattens: an attribute pulled all the way to 40 is worth about twice the best possible roll's advantage, not eight times. Specialising to the ceiling is a real decision with a falling return, not the obviously correct play.
- Levels are rare, and each one is worth having. A working companion is level 2 in the first week, 4 by day 30, 7 by day 100 and 11 by day 300; level 40 is something to hear about, not something to plan for. The first level costs 75 experience and lands on day two or three, the last step costs about 140 times that, and reaching 40 takes roughly 180,000 — the span of a long run across several settlements. That is the point: skills and levels are what a party carries when it abandons a place and starts again. Do not wait for a level-up to fix a bad winter; it will not come in time.
- Eighteen hair silhouettes, ten complexions, nine hair colours — and six marks over two pickers. Marks is what is on the skin (freckles, a scar across the brow, war paint down the cheekbones); Accessories is what is worn on the head (spectacles, a brass earring, a leather eye patch). Each group stacks, so its arrows walk the eight combinations — nothing, each alone, each pair, all three. Two pickers rather than one, because six flags in a single arrow row would be sixty-four steps. All of it is cosmetic: no look on this screen changes anything a companion can do, and none of it says what they have survived.
- The sex is drawn — and only the dice are held to it. A man and a woman are two builds and two skulls: the coat tapers from the shoulders down or from the waist out, and the jaw is squared off or tapered. The roll follows it, so no rolled woman is dealt a beard or a crest and no rolled man a bun or twin braids. You are not held to any of it — the picker walks all eighteen silhouettes for either sex, because cosmetics are free on every difficulty, Brutal included.
- Twelve faces, four of them warm. The trait you pick is the face they wear when nothing is wrong: six sober ones (stoic, grim, wary, weary, fierce, dour), four warm ones (kind, merry, wry, eager), a content serene and a level proud. A companion who is fine may look it — and one who is not never will, whatever you pick here. See Reading a companion for what trouble paints on top.
- Skills are not on offer. Everyone starts unskilled and learns by doing — only a recruit who joins a settlement that has already lived a while walks in part-taught.
- Retry after a wipe comes through this same screen. When the party dies, you do not get three strangers the dice rolled — you build their successors, and the new run claims its own save slot instead of writing into the dead one's.
Move & look WASD · F · Tab
- WASD pans the camera (free look). The view stays where you put it — selecting or commanding never yanks the camera.
- F centres the camera on the selected character and follows it (a group is framed at its centre). Tab does the same while switching companions, and Shift+Tab while stepping back to the one before.
- The camera works in the pause. Behind the Esc menu and with the clock stopped the world stands completely still, but WASD, the edge scroll and Tab still move the view, and orders are still taken — planning is what the pause is for. Nothing acts on them until time runs again: a sleeper sent somewhere stays asleep, and keeps the bed, until you unpause.
- Right-click commands every selected character (see Command); a green ping marks the ordered spot, and a green circle snaps briefly tight around the object you gave the order on. Hold right-click to steer continuously — the selection follows the cursor until you release.
- Dense forest and loose sand slow walking to 80%.
- Mouse wheel or +/- zoom; M snaps to the widest zoom you are allowed. Mouse at a window edge scrolls the view (tune speed/width in Esc → Settings → Gameplay). Over a panel the wheel scrolls that panel — it never zooms the map underneath it.
- You zoom out no wider than life size (1.0×) — until the party grows or you find a relic. Zooming in is never limited, and inside the limit the wheel is as smooth as ever. Every companion past the third lets you zoom out 20 % further: 120 % with four, 140, 160, 180, and 200 % (0.5×) with all eight. Lose one and the view closes in again by the same step — a death, a departure, and a companion lying unconscious counts as gone until they stand up. Either change is announced large in the middle of the screen, green WIDER VIEW or red NARROWER VIEW, with the step and the new limit. Two hidden finds open the view further: a clear crystal (out to 0.5×) and a seeing stone (out to 0.2×). There is exactly one of each on a map and both lie underground — the crystal prefers a cave, the stone a dungeon — and both glitter at the brightest tier wherever they are. The wider view holds only while a companion carries the relic or a stockpile holds it: drop it in the wild and the view closes back in, with a line in the log and the chronicle either way. The widest of the three counts; they do not add up — a full party of eight sees exactly what the crystal shows, and under the seeing stone the party's size changes nothing.
- There is no minimap and no overview map — you never see the whole island at once. Reading the land is part of the game, and so is losing it again.
- The time-warp bar sits top right (pause, 1–10×). Switch on Esc → Settings → UI → Show FPS and the frame rate appears directly under it — green above 50, amber above 30, red below. It updates four times a second on real time, so time warp and pause do not change how it reads. The zoom level stands on the line under it, behind the same switch — 1.10x zoom, a larger number meaning further in, and (widest) when you are at your limit.
The land is forgotten
The party does not remember ground for ever. Land you have left goes back under the fog — the way it was uncovered: along the route you walked, at the pace you walked it, never a whole region at once. It happens in two passes, and the first is the one that costs you.
- What grows and lies there goes first. Two thirds of the way through a memory a soft front walks your old route: berry bushes, hemp, loose stacks and carcasses fade out one after another, and the ground behind the front turns dim. Dim ground is ground whose contents are forgotten: you cannot click them and no rule finds them. The ground itself is still known — you can walk it, drink from its water, fell its trees, and its cave mouths and landmarks stay on the map.
- Then the ground. At the end of the memory the front comes round a second time and closes the dim ground to black, as if nobody had ever been there. A right-click on it is a plain walk again.
- Nothing is taken, only forgotten. A stack on forgotten ground still lies there, still rots and is still gnawed at. Walk back and it is all known again the moment a companion sees it.
- Coming back makes a memory last. Ground seen once holds for 4 days. Seen again later it holds 8, then 16, then 28, then 56 days — a year, then two.
- Each step needs a longer wait than the one before: the ground has to have been known for 10 hours before a look counts for the second step, then for 1, 2 and 4 days. So one long rest does not fix a place for a year — living there for a week does. Ground you use every day never fades; ground forgotten completely starts again at 4 days.
- Nothing is permanent except what you built. Your buildings, roads and floors, and the two cells around them, stay known for good — an abandoned base stays on the map. The land around a base does not: it is kept by being walked, not by a stockpile standing in it.
- A newcomer's tale fades like a first look — the patch of far ground a recruit tells you about is yours for 4 days unless somebody goes there.
One memory for the whole party, not one per companion: who is selected never changes what the map shows.
The chart — survey the island, ink it at a table K · N
What the fog forgets, paper keeps — as it was on the day somebody stood there and looked. The chart is one chart of the whole island, drawn by your own companions, and it is a picture, never knowledge: no rule reads it, it shows nobody’s position, and a patch goes stale while the land changes under it.
- Survey (K). A selected companion stands and studies the country round about, and carries it home as a field sketch in their head — no item, nothing to hand over, and lost if they die. It draws everything the party still knows within reach, in sight or remembered, never what the fog hides. Reach is 16 cells, widening with the Cartography skill to 32; a head holds about 6 000 cells (more with skill), and a full head refuses the next survey until it is inked. Surveying is hand-only — there is no rule word for it.
- The skill decides what goes on paper: the ground first; from Cartography 5 sea against fresh water and the fords; from 15 landmarks and cave mouths.
- The chart table (Build → Workshops → Care, 2×2, 16 wood + 4 stone, may stand indoors). Right-click it to ink the sketches you carry into the chart: 1 parchment + 1 ink per 2 500 cells of ground (at least one of each), out of the pack or fetched from the stores. Parchment is made at the hunting lodge (1 hide → 2), ink at the smokehouse (1 charcoal → 2). The order ends once the head is inked. A patch keeps its newest survey, so a sketch carried home late never paints over a fresher one. It is a trade, the Cartographer (5 inkings by hand for the card), but a companion can only ink their own head.
- The chart (N) opens for a companion standing at a chart table. Every patch shows the island as it was on the day it was surveyed and fades as it ages; hover it for the day.
Instruments. A tool strip beside the bare hand (which moves the paper): Ruler, Line, Mark, Note and Erase. Type a note’s text or a mark’s label in the box, then click where it goes. The ruler reads the distance in paces (one pace is one square of ground), the bearing in degrees from north (north is up) and the time on foot along the straight line, slowed by the woods, sand, marsh and fords the chart shows. It warns when the line crosses rock or water — the real walk is longer then — and says how much of it runs over blank paper. Ruled lines are kept and carry their paces and bearing; the ruler itself is not kept.
Your party 3 → 8 companions
- Characters are moved by right-click only. There is no keyboard steering — WASD always pans the camera, never a companion.
- Left-click a character to select it (green / blue / orange; a white ring marks it). Exactly one selected = it is "yours": the build ring and the context ring use it, and it walks your right-clicks at full speed.
- Drag a box to select several and command them together.
- ^ takes the whole living party (the key left of 1; ` on a US board) — it replaces the selection rather than adding to it, and the camera stays where it is, so it is a way of giving one order to everybody without losing the view you were looking at.
- Left-click empty ground deselects — observer mode; everyone just runs its jobs.
- The bottom-left panel follows the mouse and is purely a mouseover readout — it names whatever is under the cursor and says what it means for you. See What the mouse tells you.
- Tab switches control to the next companion and Shift+Tab to the one before (rebind Tab and the Shift chord moves with it); 1–8 select directly (tap twice to also centre the camera). Hotkeys are fixed for the run — a dead companion's number stays vacant, and the survivors keep theirs. The roster in the corner stands in that same order and never re-sorts itself, so a companion's place there is as fixed as its number: you learn where to look instead of re-reading the list. What needs you is said in colour on the row, not by jumping to the top.
- Companions learn by doing — walking, each trade, building, herb-work and reading the sky each grow their own skill, and nothing else does (the fifteen skills and what each buys; how they climb is under the Skills tab). A run's veterans are made, and they are what you carry to the next settlement.
- Strangers come knocking. Every so often a wanderer walks in out of the wild and waits a few days at the settlement — the event log names the direction they came from, which is your only warning to go and look. Left-click them for their panel: name, body, base attributes — and nothing else: what a recruit knows is what your settlement hands them on joining, about 70 % of its own skills and card tallies. A wanderer who has not joined learns nothing from your camp. Take them in or send them on; wait too long and they leave. The party is hard-capped at eight — a roster you can still hold in your head — and a new pair of hands eats before it earns.
- A newcomer brings a map, not just hands. Join one and they tell you where they came from — one line in the chronicle naming a direction, never a distance — and a patch of far-off ground stops being blank. It is marked explored, not visible: you get the lie of the land out there, not what is standing on it right now. That is a second reason to take somebody in even when the larder is tight — the next settlement has to be found before it can be built.
- Not everyone means it. Some wanderers are false companions: they work slowly, help themselves to the stores, and one night they are gone with whatever they could lift. Nothing on the panel gives it away — the event log does, over days (someone at the stores after dark; a day's work that came up short). A companion with Perception 8 or better names the culprit outright; below that the log only reports the deed. Expel anyone who joined from their character sheet (E) — and be wrong at your own cost.
Reading a companion at a glance
The figure on the map is not decoration. Four things can be read off it without opening a single panel — who it is, what it is carrying, what it is doing, and how badly it is doing.
- Who. The identity colour is worn loud on the scarf and the sleeve band (the coat only tints with it) and is the same colour as the selection ring and every swatch that names them in the interface. Beyond it, no two companions look alike: the build and the skull (a man tapers from the shoulders down, a woman from the waist out; the jaw is squared off or tapered), then one of eighteen hair silhouettes, nine hair colours, ten complexions and any of six marks — freckles, a scar, war paint, spectacles, a brass earring, a leather eye patch. All of it is fixed by who they are: chosen in the creator, or dealt by the dice for everyone who walked in later. Grey hair means age, nothing more — every other axis a companion keeps for life.
- What they carry. Carrying is equipping in this game, so the figure wears its own pack: an axe over the shoulder, a bow and quiver on the flank, a bedroll lashed above the shoulders, a rope at the belt, a straw hat, a lit torch — and the waterskin everybody has. Furs are drawn too: the fur coat and the white polar coat, the fur hat and the polar hood (the portrait shows the headgear), and a burning lantern or blubber lamp is carried in the hand. Whoever is holding the only axe can be spotted across the camp.
- What they are doing. All fourteen kinds of work have a pose of their own — an axe swung overhead, a pick struck at the rock face, a hoe, a hammer, a two-handed saw, a knife, a ladle stirring, a rope hauled hand over hand, a rod held out over the water, a bow carried low, bare hands feeding a fire — each with its tool drawn into the hands and taken off the back while it is used, and the worker turned to face the thing they are working on. The useful half: the pose runs on the same clock that pays for the work, so a tired, sick or unpractised companion is visibly slower at the swing. If a figure across camp looks sluggish, it is not the animation.
- How they are doing. Every companion has a permanent expression, and trouble paints over it. The face on the map and the portrait in the party row are the same drawing, so the two can never tell you different things.
| The face shows | What is wrong |
|---|---|
| Eyes squeezed shut | Health in the red — this one is dying |
| Pale skin, chattering teeth | Freezing |
| Beads of sweat | Overheating |
| Heavy lids | Exhausted — and walking and working slowly to match |
| Hollow cheeks | Hungry or thirsty |
| Eyes cast down | Despondent — Mood at rock bottom |
| Eyes wide, brow down, teeth gritted, one bead of sweat | Nothing — they are sitting on the latrine, turned to face you. The one face in the game meant to be funny; it paints over every other except a companion in real danger |
| None of the above | Nothing is wrong. What is left is their own trait, one of twelve — level, grim, wary, weary, fierce, dour, proud, the content serene, or one of the four warm ones (kind, merry, wry, eager). Trouble always paints over the trait, and no troubled face ever curves upward — so a companion smiling at you is a companion who is fine, and an unfamiliar face on the map is still one to go and check on |
The thresholds are the same ones the HUD bars colour by, so a face can never disagree with the bar above it — see Buffs & debuffs for the numbers.
The Skills tab R
One window, five tabs, their keys in one row: Character (E), Skills (R), Automation (T), Cards (Z) and Crafting (U). Ctrl+Tab walks them; every key is rebindable, and R still turns a building while you are placing one.
Every skill has 100 levels, and a level is worth +0.8 % of whatever that skill buys — so a master is worth +80 %, and the bonus grows a little every day instead of in a few jumps. A companion who works one trade all day gains a level most days: about 19 after a week, 45 after a month, 60 after two and 98 after 300 days. The climb is steep at the bottom and long at the top, and it is slower for anybody who splits the day between trades — which is the argument for specialists.
- All skills climb at roughly the same pace. Running and Resilience are trained by simply walking and by being cold or wet, which everybody does for hours every day, so each of their levels costs twice what a trade's does; Crafting costs the same double, because one kit is a long stretch of practice. Weather-reading is the exception: it is learned from what the sky shows and stays slow on purpose (see Reading the sky).
- Going up floats over the companion like a harvest's gain — +1 Foraging (12), +1 Level (5), in green. Every skill level floats; the event log keeps only every tenth, and the last.
- Three skills are rolled, and a novice fails. A cast, a bow shot and a spark each succeed or fail on the skill behind them: a first-time fisher lands 25 % of casts, a first-time hunter hits 35 % of point-blank shots, a beginner's spark takes 45 % of the time. A master: 90, 95 and 100 %. The first thirty levels buy half of the whole way, so a companion is a trained hand after days and a master after years — and a failure teaches: a missed cast, shot or spark pays extra experience, so a novice learns fast exactly because they fail. A miss says so in red where the gain would have shown (Cast failed, Shot missed, Spark failed). Hover one of the three on this tab and the tooltip says what that companion's odds are today. Choose who learns which trade — three beginners sharing one rod stay three beginners.
- Crafting decides how sound a made tool is — a beginner's axe starts at half the durability a master's has (see Tools & clothing). Making kit by hand trains Crafting, lighting fires trains Fire-making.
Building is trained by building — raising, mending and taking down, on every route (your order, a rule, a claimed task). It also earns three times as fast per second of work than the others, and that is arithmetic rather than generosity: every other skill is fed by something that can fill a day, while a 3×3 hut is about a minute of hammering and then it is finished. Paid at three times the rate, a builder climbs at a lumberjack's pace.
A life before the run — and something they still want
Every companion carries a backstory and one or two wishes. Both are on the character sheet (E): the backstory as a headline with the whole of it in the tooltip, the wishes as a line each with the wish's own words. A stranger you are deciding whether to take in shows both on their panel, and "Wants: …" is the one argument there that is not a cost.
A wish is what that person wants out of this run, in their own words, drawn out of where they came from: the inlander wants to see the sea, the fisher's child wants to be a fisher worth the name (Fishing 50), somebody who slept rough wants a bed of their own. There are 27 of them, and about six companions in ten carry two.
There is no quest list, no objective marker and no progress bar — that is a rule, not an omission. Hover the wish and it says plainly what would satisfy it, and that is the whole interface. A granted one gets a ✓, a line in the chronicle on the day it happened, and a green star badge; one being carried unanswered wears a hollow violet star.
Wishes come true by the thing actually happening — reaching a skill level, standing a building, coming through a winter, sitting out a storm, walking into a cave, laying eyes on the sea, filling a larder, the party growing. Nothing grants one on request, and the game will never send you on an errand.
What wishes never do: touch health, work speed or skills, and they can never push anybody into refusing to work — that starts at Mood 15, and no ceiling sinks below 30 however much is stacked on it. They colour a run. They do not break one.
Command — right-click RMB
Right-click sends every selected character; what happens depends on what you click. Your word is absolute — a character never breaks off an order, even to save itself. It posts a red warning when critical and carries on; abort the order yourself if you want it to live.
One order leaves the program's errands running: work at a workshop. Every other order overrides the whole rule program until it ends. Right-click a workshop (a trade's building, or a bench with orders on it) and the order overrides only the program's work — its errands still fire as they would off duty: drink, eat, warm up, cool down, a herb, a torch, the latrine, a wash. The bench waits underneath and the companion goes back to it when the errand is done; the activity line says so (Rule 2: Drinking — working the trade waits). It is the program, not self-care: no drink rule, no drink — with Auto off, or despondent, they work the bench until they drop. Sleep is not an errand and stays with the order.
Every click flashes a green ping at the ordered spot, and when the order was given on something — a tree, a bush, a stack lying on the ground, an animal, a fire, a stockpile, another companion, a cave mouth — a green circle snaps tight around that object for a moment. Feedback for the eye: on a crowded tile you can see what the party understood you to click, not merely where the cursor was. A plain walk onto open ground has nothing to ring and gets only the ping.
Selecting a companion shows where they are going next. A bright line inside a pale white frame runs from their feet over their whole order chain — every waypoint a bright dot in a paler ring, the last one bigger — stands for up to two seconds and fades. It comes back every time you hand out orders, so a Shift-queued chain can be checked the moment it is laid down.
- It draws the real route, and for every leg rather than only the next one: the walk bends around rivers, walls and cliffs exactly as the companion will take it. That is what makes it worth reading before a long trek — the way round a lake is the walk you are actually ordering.
- A companion running its own rule program gets the line too — for one leg. Select one working under automation and you see the same white route over the walk they are on right now, which answers the question an RTS player asks first about an automated party: where is that one going. One leg is the honest depth of the plan, not a display budget — a rule program decides its next leg when it arrives, so there is no chain to show. It goes when the walk does. A stroll is not a plan: a companion on free time carries no line, or every off-duty companion you selected would trail one.
- It lasts no longer than the plan it draws: the moment they arrive, finish or are called off, the line goes. Two seconds is a ceiling, not a wait, and a companion under no orders draws nothing at all.
- Several selected companions each get their own line, all in the same white, each starting under its own companion's feet. The two seconds are real seconds — time warp does not shorten them.
| You click… | They… |
|---|---|
| Open ground 1 selected | Walk there (paths around deep water, mountains, house walls) |
| Open ground group | Everyone walks there, on one click and with no ring in between. Two more group orders exist, from the dev console only: march (the party moves as a column — anybody more than about six tiles ahead of the hindmost stands and waits, so a party split around a lake converges instead of deadlocking) and camp (walk there and everyone carrying a bedroll unrolls it) |
| Fresh water / a well | A ring of choices: Drink (until thirst is full, then top up the waterskin), Wash (see Hygiene), Fill skin (fill the waterskin to the brim, then every water bag in the pack as far as the carry weight allows, and nothing else — filling is not drinking, so an errand to a pond never makes the scooper swallow it) or, on open water that holds fish, Fish (cast from the bank, fish after fish, until told otherwise or the pack is full of fish — it needs a fishing rod in the pack and no hut; the entry's tooltip says how rich the water is). A well holds no fish |
| The sea rod in the pack | Fish it, on the plain click — nobody can drink the sea, so there is nothing else to choose. Without a rod the click is a walk to the shore |
| A latrine 1 selected | A ring: Use it, Empty it (shovel it out and carry the night soil to the compost heap, trip after trip, until it is empty) or Open it (its store window). A full or rotted-through latrine refuses Use it at the click — see Relief |
| A latrine group | Everyone who needs to goes and uses it |
| Tree / rock / plant | Harvest into the carry (trees until felled). A full pack does not refuse the order: the companion walks over and works it, loading past the weight budget as an ordered pickup does, and says once that they are overloaded and slower. The order waits only at the +50 % ceiling, where the legs stop — take something off them and it carries on. Clearing a plot follows the same rule. A rule never overloads: a program stops at the budget. |
| A rock face pickaxe in the pack | A ring: Break stone, load after load, or Dig a mine — see Dig & trade. Without a pickaxe the click simply breaks stone |
| A cave or mine wall | Dig into it |
| A carcass | Dress it — only then do the meat, the skin and the arrow reach the pack. It takes a knife in the pack; without one the order is refused at the click |
| A bed (its exact cell) | Sleep until fully rested |
| A laid-out bedroll | A ring: Sleep, or Pick up — roll it back up into the pack, whole. One somebody is asleep on stays where it lies |
| A campfire 1 selected | Walk over and open the fire window. No ring: you decide there, where you can see what the fire holds — feed it, cook, boil, or strike it alight. Nothing goes in by itself and nothing lights on the spot: a light is tinder plus work |
| A campfire group | The unattended orders: light a cold pit, refuel from the carry or nearby stores (wood or twigs), or boil what is carried |
| A dropped stack | Pick it up into the carry. A stack that glitters is a find, not litter |
| A stockpile 1 selected | Walk there and open the transfer window |
| A stockpile group | Haul carries there and unload onto the tiles |
| Another companion 1 selected | Walk over and open the carry-to-carry transfer window — you have to hit the body, a click a tile away is a walk. The one you walked up to stops for the trade and picks their order up again when the window closes — the same target, the progress already banked, any queued waypoints — unless you gave them a new order while it was open, which wins |
| Another companion group | Just walk over. No window — a group has no single carry to trade from |
| A blue construction site | Start or join the build: fetch, deliver, raise it. Staking the blueprint ordered nobody, so this click is the only way to start one by hand |
| A job building fisher's hut, lumber camp, farm, mason's yard, hunting lodge, gatherer's hut | Work that building's trade by hand — fish that hut's water, chop, sow, mine, hunt, gather. No rule program needed: this is the manual way into every trade. It walks to the building first (which is what ties the order to that hut instead of the nearest one) and then works outward from where it stands. When the building can do anything else — a queued craft order, a worn tool to mend, produce waiting in its yard — you get a ring instead, and Work here leads it: a standing craft order never takes the trade away from you. A building with nothing else to offer orders the trade on a plain click, with no menu at all |
You can only order what you can see. On ground the party has never explored, a right-click means walk there and nothing else — no drink ring over a lake under the black, no harvest on a tree nobody has found, no left-click panel on a store or a fire out there, and no blueprint staked on unseen ground: choosing where to settle is meant to be scouting. Ground you have explored and still remember answers everything even when nobody is looking at it. Memory has two edges, though (see The land is forgotten): on dim ground the water, the trees and the cave mouths still take an order, but a bush, a patch or a stack that stood there does not — and ground that has gone black again is unexplored again. Wildlife is stricter still: an animal can only be clicked while its cell is in live sight, because a remembered deer is a deer that has long since wandered off. Walking into the dark is never gated; that is how you scout.
A companion who cannot see takes one step per order. Two places are blind: underground with no light, and the thick heart of a fog bank on the surface. There a click far away does not walk anybody out — every order carries them one cell toward the click, at a hand's pace, and a rule's walk is held the same way. A short red line over the companion says why (“Thick fog — one step at a time”, underground “Too dark — one step at a time”), and the log names the way out once per fog. What ends it is light: a torch or lamp alight in their own hand, a mate's within its reach, or a burning fire's glow. In fog a roof ends it too, and so does the edge of the bank, which you can feel your way out to; it lifts the moment the fog is seen to thin, not hours later at the weather's turn. A thin mist changes nothing. Send nobody on a long errand into a fog without a torch in the pack.
Clicking the same job again does nothing — on purpose. A right-click on the work a companion is already doing (the bush they are picking, the site they are building, the fire they are boiling at, the animal they are hunting) is ignored for that companion instead of cancelling the order and starting from zero, so the half-done work keeps its progress. It counts while they are still walking there, too, which is when the impatient second click usually happens. A group is decided companion by companion: click one bush with three selected and the two elsewhere set off while the one already picking is left alone. Anything else still redirects instantly, and a plain walk order is deliberately exempt — clicking the ground again re-paths, because that is the reflex for somebody who looks wedged. And if one really is stuck the no-op lifts: once a companion has actually been going nowhere for two seconds, a repeat click is obeyed and paths them afresh — so clicking again can never be a dead end. The click still flashes its green feedback and redraws the waypoint line, so the gesture confirms the order rather than doing nothing visible.
Shift+right-click queues the order as a waypoint. A plain right-click replaces the whole queue. On a target with several verbs — water, a latrine, a bedroll, a fallen companion — the ring opens as on a plain click and the verb you pick joins the queue (its tooltip says Queued), so “fill the skin, then empty the latrine” can be planned; a target with a single verb queues at once. A stack within the hand’s reach still takes the chord as a grab. The ring can be worked from the keyboard. Nobody looks after themselves at all — drinking, eating, warming, sleeping and taking medicine happen only on your order or through the rule program (T).
A bed someone else has claimed refuses the order: it is dropped with a warning rather than silently ignored, so a sleep command that "did nothing" is worth a look in the event log.
An order with the materials nowhere is refused at the click. Build, repair, craft, light a fire or feed one: if what it needs is in neither that companion's pack nor any store the settlement can reach, the order is turned down where you gave it, the reason goes to the event log, and nobody takes a step. It is asked per companion, so ordering three onto a site sends the ones who can carry something and tells you about the ones who cannot. It refuses only what is genuinely nowhere — a wasted walk is a small price, an order wrongly refused is not. Queued waypoints (Shift+right-click) are never refused: they are a plan for later, and today's empty stores say nothing about it.
What a left-click opens
Right-click orders; left-click a thing to look at it. Every visible thing on the map answers with the small tile window, and a building opens its own panel as well. The panel opens without touching your selection, so you can read a fire while a companion keeps working. This is also the only place the ranges below become visible.
Every piece that stands on its own has a window — a workshop, a fire, a well, a bed, a table, a chest, the planning table. A wall and a door have none. Clicking the same spot again walks down what is stacked there: the roof (while it is drawn), what stands there, the floor, the room — and the click after the last one closes everything. A roof tile and a floor each open a window of their own.
| At the foot of a piece’s window | What it does |
|---|---|
| Move | Hands you a ghost of that very piece (R turns it); a click stakes a blueprint at the new place. It costs work, never material. The old piece keeps standing and working until the new one is up, and the same button takes a staked move back, so a cancelled move loses nothing. A store’s goods move with it; a fire takes its unburnt wood along but arrives cold. Not offered on what is part of the place: walls, doors, pillars, floors, paths and roads, roofs, bridges, stockpile zones, yards, fields and the camp flag |
| Demolish | Marks just that piece to be taken apart — the same mark the build ring’s Demolish sets. Press it again to keep the piece. Offered on a roof tile and a floor too |
| Clean this room | Only on a piece standing in an enclosed room, under the same readout of the room its own window gives |
The tile window — left-click any thing you can see
A tree, a berry bush, a dropped stack, an animal, a carcass, a building, a construction site, a cave mouth: left-click it and a small window opens below and to the right of the pointer, a little way off, so it never covers what it describes. It is the long form of the corner readout below — and the place to look something up before you spend a walk on it.
- A portrait on top, the numbers under it. The portrait is the thing alone, drawn large on a plain plate. Under it stands the corner readout's verdict, then the thing in numbers, and last what to do with it.
- What the numbers are: what an item weighs, feeds and how long it keeps; what a bush or patch gives, how much it holds and when it grows back; how fast an animal runs, how shy it is, what it eats and whether it raids; what a building is for, what it reaches, its condition and how long before it rots; what a site still needs. A long entry scrolls; the window itself is a fixed upright card.
- A green ring marks the thing it means — around the whole building, or walking along with the animal.
- It stays where it opened. Move the mouse and the corner readout follows it; the window keeps the clicked thing and keeps its numbers up to date, so you can hold one bush's numbers beside what the corner says about the next. When the thing is gone — felled, picked up, torn down — the window closes. An animal that walks out of sight hands the window to the ground it was clicked on.
- Three ways to close it: the ✕ in its top right corner, Esc, or a left-click anywhere else — and a click on another thing opens that one instead.
- What opens nothing: bare ground (grass, sand, water, a road, a floor), unexplored ground, and anything underground, where the corner readout describes the floor only. A click on a companion still selects them, and a wanderer or a trader opens their own panel.
- It takes the Info panel size under Settings → UI.
What the mouse tells you
The bottom-left panel is the mouseover readout and nothing else — it says what is under the cursor, never what you could press. The headline is the thing you are pointing at: a tree, a fire, a stockpile, a companion. The ground only gets the headline when nothing stands on it, because "plains" is rarely the answer to the question you were asking. There is no grid coordinate — a cell number was never a decision.
- One key line, then the reason. The first line is the decision, short enough to read without stopping (60 characters at most): „Undrinkable — the sea is salt“, „Burning — 4 h of fuel left“. Underneath it, smaller and dimmed, is what that means for you.
- Exactly one word is coloured, and it is the word you are there for — the count, Undrinkable, Burning. When a tile has nothing to report, the line is plain grey: the absence of colour is itself the reading.
- A hovered companion's name wears their own identity colour, so the readout and the roster agree about who you mean.
- It quantifies what it names. What felling this tree will leave behind, how far a fire or a pile reaches and who it serves, how long a worn patch needs to come back, what a road is actually worth in walking speed — and that a wanderer is not yours until they join.
- A remembered tile says so. Explored ground you are not currently looking at reports what you last saw, and the readout labels it a memory rather than passing a stale count off as a live one. Unexplored ground says only that nobody has been there — and so does ground the party has forgotten.
- A campfire — the same window a companion walking over opens (see the fire window): the fire drawn at the top, which of the three states it is in, how much longer it burns, its three slots, and a Light it button on a cold pit. It draws two circles on the map: an amber action ring and, well inside it, a smaller red warmth circle. Warmth is the small one — standing in the amber ring does not thaw anybody, and in bad weather that circle pulls in further still (the panel draws the pinched circle, not the fair-weather one).
- What the fire's window does not show. Two things: the tasks it posts (a fire calls for refuel and boil — nothing in the game prints a posting) and the night watch. That second one matters, so read the night arithmetic below and do it yourself: a campfire filled to the brim burns about 7 in-game hours, a night lasts 12, a straw bed gives no warmth of its own, and a sleeping companion does nothing at all — so a party that all lies down around a fire on a cold night wakes up short a companion. Load the fire at dusk. The standing keep the night watch order (hold position in the warmth, feed the flame all night, end at first light, pay for it in tiredness the next day) can only be given from the dev console.
- A well — what it serves and its action ring.
- A farm — the crop picker and a line saying what the field is doing, how far along and what it wants next. This is the only place the crop is chosen, and it shuts the moment the first cell is sown.
- A kitchen, or any workshop with a queue — the recipe list: one click puts one on the order book, and the building finds its own hands.
- A stockpile — what lies on it, how full its tiles are, and its acceptance rules.
- A construction site — materials delivered so far, progress, and the Cancel button; cancelling drops everything already delivered on the spot as loose stacks, so nothing is lost.
- A room (left-click inside it; the last layer of the click) — six coloured lines: temperature, cleanliness, comfort, roof, furniture and size, see Furnish a room.
- A lean-to (a click under a roof that has no walls, or on one of its pillars) — a Lean-to window carrying the “Show roof” switch. While it is open that roof is held solid on screen, even with the party asleep under it.
- A camp flag — the base’s name and how far its ground reaches, see the building table.
Merely hovering a building draws its action ring too, without opening anything.
Gather — order it right-click
Gathering is ordered, never held. Right-click the target and pick the work from the ring; the companion walks there and a ring fills over its harvest time. There is no gather key — every harvest target has a right-click order, and that order is the only way in. Gathered items go into that character's carry, limited by weight (~40 kg, raised by Strength). An order to harvest is never refused for a full pack: the companion walks over and works anyway, loads past the budget the way an ordered pickup does, and says once that they are overloaded and slower. The order only waits at the +50 % ceiling, where the legs stop — take something off and it carries on. A rule still stops at the budget.
- Trees → wood — with an axe, or not at all. A tree is felled with a usable axe in the pack or it stays standing; a right-click without one breaks a branch off it instead (with an axe the ring offers both, Fell the tree and Break a branch). Oak, kapok and mahogany want an iron axe; stone and flint fell pine, birch, spruce and palm. Each forest tile is one tree; the whole wood stock comes down when it falls (the tile turns to grass) and the pack takes what it can. Strikes are banked — stop and finish later. Four species by shade: birch (4 wood), pine (8), spruce (10), oak (14) — an average tree is a single packload, so a night at the fire eats most of a pine and the woodline retreats from a settlement fast. The jungle grows none of the four: its wood is palm (6), mahogany (10) and the rare giant kapok (14).
- The deep wood opens into glades. A forest five or more cells deep is broken by small clearings of about fifteen cells, and they are where the wood's own pickings are: twigs, leaf piles, mushrooms and the odd hazel grow on open ground beside a tree, so inside a wood they stand in the glades and on the edge, nowhere else. Food there is as thin as on any forest edge — a glade is a place to light a fire and fill a pocket on the way through, never a larder.
- Rocks → stone take ~10× ordinary work and a cast of the line nearly as long — plan whole days; a mason's yard / fisher's hut put workers on them around the clock. Rust-red iron outcrops and black coal seams on some mountainsides are worked by the same right-click — what they are for is in Dig & trade.
- Herbs, berries, roots regrow in place, but never in winter, and slowly enough to plan a walking circle around: herbs ~3 days, a berry bush ~2 days for the 5 berries it holds, hemp ~5 days. Foraging fatigue (below) stretches all three by up to 4×. Bird nests (spring only, gone for good when robbed), mushrooms (summer+autumn, forest edge), hazel nuts (all year, never rot, but a cleared bush is finished and the next grows out of sight), mussel beds (salt coast, year-round, spoil fast).
- Reeds — the poor end of a settlement is made of them. Beds stand one cell from open fresh water, tighter to the bank than wild hemp (3 cells) or wild rice (2), and never on the salt coast. 4 to a cut, 8 to a bed, and they regrow in 3 days — the fastest-renewing plant on the map. They are a material, not a food: no nutrition, no shelf life, almost no weight. They buy a reed basket (10), a fish trap (12) and a rush floor (2 a cell), none of which needs a workshop.
- Wild plants grow in STANDS, not scattered singles. The same number of plants stand together: a grain field ~10, a wild-rice reed bed 8, a hemp thicket 6, a mushroom troop 6, a bramble 4, a rock outcrop 3, flint in threes. About half the herbs and half the outcrops, a third of the hemp and a quarter of the flint still stand alone — but the two cereals never do. Regrowth returns into the stand, so a grove stays a grove across seasons. Twigs, leaf piles, loose stones, hazel, mussels, wild roots, cacti and bird nests still lie about singly. This is what makes where you settle matter: scout before you build. The one region without stands is the jungle: its plants stand singly, scattered evenly from edge to edge, and regrow in every season, winter included.
- The land wears out where you pick it. Berry bushes, herb patches, root beds, hemp stands and mussel beds remember being stripped: each unit taken leaves foraging fatigue on that patch, and a worked-over patch regrows up to 4× slower. Hover it to read the state — "picked over (40%, regrows in 3.2 days)". No dice: the wear fades on its own over about a week, in every season, so it is a tally of recent pressure, not a scar. Forage in a circle, not in one spot — and the longer a base stands, the further you walk for a full pack.
- Free ground pickups (a half-second stoop): twigs & leaf piles at the forest edge, loose stones on the plains. One node is one item — a campfire is three twig nodes, and they are everywhere. Twigs and leaves come back: a storm's end litters all of them again, around your base too, and between storms a few fall every day out of sight (bare ground is fully littered again in about twenty days). Loose stones never return.
- Branches (1 kg) — the rung between twig and log, and the one wood bare hands can get. Every standing tree gives 3, one at a time, and one grows back a day; a storm also drops some at the wood's edge with the twigs and leaves. Everything that must exist before the first axe is paid in branches: the axe itself, the knife, the fishing rod, the pickaxe, the shovel, the drying rack, a pillar and the camp flag. A branch also burns, a third of a log. Walls, doors and every workshop still cost logs, so the first room waits on the first axe.
- Wild hemp → plant fibre — grows only on damp ground beside fresh water (river banks and lake shores; never the salt coast, never inland). Tall fanned stalks, regrows in ~5 days outside winter. Fibre is not string: spin it into cordage on the Crafting tab, and cordage is what a bowstring and a fishing line are made of. No hemp in reach → no bow, no rod and no axe, so it is one more thing that makes a settling site good or bad. (In the jungle a liana stand gives 3 lianas a cut, and the bench twists 3 lianas into 1 cordage — no workshop, quicker than spinning hemp, but three times the weight per cord, so twist it where it grows.)
- Hunting takes a bow, arrows and a knife (bow and arrows are made at the bench once a Hunting lodge stands; the knife needs no workshop). Deer & boars flee faster than you walk — you shoot them, and the kill lies where it fell until somebody dresses it. The shot, the two kinds of arrow, the carcass and what the Hunter rule does on its own are all in The hunt.
- Fishing takes a rod and nothing else. The rod is 2 branches + 1 cordage +
1 fish hook, and the hook is whittled first from 1 twig — both on the bench
from the first morning, no workshop. With a rod in the pack, right-click any water that holds
fish and pick Fish (on the sea, which nobody can drink, the plain right-click
already does it): the companion walks to the bank and casts, fish after fish, until
told otherwise or the pack is full. Rods are per companion — three fishers need three
rods — and a rod takes both hands: it refuses while one of them holds
a torch.
- The fisher's hut is for the rule, not for the hand. It is what lets a Fisher rule or a posted task fish, on the one water it adjoins, and what gives the catch a yard. Without a rod the rule stays blocked and the hut's call for hands is left for whoever is equipped.
- Read the water before you cast. Hover a water (or the Fish entry) and it grades the ground: rich (about 200 fish or more when untouched — only a real lake), good (60 and up — a river at its best, the sea), modest (20 and up) or poor, and whether it is full, thinning with the share left, or fished out — red when fished out, yellow once under 30 % of its fish remain. A thin water gives up less to every cast and needs days to come back.
- A cast can come up empty, and for a beginner it mostly does: a first-time fisher lands about 25 % of casts into a full water, a master 90 %; rain on the water adds a little. The first thirty levels of a hundred buy half of the way, and a fumbled cast pays extra Fishing XP — a red "Cast failed" floats where the fish would have shown.
Twenty-seven creatures roam. Deer, wild boar and wisent are the meat you live off; a turkey or a hare is a small meal, a squirrel or a small bird a mouthful; beavers keep to fresh water; badgers are slow enough to corner; foxes, raccoons and wolves are the ones you meet rather than hunt; and wolves and bears hold their ground. Wolves belong to the tundra — the cold north is where they start, which is exactly where you go looking for pelts. Nothing out there hunts you — but six of them fight back and two lie where you might step.
The boar and the deer, by name. The wild boar is dark and bristling, tusked when grown, and its piglets are striped; it runs in sounders of up to six. Deer come as stags (antlered), hinds (bare-headed) and spotted fawns. The antlers are only the picture: a stag and a hind are the same shot and the same yield.
Eleven of the twenty-seven live in the far country and nowhere else — they are born in their region and thin out toward its edge.
| Region | Animal | What to know before you draw |
|---|---|---|
| Ice | Seal | Lies within a few cells of the ice's open water, alone or in groups of up to four. Shy, slow on land and fast in the water — get between it and the water. One stone arrow. The only prey the polar bear has |
| Ice | Polar bear | The largest hunter on the map. Hunts seals, does not run from a hunter, three stone arrows — and it raids an open camp at night like any bear |
| Ice | Snow hare | The hare in white: as fast, as solitary, and hard to see against the snow |
| Ice | Arctic fox | White, hunts the snow hare, and helps itself to stores left open |
| Ice | Snowy owl | White, solitary, stoops on the snow hare. The north's source of feathers |
| Jungle | Tapir | The large game: solitary, flees, two stone arrows |
| Jungle | Monkey | Troops of four, hardly shy of a settlement at all — the jungle's thieves, back at an open camp as soon as a raccoon would be |
| Jungle | Parrot | Flocks of four. A mouthful of meat and the jungle's feathers |
| Jungle | Jaguar | Hunts tapir and monkey, does not run from a hunter, three stone arrows. There are very few |
| Jungle | Snake | Lies still and strikes whoever walks onto it — see below |
| Desert | Scorpion | The same, on the sand |
Most game does not stand around in herds. Only crows, pigeons, parrots, boars, monkeys, beavers and wisent live in groups; turkeys and seals keep company more often than not, in groups of at most five and four; hares and deer are alone nine times in ten; wolves are half in a pack and half alone; and bears, badgers, foxes, raccoons, squirrels, eagles and vultures are always solitary. The sixteen of the home country are spread evenly over the whole map — there is no herd to walk into and no empty quarter either, so plan a hunt as a walk between single animals and expect a lone wolf as readily as a pack. Every species breeds back to a ceiling of its own accord and will cross open country to find a mate, so hunting is sustainable — but a species is only ever as many as the map can hold.
The biggest animal in the game does not run from you. A wisent herd grazes the open plains and simply stands there — it never flees, so it is the easiest big shot on the map: one flint arrow, or three stone ones — but the first stone arrow, or a step within about three tiles, and it charges. It pays accordingly: 20 meat and 3 hides off one animal, and the slowest dressing there is. Be careful what you take. There are few of them, a cow carries her calf for eight days, and a herd hunted out will not be back inside a season. At the other end a hare bounds — so does a squirrel — and the hare is the fastest thing on the ground: nothing on foot ever catches one, so it is the bow's quarry or it is nothing.
What an animal is worth, and what it takes to bring it down. The meat is the same whoever shoots; the right-hand column is how many hits it takes with the cheap stone arrow — a flint arrow is always one.
| Animal | Meat | Stone-arrow hits |
|---|---|---|
| Wisent | 20 | 3 |
| Polar bear | 18 | 3 |
| Bear | 16 | 3 |
| Tapir | 12 | 2 |
| Deer | 10 | 2 |
| Wild boar | 8 | 2 |
| Jaguar | 8 | 3 |
| Seal | 8 | 1 |
| Wolf | 6 | 2 |
| Turkey | 5 | 1 |
| Badger, beaver | 4 | 1 |
| Hare, snow hare, monkey | 3 | 1 |
| Fox, arctic fox, raccoon | 2 | 1 |
| Squirrel, pigeon, crow, vulture, eagle, parrot, snowy owl, snake | 1 | 1 |
Every animal on the map but the scorpion is worth killing, and some of them are worth killing for what comes off them. A carcass pays in meat, and — the birds excepted — in one of four different skins, which is what the winter is made of.
| Yield | Comes off | Weight | What it is for |
|---|---|---|---|
| Pelt | Bear, wolf and jaguar (2 each), fox (2 — the best return for its size), badger, beaver, raccoon (1 each) | 1.4 kg | Fur hat, fur coat — the warm half of the set |
| Ice pelt | The white fur of the ice and of nothing else: polar bear and arctic fox (2 each), seal (1) | 1.4 kg | The polar set — the furs a night on the ice takes |
| Hide | The grazers: wisent (3), deer, wild boar and tapir (2 each) | 1.2 kg | Tanned into leather at the hunting lodge — 2 hide → 1 leather, 22 s |
| Small pelt | Hare, snow hare, squirrel and monkey (1 each) | 0.3 kg | Mittens and the uppers of the boots |
| Feathers | Crow 5, parrot 6, snowy owl 6, vulture 7, eagle 8 — and nothing else, pigeons and turkeys included. They also lie on the ground where crows, vultures and eagles live, 1–3 at a time. | 0.01 kg | Arrows — 2 to a bundle of four |
| Blubber | Seal 6 slabs, polar bear 10 — on top of the meat and the pelt, and off no other animal | 1 kg | The fire that needs no wood: a slab burns a third longer than a log at a third of the weight, in a campfire or hearth, and it fills the blubber lamp. One seal keeps a campfire through a night — which is what turns the ice from a round trip on carried wood into a place a party that hunts can stay |
So the fastest thing on the map and the smallest are both worth a shot: two hares and a squirrel are a pair of mittens. And the tanning makes the hunting lodge a real workshop — it has a craft queue, and hide only becomes leather there.
You are not the only hunter, and each one hunts by name. Size is not the whole story: a fox takes hares, squirrels, pigeons, crows and raccoons and nothing else — the turkey and the badger sit right among those five on size and are simply off its menu. A wolf takes deer, and only within 4 cells, so a deer that keeps its distance is safe from one standing in plain sight. An eagle stoops on a hare, grabs it, carries it off and lands somewhere to eat. In the far country the lists are as short: the polar bear takes seals, the arctic fox and the snowy owl the snow hare, the jaguar tapir and monkey. They hunt each other and never you, and a predator that has eaten goes hungry for three days before it hunts again, so the wood is not a slaughterhouse. It does mean the hares near your camp have somewhere else to be.
The dice fall before the chase does. The moment a predator locks on, the outcome is rolled — once, before a single step — and everything you then watch is the animation of a decision already made. A won roll lifts the hunter just clear of its quarry; a lost one pins it just under, and the prey gets away. So there is nothing in a chase to read and nothing to act on: you cannot save the hare by watching harder, and a hunter that gives up did not run out of legs. What you can see is the effort — a hunter puts on a brief burst of speed over and over through a chase rather than running flat out — and, at the end, a kill that bleeds and is eaten where it fell. Walk up on most predators and they abandon the carcass.
Something else is eating your hazel bushes. Squirrels and raccoons work a hazel bush exactly as your own hands do — one unit at a time, on a day-and-a-half cooldown apiece, and the nut is simply gone. A bush you had counted on for the walk home can be empty when you get there, and nothing tells you it happened.
| Who | What they take |
|---|---|
| Deer, hares, wisent, turkeys, pigeons, squirrels, tapirs | The crops: a ripe field, and berries, herbs, mushrooms, roots, vegetables, wheat, rice, nuts, bananas, breadfruit, sugar cane and cocoa wherever they lie |
| Raccoons, foxes, badgers, boars, bears, crows, vultures — in the jungle monkeys, on the ice polar bears and arctic foxes | Anything edible, spoiled food included |
| Wolf, eagle, beaver, jaguar, parrot, seal, snow hare, snowy owl, snake, scorpion | Nothing |
- What counts as “in the open”: a ripe field, a stack dropped on the ground, and every store — stockpile, basket, box, drying rack, fish trap, compost heap and a workshop's yard.
- It takes, it never destroys. One mouthful a visit: a stack is gnawed down a unit at a time, a field grazed a cell at a time — and a grazed field is still a field. Sprouts are safe; only a ripe field can be eaten. Nothing on any of these paths can touch a companion.
- A closed ring of walls is the whole answer, and it needs no roof. A door counts as locked — an animal has no hands — and the ring keeps the birds out as well. A ring with a gap protects nothing, and a field cannot be walled at all: bring a ripe harvest in rather than leaving it standing.
- Catch it and it bolts. Walk an awake companion to within about 4 cells and it runs — every animal, a bear, a polar bear or a wisent included, which run from nothing else — and it does not try again for 1½ to 5 days, by species (a crow, raccoon or monkey soonest, the bears last). A sleeping companion scares nothing, which is exactly why the night is when they dare.
- How you find out: the first loss of each kind, per species, is a red alert; the rest go to the wildlife feed, and the chronicle (J) keeps both.
- It is about where you walk, not where you stand. The strike is for a moving companion who passes within about three quarters of a cell. Somebody asleep or at work beside one is left alone.
- They can be seen. Both are drawn on the ground like any animal and hover like one — a bite is a path that was not read. Zoom in before you cross jungle floor or open sand, and route the order around what you see.
- One strike, then it is gone from the spot: it darts off and cannot strike again for hours.
- The snake costs 8 Health at once and leaves snake venom, which gets worse for as long as the bitten companion stays on their feet and, left long enough, kills. Stop walking: bed rest and herbs turn it.
- The scorpion costs 4 Health and leaves a sting that never kills and passes by itself in most of a day — but until it does, the walk and the work are a third slower. Rest and herbs shorten it.
No bird flies at one flat speed — the pace rises and falls within a flight, out of step from bird to bird, so a flock does not read as parallel lines. A bird is never caught by chasing it.
Beavers swim, and a beaver colony is never finished. Water is not a shortcut a beaver takes — it is the slowest walker on the map and swims at 1.4× its walking pace, so the river is how it gets anywhere. Mountain, cliff and a wall you built still stop it. Its lodge is a construction site like any other, gated by material and labour: 12 logs, carried one at a time in the mouth, and it rises only while somebody is working it. Then the colony moves: it picks a further crossing nearby, spends 8–10 in-game days raising a new lodge and dam there, and the day it moves in the old pair fades out and is gone. Then it does it again, back where it came from, and it alternates between the two sites forever.
| What a colony may hold at once | Why it matters to you |
|---|---|
| 1 lodge and 1 dam | The cycle moves a home, it never adds one — a river cannot silt up with beaver works. |
| At most 10 trees down (about seven in practice) | A beaver-felled tree grows back in 5 in-game days, same species, same stock, same cell — so the forest's standing total never changes. Only beaver-felled ones: your own axe is unchanged. |
Birds are not everywhere, and one of them walks. A turkey is the one bird that stays on the ground — it walks the plains and is worth hunting, which the little ones are not. Pigeons and crows keep to the low country, eagles to the mountains and vultures to the desert; each stays inside its own region, so seeing one tells you where you are. A bird on the wing is out of reach of anything on the ground; one that has landed is not, which is the only chance a fox ever gets.
Some things on the ground glitter. A find wears a breathing halo and a few sparks that flare and die around it, and from the second tier up the stack casts real light — which only shows once it is dark. It glitters in every place an item is drawn: on the ground, in a pack slot, in a panel row, on a stockpile tile. What glitters is the discovery, not the goods: the wood cached beside an old camp's cold hearth shines because finding it mattered, and it is ordinary wood the moment you carry it home. Half a screen away on dark ground, that is the difference between a landmark and nothing at all. The brightest thing you can find is a word: the scraps of automation grammar lie out there under the same sparkle.
Game leaves a settlement. Every wandering step a herd takes leads to the quieter of the ground it can see, so deer and boars drift off your built-up walking circle over the seasons. It is a drift, not a flight (they bolt only from a companion at close range), and it is not the same for everyone — pigeons and crows do not mind a settlement at all. Hunting turns into an expedition: one more reason for the waterskin, the bedroll and, in time, an outpost.
The hunt — bow, arrows, knife and the carcass
A hunt is three things, and each can be the one that fails: an arrow that kills, a shot that lands, and a body somebody walks to and dresses. The bow (3 wood + 1 cordage) and the arrows are made at the bench (U) once a hunting lodge stands; the knife (1 branch + 1 stone + 1 cordage) is on the bench from the first morning. Every shot spends one arrow, hit or miss, by hand and on the rule alike; with an empty quiver a right-click on an animal just walks you over to it. The bow takes both hands — it refuses while one of them holds a torch or a lamp (Tools & clothing).
| Arrow | One sitting makes four, from | What a hit does |
|---|---|---|
| Flint arrow | 1 flint, 2 feathers, 1 wood | Kills anything it hits, in one shot |
| Stone arrow | 1 stone, 2 feathers, 1 wood | Kills small game outright. A deer, boar, tapir or wolf takes two hits, a bear, polar bear, jaguar or wisent three |
- You never pick which arrow to shoot. The hunter nocks the cheapest one that still kills what it is aiming at — stone into hares, flint into big game — and with only stone in the quiver, stone. The Hunter rule chooses the same way.
- A hit that does not kill wounds, and a wounded animal bolts — except the six that fight back, which turn on the archer. The wound heals a day after the last hit, so the second stone arrow has to follow the first. Hover big game and its last line says how many stone hits it still takes, and whether it is already wounded.
- The shaft needs wood — twigs will not do — so a quiver has an axe behind it, and feathers behind that.
- The bow wears: 60 arrows loosed, then it is mended at the hunting lodge for 1 cordage — a worn-out bow does not shoot (Tools).
- Wound one without killing it — a stone arrow in big game — and it charges the archer. A flint arrow kills cleanly and nothing happens. Shoot one wolf and the pack near it comes too.
- Walk up to one that is wounded or standing over a kill and it warns first, bristling; step back and it ends there, stay and it comes.
- A bear, a polar bear or a wisent needs no reason: walk within about three tiles of one and it turns, warns, and charges if you stay. The bear warns for only about 1½ s and comes fast; the wisent warns for about 4 s and comes slower. Both still outrun a companion.
- One blow, then it is gone: 12–34 % of Health at once by the animal, a dent in the Mood, and an open wound — see Stay alive.
- What does not set it off: sleeping near one, chasing a raider off your stores (it still runs), and a young animal.
- Read it before you order: hovering one of the six reads Fights back in amber, red while it is dangerous (Dangerous — it keeps its ground for the bears and the wisent), the tile dossier says how long it warns, and the hunt line says what the first stone arrow buys.
- A Hunter on a rule will not shoot big game with an arrow that only wounds it. Give the trade flint arrows, or hunt it by hand and take the risk yourself.
By hand, drawing the bow is the shot. Embody the hunter and hold H; the arc round the reticle fills as the string comes back.
| Phase | Reticle | What a shot loosed now is worth |
|---|---|---|
| Drawing — the first 0.9 s | Grey, and swimming wider than at rest | Weak and short: loosed at once it carries about 3 cells, slowly |
| Full draw — the next 1.3 s | Green, shrunk to under a third of its sway | The whole reach, about 10 cells. This moment is the shot |
| Held too long | Red, shaking worse than when you started | Right-click to let down, and draw again |
- Hunting skill shrinks the sway and lengthens the steady moment — to about 2.3 s at level 100.
- The line to the reticle shows how far this draw throws, with a red stub where the aim lies beyond it. A hit is aim, not luck: lead a moving animal.
- The arrow drifts downwind, and the drift builds with distance: on a long shot in a blow you must aim off, and a practised hunter drifts less than a beginner.
- Rock stops an arrow; trees do not.
- A shot spooks the game around it — one clean opening shot, then it bolts.
- Game is wary of every companion, awake or asleep, and runs from the nearest one — a deer at 5 cells. A full draw reaches further than that, so the bow is not hurt by it; what is, is a gatherer or a fisher wandering across the hunting ground and scaring the game off before the hunter is in range. Keep the other trades off the hunter’s ground.
Arrows come back, if you walk for them. A shaft comes down where it was aimed — just past the reticle, beside the animal — and lies there as an ordinary ground stack, right-clicked to pick up. It is drawn over the tree crowns with its count, so it can be found in a wood. A miss survives nine times in ten; an arrow that struck survives about two times in three. The arrow of a kill stays in the body and comes back with the dressing, unless it broke on the bone.
- No knife, no dressing — and no hunt. Without a knife in the pack the right-click on a carcass is refused with the reason, and a Hunter on the rule neither dresses nor shoots: the rule reads blocked and says a hunter needs a knife. A knife handed away on the walk drops the order where it stands. So every hunter carries one, and so does whoever you send out to bring in a kill.
- The stone knife is 1 branch + 1 stone + 1 cordage at the bench, no workshop. It is one-handed, so a carcass can be opened beside a burning torch, and it wears with the dressing. An iron knife from the smithy does the same work half again as fast; with both in the pack the better one cuts.
- Do not leave it. A carcass rots 30 in-game hours after the kill and everything in it is lost except a lodged arrow, which is left on the ground. The coat dulls when half that time is gone, flies gather over the last fifth, and hovering the body says how long it has.
- The clock is the climate's. A body rots by the ground it fell on: about 10 hours in the jungle, 30 at home, 300 on the ice. A jungle kill is dressed now or not at all; a seal shot on the ice will wait for days.
What the Hunter rule does by itself. An animal right-clicked by hand gets the same rolled shots, at that one quarry, and the order ends with the kill — the dressing is a second click.
- In this order: dress a kill in reach, shoot, fetch spent arrows, wait — all of it only with a knife in the pack. A carcass in reach is work with or without a bow; an empty quiver is still work while spent shafts lie on discovered ground in reach, and the Hunter collects them unasked. With no arrow anywhere and nothing to dress, the rule has no work and the program falls through.
- The shot is rolled, and the arrow really flies — the animal falls when it arrives. The hunter closes to 8 cells and looses about every 2 s. A beginner hits only 35 % at point-blank and about 23 % at the edge of that reach; a master 95 % and about 62 %. The first thirty levels of Hunting buy half of that way, and a miss teaches: a red "Shot missed" floats up and pays extra Hunting XP, so a novice costs arrows and learns fast. It cannot lead a shot or aim off, so a gale costs it up to 40 % of its hits — a windy day simply costs it arrows. A quarry not down after 14 s is given up.
- With nothing in sight it takes a stand instead of falling through to the next rule: the nearest known forest cell (failing that, anywhere outdoors — never under a roof), reading "No huntable animals in sight - waiting". A stand that shows nothing for about half an in-game hour is left for another, up to 40 cells from the first. A lodge with a work zone keeps its hunter inside the zone and on one stand.
- The kill goes to the lodge's yard when it is within arm's reach of the dressing, otherwise into the pack.
- The Hunter card is marked by the dressing, one mark an animal — not by the shot.
Stay alive
Health, Thirst, Hunger, Tiredness and Temperature drain over time; Mood, Relief and Hygiene are the three bars that never cost Health. Every companion is one row in the top-left shelf, and the row is built so you never have to read it — only notice it:
- The hotkey digit, the portrait, and the name.
- The one word the companion's whole state comes down to — well, thirsty, starving, freezing — backed by that stat's symbol. The gravest thing comes first, by what kills soonest — and when several things are wrong the word takes turns between them (“badly hurt”, then “starving”, then “thirsty”): a red word stays up 3 seconds, a yellow one 1.5, and a trouble that turns red jumps the queue. The turns run on real time, so they read the same at 10× speed and while paused.
- A second line: what it is doing right now — the rule it is running, the order it is carrying out, the need it broke off for. It turns yellow when the answer is no work — and it distinguishes the two cases: automation off reads "Off duty", while a running program in which nothing applies reads "Free time (no rule applies)", naming the gap in the program, which is the half you can act on. Either way they are at free time and strolling, not frozen. An idle companion is still a lost day, and this is the line that says so.
- Eight pips on the right, the whole stat set at a glance — if you switch them on: they are off as the game ships, and Settings → UI → Small stat bars on companion cards brings them back. They fill in one neutral grey and a stat that runs out turns its pip into a solid red block — the emptier the stat, the more red there is. Temperature's pip is a marker that rides up and down, because it has a cold end and a hot end. Without them the word, the stripe and the frame still say who needs you.
- A stripe down the left edge carrying the worst of those troubles, whichever word is up: dark while all is well, yellow once any bar is under 25%, a pulsing red — and a red frame — when one is under 15% and life is at stake. A calm party is a shelf of plain grey rows.
Hovering a row unfolds it to the eight full bars, underneath the row rather than in place of it, so the line you were reading stays put — and hovering is the only thing that opens a card, so the corner never rearranges itself when control moves. The rows stand in hotkey order and never re-sort. Buff/debuff badges beside the card say what is on a companion — green = boon, red/magenta/violet = malus. A red cracked heart is the one that means somebody is dying right now: it is on for exactly as long as something is taking Health off them, and hovering it names both the cause and the one thing that ends it (see Buffs & debuffs). When any Health falls into the red, the whole screen sounds the alarm (red rim, heartbeat) so an off-screen death can't be missed.
A bar is a scale, not just a length. Quarter notches let you read „three of four“ instead of guessing at two thirds, and the first notch is the line that matters: every bar turns yellow under 25% and red under 15% — on the sheet, on the roster and in the status word alike. Yellow is also exactly where Hunger, Thirst and Tiredness start to slow a companion, so the colour and the cost begin together. Mood and Hygiene turn yellow but never red, because neither can kill. Temperature marks its comfort zone with two brass lines instead: it has a cold end and a hot one.
| Danger | What it does | The fix |
|---|---|---|
| Thirst empty | Kills in ~half a day (fastest). A full bar empties in 6.1 in-game hours at rest — about 2 litres a day, and more in the heat or on a day spent walking and working | Drink at fresh water / well, or from the carried skin (sheet tool-slot double-click); the skin holds 3.0 L — about one day’s drinking, so it is a day’s range and not a store |
| Hunger empty | Starves over several days; a full bar empties in 7.0 in-game hours at rest | Eat from carry (Eat rule / sheet double-click); cook & smoke a surplus. Every kind sates its own amount (meat 60, berries 25) — and berries also water you (+5 thirst a handful), the one food that gives a sip back. A meal stops at „full enough“ — see below |
| Tiredness low | Under 25% the legs and hands slow, down to walk −25% and work −40% at an empty bar; empty, it drains Health | Sleep in a bed (heals Health too); on a trek, unroll a bedroll. Sleep long and in one piece — the rate climbs to +40% after 8 hours (see below). A sleeping body burns food and water at half rate — the same half in a bed, on a bedroll or on bare ground, so a missing bed costs rest, warmth and healing, never rations |
| Hunger or Thirst low | Under 25%: work −10%, walking untouched — the way to food is not what gets punished. Empty: the drag grows with every hour the bar has stood empty, up to walk −25% and work −40%, reached after 4 h without water or 28 h without food — on top of the Health drain above | One sip or one bite ends the empty stage at once; the 10% lifts over 25%. Hover the bar or its badge: it says how much slower, when the bar runs empty or how long it has been, and what ends it |
| Temperature | Below 4°C or above 35°C drains Health | Warm at a fire or in a heated room; cool at water or a well — and in the heat, get into shade |
| Wet (rain, swamp, jungle, a bed in a puddle) | Feels up to 8 °C colder, −5% speed, sinks Mood | Dries at a burning fire or under a roof (~4h) — details under Wet |
| Fever | From cold, wet and exhaustion. −25% work, drains Health if untreated; can kill | Bed rest, and a herb dose you give (below) |
| Dysentery | From untreated water. −20% work — and it makes you thirstier, the trap that feeds itself | Bed rest + a dose; then clean water only |
| Food poisoning | From raw or spoiled food. −20% work, and it makes you thirstier and twice as tired. It never takes Health by itself — and it never passes by itself either | Herbs, fastest in a bed (one night); cook or smoke meat first |
| Marsh fever | From mosquito bites in the jungle (in a swamp only after weeks). −30% work, drains Health sooner than a plain fever; can kill | Fever bark — herbs do nothing for it. Sleep under a roof or beside a lit fire and it never starts |
| Snake venom · scorpion sting | From walking onto a snake (jungle) or a scorpion (desert). Venom worsens for as long as you stay on your feet and can kill; a sting never kills but slows walk and work for most of a day | Venom: stop walking — bed rest and herbs. Sting: it passes by itself. Both can be seen on the ground beforehand |
| Open wound | From an animal that fought back. Slows the walk and the hands, stops Health coming back on its own, and festers while it is carried about untended — far enough gone it drains Health | Herbs and a bed turn it; both together in about half a day |
| Still water (lake/pond) · any water in the jungle | Every untreated gulp builds the dysentery load (~27 per litre — about 3.7 L breaks out). In the jungle the rivers are foul too, and so is a well dug there | Drink at running water or a well; or draw it and boil it in a fire's pan. In the jungle: boil it, bring full skins, or catch rain in a barrel |
| Mood low | Under 60% work slows, to −25% at Mood 30 and −50% at empty; the legs never do | See Mood — hover the bar for what is holding it down |
| Relief empty | They foul themselves where they stand: a fifth of the Mood bar, 40% of Hygiene, a pile of night soil. Never Health | Send them to a latrine in time — nobody goes unasked |
| Hygiene low | Under 50% it holds Mood down. Never Health, never work directly | Send them to wash — nobody washes unasked |
| Despondent (Mood under 15%) | Refuses its whole rule program — Eat and Drink included — until Mood is back over 25%. This is how a companion starves beside a full larder | Direct orders only — nurse it dry, warm, fed, healthy |
Two sicknesses do not move without their medicine at all. Food poisoning yields only to a dose: one night in a bed with herbs in the body, or a whole day of herbs on your feet — sleep without them merely holds it where it is. Marsh fever is the same, and herbs do nothing for it: its medicine is fever bark, stripped from the fever tree that grows in the jungle (a trader sometimes carries it). Bark is herbs and more — a dose of it treats everything herbs treat as well, so there is never a wrong one to reach for. Double-click it like herbs; a Take herbs rule reaches for the bark first when a marsh fever is on, and a healer brings the right one, out of their own pack or the stores.
A body mends itself only while nothing at all is wrong with it. Health then climbs on its own — awake as well as asleep, bed or no bed — as long as every need bar, Mood included, sits over 15%, the body is comfortably warm and no sickness is on it. That trickle runs at 30% of a good bed's healing rate, and it never adds to a bed's: a sleeper mends at the bed's pace, not at both. Sleeping in a proper bed is still how somebody actually gets well; the waking trickle is what stops small damage from being permanent before there is a house to sleep in. Hover a hurt companion's Health bar and it says which of the two it is doing — the promised climb, or the one thing blocking it ("Thirst below 15%", "too cold", "sick") — and a green heart with a rising arrow joins the badges while it mends.
What hurts you doesn't let you heal: an empty Thirst/Hunger bar, or a freezing/ overheating body, suspends even a bed's healing — the sleeper rests off tiredness but wakes no healthier. Winter is the exam: farms lie dormant, plants stop regrowing, no animals are born. And the exam gets harder for three years: each winter is 1.5 °C colder than the one before and storms come more often — up to half again as many — until the fourth winter, from which it holds. The first winter is the mildest a run sees. Stockpile in autumn; nuts, fishing and mussel beds work year-round.
Read the temperature bar before it bites. It shades its comfort zones — blue too cold, a dark neutral for all right, warm brown too hot — and carries two marks: the thick one is the body temperature that actually damages Health, the thin pale one is what the body currently feels and is drifting toward. When the thin mark runs into the blue well ahead of the thick one, you still have time to do something about it. Thin red ticks on the bar mark where Health starts to go (below 4 °C, above 35 °C).
Hover the bar and it does the sum in °C. It says what the spot feels like and adds it up step by step — the air, the land, the wind, wet clothes, clothing, a hot meal, then a fire, a heated room or water, and shade — green where a step helps, red where it hurts, and then the body's own temperature and how long until it gets there.
A body takes minutes, not seconds, to feel the cold. The thick mark follows the thin one at about 12 °C an in-game hour, so a short errand across a winter yard — the well, the stores, the walk from the fire to bed — costs no Health, while a night outdoors or an afternoon's work in the snow still kills. Coming back is three times faster than going: beside a fire a frozen body is out of the damage band in about half an hour. And the cold kills slowly — 5 in-game hours from full Health at its very worst (heat the same) — so a night in the open in deep winter is still fatal, but a companion caught out has time to reach a fire.
A Warmth rule is written in °C (−15 to 40) and reads the body, the thick mark: WHEN Warmth < 6 → Warm up UNTIL Warmth ≥ 11, WHEN Warmth ≥ 32 → Cool off UNTIL Warmth < 23.
The ground decides how fast food dies. In the jungle food ages three times as fast — in a pack, in a pile, lying on the ground — so what grows there all year rots within days, and a larder built there is a compost heap. On the ice it ages at a tenth of the normal rate: meat carried north keeps, and comes home as fresh as the ice left it. Everywhere else the shelf life is the one on the item. Hover a cell to read what its ground does to food.
A cooked dish is food that does something afterwards. Anything off a kitchen leaves a warmth, a work-speed, a walking-speed or a sleep boon in whoever swallows it — and nothing in the game hunts for one on a companion's behalf, so a hungry companion will happily eat the stew you were saving for the person walking into the snow.
And a meal takes time, the way a drink always has. The bar fills over seconds, bite by bite — a fish is about 6 s, an empty stomach about 12 s — and the companion stands still while they eat. The food leaves the pack at once but arrives in the bar gradually, so a companion sent off mid-meal has swallowed only what the bar shows. Hand-feeding chews too, and a second double-click queues the next bite rather than replacing it.
Sleep — long, in one piece, and dry
The longer a companion sleeps in one piece, the faster they recover. The rate climbs steadily from lying down to +40% after 8 hours — for Tiredness, and for the healing a bed gives. A green moon badge shows it paying, and the Tiredness bar's tooltip says the same. Being woken starts the count again from nothing, so two four-hour halves are worth much less than one night. That is the whole price of a short night for the body: there is no sleep debt, and the next day's Tiredness drains exactly as fast as any other day's. What a waking in the dark still costs is Mood — so feed and water them before bed.
| Where they sleep | What the night gives |
|---|---|
| A bed | Full rest, and it heals Health |
| An unrolled bedroll | 70% of a bed's rest, and less healing. Left in the pack it counts for nothing |
| Bare ground | The least rest, no healing, and a Mood lid in the morning |
Mood — what a hard life costs
Mood never touches Health. What it costs is work — and, at the bottom, the rule program.
Mood has a ceiling, and everything a companion goes without lowers it. Each deprivation is worth points, the points add up, and the ceiling is 100 minus the sum. A dry companion's Mood climbs toward its ceiling — a whole bar in 24 h — and never above it; Mood standing over the ceiling is pushed down to it at a bar in 10 h. So none of these is a hit you sleep off: each is a lid that lifts when its cause is answered. Hover the Mood bar — it lists every factor with its points and its remedy, and under Moving the bar right now every cause with its own points per hour: wet (and how soaked), ill, the latrine's smell, a homely room, being dry, a wish granted or left waiting, and the slide down to what the list above allows. The line underneath is their sum — the rate the bar itself is moving at — so you can see which single cause is worth answering first. Last comes what the Mood is costing in work.
| What weighs on them | Points off the ceiling | Answered by |
|---|---|---|
| No free time | Starts after 24 h without an hour off, grows over the next 48 h to 18 | An hour of free time — a rule, or simply nothing to do |
| Nobody to talk to | Starts after 24 h without half an hour awake within 5 cells of another awake companion, grows over 48 h to 15 | Working or resting near somebody. Never counts in a party of one |
| No cooked meal | Starts after 36 h, grows over 72 h to 15 | One mouthful of anything cooked, or of a dish |
| No meal at a table | Starts after 36 h, grows over 72 h to 10 | Eating with a table and a chair or bench in the same room, or within 5 cells of where they eat — so put the table by the larder |
| Last night under the open sky | 12 | A bed inside a room |
| Last night on bare earth | Up to 8, by the share of the room that has no floor | A boarded floor |
| Last night without a bed | 8 | A bed, a straw bed or an unrolled bedroll |
| Woken in the dark | 12 a waking, fading over 24 h; several stack, to 30 | Leaving the night alone — see below. It also throws away the depth the sleep had built up |
| Hungry, thirsty, tired (each) | 6 while the bar is yellow, 12 once it is red | Eat, drink, sleep |
| Too cold or too warm | 6, and 12 in the red | Fire, a warm room, shade |
| Hurt | 8 under half Health, 15 under a quarter | Rest and treatment |
| Mourning | 20 for each companion who died, fading over 5 days; at most 35 | Time |
| Unwashed · a dirty room | Up to 40 · up to 30 while inside — see Hygiene | Washing · sweeping |
| A wish left waiting | 12 each | Granting it — see wishes |
- The factors alone never push the ceiling below 30%. Only the things that drain Mood carry a companion further down: being wet, an illness, the smell of night soil, and fouling themselves.
- Under 60% Mood the hands slow, evenly down to −25% work at Mood 30 and −50% at empty. The legs never slow for Mood, and it multiplies with every other slowdown.
- Under 15% a companion is despondent — it gives up on its whole rule program, eating and drinking included, and takes direct orders only, until Mood is back over 25%. A companion starving beside a full larder is this before it is anything else: the rule editor then marks every one of their rules despondent and names the Mood that gets the program back. Because the factors stop at 30, a neglected life costs a quarter of the work but never the program on its own.
- A sweet thing lifts Mood at once: a bite of sugar cane is worth 4 points, a cocoa bean 6. It moves the bar and never the ceiling, so a treat on top of a good day keeps and a treat instead of one is gone within hours.
- The clocks start the day a companion joins, so a recruit owes nothing for the weeks before.
Relief — everybody has to go
Relief is the seventh bar. It falls on its own and faster on everything eaten and drunk, so a well-fed working day empties it about once; a night in bed costs about a twelfth of it. It never costs Health.
- Nobody goes unasked. Build a latrine and send them: right-click it → Use it (a group simply goes), or write an Off to the latrine rule — WHEN Relief < 60% → Off to the latrine. A visit that has started is finished, whatever the rule's number says by then.
- A latrine seats one. The companion stands exactly on it; whoever arrives later lines up beside it in order of arrival and moves up each time the seat frees — and Relief keeps draining in the line, so a long queue can end in an accident. With several latrines in reach each companion picks the least busy once, on setting out — a free seat before an occupied one, an occupied one before one with a line, the nearest among equals, counting those already on the way — so a group spreads out, and an order onto a full or derelict latrine goes to a neighbour with room. A long line is answered with a second latrine.
- A visit only counts below 70% Relief. Above that the order is declined with a line in the log, nobody walks, and nothing is earned.
- The log warns once when a companion drops under 30%.
- At empty they foul themselves where they stand: a fifth of the Mood bar gone at once, 40% of Hygiene, a pile of night soil on the ground — and, indoors, a dirtier room. The bar starts again from full.
- A latrine takes eight visits and is then full, and a full one is no better than none. The night soil has to be carried to a compost heap, where two units make one fertilizer: right-click the latrine → Empty it, take it out through Open it, or leave it to a caretaker. Nothing may be put into a latrine.
- Night soil smells. Within 2 cells of a pile on the ground, or of a latrine with anything in it, Mood drains — the more there is the faster, worst at a full latrine's worth, where it would take a whole bar in 90 h. So build the latrine away from the beds and the table, and empty it before it fills. A pile in the open soaks away in two days; a latrine never empties itself.
Hygiene — bodies are washed, rooms are swept
Hygiene is the eighth bar. It runs down in about four days of plain living and faster while the hands are in dirt: stone and field work triple the pace, felling and hunting make it two and a half times, building doubles it; fishing and gathering stay clean. It never costs Health and never slows work by itself, and its bar turns yellow but never red.
- Under half, an unwashed body holds Mood down — up to 40 points off the ceiling at an empty bar.
- Nobody washes unasked. Right-click fresh water or a well → Wash, or write the rule: WHEN Hygiene < 40% → Wash UNTIL Hygiene ≥ 95%. A wash from filthy takes about a quarter of a minute.
- A wash gets you wet. Open water soaks you almost through, a well about a third — so in the cold, wash at a well and beside a fire.
- The salt sea, midwinter ice, a dried-out pond and a water barrel are no wash.
Rooms get dirty from the people in them. Every companion inside treads dirt in — half as much asleep, twice as much coming in wet, twice again unwashed — a little dust settles every day, and an accident indoors leaves a great deal at once. It shows as specks on the floor; left-click the room and its window reads it out as the Cleanliness line. Three people living in a twelve-cell room make it worth sweeping about every five days.
- Grime eats the room's comfort, share for share: a room at 40% grime lifts 40% less.
- Past 30% grime it holds down the Mood of everybody inside — up to 30 points off the ceiling at full grime, and only while they are in it.
- Sweep it: left-click the room → Clean this room sends whoever is selected. A room past 30% also posts itself as a task, a Clean a room rule sweeps the nearest such room, and a caretaker does it unasked. Sweeping costs the sweeper a little Hygiene.
Mosquitoes summer · swamp and jungle all year
The only hazard on the map that costs you a night rather than a hit point.
You can see them, and you can walk round them. Clouds of mosquitoes hang over the land as a drifting haze with specks moving inside it — scattered at random, never round, and of every size from a patch crossed in three steps to a ragged mass nine cells one way and under four the other. They drift, slowly, so a gap you noted this morning has moved a little by evening. Nothing marks them on any panel: what you can see is the whole of the warning.
| Where | When |
|---|---|
| Swamp · jungle | All year, and far thicker than anywhere else — a bog is what they are for, and the jungle has no winter to stop them. |
| Every other biome (forest, plains, hills, tundra, coast) | Summer only. |
| Desert · the ice | Never. Nothing breeds on sand or on ground that never thaws. |
Bites add up while you walk. A companion standing in the thick of a swarm is covered in about three in-game hours; a crossing costs a fraction of that, and the fractions add. The itch then takes roughly 30 in-game hours to fade — deliberately longer than a night, so a badly chosen camp costs more than one evening and moving away pays back over two.
Smoke is the answer, and it is what a campfire is for in high summer. Stand within 2 cells of a lit fire and they stop biting outright — the one use a fire has on a hot night when nobody needs the warmth. A roof does the same. A forest canopy does not, and that is on purpose: a still wood is where they live, and a tree that stopped them would switch the mechanic off across most of the map.
| What changes it | Effect |
|---|---|
| A lit fire within 2 cells, or a roof | Stops the biting. The badge stays while the itch lasts, but nothing more is being added. |
| Forest canopy | Nothing. Deliberate — see above. |
| Rain, hail, storm | Grounds them; snow too, and a drought thins them right down. |
| Cold air | Below about 8 °C they stop, and they only bite in earnest from about 16 °C up — which is what makes a tundra afternoon and a tundra night two different places. |
| The hour | Worst at dawn and dusk, quietest at midday; a warm night still bites. |
The badge tells you both halves. A rose bitten badge beside the HUD card and under the portrait in the character sheet (E) says how far gone the itch is, what it is costing tonight and how to stop it. Companions say so too — a swat and a curse on walking into a cloud, and a complaint the morning after a night spent scratching.
Buffs & debuffs — the exact numbers
Every condition a companion can carry, what it really costs, and how to end it.
Conditions show as badges beside the HUD card and under the portrait in the character sheet (E). The colour tells you the kind before you read anything: green = a boon, and magenta / blue / violet / red = something is wrong. Every badge’s tooltip is coloured the same way: what it costs in red, what ends it in green, the background in grey — and the number in the head runs yellow to red as it nears that badge’s own breaking point, so a trouble that cannot kill never turns red, while a boon that is running out goes green → amber → red. Every slowdown below multiplies with the others: soaked, exhausted and ill at once is a companion barely moving.
| Badge | What triggers it | What it costs | How it ends |
|---|---|---|---|
| Taking damage (a cracked heart) | Health is being drained at this moment. Exactly four things do that and there is no fifth: an empty need (Thirst, Hunger or Tiredness at nought), the sky's own wounds — hail, or a storm, on somebody standing in the open — a sickness past its damage line, and the cold and heat bands (below 4 °C / above 35 °C). | Health itself. The badge carries no penalty of its own — it is the warning, and it is the same answer the death line would give, so it can never name a different culprit than the obituary. | The moment the drain stops. It has no timer. Hover it: the tooltip names the cause and the single remedy — "…is TAKING DAMAGE from the hail — Health is falling right now. Under a roof, into a cave, or under the forest canopy." |
| Overloaded (weight) | A pack loaded past its weight budget (40 kg base, +0.8% per Strength level → 72 kg at level 100, and +90 kg more behind a handcart). Only you can cause it — every automatic path stops at the budget. | Walking speed falls linearly from 100% to 0% between the budget and +50%. 20% over = 40% slower. At +50% the badge turns red and the companion cannot move at all. Work is untouched. | Take something out of the pack. Nothing else clears it. |
| Wet (soaked) | Rain soaks; snow and hail leave you dry on purpose (hail wounds instead — a winter that also soaked would double the lethal season). A storm soaks half again as fast as a middling shower, and fills the rain barrels with it. A blizzard does neither — its snow lands dry. Standing in open rain soaks from dry in 30 min in an average shower — nearer 18 min in a downpour and over 1.5 h in a drizzle, because it scales with how hard it falls; a swamp or the jungle does it in 1.5 h by the ground alone, wherever no roof is overhead. Asleep in a puddle soaks in about 3 h, roof or no roof — see Sleep. In the jungle fur soaks faster (the Sweltering row below). | −5% walking and −5% work when fully soaked, and it feels 8 °C colder soaked through (fewer while merely damp — the badge says the degrees) — which is what actually kills, because cold is what the fever load feeds on, and out in a hard frost it is far worse than the frost alone. The degrees come off before a fire or a heated room is counted, so either one warms a wet companion fully; it still takes its hours to dry them. Mood sinks too. | Under a roof or at a lit fire: 4 h from soaked. Outdoors it dries too, but only as fast as the sky allows: 10 h × weather × temperature (nothing at 5 °C, full at 20 °C, up to 150% in real heat). The sky is worth a great deal: anything falling dries nothing at all, an overcast day runs at 35% of the reference pace, and a clear sky — sunshine or a summer drought — at 170%, so a bright afternoon gets a soaked party dry while the work goes on and a grey one leaves them waiting for a fire. A bog or the jungle cannot be dried out of in the open — get under a roof, or leave. |
| Fever | The cold-and-wet load filling up (exposure, soaking, exhaustion). The load is deterministic — there are no dice, and it clears on its own while its cause stays away. | −25% work, −10% walking at full severity. Drains Mood from full to empty in 18 h. Past severity 0.75 it drains Health, killing from full in 24 h. | 24 h of bed rest, or 12 h of herb treatment — they stack. Get dry and warm first, or it simply comes back. |
| Dysentery | Drinking still water (a lake or pond — a river or a well is clean). Every litre of it adds 27 to a 0–100 load; at 100 — about 3.7 litres, a day and a half of drinking nothing else — it breaks out. The load is billed per litre, so a skinful drawn at a pond is four fifths of a dose. | −20% work, −15% walking. Mood from full to empty in 12 h. Past severity 0.80 it kills from full Health in 30 h. And it drains a full Thirst bar every 8 h on top — which is the trap: bad water makes you thirstier, and thirst sends you back to the bad water. | 30 h bed rest or 15 h herbs — and clean water from then on: boil it, drink from a river, or dig a well. |
| Food poisoning | Eating raw meat, or food past its best: 5% per meal in the yellow freshness band, 50% in the red. Companions never eat raw meat on their own; that one is a hand-fed mistake. | −20% work, −15% walking at full severity, and it wrings the body out: Thirst drains up to 50% faster and Tiredness up to twice as fast. It starts mild and never takes Health by itself — what kills is the water nobody fetched. | Only medicine moves it. A dose and a bed: 8 h from full. A dose on your feet: 24 h. Sleep without a dose only holds it; awake without one it worsens over 36 h. |
| Marsh fever | Mosquito bites in fever country: the jungle fully, a swamp faintly. A load like the others — about 36 h covered in bites in the jungle — and it falls by itself under a roof or beside a fire. | Heavier than a plain fever: −30% work, −15% walking, Thirst up to 30% and Tiredness up to 50% faster, Mood from full to empty in 14 h. Untended it is at its worst in 20 h, and past severity 0.70 it kills from full Health in 20 h. It worsens where the air is: at full speed in the jungle, at 0.7 in a swamp, at half speed anywhere else — carrying a patient out of the jungle buys time, bark or no bark. | Fever bark, and nothing else — herbs do nothing for it. Bark and a bed: 10 h from full. Bark on your feet: 24 h. Sleep without bark only holds it. |
| Snake venom | Walking onto a snake in the jungle (or a snakes' nest in the overgrown temple). The bite takes 8% of Health at once and leaves the venom. The snake follows nobody and can be seen — read the ground. | It starts at nearly half severity and gets worse for as long as the companion stays on their feet, up to −35% work, −30% walking and Tiredness 50% faster. Past severity 0.85 — some 14 h of walking on, sooner after a second bite — it drains Health, killing from full in 30 h. | Stop walking. 14 h of bed rest or 10 h of herbs, and they stack; any sleep at least holds it. |
| Scorpion sting | Walking onto a scorpion on the desert sand. The sting takes 4% of Health at once. Like the snake it lies where it lies and can be seen. | One sting is about a fifth off the walk and off the work, easing as it fades — in the middle of a desert crossing. A second sting on top deepens it, up to a third off both. It never kills. | By itself: a single sting is gone in about 11 h, the worst case in 18 h. Rest and herbs shorten it. |
| An open wound | A blow from big game that fought back — on top of the 12–34% of Health the blow takes. A second blow deepens it. | Up to −35% work, −30% walking, and Health does not regenerate while it is open. Carried about untended it festers: past severity 0.80 it drains Health, killing from full in 36 h. A rough night only pauses it. | A bed or herbs turn it: 30 h of bed rest or 20 h of herbs from full, and they stack. |
| A bad burn | The dragon’s fire, standing in the open within a cell and a half of a strike. The strike also takes 10 Health at once, never the last point. | −40% work, −25% walking at full severity, Thirst up to 40% faster, Mood from full to empty in 30 h. It starts just under half severity and never kills on its own if tended: untended it crosses 0.8 in about 60 h and then drains Health, killing from full in 30 h. A second burn on top lands past that line at once. | 30 h of bed rest or 20 h of herbs, and they stack. Keep the burned one under a roof while it flies. |
| Sickening (pale) | A contamination load past its warning line — the illness has not broken out yet. | Nothing yet. It wears the coming illness's own glyph, washed out, so you know which one is coming and can still stop it. | Remove the cause. A load falls on its own while its cause stays away. |
| Exhausted | Tiredness below 25% — where the bar turns yellow. | Legs and hands slow linearly down to −25% walking and −40% work at an empty bar. The hands fail before the legs, on purpose. | Sleep. A bed is best, an unrolled bedroll is 70% of a bed's rest rate, bare ground is worst. A bedroll left in the pack counts for nothing. |
| Hungry (an apple) · Thirsty (a droplet) | Hunger or Thirst below 25% — where the bar turns yellow; a second, harder stage once the bar is empty. | Below 25%: −10% work, walking untouched. Empty: growing by the hour to −25% walking and −40% work, reached after 4 h without water or 28 h without food. Hunger and thirst multiply with each other. | One sip or one bite ends the empty stage at once; the bar back over 25% ends the rest. |
| Sweltering in fur | Carrying fur or any warm clothing in the jungle. Carrying a piece is wearing it. | A quarter of the warmth carried is added as heat — a full set of home-made furs is about +6 °C on top of the jungle's own air — and the body soaks 3% faster for every degree of clothing, some 70% faster in that same set. It does no damage of its own; the heat it pushes a body into does. | Put the furs down before going in — in a stockpile, or with somebody who is staying behind. Nothing else ends it. |
| Despondent | Mood under 15%. | The gravest malus that does no damage of its own: the companion refuses its whole rule program, Eat and Drink rules included, and so stops looking after itself. Long before that, from Mood 60% down, bad morale costs work: −25% at Mood 30, −50% at empty. | Mood back over 25%. Until then only direct orders get through. Nurse it by hand — order drinks, hand it food, get it dry, warm and healthy. |
| The dragon’s realm | Living inside the dragon’s realm (from its third year). | Mood only: a ceiling, up to 20 points off at the lair, nothing at the realm’s edge. | Settle further off — or wait for it to move lair. |
| Dirty | Hygiene under 50%, or standing in a room past 30% grime. One badge for both. | Mood only: up to 40 points off the Mood ceiling for the body, up to 30 for the room. Never Health, never work directly. | Wash; sweep the room, or walk out of it. |
| Treated | A herb dose given by hand (double-click herbs in the pack) or by a Take herbs rule. Never on the companion's own initiative — see Stay alive. | A boon: it is curing whatever ails them. One dose treats every ailment herbs can treat at once — medicine is for the body, not for a diagnosis — and a dose of fever bark treats marsh fever as well. Cure times are in each sickness's own row; bed rest adds to them. | Runs out on its own after 8 h (up to about 14 h at Herbalism 100). A second dose while it runs is refused, not stacked. |
| Sleeping deeply (a moon) | A sleep that has lasted in one piece. Only ever on a sleeper. | A boon: Tiredness and a bed's healing come back faster the longer the sleep runs, up to +40% after 8 h. | Waking. The count starts again from nothing at the next lying-down — see Sleep. |
| Comfort | Standing in a detected room. | A boon: room quality lifts Mood while inside, and double while asleep. Quality is the average comfort over the room's cells — wooden flooring pays 1.0 per cell, furniture adds its own, and the total is capped at 100%. Grime takes its own share straight off the lift. |
Leaving the room. |
Rescuing a fallen companion the alerts warn, you rescue
At zero Health a companion collapses instead of dying — and what will bring them round is decided by whatever put them down, not by what you happen to be carrying.
A collapse is a window, not a death. The body lies there unconscious for half an in-game day — twelve hours, about 9 real minutes of play. Reach it in time and it lives; let the window run out and that companion is gone for good. The body is lootable either way: everything it carried is still in its pack, so a rescue that arrives too late is at least a recovery. The red line in the log is the only warning you get, and this section is the other half of it.
Right-click the body with one companion selected and the ring offers what will actually help. There are two kinds of rescue and the ring never mixes them up: three causes are fixed out of the rescuer's own pack, and three are fixed by moving the body somewhere. Reading which one you are looking at is the whole of this mechanic.
| What felled them | The ring says | What it costs you |
|---|---|---|
| Thirst | Tend | Water out of the rescuer's own waterskin |
| Hunger | Tend | Food out of the rescuer's own pack |
| Sickness | Tend | Herbs out of the rescuer's own pack — fever bark if it was marsh fever, which herbs cannot touch |
| Cold | Carry to warmth | A walk to a lit fire, a heated room — or a cave |
| Heat | Carry to shade | A walk out of the sun — roof, room, canopy or cave |
| Exhaustion | Carry to a bed | A walk to a bed or a bedroll |
A cold body with an empty pack rings nothing at all — there is no verb left to offer. That is deliberate: with no ring in the way, the plain right-click just carries them, which is the right answer one click sooner.
Carrying
A carrier walks at half pace and can do nothing else. That is what makes the distance to the fire a real decision rather than a formality — pick the nearest warmth, not the best one.
While somebody is on the shoulder, every right-click means „take them there and lay them down“. No ring eats the order: a bedroll, a workshop or a mate underfoot does not answer with its own menu of verbs. Point and they go.
A threshold is crossed while carrying, never laid on. A cave mouth, the pyramid's door, a stair, the way back out — right-click one with a body in your arms and it means take them through, and they are still on the shoulder on the far side. The next right-click says where to set them down. It works in both directions, in and out.
Work & trades — how each one resolves
Gathering, felling, mining, fishing and hunting are not one mechanic — they cost different time and need different things.
| Trade | How it works | Time | Needs |
|---|---|---|---|
| Foraging | Berries, herbs, mushrooms, roots, eggs, mussels, nuts — right-click the node and order the harvest. The node depletes and (depending on its kind) regrows in place, respawns elsewhere, or is gone for the season. | 2.7 s per unit (the base work clock) | Nothing by hand. As a job: a gatherer's hut |
| Felling | Every forest cell is one tree with a finite wood stock (birch 4, pine 8, spruce 10, oak 14 — the forest holds far less wood than it looks). Each strike banks progress on the cell — no strike is ever lost, and the canopy visibly thins. The whole stock comes down with the felling strike, which turns the cell to plains — and the chopper's pack is loaded first, up to the ordinary weight budget, with only the remainder left lying at the stump. That holds both ways of chopping: on a right-click order, and on a Lumberjack rule, so nobody stands beside a fallen oak with an empty pack. A fell can never overload anybody — an oak is still three packloads — and what stays at the stump is an ordinary ground stack: it ages, it is right-clicked to pick up, and a lumber-camp shift clears it before felling again. | 5.4 s per strike; a tree needs 2 strikes per wood, so an oak is 70 strikes | An axe, usable and in a free pair of hands — without one a tree only gives branches, and the Lumberjack rule reads blocked with the reason. A stone axe makes it ×1.5, flint ×1.75, iron ×2; oak, kapok and mahogany want iron, and a lumberjack without it passes them by (a lumber camp unlocks the automation job, and mends the stone and flint axes) |
| Mining | Worked from a cell beside the rock face. Endless until redirected. | 27 s per stone — 10× the ordinary work, deliberately | Nothing — but a pickaxe makes it ×1.5, an iron one ×2 (a mason's yard unlocks the automation job, and mends the stone pickaxe) |
| Fishing | By hand, a rod in the pack is all it takes: right-click a water and pick Fish, and the companion casts from the bank until told otherwise or the pack is full — any water, no hut. For a rule, a fisher's hut is a fishing right on the one body of water it adjoins — not a licence to fish anywhere. A fisher on a rule walks past a nearer pond to reach its own hut's lake. Want another water fished by a program? Build a hut on it. Water has a bottom, and not every cast lands — see below. | 22 s a cast — about 8× the ordinary work, and the same for anybody | A fishing rod, and both hands free for it. For the job, a fisher's hut on that water as well |
Fishing has a bottom, and a die
Every water holds a finite stock, and fishing runs it down: a lake carries 2 fish
a cell up to 400, a river a quarter of a fish a cell up to 60, the
sea the same rate up to 150. It breeds back day by day in every season, slowest when
nearly empty, so a lake fished flat is a lake lost for a while. Measured: about
four lakes in ten can feed one fisher indefinitely, and no river can — a
lake needs roughly 60 cells to carry one forever, and a long stretch of open sea coast
(about 500 cells of water) does too. A lake’s size is something
you judge when you pick a site. Hover a water tile and it says when the fishing there is
thinning or fished out; fish traps draw on the same stock, so
lining a shore with them shares one water out rather than multiplying it.And not every cast lands. A beginner lands 25 % of casts on a full lake, a master 90 %, a little more in the rain and less in a worked-over water. The climb is steep at the bottom — the first thirty levels buy half of the whole way — and a missed cast (a red Cast failed over the fisher) pays extra experience, so a novice learns fast exactly because they fail. Practice buys luck, not speed — a cast takes 22 seconds for anybody. | |||
| Hunting | Two different shots at the same quarry. By hand (H): you draw, aim and loose the arrow yourself. Ordered or automated (a right-click on the animal, or the Hunter rule): the companion closes in and rolls its shots. Either way the kill is a carcass that has to be dressed before anything is in a pack — see The hunt. | Per shot, then the dressing: about 7 s for a hare to 18 s for a wisent | A bow and arrows in the pack; a hunting lodge unlocks the job and both bench recipes. Dressing takes a knife: without one the right-click on a carcass is refused, and a Hunter on a rule does not hunt at all |
| Hauling | Emptying the workshop yards into the stockpiles — its own job, run from a rule and nowhere else. Where it will and will not walk is below. | Walk-bound: one packload a trip, the clock is the distance | Nothing — no workshop unlocks it, only the card |
| Caretaking | Emptying latrines onto the compost heap, mending what has worn, sweeping dirty rooms — one chore finished before the next. The order it works in is below. | Walk-bound for the night soil; mending and sweeping at their own pace | Nothing — no workshop unlocks it, only the card |
| Drawing water | Fill the waterskin at a shore or well, and after it every water bag in the pack. Water never travels loose — a skinful (3.0 L) plus 10 L a bag is what one trip carries, as far as the carry weight allows. | 2.7 s per litre | Drinkable water in reach |
| Boiling | Stale water on a fire's pan slot becomes clean water. The whole load finishes together — never in tranches. The pan holds exactly one skinful, and those 3.0 litres — a full pan, which is exactly one skinful — take 36 in-game minutes on a campfire, a third of that on a stone hearth. Boiling is unattended: walking away mid-boil loses nothing. | 1 h per skinful (campfire) | A lit fire that cooks |
| Farming | Not a harvest but a year: sow the plot a cell at a time (1 seed a cell), keep it weeded while it grows, cut it inside its own season. The field decides which of the three is due; the worker just does it. | 1.4–3.4 s a cell per step, by crop — the same on any ground | A farm, seed in the pack or the stores, and the right season. Never winter. |
| Cooking a dish | Queued at the kitchen, one click a dish. The kitchen posts the work itself; the cook fetches the ingredients from the stores. | 12–20 s a dish | A kitchen and the ingredients. No job and no card — only the Cooking skill, trained at the bench |
Every trade trains its own skill by doing it, and the skill multiplies the pace back: +0.8% per level, so ×1.8 at level 100. Every skill has a hundred levels, and a companion who works one trade all day gains one most days — about level 19 after a week, 45 after a month, 60 after two and 98 after 300 days — so the bonus grows a little every day, and for the first weeks the pace you play with is close to the pace on this page. All skills climb at roughly the same rate; none runs ahead because it is trained in passing. Nothing is picked at the start: the first three know only what they have done, a recruit walks in with a share of what the settlement knows, and a standing school makes every hour of work earn half again the skill experience. Work driven by a rule still trains the skill (that is different from cards, which a rule never earns). On top of the skill sit the two attributes that never change: Dexterity multiplies every work clock in the table above, and Intelligence decides how fast the skill itself grows.
| Skill | Grown by | What it buys |
|---|---|---|
| Running | Walking, anywhere | Walking speed |
| Strength | The heavy trades: felling, quarrying and building (they train it on top of their own skill) | A bigger carry budget: +0.8% per level, 40 kg → 72 kg at level 100 |
| Resilience | Enduring cold, rain and exhaustion | Falls ill later, and freezing costs less Health — 44 % less at level 100. Heat damage is not softened |
| Foraging | Everything picked up by hand, on an order or on a gatherer's shift: berries, hazelnuts, mushrooms, roots, wild grain and rice, mussels, eggs, feathers, flint, twigs, loose stones, leaves, reeds and hemp. Not herbs (Herbalism), trees or rock faces | That picking goes faster |
| Lumberjacking · Farming · Masonry | Doing that trade | The trade's own pace |
| Fishing · Hunting | Doing that trade — and a miss teaches more than a hit: a failed cast or shot pays extra experience | The odds, more than the pace. A cast lands 25 % of the time for a beginner and 90 % for a master; a point-blank shot hits 35 % and 95 % (see The hunt) |
| Fire-making | Lighting fires by hand or on a rule; a spark that does not take teaches too | A fire is struck alight sooner and more surely: a beginner's spark takes 25 % of the time, a master's 95 %, before the weather and the pit — see striking a fire |
| Crafting | Making kit at the bench (U), and the bloomery's and smithy's work | Kits come off the bench faster, and a made tool is as sound as its maker: a beginner's starts at half its durability, a master's whole — see tool quality |
| Cooking | Standing at the kitchen queue — it has no job of its own, like Herbalism | Dishes come off the bench faster. It never changes what comes out. |
| Building | Raising anything — a wall, a hut, a bed. Commanded, on a rule or on a claimed task: all three count | Every construction site goes up faster. It trains Strength as well |
| Herbalism | Both ways the plant is handled: picking herbs, and giving a dose | Picking is faster, and a dose lasts longer — 8 h at level 0, about 14 h at level 100. It never makes a dose stronger |
| Weather-reading | Standing the vigil (O), living through a sky, and being right about a call | How much a forecast may say — see Read the sky |
A shift at a workshop — and a tree felled by hand
Felling one tree and working as a lumberjack are not the same job, and the difference decides whether the wood ever reaches your camp. Three contexts, and they behave differently on purpose:
| How you asked | What they do |
|---|---|
| By hand — a right-click on a tree, with an axe | They shoulder an armful and do nothing else. The rest stays at the stump; nobody fetches it and nobody carries it off, even with an empty lumber camp yard a few steps away. |
| Working the lumber camp — right-click the building, or a Lumberjack rule | A proper shift, in this order: clear every log lying about first (including the ones an earlier armful left behind), empty the pack into the camp's yard, and only then fell. Then fill, bring it in, and come back for the rest until the stump is bare. |
| The fisher at its hut | The same shift with two legs missing: fill, carry the catch to the hut's yard, empty it, fish on. There is nothing lying on the ground to tidy up and no half-caught fish to finish — those two legs are the lumberjack's alone. |
- They finish what they started. A shift picks the tree that is already furthest chopped, not the nearest one. So a shift broken off by a night or an errand comes back to the same tree, and the wood does not fill up with half-felled trunks.
- A full pack within reach of the trade's own yard is a walk, not the end of the shift — they empty it and carry on.
- Neither carries on to a stockpile. A shift ends at the yard; yard → stockpile is a haul, and a job of its own — see below.
The hauler — somebody to carry the yards in
Every workshop keeps a yard of its own produce — one you build and size yourself, 20 units a cell — and a yard with no room left stops the trade that fills it. The WORK: hauler rule makes emptying them a job: walk to a yard with something in it, fill the pack to its ordinary weight limit, carry it to a stockpile, come back.
- No workshop unlocks it. There is no hauler's hut — the yards it empties are buildings you already had to raise. The card is the whole gate, and it is bought with twenty stacks picked up off the ground by hand. As with every card, work done by a running rule earns nothing.
- Its round is 30 tiles — and a painted zone manages it. Stand a hauler inside a zone (Y) and that zone becomes its round instead of the 30 tiles: smaller, larger, or any shape you like, and several overlapping zones count as one area. Stand it outside every zone and it is simply the 30 tiles all round. This is the first thing in the game that reads the zone layers at all.
- A load already in the pack always goes home, zone or no zone. Nobody is left standing about holding goods because a stockpile sits one cell outside a painted line.
- It takes from yards only and puts down in stockpiles only, so a hauler can never shelve its load in the next workshop it walks past — and a pile still only takes what its rules allow. Food keeps its age on the way, exactly as it does when you carry it yourself.
The gatherer’s hut — somebody to walk the wild stands
Raise a gatherer’s hut (8 wood + 2 plant fibre, 2×2, in the Workshops ring) and gathering becomes a trade: while one stands, the WORK: gatherer rule — or a right-click on the hut — sends a companion round the wild stands, picking them one handful after another.
- What it picks: berries, hazelnuts, mushrooms, roots, wild grain and rice, eggs, mussels, feathers, flint, twigs, loose stones, leaves, reeds, hemp and herbs. Never a tree and never a rock face — those are other trades. Bamboo is cut only with a knife in the pack; without one the gatherer passes it by.
- How far it looks: 45 cells from where the gatherer stands, on ground you have discovered. Give the hut a work zone and that zone is the whole reach instead, however far away it is painted.
- Where the load goes: to the hut's yard, when the pack is full or nothing is left to pick. It never carries on to a stockpile — that is a haul.
- The hut has a filter. Left-click it and untick a yield under Gather; the gatherer walks past those stands. Untick everything and the trade stops and says so.
- Every yield has a limit — the number beside its tick. Once the settlement's stores (the hut's own yard included) hold that many, the gatherer leaves that yield alone, and takes it up again only when the stores have fallen below three quarters of it. 0 means no limit. A new hut starts with limits set — food low (berries 20, mushrooms and herbs 15, eggs and mussels 10), so nothing is picked to rot and the bushes get their rest; twigs 60, stone 40, leaves 40. What the stores are shortest of is picked first: a yield under a quarter of its limit before one at half, a limited one before an unlimited one, and the nearest stand among equals. When everything ticked is at its limit the trade stops, says so, and the program moves on to its next rule. A hut from an older save starts with no limits.
- The Gatherer card costs 50 gathering cycles done by hand or by order — every picking that yields something counts. Herbs do not: they train Herbalism. And picking pays for this card alone: loose stones do not count toward the Stonemason's card, nor mussels toward the Fisher's.
The caretaker — somebody to look after what already stands
The WORK: caretaker rule needs no building: what it looks after is the settlement itself. It takes the first chore on this list that exists, and finishes it before it looks again:
- A latrine that is full — the night soil goes to the compost heap.
- Night soil lying on the ground after an accident — piles close together go on one trip.
- Anything that has rotted through, or that you marked for mending.
- A latrine that is half full.
- A room past 30% grime.
- Anything worn below 50% that nobody marked.
- It fetches the mending materials from the stores itself — a companion you send to mend by hand still pays out of their own pack. A repair the stores cannot pay for is not attempted.
- With no compost heap that has room, the night soil stays where it is: latrines are left alone and ground piles are left to soak away.
- The card costs 15 chores done by hand or by order — a building mended, a room swept, or a load of night soil put on the heap (Empty it on the latrine's ring counts). Chores a running rule did earn nothing.
- You do not need the card to get latrines emptied: a half-full latrine posts itself as a task while a compost heap has room for it.
The healer’s hut — somebody can be sent to help
Without one, a companion who goes down waits for you to notice and to steer somebody over by hand, and nobody can give anybody else their medicine — a sick companion has to be dosed by your own click, one at a time. Raise a healer’s hut (14 wood + 4 stone + 2 cordage, 2×2) and that becomes a trade.
The hut is also the best bed in the settlement — it heals at 1.5× the rate of a good house bed, it holds 18 °C of shelter while a fire burns by its door, and that makes it the place a rescue carries somebody to.
What the healer actually does, in that order:
- A body on the ground first, searched out to 65 cells — further than any other trade looks, deliberately. What happens next depends on why they went down: cold, heat, exhaustion → they are picked up and carried to a fire, to water, to a bed. Thirst, hunger, illness → the healer stocks their own pack from the stores first, walks over and tends until the bar is back to a third. Injury, hail, a storm → a two-hour vigil beside them. The rescue window is 12 hours either way.
- An untreated sickness second, within the ordinary 45 cells: they hand over one herbs out of their own pack and dose the patient — fever, dysentery and food poisoning can be treated by somebody else. A marsh fever gets fever bark instead, out of the healer's pack or the stores, because herbs do nothing for it; the same holds when the healer tends somebody who went down with it. A settlement with no bark in it has no answer to that fever, healer or not.
Tools & clothing carried, not worn
Gear is the thing that survives a migration — a knife, an axe, a pickaxe, a shovel, and then five body slots to fill: head, chest, hands, legs, feet. Everything stone, cloth and fur here is made at the crafting bench (U), the iron makes at the smithy, and the whole warm half of it is made of animals.
| Piece | Costs | What it does |
|---|---|---|
| Axe both hands | 1 branch + 1 stone + 1 cordage — no workshop needed; mended at the lumber camp for 1 wood | No axe, no tree: felling is refused without one, and bare hands only break branches. Chopping goes ×1.5. It multiplies with your Lumberjacking skill rather than replacing it, and it is dragged down by the same fatigue, wetness and illness as everything else — there is only ever one work speed. It is on the bench from the first morning, but the first one waits on a length of cord: wild hemp comes before the first felled tree. Stone fells pine, birch, spruce and palm — oak, kapok and mahogany want iron. |
| Flint axe both hands | 1 branch + 1 flint + 1 cordage — no workshop needed; mended at the lumber camp for 1 wood | The stone axe's tier, but faster: ×1.75. Its price is the flint — which is also your fire. |
| Pickaxe both hands | 3 stone + 2 branches + 1 cordage — no workshop needed; mended at the mason's yard for 1 wood | Breaking stone goes ×1.5, and it is the key to the rock: digging is refused without one. |
| Knife one hand | 1 branch + 1 stone + 1 cordage (the blade is bound on) — no workshop needed; mended at the hunting lodge for 1 flint | Opens a kill, and cuts bamboo. Dressing a carcass is refused without one, and a Hunter on a rule does not hunt — so every hunter carries their own. It costs stone, not flint, and is the one edged tool that still works beside a torch. |
| Shovel both hands | 2 stone + 2 branches + 1 cordage — no workshop needed; mended at the mason's yard for 1 wood. A trader may carry one | Every step of field work goes ×1.5. |
| Iron axe · iron pickaxe both hands | Forged at the smithy from iron; mended there for 1 charcoal | The work goes ×2 where stone gives ×1.5, and the tool lasts three times as long before it must be mended. |
| Iron knife one hand | Forged at the smithy from iron; mended there for 1 charcoal | Opens a carcass half again as fast as the stone knife. |
| Fishing rod both hands | 2 branches + 1 cordage + 1 fish hook; the hook is whittled from 1 twig first — no workshop needed; mended at the fisher's hut for 1 cordage | Lets its bearer fish any water by hand. It speeds nothing. |
| — the cloth kit, made of the ground — | ||
| Coat chest | 2 cordage + 10 plant fibre — no workshop needed | +6 °C. |
| Hat head | 1 cordage + 4 plant fibre — no workshop needed | +2 °C. |
| — the winter set, made of animals: everything below needs a hunting lodge — the fur pieces for their recipe, the leather pieces for the leather, which only the lodge tans — | ||
| Fur coat chest | 4 pelt + 2 cordage | +14 °C — more than twice the cloth coat, and the single biggest piece of warmth you can carry. |
| Fur hat head | 2 pelt + 1 cordage | +3 °C. |
| Fur mittens hands | 3 small pelt + 1 cordage | +2 °C — three hares or squirrels, which is what makes the small game worth a shot. |
| Leather trousers legs | 3 leather + 2 cordage | +2 °C and 25 % of the wind stopped. Leather is the shell, not the padding. |
| Leather boots feet | 2 leather + 2 small pelt + 1 cordage | +2 °C and 15 % of the wind. |
| — the ice set, made of ice pelts: polar bear, arctic fox and seal leave them and nothing else does. Sewn where the fur coat is — | ||
| Polar coat chest | 4 ice pelt + 2 cordage | +26 °C. It takes the fur coat's place and does not stack with it. |
| Polar hood head | 2 ice pelt + 1 cordage | +7 °C, in the fur hat's place. |
| Polar mittens hands | 1 ice pelt + 1 cordage | +4 °C. |
| Polar leggings legs | 2 ice pelt + 1 cordage | +4 °C and 35 % of the wind — more than leather keeps out. |
| Polar boots feet | 2 ice pelt + 1 cordage | +4 °C and 25 % of the wind. |
| — carried kit — | ||
| Handcart | planks + cordage, and a long build | Carries +90 kg for 10 kg of its own weight — net, most of a second pair of legs. It is the difference between abandoning a settlement's stores and taking them with you, so build one before you plan to move, not the morning you leave. |
| Water bag | 2 hide + 1 cordage | Holds 10 litres, and bags add up. It is how one companion fetches water for the group — see below. |
Clothing insulates — it does not heat
Worn warmth is added to the temperature you feel, but only up to 20 °C: it can lift a freezing companion toward comfort and can never push a warm one past it. So a coat does nothing at all in a summer desert, and a roaring fire still beats it. Only the warmest piece per body slot counts, so carrying a spare coat doubles the weight and nothing else.
Cloth coat and hat is +8 °C, roughly the difference between a clear autumn night and a survivable one. The full winter set is +23 °C — and that is what the tundra costs, because every piece of it comes off an animal you had to shoot first. The full ice set is +45 °C. What the two tiers mean on the ice: in the furs you can make at home a winter day there can be walked and the night cannot; in the ice's own furs the night can. Polar coat and hood are enough for a still night; mittens, leggings and boots are the margin when the wind gets up — and the set cannot be sewn before somebody has hunted on the ice.
A tool wears out, and is mended at its workshop
Every tool wears — deterministically, never on a dice roll. A whole stone axe, flint axe, pickaxe or shovel lasts 400 seconds of real work, about nine in-game hours of it, a full working day at the trees or the rock face; an iron one lasts three times that. The fishing rod lasts 600 s of fishing, the bow 60 arrows loosed, the stone knife 300 s of dressing and the iron knife 900. The carry slot shows the condition as a percentage that runs green → red, and the break itself posts one line to the event log.
| A tool worn to nothing | What still works |
|---|---|
| Axe (any make) | Refuses: no felling until it is mended — only branches |
| Fishing rod · bow · knife | Refuse: no cast, no shot, no dressing |
| Pickaxe · shovel | The work, at bare-hand speed. A broken pickaxe still opens the rock; it just no longer speeds it |
To repair it: right-click the tool's workshop with the worn tool in the pack — the lumber camp for the stone and flint axe, the mason's yard for the stone pickaxe and the shovel (1 wood each), the fisher's hut for the rod and the hunting lodge for the bow (1 cordage), the hunting lodge for the stone knife (1 flint), the smithy for every iron tool (1 charcoal). The companion walks over and pays out of its own pack, or fetches it from the stores like a builder's materials, and the tool is mended. A repair mends the most worn tool of that kind. Repairing is deliberately far cheaper than making a replacement: that is the reward for keeping the workshop standing.
- Only the best make does the work — with a stone axe and an iron one in the pack, the iron one chops and the stone one rides along untouched — and of two of the same make, the most worn one that still works is used; the better one is the spare. A spare never stacks — two axes are not a faster axe.
- Every tool carries its own condition and quality — in the pack, on the ground, in a pile, through the transfer window and in the save. A worn axe and a new one sit in two slots, the way food splits by age, and a worn axe handed to a mate arrives worn. Every crafted tool is graded, not only the first.
- In the jungle a tool wears out in half the time — the wet rot that bills the buildings there takes the tools as well.
Two rows on the sheet, and two hands
The character sheet's Equipment section (E) is two rows, each led by a white symbol. Clothing — Head, Chest, Legs, Hands, Feet — shows what the pack makes the body wear, the warmest piece per slot. Under it Equipment — left hand, right hand, head, and the waterskin — shows what is really held, and that row is the one place a gesture decides something.
- A one-handed thing takes one hand and leaves the other free: a torch, the lantern, a blubber lamp. Two of them can be held at once.
- A two-handed tool fills both tiles: axe, pickaxe, shovel, bow, fishing rod, whatever its make. While either hand holds something else, the axe, the bow, the rod and digging refuse outright, and the pickaxe and the shovel give no bonus — that work falls back to bare hands. The knife is one-handed and is never blocked.
- The Equipment row's Head tile is for the headlamp, and it blocks nothing. It is not the Clothing row's Head: a hat and a headlamp are worn together.
- The gestures: double-click a light or a two-handed tool in the carry grid to take it in hand, or drag it onto a Hand tile; double-click it again to put it away. A stack on the cursor is put on with a left-click on the tile. Putting a burning light away puts it out.
- The pack marks what is in use. A pale white dot in the top-left corner of a carry tile means that very item is in a hand, on the head or worn — exactly one tile, so with a broken axe and a working one in the pack the dot says which one is swinging. Hover a Hand or the Head tile for the held tool's durability in colour, its quality and what a repair costs.
You only need the gesture for a light — a tool in the pack works without being taken in hand. What the row tells you is why a tool has stopped working: a torch in one hand is an axe that will not fell and a bow that will not draw.
Torches & the lantern L
Underground there is no dim — there is light, or there is nothing — and every flame you carry is a clock running down while you walk.
| Light | Burns | Reaches | Where it comes from |
|---|---|---|---|
| Torch | 4 in-game hours — 3 real minutes of play | 7 cells | Made at the bench (U) from 5 twigs + 2 plant fibre. The pyramid's entrance hall stocks a rack of 4 — take all of them |
| Blubber lamp | 12 in-game hours — 9 real minutes — a slab of blubber, and then the next slab | 6 cells | Made at the bench from 2 blubber + 1 stone + 1 plant fibre. Blubber comes off a seal or a polar bear and off nothing else, so only the ice makes it |
| Headlamp | The blubber lamp's flame and fuel: 12 in-game hours a slab | 6 cells | Made at the bench from 1 blubber lamp + 1 leather. Worn on the head, so both hands stay free |
| Lantern | 16 in-game hours — 12 real minutes | 11 cells | Loot, and only loot: two in the whole world at most — one at the bottom of the pyramid, a second in the wreck in the ice. Nothing crafts another |
| Campfire | As long as somebody feeds it | 9 cells | Built where you stand — and it is the first light down there nobody has to hold |
| Stone hearth | As long as somebody feeds it | 13 cells | The same, further — the widest light in the game, and the only one that beats the lantern |
Do the sum in real minutes, because that is what you spend. The day is 18 real minutes long, so an in-game hour is 45 s of play. Half a torch gets you in and the other half gets you back out — and a torch lit at the base fire is already half gone by the time it reaches the cave mouth.
Putting a torch out keeps what is left in it. Snuff it and the head holds its remaining burn; light it again and it resumes from there. So snuff it the moment you step into daylight — that is how a three-minute torch lasts a whole trip, and it is the one piece of husbandry the mechanic actually rewards.
A flame is a flame. A light is struck at a burning fire, at a companion's burning light standing beside you, or off a flint in the bearer's own pack — nothing else. One bearer carries the flame in and everyone else takes it off them; lending costs the lender their own burn, since the light they hold is the one going down while it happens. Underground that is the whole decision: with no flame and no flint, there is no lighting. The flint spares you the walk back to a fire; it does not make light endless — the limit is still how many heads you carried down.
A torch burns away; a lamp is filled. A blubber lamp or a headlamp burnt dry takes the next slab of blubber out of the bearer's pack by itself and burns on, and the log says how many slabs are left. With none left it goes dark and stays a lamp: strike it again with a slab in the pack and it is filled first. So the lamp's real clock is the blubber you carry — twelve hours a slab — at one cell less reach than a torch. It is the light of a long night and a slow search, not of a quick look.
L lights or douses the whole selection — the default binding, rebindable under Companions in the keybindings page. A key rather than a ring entry, because a four-companion expedition cannot be asked to open the fire window four times. Anyone who cannot light says so, and the refusals are collected into one line instead of four. Press it again and every flame in the selection goes out.
The game offers the key when the offer stands. A companion holding
an unlit torch and standing at a flame gets [L] Light Torch printed beside them in
the world — once, however many are selected, only while the key would really light
rather than douse, and naming whatever key is actually bound. It is the only key hint the game draws
in the world, and deliberately not a tutorial: it matters in exactly one situation.
Striking a light takes 2 s and draws the same work ring as any other job. It is not an errand — nobody walks anywhere — but a new order interrupts it, and the flame is re-checked at the finish, so a fire that dies mid-strike fails where you can watch it happen.
A lit torch starts a fire, and pays no tinder. Tip it into a laid pit and no twigs are needed at all — no walk to the stockpile for kindling. Only the tinder is waived: the kneeling work runs in full, the weather still stretches it, a soaked pit still refuses, and your torch burns down through every second of it. The price moved from the pack to the flame you are spending, which is the answer to a cold camp reached at dusk with nothing to light it with.
A fire you build underground gives light
Build a camp where you mean to come back to, and that chamber stays open while it burns. A campfire reaches about 9 cells and a stone hearth 13 — more than a torch, more than the lantern — and neither of them occupies a pair of hands. The pyramid's five storeys share one map, so a fire two floors down is visible from the stairs, and a lit camp at the bottom of a shaft turns the walk home into something you can see rather than something you count.
It does not soften the bargain the dark is built on. A fire costs twigs, tinder and wood carried down on somebody's back, a campfire eats a full load in minutes, and nothing relights itself. It is a camp you decide to make, never a switch that stays on — and with no fire and no flame the way out is felt for, one cell at a time.
Spares, and the trap in them
The light does not end with the first torch. When a head burns out the bearer lights the next one out of their own pack off the dying stub, by itself, and the log says how many are left. Ten torches are about 30 real minutes of walking light, not three.
A held light takes a hand — the headlamp takes none
Hands are a resource. A torch, a lantern or a blubber lamp is held in one of a companion's two hands, and while it is there — burning or not — the bow and the fishing rod cannot be used at all, nobody digs, and the axe and the pickaxe give no bonus: all of them want both hands. Whoever carries the light is not the one who shoots, which turns a torch from a piece of kit into a role in the party. Dousing it with L saves the burn but leaves the stub in the hand; the hands come free when it is put away (double-click it), and putting a burning light away puts it out. The second hand is free for a second light — two flames do not add up, the wider one counts — or for the knife, which works beside a torch.
The headlamp is the answer for the one who works. A pickaxe takes both hands, so a digger cannot hold a torch — and digging underground needs light at the rock: a lit headlamp on the digger, or a mate standing beside them with a burning light. The second costs a pair of hands that then does nothing else; the first costs a trip to the ice for the blubber. A headlamp weighs a little more than the lamp it is made of and reaches no further.
The thickest fog is as blind as a cave
In the thick heart of a fog bank a companion with no light can only feel their way. A click far away no longer walks them out of it: every order carries them one step toward the click, at a hand's pace — the same rule as the black underground — and a rule's walk is held the same way. A thin mist changes nothing.
- What ends it: a torch or lamp alight in their hand or on their head, a mate's light or a burning fire's glow reaching them, a roof overhead, or the edge of the fog, which you can feel your way out to one step at a time. It also ends the moment the fog is seen to lift, not hours later.
- The game says why. A far order to a companion who cannot see raises a short red line over them — “Thick fog — one step at a time”, underground “Too dark — one step at a time” — and the log names the way out once per fog.
- So a torch and a flint belong in the pack of anybody you send far, on the surface too. A fog that catches a forager two hundred cells out with no light holds them there while their bars run down.
- In the dark does not fire in fog — that sensor means underground — so the rule below will not light a torch for a fogbound companion. That one is done by hand.
Reading how much is left
The clock is visible in three places. The lit
status badge on the companion card counts the real minutes down
(green, turning amber past 40 % left); the flame drawn on the
figure itself gutters smaller and redder as the head goes; and the burning torch
shows what is left of it as a percent in the carry grid, in the same corner food
shows freshness. Every readout in the game speaks in real minutes.
Telling them to do it themselves
Two cards put light into a rule program, and they are earned
apart. In the dark comes with the fire family, by lighting and feeding fires by hand. Light a
torch has a counter of its own: five torches lit by hand — at a fire, at a
lit torch beside you or off a flint; the key, the order and the fire window all count, and a torch a
rule lights teaches nothing, like every other deed. WHEN In the dark is true while that
companion stands in the pitch dark with nothing of their own burning — night on the
open surface deliberately does not count, or a party of eight would burn a torch each every night for
light they mostly do not need. DO Light a torch takes a torch from the pack into the hand and holds it into a flame
already in reach — or strikes it off a flint in the companion's own pack
— and never walks to one: a rule that could send somebody across the
settlement for a flame would march a party that had just entered a cave straight back out of it.
Written together, WHEN In the dark → DO Light a torch does the right thing at the
mouth of a cave, where the fire is.
Moving goods — the one hand
There is exactly one hand in the game, and every window fills it the same way.
Pick a stack up in the character sheet's carry grid, in the transfer window, or straight off a stockpile tile on the map (Shift+right-click it — reach is what decides: standing on the pile or right beside that tile the stack comes into your hand, from any further off the same click is a queued order to walk over and open the exchange there. The same is true of a workshop's yard) — it is always the same hand, so a stack can only ever be in one place. Closing a window keeps the stack in hand, which is exactly how it gets out onto the map: carry it to a construction site, a fire's hearth, a pile or a companion and left-click it down. Esc on a clear screen puts it back where it came from.
Taking reaches exactly as far as putting down: the tile beside you, or any tile of a stockpile you are standing in. Two cells away the goods are out of reach and the refusal names the gesture that walks somebody over — what you can drop onto, you can always lift back off.
Something in hand is carried where you point. Left-click any receiver that makes sense — a construction site, a stockpile, a workshop's yard, a fire, another companion — and the carrier walks over and puts the stack down there, doing exactly what the click would have done had you been standing next to it. Only the walk is done for you.
Your hand is empty the moment you click, not when they arrive. The load is handed to the order, so you are free to pick something else up, open another window and keep working while the walk happens — sending a sack of wood across camp does not cost you your hand for the whole trip. The arrival puts down the whole load, not one portion: the click already committed the stack, so there is no second click waiting to place the rest.
Nothing is ever lost on the way. Every way an errand can end — you gave a new order, the receiver refused it on arrival, the target is gone, the carrier died — puts the load back in the inventory it came out of, or the vessel it was poured from; failing both it lies on the ground at the carrier's feet. Note that Esc does not call the errand off, because there is nothing in your hand for it to put down — a new order is what calls an errand off.
Open ground is a receiver too. Left-click a bare spot anywhere on the map and the carrier walks there and sets the stack down on the cell you clicked, near or far. Water is the exception (it would only pour out), and a spot nobody can stand on or walk to refuses at once. And a refusal lands at the click, not twenty cells later — „this site doesn't need stone“, „the fisher's hut won't take wood“.
A fire is still the richest of these: on arrival the fire exchange window opens with your stack still in hand, so one click on a slot puts it in, and it opens wherever you happen to be looking, even if you deselected that companion while it walked.
| Gesture | In the character sheet | In the transfer window |
|---|---|---|
| Right-click a slot | Take that batch in hand | Take that batch (or that pile tile's stack) in hand |
| Shift+right-click | Ask how many to take in hand | Ask how many to move to the other side |
| Double-click | Eat one unit | Move one unit across |
| Double-click the tool slot | Drink from the waterskin until thirst is full | Pour one litre of the skin into the vessel on the other side (Shift: everything in it, down to the last tenth) |
| Shift+double-click | Take the whole stack in hand — every age batch of that kind, not just the clicked slot | Move the whole stack across |
| Left-click while holding | Put it down, or swap with the clicked batch | Put it down on that side |
| Click outside the window | Drop it on the ground at the companion's feet — anybody can right-click it back up. A drink is poured out instead: a liquid does not lie in a heap. | |
- The others drink from the carrier. A Drink order or rule walks to a companion carrying water whenever that one is nearer than the water itself, drinks, and leaves with a full skin. One companion makes the long walk; the rest stay at work.
- The carrier's own skin refills from the bag when it runs dry.
- A haul, or a deposit onto a water barrel, pours the bag in.
- Pond water in a bag is still pond water — for everybody who drinks from it.
- Putting a bag down spills what is in it. The water is in the bag, not in the pack.
Tell each stockpile what it accepts
Every pile has its own acceptance rules, set from its panel: the presets Everything, Food only, Materials and Nothing, or a tick per item kind. This is how you sort a settlement — food at the fire, wood at the building site, ore at the mason's yard.
- A hauler only walks to a pile that accepts what it is carrying. If no pile in range does, the load has nowhere to go and you get a red alert.
- Rules never touch what already lies there, and never block taking things out. Setting a pile to Nothing is therefore how you drain one: it keeps serving, stops receiving.
A pile set too narrowly is one of the quieter ways to stall the whole automation, and the panel is the only place it shows.
Every workshop keeps its own yard
A "job building" means one exact thing: a building somebody works at. There are six — the fisher's hut, the lumber camp, the farm, the mason's yard, the hunting lodge and the gatherer's hut — and they are the six that offer the Work here verb, unlock a trade for the rules, keep a yard, and can be given a work zone. The drying rack and the smokehouse are not among them: they cure by themselves, hand-fed or out of the stores, and nobody stands at them. In everything else they are workshops — the smokehouse is the bench that makes charcoal, both open their store window, both are built from Workshops → Larder. A campfire and a stockpile are used rather than worked at, and the planning table lends its blocks with nobody standing at it.
A yard holds that trade's produce and nothing else (fish at the hut, logs and boards at the camp, stone and cut stone at the yard, vegetables at the farm, the whole kill at the lodge — meat, hides, pelts, small pelts and feathers — and at the gatherer's hut whatever its filter lets through).
- Produce lands there only while the worker is standing at the building. Work a tree forty tiles into the woods and it fills the pack — nothing teleports home, which is a quiet argument for siting the camp where the work is.
- The goods count towards the settlement's stores: edible, spendable, haulable, and standing at the workshop counts as standing at the stores.
- But haulers never dump anything there — it is an out-tray, not a shelf, and it accepts nothing but its own trade's produce.
- One tile, one kind: twenty logs leave no room for boards until somebody clears them. With no free tile left, an incoming load does not vanish and does not block the trade — it folds onto the batch of its own kind, and the heap takes the average age, weighted by how much of each is in it. One fresh fish dropped on a nearly-spent pile barely moves it; a big fresh load moves it a lot. The guarantee that matters is kept: goods arriving older than the heap keep their own date, so nothing is ever laundered into keeping longer. It is why a one-tile yard does not jam at a single fish — and why a day's catch is not written off because one old fish was lying in the tray.
- When the yard fills — or the worker's own pack does — the shift ends and the event log says which of the two ran out, because clearing a yard and bringing a load in are different jobs. That is the normal end of a shift, not a fault. A farm ordered out of season says so too, rather than standing there mute.
Getting the produce out — on the map. A yard stands where the work is, which is usually nowhere near you, so it answers the same two gestures a stockpile has always answered: Shift+right-click the building takes the stack lying in its yard straight into the hand, and right-click it with one companion selected offers Take produce on the context ring — that walks the companion over and opens the exchange window on the yard. The ring only appears when something is actually lying there, and a plain right-click still means work the trade.
Or from the building's own panel. Left-click the workshop and press Open the yard: the store opens beside the pack of the companion standing at it, in the same two-column window a stockpile uses — click a row to move the whole stack, Shift+click for a single unit. Where a pile shows its editable storage rules, a yard shows the trade's fixed fence instead: it is not yours to loosen. Putting goods back in is allowed as long as they are that trade's produce — the yard does not judge whether shelving them there is clever, and they age and spoil in it like anywhere else, so a yard used as a larder is a yard that will block the work.
Or let the settlement clear it. Two rules do that, and either is enough: the hauler trade, which does nothing else all day, or Take a task — a workshop whose yard is over three quarters full calls for it to be cleared, and a taker carries the produce to a stockpile, load by load, until the yard is empty. While a yard is full, nobody takes that trade on at all: there would be nowhere to put what they made. This is the usual bargain — by hand it always works, unattended it has to be earned.
“Full” is the worse of two things: how much the yard holds, and how much room is left in it. A yard with one crowded tile and nothing else free is full even though it holds almost nothing — which is the honest answer, because that is exactly when the work stops. The yard fill sensor in a rule reads the same number, so it hits 100 % precisely when production would block.
A fire is three states, not a fuel bar
A heat source is Burning, on Embers, or Cold, and the difference decides whether it can save somebody. Fuel is not the flame: wood thrown onto a cold pit just lies there.
| State | What it does | What it needs |
|---|---|---|
| Burning | Warms, cooks, boils, dries. Burns its fuel down. | Fuel. Feed it before it runs out. |
| Embers | Still warm, and still alive: fuel laid on catches by itself, no work needed. Lasts about 2 in-game hours on a campfire, 6 on a stone hearth. | Anything burnable, in time. |
| Cold | Nothing. A cold pit is a hole with wood in it. | A light: a flint in the pack, 2 twigs of tinder and 7 s of real work from a companion — longer in bad weather. The twigs may come from the pack or from a stockpile — whoever is sent walks to the pile that has them first. And the spark may not take — see below. A Tend fires rule passes by a fire its companion cannot light (no twigs to be had) and tends the next one. |
A new fire is built cold. A finished campfire or stone hearth stands with its wood laid and unlit; lighting it is its own step, exactly like relighting one that went out — Light the fire in its window, fuel dropped on it from the hand, or a rule. A cold fire posts its Tend the fire task, so Take a task lights it too, and the task goes to whoever carries a flint and can find twigs — not to whoever carries wood.
Every fire sits in a closed ring of stones, and the ring tells you which fire it is. A campfire’s was gathered — round field stones of every size shoved against each other, closed but plainly not laid. A stone hearth’s was built — dressed rectangular blocks with a darker mortar joint between them. It costs nothing and changes nothing: it is there so that a glance at the map answers “is that the fire that lasts the night?” without opening anything. Both views agree, the top-down one on the map and the portrait at the top of the fire window.
The fire window — one window, two ways in
Left-click a fire, or right-click it with one companion selected: you get the same window. The left-click reads it from anywhere on the map and draws its circles; the right-click walks a companion over first and hands you their pack and waterskin beside it, so goods can actually change hands. Everything else — the picture, the words, the slots, the sizes — is identical, because it is one fire.
The fire is drawn at the top, live, in the state it is actually in. Read the picture before the words: flames mean it is burning and their height is how much fuel is left; glowing coals with no flame are embers, which still catch a log by themselves and cost no tinder; grey wood in a grey pit is laid and unlit; a blue sheen on that wood means the pit is too wet to take a light at all; and a bare ash heap is a dead fire with nothing in it. Embers and a dead pit are not alike at all, and they do not look alike.
Under it the window says two words and a number, and nothing else: Burning / Embers / Laid, unlit / Cold, and then how much longer it burns, drawn large and coloured — the flame's amber while it is comfortable, yellow under a quarter of a load, red under a tenth. That is the one number you stand at a fire to read, so it is the one thing drawn big. Everything else — what tops it up, how many twigs make a log, why the pan is not moving — is in the tooltip of the thing it is about. Hover the bar for the fuel arithmetic, hover a slot for what it takes.
Then the hearth: the fuel slot on its own row with the pan and the ready slot under it, drawn half again the size of a pack slot — this window is worked at a distance, not squinted at. The slots carry no words: an empty fuel slot shows a faded log, an empty pan a faded cooking pot, and the ready slot stays bare. Under the pan stands only the percent done, and only while something cooks; how long it still takes, and why a pan is not cooking (the fire is out, the ready slot is full), are in the pan slot’s tooltip. On a cold pit a Light it button sits above them; on a soaked one it refuses in place and says why.
Nothing is loaded for you. You drop things in yourself — one click, and you decide how much. Carrying nothing that fits, the companion still walks over and the window says so in red, because "I have nothing to burn" is exactly what you went there to find out. Everything moves by the same gestures as the transfer window. A fire is worked from right beside it: an order sends the companion all the way onto the pit's own cell, not merely into its warmth. Boiled water taken off the Ready slot goes into the waterskin, never into the pack.
| Slot | What goes in | The limit that catches people out |
|---|---|---|
| Fuel | The wood actually in the fire. Twigs go in too, but as kindling — about a tenth of a log — and so does everything else that burns. With fuel in hand, a left-click on the slot burns one unit and a right-click the whole held stack | A campfire holds 4 logs and not one more — you cannot bank a night's fuel in it. And a fire takes a log only while a whole log still fits — nobody, by hand or by rule, burns one into the last sliver of room. Fuel laid on embers catches by itself; fuel laid on a cold pit does nothing until somebody lights it |
| Pan | Water to boil, or food to cook | One kind at a time. A pan boiling water cannot sear a fish — if you queue supper on it, your drinking water is not coming |
| Ready | What came off the pan | Right-click takes a cooking slot back out |
Build — press Space Space
You start with nothing. Space opens the build ring (radial menu). The main ring is Shortcut 1 · Shortcut 2 · Shortcut 3 · Demolish · Build · Blueprints · Zones. Left-click a category and the ring steps aside: it now holds that category's entries and nothing else. Hovering any entry spells it out in the info panel below the circle, cost per material included (green = affordable now, red = not). Place it, and the blueprint goes down and waits: staking a plan is not an order, and nobody walks over to it. R rotates the ghost before placing — it turns every fixed-size piece, so a bed can be laid head north, east, south or west. Painted pieces (wall, door, floor, road) and drag-sized ones do not turn. Indoors, Q offers “against the wall”: it slides the piece flush to every wall it touches, corners included. It is purely cosmetic — footprint, cost and reach are identical — and the cupboard and the bench come out of the menu already hugging. A right-click while a ghost is up puts the ghost away and gives that order in the same click — so the blueprint you have just laid down can be ordered built immediately, with no Esc in between.
| Main ring | Opens | Submenus, and what is in each |
|---|---|---|
| Build | Workshops | Harvest: farm, compost heap, gatherer’s hut, hunting lodge, fisher’s hut, fish trap · Larder: kitchen, smokehouse, drying rack · Materials: lumber camp, mason’s yard, bloomery, smithy · Care: healer’s hut, school |
| Structure | Walls: wall, stone wall, door · Roofs: thatch roof, board roof, pillar · Floors: rush floor, wooden floor · Crossings: path, road, bridge | |
| Supply | Water: well, water barrel · Stores: stockpile zone, reed basket, storage box, planning table | |
| Camp | campfire, straw bed, bedroll, latrine, camp flag, lightning rod — one click under Build, not inside Supply | |
| Blueprints | Remember and Stamp | |
| Demolish | The eraser — see Taking it down | |
| Zones | The zone editor | |
| Shortcut 1 · 2 · 3 | Yours to fill. Click an empty one to pick what goes there, or hover anything in the menu and press 1, 2 or 3 (while the ring is open those keys pin, they do not select a companion). A shortcut to a building places it at once; a shortcut to a submenu opens it. Del on a shortcut empties it. Shortcuts belong to the save — a run starts with all three empty | |
Every ring has seven places. A ring with fewer entries comes up as an arc under the mouse, right where you clicked, and going back puts the previous arc where it was.
Every ring takes the keyboard — this one and the right-click ring out in the world alike. The arrows turn it (it wraps, so it cannot dead-end), Enter picks what is lit and Backspace goes one level back. Every sector also answers to the first letter of its name, underlined in the ring: W for Workshops, D for Demolish. Two names that start alike share out the next free letter (Build is B, Blueprints L), a filled shortcut takes its letter last so it never takes one from a fixed word, and an entry left without a letter is still one arrow away. The info panel spells the key of whatever is hovered out in brackets, and gives a locked entry’s reason in amber.
The centre always goes back one ring, and closes the menu on the top level — the same thing right-click and Esc do, so there is one rule for the way out. Space closes it from any depth. Only one ring is ever drawn, and inside an open category the back button grows to fill the whole middle — a target you cannot miss, carrying that category's icon and name above ◀ Back, which is what tells you where you are. The entries keep their band and every label its size; only the middle changes. Greyed entries come in two kinds that must not be confused — a padlock is a player goal (the workshop that unlocks it does not stand yet), a dashed outline is a planned placeholder that does not exist in the game yet.
The cell raster appears when you need it. At rest the grid over the world is barely there — the island is meant to look like land, not graph paper, and there is no minimap to consult either. The moment you place anything — a building, a wall run, a room, a floor, furniture, a road, or the demolish tool — it snaps to full strength, because that is the moment knowing where one cell ends is information rather than clutter.
There is no ready-made house. Every house is designed out of walls, doors and floors, and is whatever shape you enclose. Job buildings stay simply placed and the farm stays drag-to-size — a workshop is equipment, not architecture; only the home is the player's design.
Every building is drawn as the thing it is, so a settlement can be read from across the map without hovering anything: the lumber camp is a lean-to over stacked logs with a sawbuck beside it, the fisher's hut hangs its catch on a drying rack, the mason's yard is an open working yard of dressed stone, the hunting lodge pegs a hide out on its frame, the smokehouse vents its two plumes, and the planning table carries the settlement plan. Even the storage box and the water barrel are told apart by more than tint.
Every supply building has an action area, and outside it the building does not exist as far as automatic work is concerned:
- Campfire — 20 cells (its warmth reaches far less: 3.5)
- Well — 20 cells
- Stockpiles — 30 cells
A rule or a task that needs a fire, a well or the stores and finds none in range does not walk further — it stops and posts a red alert. That is the classic death: a companion starving beside a full larder, because the larder was 40 cells away. Your own right-click orders ignore the radius entirely and will walk any distance, which is exactly why the problem stays invisible until you automate.
So: build where the work is, and give an outpost its own stockpile zone — zones are free.
And the stores belong to a settlement, not to the world. Buildings that stand within 45 tiles of one another count as one settlement, chained along — two camps a hundred cells apart are two settlements with two larders. Everything a companion asks about the stores is answered by the settlement it is standing in: what it may eat, what a builder may fetch, what FETCH withdraws, and what WHEN stores < N reads. A blueprint is judged the same way: the ghost’s green or amber tint, a site’s cost and a workshop’s recipe colours count only the stores of the camp it stands in — an outpost never reads “we have it” off the home base. Out in the wilderness the nearest settlement answers. This is what makes moving on possible at all: without it, the fish left behind in the camp you abandoned would keep the new camp's larder looking full, and nobody would ever fish again.
One gesture is one order — and nobody builds what you did not ask for
Staking a blueprint is not an order — nobody moves. Committing a ghost lays the plan down and leaves it standing there, however many companions you had selected when you placed it. Right-click the site with them selected to put them on it; that click is the only thing that starts a build by hand. (The right-click straight out of the ghost does both in one gesture, which is why laying a plan and ordering it built still costs you two clicks and no Esc.)
A build order belongs to the commit that laid it. A wall run, a painted floor area and a stamped floorplan all stake many sites at once, and a single command still raises the whole thing — including a wall drawn leg by leg, corner after corner, until you end the chain. The distance between the pieces does not matter, so a wall with a gap in it goes up in one go.
- A blueprint from another order is left alone, however close it lies: builders whose own order is finished do not hand themselves on to the next site. To send a second pair of hands at a particular job, right-click that site, and they join that order rather than raising one segment of it.
- Building on its own is earned. A BUILD rule (T) and a claimed task both look for work across the whole settlement. Nobody builds out of habit.
Automation builds in the order you staked things out — first placed, first built. A companion on a BUILD rule or a claimed task takes the oldest site on the map, not the nearest. That is what makes the queue a queue: nobody latches onto the closest blueprint and stands there blocked while a site two cells further out waits, and companions on the same rule do not converge on one tile. So stake things in the order you want them.
It steps over exactly two kinds of site, and both are skips rather than demotions — a stepped-over site keeps its place and is taken the moment the reason goes away:
- a tile somebody is already standing on;
- a site nothing in reach can pay for. With wood but no stone, the house you drew second goes up while the road you drew first waits for its stone.
Your own right-click stands outside the queue. An order is an order: it works its own commit through to the end and is never skipped by anything. It only stakes a claim on the tile, so automation steps around a hand already at work.
Materials come from the nearest store to the site. A builder delivers what is in its own pack first; for the rest it walks to whichever store lies closer to the site — yard or stockpile, with no preference for either kind. A mason's yard full of cut stone right beside the wall is the wall's supply, instead of counting as "we have it" while the builder trudged to a stockpile across the camp. It also stops a builder loading up at the pile it happens to be standing on when a nearer store sits by the site: the walk with a load on your back is the one worth shortening. All three ways a site gets built — your order, a BUILD rule, a claimed task — shop the same way.
And when an order is dropped for want of materials, it says which of the two problems it is: there are none anywhere, or they lie out of the site's reach and the site wants a stockpile near it. The second is a siting mistake, and it is the one you can fix.
And a site nobody can walk to is dropped, not ground against. Every build walk aims at a cell a companion can actually stand on; when no such cell can be reached, the order ends with can't reach the build site in the log instead of a builder shuffling against the wall between them until a watchdog cancels it. The usual cause is a piece staked inside a sealed room — finish the door before you furnish it.
| Building | What it does | Note |
|---|---|---|
| Campfire | Warmth + hearth (fuel / cook) | 3 twigs or 3 wood to raise (see below) — three twig nodes, stooped for; action area 20; warmth radius 3.5, and it pulls in in bad weather. Raising it does not light it |
| Well | Drink, refill skins, cool off | Keeps flowing when water freezes; action area 20. A well dug in the jungle gives the jungle’s foul water, to be boiled like a pond’s |
| Bed / Stone hearth | Furniture | Not in the build ring at all — placed from the room panel |
| Straw bed / Bedroll | Furniture that also camps | The two pieces in both lists: the room panel and Build → Camp, so either can be thrown down beside the campfire before any room exists |
| Wall / Door | Enclose a room — the roof is a separate piece, and the warmth is a fire’s | 1 wood a cell, 2 wood for the door, both raw: a room needs no workshop at all. Walls are drawn as straight chained runs; the door is walkable and still seals the room. A Stone Wall (2 cut stone) is the better tier — see upgrading |
| Lightning rod | Takes every lightning strike within 10 cells | 6 stone + 2 flint, Build → Camp. It does not burn itself — see Lightning and wildfire |
| Bridge | The one river crossing you place yourself | Drag the deck bank to bank in one drag — the builders work it from the bank and never step onto it. A wide river is fine; you can also carry a half-finished crossing on by starting the next drag on the last plank, and the standing deck is left out of the new span. Both banks must be explored: a span onto black ground is refused, and the ghost paints unexplored cells red like blocked ones. Anything it will not lay says so and names the cell |
| Wooden Floor | Raises Mood inside a room | 1 plank per cell, and nothing else will do — build a lumber camp first; ground, not furniture, so beds/fires stand on it |
| Path | Walk 15% faster along it | Bare trodden earth. Costs no material at all — only 2.4 s of work a tile. Companions take it whenever the detour onto it pays, exactly like a road |
| Road | Walk 35% faster along it | Ground like a floor; 1 rough stone per tile and 2.4 s of work — no workshop needed. A road is paved straight over a path and replaces it when finished, so lay the route for free first and pave it where it earns the stone. A path cannot be laid back over a road |
| Camp flag | Makes the settlement it stands in a named base | 3 branches, never rots. Bases are named Base0, Base1, … in the order the flags go up, and a number is never handed out twice. Left-click the flag to rename the base and to set how far its ground reaches: a slider from 10 to 90 tiles (45 to start), shown as a blue ring on the map. The end of each companion card’s second line then says where that companion is — the base’s name inside a flag’s ring, Camp among buildings no flag claims, Away anywhere else (it changes a little way past the edge, so a companion working at the border does not flicker). A named base can be written into a rule — Haul to, Fetch … from and Stores at — which is how a supply line runs between two camps. Otherwise it changes nothing: tasks, stores and building materials are shared between nearby buildings with or without it. When two bases grow into one settlement the older flag’s name stands and the younger flag rests until they part again |
| Stockpile zone / Storage box | City stores (1 type/tile) | Zone is free; drag out on open ground, where it is staked out with four pegs and cord. Action area 30, and each pile takes only what its rules allow. How much a tile holds is the building's own number: reed basket 8 (10 reeds, no workshop — the store the first evening can afford), storage box 20 (cut stone + planks), cupboard 40 (8 planks, 1×2, and the only store that must stand inside a room), workshop yard 20 a cell |
| Fish trap | Catches while nobody is there | 12 reeds + 1 cordage, laid touching water. A fish every 8 in-game hours, holds 3, and stops dead when full so nothing in it ever rots. It never brings anything home — walk out and take the catch. Nothing can be put in it |
| Compost heap | Turns waste into fertilizer | 4 wood. 3 units of spoiled food → 1 fertilizer, or 2 units of night soil → 1; rain or shine, fed by hand or by a caretaker |
| Latrine | Where Relief is answered | 5 wood, in the Supply ring, payable from the pack; action area 24. Holds 8 visits and is then full, and it rots faster than most things. Nobody uses it unasked, it has to be emptied onto a compost heap, and what is in it smells for 2 cells around |
| Water barrel | Stores water (20 litres, clean or stale) | Winter/drought reserve; DRAW + HAUL fill it; serves the clean water first. Under the open sky it fills itself in the rain; under a roof or in a cave it catches nothing, which is what makes where you stand it a decision |
| Drying rack | Cures fresh food → preserved, in the open air — only what lies on it | 6 branches + 2 cordage — the cheap, early answer to winter, and it doubles as a stockpile (action area 20). It never reaches into the larder: load it yourself (left-click it), send a companion with a delivery, or let a haul rule fill it. A full rack stops and waits to be cleared, and its panel says which of the two it is doing. 1.6 units an hour at the listed pace, but the sky owns it: a clear day beats that pace, an overcast one crawls, and rain stops it dead (it keeps whatever it has already cured). A bet on the weather — the first thing a sky-reader is worth money for |
| Smokehouse | Cures fresh food → preserved, under its own roof — out of your stockpiles | The rack's opposite number twice over: 3 units an hour, completely deaf to the weather, and it feeds itself from the settlement's stores with nobody near it, always taking whatever is closest to turning. That is two reasons it costs 4 stone on top of its 8 wood. Doubles as a stockpile |
| Lumber camp / Fisher's hut / Mason's yard / Hunting lodge | Workshops | Each unlocks its trade for the rules (fishing also needs the rod in the pack, hunting the bow and a knife). The lumber camp, mason's yard, smokehouse, hunting lodge and kitchen also carry a craft queue — see below |
| Bloomery | Smelts iron ore into iron | 12 stone + 4 wood, 2×2, Workshops → Materials. Nothing but a craft queue: it unlocks no trade and no card, and anybody who takes tasks works it. The ore and the coal come out of the rock with a pickaxe |
| Smithy | Forges the iron knife, iron axe and iron pickaxe, and mends them | 8 stone + 10 wood + 2 iron, 2×2, Workshops → Materials — so the bloomery comes first. A craft queue like the bloomery’s, no trade, no card. A worn iron axe or pickaxe is mended here for 1 charcoal, not for more iron |
| Gatherer's hut | Workshop | 8 wood + 2 plant fibre, 2×2. Unlocks the gatherer trade, and carries the filter that says what is picked |
| Farm | Any of the nine crops, and five more on jungle ground (a Farmer tends it) | Dormant in winter — except in the jungle, which has none |
| School | Everybody learns faster: a deed counts half again toward a card, an hour of work earns half again the skill experience | 18 wood + 6 stone, 2×2, under Workshops › Care. Nobody works there, nothing is stored in it and it unlocks no word — see teaching |
| Chart table | Inks your companions’ field sketches into the one chart of the island, and opens it (N); unlocks the Cartographer trade | 16 wood + 4 stone, 2×2, under Workshops › Care, may stand indoors. Inking costs parchment and ink |
| Planning table | +6 rule blocks (that is its whole gift — a program cannot be copied from one companion to another) | Left-clicking it raises no task board — its window holds Move and Demolish and nothing else |
The workshop craft queue
A workshop is more than a token that unlocks a trade: the lumber camp, mason's yard, smokehouse, hunting lodge, kitchen, bloomery and smithy carry a craft queue — left-click one and tell it what to make.
Every workshop shows itself, moving, at the top of its window — and the picture is a readout, not decoration. It is the same yard you see standing in the settlement, in one of three states: idle (nothing ordered, nothing curing, an empty yard — a still picture), ready (there is work here — an order on the queue, produce in the yard, food on the rack — but nobody has moved it: the tool lies ready and the picture only breathes) and working (the saw saws, the mallet strikes, the plume rolls). Ready is the one worth reading: it answers "is this bench stalled?" without counting queue rows. The portrait hangs in both windows a workshop can open — the bench-and-yard panel, and the pile-style window a smokehouse or drying rack raises.
The crafter fetches the inputs itself, and it shops in one order: the workshop's own yard first, then its pack, then the settlement's stores. Logs lying in the lumber camp's yard become planks on the spot — nobody walks across the camp for wood past the wood, and nobody carries the difference home again. A cost the yard can only half pay drains it and takes the rest off the pack; only when the two together come up short is there a trip to the stores. It then works at the bench and pockets the output. Progress belongs to the order, not to the worker: two companions at one bench stack their effort, and someone called away mid-craft loses the seconds banked and never the materials. Carried kits — the stone axe, knife and pickaxe, bow, rod, bedroll, cordage, coat and hat — are not made here: they are made in the hands, at the crafting bench (U). The iron makes of knife, axe and pickaxe are the one exception: they are forged at the smithy and at no bench.
| Recipe | Made at | Costs | What it buys |
|---|---|---|---|
| Planks | Lumber camp | 2 wood → 3 planks | Doors, beds and boxes for a third less wood, and lighter to haul. Wooden floors take nothing else — and walls take no planks at all |
| Cut stone | Mason's yard | 2 stone → 3 cut stone | Wells, stone walls, the storage box and the stone hearth — a third more blocks out of the same stone |
| Charcoal | Smokehouse | 4 wood → 2 charcoal | Burns 3× as long as its log at a third of the weight — the fuel a trek carries, what the bloomery smelts over and what the smithy mends with |
| Bamboo planks | Lumber camp | 2 bamboo → 2 planks | The same planks out of the jungle’s light timber: a culm weighs a third of a log, so the boards for an outpost in the south need no felled tree |
| Leather | Hunting lodge | 2 hide → 1 leather | The windproof clothing, and the strap of the headlamp |
| Iron | Bloomery | 2 iron ore + 2 charcoal → 1 iron, or 2 iron ore + 1 coal → 1 iron | The bar every iron tool and the smithy itself are made of. Two recipes, one product: one lump of coal does the work of two charcoal, a little quicker, and saves the four logs the charcoal would have cost |
| Iron knife | Smithy | 1 iron + 1 wood | The better make of each tool: faster at the work and three times as long-lived as the stone one from the bench. The pickaxe is the dear one — six ore and the fuel to smelt it |
| Iron axe | Smithy | 2 iron + 1 wood | |
| Iron pickaxe | Smithy | 3 iron + 2 wood |
- Mason’s yard (cut stone) → the well and the stone wall.
- Lumber camp (planks) → the door’s twin the bed, the handcart, the wooden floor and all four pieces of room furniture.
- Both → the storage box and the stone hearth.
Demolishing refunds half of what the building was really paid for, and the salvage goes into the dismantler’s own pack first, a stockpile in reach second, and only then the ground. Upgrading is not demolishing — it has its own, kinder rule; see Build the better material over the old one.
And two fuels for one fire. The same reasoning carries past the build: a fire that can be raised from twigs can be fed with them. But a twig is kindling, not fuel: roughly 10 twigs to the log, and a twig node yields one twig, so a night fed on kindling alone is a great deal of stooping for very little heat. Kindling raises a fire; wood keeps it. Logs are always preferred where there are any — every fuel run shops the list in order, so the party falls back on kindling only when the woodpile is empty. Everything that feeds a fire goes through the one list: the right-click order, the REFUEL rule, a claimed task, the world hand and the window's fuel slot (which counts in logs but takes any of them).
Five more things burn, and the list has an order. A fire is always fed wood first; when there is none, the weakest burn goes in first and the best is kept for last — twigs, branches and bamboo, blubber, charcoal, coal. Both fires take all of them, and a hearth gets three times the burn out of each, as it does out of a log.
| Fuel | Burns, against a log | Where it comes from, and what it is for |
|---|---|---|
| Wood | 1 — about 80 s on a campfire | What every fire asks for first |
| Twigs | a tenth | Kindling: the forest edge, or a log split at the bench |
| Branch | a third | Broken off any standing tree, no axe needed — the fire before the first felled tree |
| Bamboo | a third | The jungle. Light to carry and quick to burn — better sawn into planks |
| Blubber | a third longer | A seal (6 slabs) or a polar bear (10), and no other animal. A slab weighs a third of a log, so one seal keeps a campfire through a night — the fire that needs no wood, and the only fuel the ice gives |
| Charcoal | 3× | The smokehouse, 4 wood → 2 |
| Coal | 4× — a third longer than charcoal | Dug out of the rock with a pickaxe. One lump is a whole fire’s load, so it goes in once the fire is down to its last log (or onto embers, or into an empty pit) and fills it; what was left of that log is given up. Every smaller fuel goes in only while the whole piece still fits. Fire or bloomery: the same lump cannot do both |
The crafting bench — made in the hands U
Everything you carry — axe, knife, pickaxe, shovel, bow, fishing rod and its hook, bedroll, cordage, torch, coat, fur coat, hat, handcart — is made at the bench, the Crafting tab of the companion window. There is no craft site on the ground and nobody walks materials to one: the bench is a pair of hands and a pack.
Pressing Craft is an order like any other, not a panel animation. The companion stands still and works, the progress ring sits over their head, and the same things that slow every other trade slow this one: tiredness, illness, and how practised they are (it trains the Crafting skill, which also decides how sound a tool comes off the bench). Closing the window does not stop it; any right-click calls it off, and so does a pack emptied out from under the work — which says so out loud.
Several different kits can be lined up on one bench. While something is being made, the button on every other kit reads Queue and puts that kit behind the one in hand. A queued kit’s materials are spoken for, not paid: the button refuses only when the pack holds nothing the queue has not already been promised, and says so. On the kit in hand the button reads Cancel, and takes off that kit only — the next one moves up. A queued kit whose materials went elsewhere while it waited is skipped with a message, and a new order by right-click still drops the whole queue. The queue is saved with the run.
The queue is on the screen, not in the window. A small plate stands directly above the event log whenever anybody is crafting: one row per crafting companion, one tile per entry with the product’s picture and how many are still to come, and a bar on the kit in hand that fills as it is made. Click a tile to take that entry off — nothing is lost but the work, because nothing was paid yet.
What a kit costs in time is real time out of somebody’s day. It is counted in game time and ranges from a fish hook at 12 minutes to a handcart at 2 h 48 min, with a torch at 24 minutes, cordage at 30 from lianas or 36 from hemp fibre, the knife at 44, the axe at 1 h 24 min, a sitting of four flint arrows at 1 h 36 min, the bow at 2 h and a fur coat at 2 h 12 min — each kit's own figure stands on its card in the tab. An afternoon at the bench is an afternoon nobody gathered, so who makes the kit, and when, is a decision. Double-clicking either picture of the thing (the big one at the top, or the tile at the end of the arrow) starts a run; an unaffordable kit still opens, so you can read what it would take before you go and fetch it.
Draw walls, close a room
There is no ready-made house, so this gesture is how you get shelter. Walls are straight runs, not freehand:
- Left-click plants an anchor.
- Move the mouse and a straight run follows it — it snaps to whichever direction you have pulled furthest, so you cannot draw a diagonal by accident.
- Left-click again fixes that run and starts the next one from its end: that is how you turn a corner. Fixed runs stay put, and a corner is exactly where a door goes.
- Right-click ends the chain. Esc discards only the run you are currently dragging, never what you already fixed.
Closing the ring stakes the room’s ground. Every raw tile inside it gets a Levelled Earth blueprint — dug over, raked flat, tamped down. It costs no material at all, only time: 2.4 seconds of somebody’s work a tile, so a nine-tile room owes about twenty seconds and a thirty-six-tile hall a minute and a half. A room is paid for by its inside as well as its edge — draw the room you need. A planned floor takes no ground: the bed can be staked the same minute the walls close, on earth or boards still waiting to be laid. The eraser cancels the earth like any blueprint, and a tile that is already floored gets none. To lay it by hand, right-click a free tile of the staked ground: the companion levels the whole room, the tiles under beds and the fire included (a bed or a fire on a staked tile keeps its own click). Without that, or a build rule, nobody lays it. Levelled earth is not in the build ring and is worth no comfort by itself — it is the bottom rung of the floor lane, what rushes and planks go on.
Buildings go on grass or sand only. Water and mountain refuse; a forest tile has to be felled first, and the grass it leaves behind then takes a building.
A roof — because a ring of walls is not one
Walls keep the wind out. A roof keeps the sky out. A closed ring stops the wind the moment the door goes in, and holds 18 °C for as long as a fire burns inside it — but until you put something over it, the rain still falls on whoever is inside, hail still hurts, and nobody dries off. A roof is a piece you build, under Structure → Roofs, dragged out like a floor.
| Roof | Cost a tile | What it gives | How long it lasts |
|---|---|---|---|
| Thatch Roof | 4 leaves | Keeps the sky off and nothing else — no added warmth | About a year. The cheap tier is the pressure to build the better one |
| Board Roof | 1 wood | Makes the room 22 °C instead of 18 | About four years |
Closing a room stakes no roof — you draw it yourself. A closed ring stakes its levelled-earth floor and nothing else; the thatch or the boards over it are yours to drag out, and a room you forgot to roof is a room it rains into. Drag the roof over the wall ring as well, corners and doorway and all, so it sits on the walls the way a real one does instead of stopping a cell short of the eaves: a 5×5 hut is 25 tiles, not 9. They are ordinary blueprints — build them like any other, or cancel them with the eraser — and the pillars a wide span needs still come with the drag.
A roof takes no ground. Build a bed, a fire or a wall under one and neither is in the other’s way; a bush, a stone or a dropped stack is not in a roof’s way either, so a lean-to goes straight over the grass it shelters.
Build the better material straight over the old one
You never tear the old piece down first. Draw the new one on top and it takes over where it lands. Three things work this way:
| Lane | From | To | What the better tier buys |
|---|---|---|---|
| Roof | Thatch (4 leaves) | Boards (1 wood) | 22 °C instead of 18, and four times the life |
| Wall | Wall (1 wood) | Stone Wall (2 cut stone) | 24 °C instead of 18, and it barely weathers — but every block waits on a mason’s yard |
| Floor | Levelled Earth (free, staked by closing a room) → Rush Floor (2 reeds) | Wooden Floor (1 plank) | Earth gives no comfort, rushes some, boards far more — and boards do not tread to mulch inside a year |
It only ever goes up. Boards never go back to thatch and a log wall may not be built back over stone — there is no reason to want it, and allowing it would make the eraser the wrong tool twice. A road is not a better floor and a door is not a wall: only the pairs above are the same piece in two materials, so drawing a road over your boards is still refused and a stone run drawn along a wall will not eat the doorway in it.
- The old material comes back: half of it, rounded UP — so a one-unit piece never returns nothing. It goes to a stockpile in reach, or into the stores; it is never dumped on the floor, which matters because a dropped stack blocks a plot — upgrading a whole room would otherwise bury it in rubbish you then have to clear before you could floor it.
- A blueprint you replace gives back everything delivered to it, in full. Nothing had been built with yet, so nothing is spent. Draw the better piece over a plan you have not finished and the old plan simply goes.
- The old piece keeps standing the entire time the new one is being built. The room is never briefly open or briefly roofless, a change of mind halfway costs you nothing but the walk — and you cannot stake an upgrade just to harvest the salvage.
Everything you build ages — and is mended
A settlement carries rent. Every piece wears down slowly, whether it is used or not, and an old base carries more of it than a fresh one.
- An ordinary building is roughly seven in-game years from useless — felt by a party that turtles one site for a whole run, invisible to one that migrates.
- Thatch is the fast end of the scale: about a year. A board roof about four. A stone wall barely weathers at all, and a road, a path and a camp flag never do.
- At 0 % a piece stops working: a workshop unlocks no job, a roof lets the rain through, a hut keeps nobody warm. Wear never brings it down — only fire does — and never loses what is stored in it — it simply does nothing until somebody mends it. Open a building and its condition is on the panel.
- Mending costs exactly what tearing the piece down would have given back, and it is real work. Press Mend this building to mark it, then right-click it with a companion — or leave it, and an automated party claims it off the task board like a demolition. The mender pays out of their own pack, so somebody has to be carrying the materials — unless a caretaker does it, who draws them from the stores.
- A roof marks itself the day it goes through: nobody is going to click four hundred tiles.
- In the jungle everything rots at double the rate — wet rot. A thatch roof there is half a year, an ordinary building three and a half, and a tool worked there wears out in half the time. An outpost in the south pays twice the rent of the same outpost anywhere else.
Furnish a room — left-click inside it
A self-designed house is not an object you can click, so the furniture panel hangs on the room: left-click any cell of an enclosed room and it opens, reading the room out and listing the furniture that may go in it. Pick a piece and the ghost only accepts cells inside those walls — otherwise it is an ordinary construction site: builders fetch the materials and raise it. It is the last layer of the click: on a cell with a roof in sight, a piece or a floor on it, click the same spot again until the room comes up. One more click, or Esc, closes it.
The window reads the room out in six lines, each coloured — green where the room helps, red where it costs — and each with a tooltip that says what it costs and what fixes it. The line under a piece of furniture standing in a room gives the short form of the same readout.
| Line | What it says | What to read it for |
|---|---|---|
| Temperature | The air in the room right now, and heated or unheated | It is not what the walls can hold: a room with no fire burning inside is as cold as the air outside and says so (−3° · unheated, in red). The tooltip names what the shell would hold with a fire lit |
| Cleanliness | Percent clean, and spotless / dusty / dirty / filthy | Dirt eats the comfort, and past a point holds down the Mood of everybody inside — sweep it |
| Comfort | Percent homely, or bare earth | Floor and furniture, less the dirt. This is what lifts Mood indoors |
| Roof | fully roofed, N of M cells roofed or open to the sky — and how many tiles have rotted through | Whoever sleeps under a gap sleeps under the open sky. Since nothing roofs a room for you, this is the line that tells you that you forgot |
| Furniture | How many beds, and table and seat or nowhere to eat | The two things Mood asks of a home beyond comfort |
| Size | Cells enclosed | A deep hall needs posts down the middle to bear its roof |
| Piece | Cost | Labour | What it is |
|---|---|---|---|
| Bedroll | 1 carried bedroll | none (unrolled) | The bottom rung: 70% of a bed's rest rate, no shelter from the cold. Made in the crafting tab (U) and laid out from Build → Camp or a room's furniture list. It lies 1×2 (R turns it). Right-click it: Sleep, or Pick up — picking it up returns the whole roll to the pack, so it survives a migration |
| Straw bed | 6 leaves | 2.5 s/cell = 5 s | A poor night's sleep — and the one piece that needs no room: it is in Build → Camp too, so it can go down beside the campfire on the first evening. Demolish-only (half refund): a thing you leave behind |
| Bed | 4 planks + 4 leaves + 2 twigs | 14.4 s/cell = 28.8 s | The proper one: rests faster and heals while you sleep. It lies 1×2 — press R before placing to turn it across |
| Stone hearth | Stone + wood, needs a mason's yard | 10.8 s/cell | The indoor fire: a campfire's warmth, ~3× the burn per log and a wider reach. One hearth holds a house through a winter night, and it cooks like any fire |
| Table | 2 planks at 2×1, more for a longer one | 7.2 s/cell | The most homely piece, and with a seat beside it the place a meal at a table is eaten |
| Chair | 2 planks | 5.4 s | A seat for the table; a little comfort of its own |
| Bench | 3 planks | 4.5 s/cell | A seat 1×2 that stands against a wall; a shade less homely than a chair |
| Cupboard | 8 planks + 1 cordage | 10.8 s/cell | 1×2, against a wall: furniture that also stores 40 units behind a shut door |
The two beds are told apart by their labour, not by their price — and at a glance: a built bed is carpentry (rails, a headboard, a turned post at each corner, boards laid under it), a straw bed is plainly a heap of straw lying straight on the ground. Their materials are nearly identical: a straw bed is five seconds of somebody's evening, a proper bed is nearly six times that. Nothing in the game is instant — an emergency bed at dusk costs a companion a moment, which is little, but it is not nothing. Helpers shorten both; the entry's tooltip quotes the time.
Mind where the bed lies. A straw bed in a hollow that floods is soaked from below, roof or no roof; a frame or any floor under it keeps the water out — the numbers are under Sleep.
A room is not yet a home. Its comfort is the average over its cells of the floor laid on them and the furniture standing in them, and that comfort lifts Mood while a companion is inside — doubled while asleep. Over-furnishing simply finishes the room; it is capped, never an exploit. And a room has to be swept: grime takes its share off the comfort, and the room panel carries the Clean this room button.
Taking it down is work — and it is how you leave
Demolishing is not a click. Pick Demolish and drag a rectangle: what it covers is marked with a red cross, not removed — one layer at a time, top down. A drag marks the roof you can see, and only the roof; with no roof in sight it marks what stands (beds, fires, walls); only where nothing stands does it take the floor. Drag again for the next layer. A roof switched off with “Show roof”, or hidden over somebody standing under it, is skipped — so to clear a bed out of a roofed room, untick the switch first. A planned roof always draws its ghost and is therefore always taken first. One single piece can be marked from its own window instead. A companion then has to walk over and take each piece apart, and half the materials go straight into that companion's pack — what the pack cannot hold goes to a stockpile in reach, and only what neither can take is left on the grass. Right-click a marked building to send your selection at it, and one order chains on to the next mark within 24 tiles, so marking a whole settlement and clicking once dismantles all of it. Drag over an already-marked run to take the mark off again. Marks are also posted as tasks, so a party running Take a task packs up on its own. Construction sites are still cancelled outright — nothing has been raised yet.
This is the gesture the migration is built on: mark the camp the evening before, and leave in the morning carrying it.
Remember a floorplan, stamp it down again
Under Blueprints in the build ring, Remember records a room you already built — hover it, click, and its walls, doors, floor and furniture are kept together as one plan. Stamp lays that plan down at a new site. It stakes out construction sites, not buildings: the materials and the labour are still owed, exactly as if you had drawn it by hand. Pieces that do not fit are skipped, so a plan laid over a boulder gives you the house minus a wall rather than nothing at all. The plan rides along in the save.
Record your house before you leave, and the next settlement goes up without you redrawing it — which is the whole point of a cycle that starts over stronger.
Farming a field is a year
A farm is not a larder you top up. It is a year with four steps in it — drag the plot, sow it, keep it weeded, cut it before the frost — and every one of those steps has a window that closes.
Drag the plot out in the build ring. The rectangle you drag is the field: 1 wood a cell, anything from 2×2 to 20×20, and the farmhouse sits outside it so nothing you paid for is wasted on a doorstep. The scarecrow standing in a field is decoration — it keeps no animal away. A 4×3 plot is 12 wood; a 20×20 plot is 400, and it will ask for four hundred of everything else too.
Left-click the farm to pick its crop — a dropdown with every crop in it, and a caption underneath that says what the field is doing and what it wants next. Pick before you sow: once a single cell is in the ground the choice is shut until the year is over, and on a perennial it never opens again at all. A right-click is the order to go and work it, not the picker.
Nine crops — everything edible that grows here can be farmed
The list is not a menu somebody chose: every wild stand on the map whose yield is food has a crop that grows it. What is missing from the table is missing because it is an animal — eggs, mussels, meat and fish are hunted, gathered and fished, and a field has nothing to say about them.
| Crop | Sow | Cut | Grows in | Per cell | Seed | Needs |
|---|---|---|---|---|---|---|
| Mushroom Bed | Spring, Summer | Summer, Autumn | 4 days | 3 mushrooms | mushrooms (itself) | Woodland within 3 cells |
| Herbs | Spring, Summer | Summer, Autumn | 5 days | 3 herbs | Herb seeds | — |
| Root Vegetables | Spring, Summer | Summer, Autumn | 6 days | 3 roots | roots (itself) | — |
| Vegetables | Spring, Summer | Summer, Autumn | 7 days | 3 vegetables | Vegetable seeds | — |
| Berry Patch | Spring | Summer, Autumn | 9 days | 3 berries | berries (itself) | Perennial |
| Hemp | Spring | Autumn | 9 days | 4 plant fibre | Hemp seeds | — |
| Wheat | Spring | Autumn | 11 days | 4 wheat | Wheat seeds | — |
| Rice | Spring | Autumn | 12 days | 6 rice | Rice seeds | Fresh water within 3 cells |
| Hazel Row | Spring | Autumn | 18 days | 2 nuts | nuts (itself) | Perennial |
A season is 7 in-game days and a year is 28, so "11 days to grow" is a season and a half. The four annuals with a Spring and Summer sowing window — mushrooms, herbs, roots and vegetables — are the ones a single plot can bear twice in one year — that is what the fast, cheap crops are for. Wheat, rice, hemp and the two perennials get one shot at it.
Five more grow on jungle ground and nowhere else. The climate is the third thing a crop may ask of its site, after water and woodland, and it is the one you cannot build toward: no field outside the jungle carries one of these, and no warmed room either. Pick one on the wrong ground and the field says needs jungle ground and sows nothing. What the jungle grows is carried out or traded, never transplanted.
| Tropical crop | Sow & cut | Grows in | Per cell | Seed | Needs |
|---|---|---|---|---|---|
| Banana Grove | Every season | 8 days | 3 bananas | bananas (itself) | Jungle · Perennial |
| Sugar Cane | 10 days | 4 sugar cane | sugar cane (itself) | Jungle — cut, it is gone, and is planted again from its own cane | |
| Breadfruit | 14 days | 2 breadfruit | breadfruit (itself) | Jungle · Perennial | |
| Pepper | 16 days | 2 pepper | pepper (itself) | Jungle · Perennial | |
| Cocoa | 18 days | 2 cocoa | cocoa (itself) | Jungle · Perennial |
Sowing costs seed — one seed a tile
The plot you drag out is also the size of the pouch you must have filled first, and nobody starts with one. Ordinary seed comes off the wild stand: forage wild herbs, hemp, wheat or rice and the seed comes back with the crop. That is the bootstrap, and it is why a first field is small.
Seed keeps forever; a carrot does not. Real seed items never spoil. The four crops above are sown out of the food itself, so their planting stock rots on the ordinary clock like any other food in the pack.
Payment is asked per cell, at the moment that cell is sown. Run out half way and the rest of the field stays bare — and a half-sown field never starts growing at all, it just sits there. The field panel tells you the bill up front ("needs 37 Wheat Seeds"), which is the number to read before spring.
Tend it, then cut it
Once the last cell is sown the clock starts, and growth is pure time, never work — nobody can hurry it. The field walks through five visible steps, sprouting → leafing → standing → heading → ripe, and it looks like each of them; "the crop stands ripe" goes into the event log.
What work buys in the middle is quality. Care runs down every day the field is left alone — fast on the greedy crops (vegetables in under 3 days, herbs in 3.3, roots 3.6), slow on the patient ones (hemp 5.6, hazel 10) — and a tended cell puts it back. Weeds are drawn on the tiles, up to three tufts a cell, so a neglected field is visible from across the map. Care locks the moment the crop ripens: after that, weeding buys nothing and the harvest is already decided.
Two crops are perennial — the frost does not take them
Of the crops that grow anywhere, the Berry Patch and the Hazel Row are bushes, and a bush does not die in the winter. They go bare for the winter and come back: the plants stay in the ground, the year closes without unsowing anything, and they never ask for seed again. Sow once, in one spring, and that plot bears every year for the rest of the run. A picked patch starts filling again immediately.
The price is the ground. The plot is committed for good — the crop dropdown never reopens on a perennial, so changing your mind means tearing the farm down and building another. And neglect carries over: a berry patch you let go stays let go into the next year, where an annual starts fresh. Four of the jungle’s five are perennials on the same terms — planted once, bearing again and again, the plot committed for good.
Who does the work
Three ways, and they are the ordinary three. Right-click the farm with somebody selected and they work whatever the field is asking for. A WORK: farmer rule does the same without being told — and since the field is often asking for nothing, that rule declines cleanly instead of parking somebody in a fallow plot: out of season, mid growth, already cut, wrong ground, or no seed anywhere. It falls through to the next rule in the program, which is what you want. The farm also posts the work on the task board whenever the field wants something, so one "Take a task" rule covers it.
An order to work a field that wants nothing says which kind of nothing it is — "nothing grows here this season — the field is dormant", or the field's own status line — instead of silently doing nothing.
The harvest goes into the farm's own yard, which holds 20 units of one kind like every workshop yard, and overflows into the reaper's pack. Nobody walks it to a stockpile as part of farming — that is a haul, posted automatically once the yard is 75 % full. The yard accepts every crop and every seed, which is deliberate: last autumn's seed-back is exactly where next spring's sower looks first.
The kitchen a dish does what a catch cannot
Cooking was one thing for a long time: a raw catch on a fire's pan comes back cooked, worth a little more and keeping a little longer. The kitchen is the other kind of cooking. A dish is a real recipe with two or three ingredients in it, and it leaves something behind in whoever eats it.
Raise one for 10 wood + 6 stone (2×2). It unlocks no job — there is no cook trade and no cook card. It unlocks the Cooking skill instead, the way herbalism works: trained by standing at the bench, worth +0.8 % a level on the work clock (so +80 % for a master at level 100) and nothing else. Skill never changes what comes out, only how fast.
Left-click the kitchen and click a recipe to queue one — one click, one dish. From there the building posts the cooking itself, so anybody running Take a task will pick it up and nobody needs a rule of their own; a right-click with a companion selected sends that one over instead. The cook fetches the ingredients out of the stores. The finished dishes go into the kitchen's yard — two tiles, twice the usual — and a hauler empties it like any other.
| Dish | Takes | Gives back | Keeps | Work | And leaves behind |
|---|---|---|---|---|---|
| Hearty stew | 2 meat, 1 roots, 1 vegetables | 150 nutrition, 0.5 kg | 2 days | 18 s | Warmed — +4 °C for 6 h |
| Fish soup | 2 fish, 1 herbs, 1 roots | 120 nutrition, 0.5 kg | 2 days | 16 s | Warmed — +2.5 °C for 8 h |
| Herbed roast | 2 meat, 1 herbs | 110 nutrition, 0.4 kg | 4 days | 14 s | Strong — +12 % work speed for 8 h |
| Forest bake | 2 mushrooms, 1 eggs, 1 vegetables | 105 nutrition, 0.4 kg | 3 days | 16 s | Strong — +8 % work speed for 10 h |
| Travel cakes | 2 wheat, 1 nuts, 1 berries | 90 nutrition, 0.2 kg | 12 days | 20 s | Swift — +10 % walking speed for 10 h |
| Herb broth | 2 herbs, 1 roots, 1 mushrooms | 55 nutrition, 0.3 kg | 2 days | 12 s | Rested — the next night's sleep gives back +20 %, for 12 h |
The hours are in-game hours. Whoever has eaten one wears a single green badge; hover it and it names every boon that is running, how strong it is, which dish it came off and how much is left. The four boons stack with each other — a warmed, strong, swift, well-slept companion is a companion who has been cooked for properly — but a second dish of the same kind replaces the first rather than adding to it, including downwards: a fish soup eaten while a stew is still running trades four degrees for two and a half, and says nothing about it.
The boon fires on the swallow, and nowhere else. Cooking one grants nothing, carrying one grants nothing, and it is one dish to one companion. The Warmed boon is capped like clothing: it is added under the same 20 °C comfort ceiling and does nothing at all on a mild day or beside a fire — it is insulation you cannot take off, not a heater.
Three of the four boons can be cooked without hunting or fishing. The forest bake answers the roast for work speed, and travel cakes and herb broth need neither — the broth is entirely forageable. So settle inland, settle before you have found the herds, and the kitchen is still worth building. Warmth is the exception: both dishes that hold the cold off want meat or fish, so the one boon the winter is actually about is the one an inland forager cannot cook their way to. And with the farm taking nine crops, every ingredient in these six recipes except fish, meat and eggs can be grown on purpose: a kitchen is a lottery on what the ground offers early in a run, and a supply chain with fields at one end once the base is standing.
Zones — write on the map Y
A zone is a name, a colour and whatever ground you paint into it — "North woods", "Winter camp", "Do not touch". They cost nothing, block nothing, and may overlap as freely as you like: a cell can belong to every zone at once and none of them owns it. This is the map as a notebook, not as a rulebook.
Y, or the Zones sector of the build ring, opens a full-screen overlay: the world fades back and the zones come forward in their colours.
- The list on the left names every zone with its colour and its size, and clicking one flies the camera to it.
- The bar along the bottom is grouped as ZONE · TOOL · COLOUR · CLOSE: make, rename, recolour (ten hues) and delete.
- Pick up the brush or the eraser. Both are buttons you can see — and the right mouse button always does the other one, so painting and correcting are one gesture. Free-hand strokes come in four widths, or drag out a rectangle.
- The eraser takes back only the cells you drag over, and shows you which: it crosses out the ground it would actually lift and leaves the rest of that zone — and any zone underneath it — alone.
- Only explored ground can be zoned. The fog is not a map to draw on.
Zones belong to the settlement, are saved with the run, and stay behind when the party moves on.
Give a job building a zone — work this wood and no other
Left-click a lumber camp, fisher's hut, farm, mason's yard, hunting lodge, healer's hut or gatherer's hut and pick a zone under Work zone, and that trade works inside those cells and nowhere else: the wood you marked, the quarry on the ridge, that stretch of shore. This is what zones are for.
- The zone replaces the search range, it does not narrow it. A wood on the far side of the valley is worked as readily as one behind the camp. An instruction that only applied within shouting distance of the building would switch itself off at the moment it started to matter.
- It fences what is WORKED, not where somebody stands. Paint the trees, not the path to them — a miner will stand on unpainted grass beside a painted rock face. One rule for every trade.
- "Anywhere" is the default, and nothing changes for a player who paints nothing.
- An empty fence is not a fallback. A zone with nothing left to work — felled out, out of season, across a river nobody can cross — makes the trade stop and say so, naming the zone, rather than quietly going back to the whole map. Seeing companions work ground you had explicitly fenced off, with nothing on screen to explain it, is the worse of the two.
- Deleting the zone does fall back, silently and for good: the binding is simply gone.
- The binding is per building and survives a save, so two lumber camps may each be pointed at a different wood.
The hauler reads them the other way round. A companion running that trade while standing inside a zone works that ground instead of its ordinary round — so a zone is how you say "clear these workshops and no others". Overlapping zones count as one area, and that fence only applies while the hauler is standing in one: a zone drawn right across the map is no use to somebody who never sets foot in it. The difference is which end holds the instruction — the hauler reads the ground under its feet, a job building carries an order you gave it.
Console: zone (list, new, name,
color, paint, erase, tool, del,
go, at, open/close) — every branch presses
the same buttons the overlay does, the fog refusal included. jobzone lists every standing
job building and what fences it; jobzone <zone|none> binds one on the nearest.
Automate — press T T
Automation is built, not switched on. Write each companion a program — an ordered list of rules reading WHEN condition(s) → DO action UNTIL release. Order is priority.
- WHEN — sensors: the body's bars (Health, Mood, Relief and Hygiene too), Wetness, Sickness, the clock, the season, precipitation, city stores, the own carry, the waterskin, fire fuel, a waiting site, a workshop's yard fill, Sky turning (harsh weather coming — through that companion's own eyes) — and, if you find its card, the daylight left today, and In the dark (it is dark here and nothing of yours is burning — night on the surface does not count), and Dragon near (the dragon within 48 cells). Conditions AND together — and every other way of joining them is a found word: OR, is not, UNLESS, ANYONE.
- DO — actions: the trades (fell, fish, farm, quarry, hunt, gather, heal, caretake), drink, eat, sleep, wash, off to the latrine, clean a room, warm/cool, tend fires, build, draw water, boil water (carry the skin's pond water to a fire and boil it clean), haul the carry to stores, fetch items into the carry, take herbs (one dose against whatever they have caught, from their own pack), read the sky (the hour-long vigil, written down as WHEN Clock 08–10 → Read the sky), hauler (empty the workshop yards into the stockpiles), off to the latrine, wash, clean a room, caretaker (the trade with no workshop), light a torch (from a flame already in reach — it never walks to one), take cover (the nearest roof or rock within 30 cells, then stay — WHEN Dragon near → Take cover), take a task — the nearest thing a building in the settlement is asking for — and free time, which is what a companion does when nothing else applies (below).
- UNTIL — the latch: "fell wood UNTIL stores ≥ 60" keeps a rule going past its trigger so companions don't ping-pong at the threshold. ONCE is the opposite end: at most one run a day. Both are found, like all grammar.
- Nothing happens that nobody asked for: no companion carries its load home on its own. A full pack stops the work that would fill it further (harvesting into a full pack destroys the node for nothing) and the rest of the program runs on. Bring it in by right-clicking a stockpile, with a WHEN Carry full → Haul rule, by taking a task — a task's goal sits in the city stores, so delivering is the last leg of it — or by putting somebody on the hauler trade. Any haul keeps a ration of every food kind and of drinking water: the load goes, the lunch stays.
- A supply line between two bases. Once a camp flag stands, Haul and Fetch take a third word: here (the nearest store, as before) or a base by its flag’s name, reached at any distance — and the Stores condition can watch another base (Stores at Base0 wood < 20). Two rules make the line: WHEN Carry wood ≥ 1 → Haul to Base0 above WHEN Stores at Base0 wood < 20 → Fetch wood ×10 from North camp. A load named for another base is never dropped into the pile you happen to stand on, and a named fetch takes only from that base. Tear the flag down and every rule naming it stops — it reads a fallen flag and does not fall back to the nearest store; raise a new flag and pick it again.
- Blocks are budgeted: a rule costs 1 block, +1 per extra WHEN, +1 for an UNTIL; the whole settlement shares one budget (base 30, +6 from a Planning table). Rules past the budget don't run — top rules are paid first. The budget is drawn as rivets punched into the window's leather — one driven rivet per block spent, green for the planning table's extra blocks, red for overspend.
- Every rule has an on/off switch — and a dark one still pays. Switch a rule off and it is skipped, but nothing below it moves up and the budget does not grow back. The switch is a thinking tool, not a discount: silence one rule, watch what the rest of the program does, switch it back without having lost the sentence.
- A new rule starts empty, and an empty rule is free. + Add rule picks nothing for you — no action, no trade, no condition — and opens its drawer straight away. Until you finish it the line reads unfinished, it costs 0 blocks and it never runs. Its WHEN is a sensor dropdown with nothing chosen, exactly like its DO: picking a sensor is adding the first condition, and only then does the + for a second, AND condition appear beside it. Leave the WHEN blank and the rule reads ALWAYS — it fires whenever nothing above it does.
- Every word wears its glyph in its colour — amber for WHEN, blue for DO, violet for UNTIL and the other grammar — in the rule line and on a closed dropdown alike.
- The action, trade and sensor dropdowns open as a word list with the card beside it. The words this companion has learned stand first, each with what it costs in blocks (free in green); below a still to learn line come the locked ones, sorted nearest first, each showing how far along it is (7/20 over a thin bar) with the nearest marked next. Hover a word and its full card stands beside the list — rule text, worked example, and for a locked one the errand that earns it. A word the program already uses says so (in 2 rules, and under the card which ones). A word you may write but whose work would not run yet carries a red tag — no workshop, no table — so a rule that would read blocked is known before it is written.
Every word is a card — and every companion earns their own
You cannot write a rule out of words the companion does not own. Each sensor, each action, each trade and each piece of grammar is an automation card. A deck belongs to the companion, not to the party: what one of them learned, the next one still has to learn for themselves — by the same deeds, or by being taught. Nothing is unlocked at the start of a run, for anybody.
There are exactly two ways a card is had, and the rim says which: a bronze card was worked for — doing that thing by hand, so many times — and a gold one was found, lying out in the world. The symbol and the writing say what kind of word it is: amber WHEN, blue DO, violet grammar. All violet is gold: grammar cannot be worked for at all.
Work done by a running rule earns nothing, or automation would unlock itself. Your orders, your own hands and the work of a claimed task all count.
The deck, and reading a locked card
The Cards tab (Z, beside Automation in the companion window) is where a deck is read and spent. Every card is there at full size, locked ones included — because the locked half is the part worth reading:
- A shut card is dashed and grey, and where an open card prints its block cost it prints how to get it instead ("Sensor · by hand"). Under the symbol runs a tally with every fifth stroke struck through — one stroke per deed on a card costing up to 30, one stroke per ten deeds above that (a struck group of five reads 50, and the stroke being cut is part-inked) — and the count again in figures at the foot.
- One card at a time burns amber — the one closest to opening. Never two, so a glance at the deck answers "what is nearly mine?" without counting.
- A card that can only be found lies face down: a padlock, its name, and the line saying where its kind tends to lie. That is the whole map you get, and it is enough.
- Found a scrap of grammar? Hand it to whoever should have it (the transfer window), then spend it here or double-click it in the pack (E). Either way a dialog asks first: it lays the card face up beside what it costs (the paper is gone, the word stays) and how many copies are left to hand on. Learn it spends the card and that companion knows the word for good; Keep the card or Esc keeps it.
Picking one up off the ground is a moment too — and it stays sealed. Lift one of the eight legendary grammar words and the card climbs out of the world into the middle of the screen, face down, in a well of light, with the finder's name under it and a sound of its own. It never shows the face. A find is a promise, not the payoff: the word is still sealed, still has to be carried home and spent in the deck (Z), and the card turning over is what pays that off at the shelf. The envelope says where it was found and that it still has to be learned. A click sends it early, it never blocks an order, and a second copy of a word the party already speaks is lifted in silence — a duplicate cannot be learned.
Earning one is a moment. The card turns over in the middle of the screen to a fanfare, the world dims around it, and the name of whoever learned it stands on a plaque underneath. A learned card stands for about 6.6 seconds and a found one for 8 — long enough to read the rule and the flavour line; a plain look is 4.5 s and lifting a find off the ground 5.7 s. It never takes the screen away: orders still go through underneath it, and a click sends any of them early. The learner is selected the moment the card arrives (two at once, both), and the feed line and the plaque end on T — press it and their rules open, ready for the new word. The camera stays put (F looks at them), and the game’s pick is no takeover: it counts as no intervention, and their program’s work stays the program’s.
And the moment is not one-shot. The line the event log writes when a word is won is inked in that card's own colour — amber for a WHEN, blue for a DO, violet for grammar — and hovering that line stands the whole card back up above the log window, silently, until you move off it. A card you missed on a busy screen is never lost. Those lines also count as ordinary news rather than chatter, so they survive the quieter event-log verbosities.
What each card costs in deeds
The counts follow how often the thing happens, not how important it is: a companion drinks three times a day, so twenty drinks are a week of living. One sunrise buys the Clock, so nobody's deck is empty after the first night. Cards that watch the same thing share one counter — but not always one price, so a WHEN can arrive before the DO it is written for. The line the deck draws is deed before word: what a companion has already done by hand — hauling, drawing water, feeding a fire, a couple of nights' sleep, a day off duty — is theirs within the first days. Hunger and Thirst take about a week, so until then the drink and meal rules have to hang on the Clock.
| Card | Earned by | Deeds |
|---|---|---|
| Clock | Living through one sunrise. | 1 |
| Sleep · Tiredness | Nights slept through. | 2 |
| Dragon near · Take cover | Getting a companion under cover by hand — a roof, a roofed building, rock or a cave — while the dragon flies near. | 2 |
| Season | Turns of the year — the slowest counter here, and nobody can hurry it. | 3 |
| Sickness | Watching a companion fall ill — four separate illnesses, so one bad week does not hand it over. A fever is a thing the whole camp sees, so it is marked on the deck of every party member, not only whoever was ill. Nobody can work for it. | 4 |
| Take herbs | Doses actually given — by hand off the sheet, never one the rule gave itself (automation cannot feed itself). Picking herbs does not count: the player who nurses a poisoned companion through the sheet is doing the very thing the rule automates. | 4 |
| Light a torch | Torches and lamps lit by hand — at a fire, at a lit torch beside you, or off a flint; the key, the order and the fire window all count. A counter of its own: feeding a campfire does nothing for it, and a light a rule strikes teaches nothing, like every other deed. | 5 |
| Cartographer | Sketches inked by hand at a chart table. | 5 |
| Lumberjack | Trees felled — a whole tree counts once. | 10 |
| Stonemason | Rocks broken, marked per broken rock — and per cell of rock dug. | 10 |
| Draw water · Waterskin | Litres drawn at the water. Draw water takes no number — it fills the skin to the brim, then every water bag the carry weight allows, and stops. The walk to the water costs the same whatever comes back in it, so any answer below full only bought a second trip; Fetch still asks how many. | 10 |
| Boil water | Skinfuls boiled clean. | 10 |
| Fire fuel | The first rung on the fire counter (see the fire row below) — the WHEN arrives before the Tend fires it is written for. | 10 |
| Clean a room | Dirty rooms swept clean by hand. Nobody needs the word — a dirty room posts itself and Take a task sweeps it; the card buys a program that keeps the house without the board. | 10 |
| Relief | Visits to a latrine that you ordered. | 15 |
| Hygiene · Wash | Washes you ordered, at fresh water or a well. | 15 |
| Healer | Doses handed to somebody by your own hand — the counter Take herbs rides, further along (the healer's hut). | 15 |
| Caretaker | Chores done by hand or on a claimed task: a building mended, a room swept clean, a load of night soil carried to the compost heap. | 15 |
| Drink · Thirst · Eat · Hunger | Every mouthful counts, not every meal — including a bite fed by hand from the character sheet. A drink counts once it is taken to the full. | 20 |
| Health · Mood | Living through it: an episode is that companion's own Health falling below half, or their Mood below 35 %, and it counts again only after they have recovered. Each has its own counter, on the deck of whoever it happened to. Nobody can work for these, and a running program does not stop them counting. | 20 |
| Build sites · Site waiting | Buildings finished — a building is days of work, not a repetition. | 20 |
| Fetch items · Carry item | Goods taken out of the stores by hand. | 20 |
| Wetness · Precipitation | Spells of rain, snow or hail the party lived through — every party member's deck is marked as each one arrives. | 20 |
| Warmth · Warm up · Tend fires | Fires lit and logs fed to one by hand — it marks per log, however the log gets there: an order to tend the fire, a log fed on the night watch, fuel put in through the fire window or the building panel, or dropped on the fire in the world. A fire is fed several times a day. | 20 |
| Stores · Carry full · Haul to stores · Take a task | Loads carried to a stockpile by hand, and every way of shelving one counts: the group deposit order per delivery, the transfer window once per visit (a load is the walk there, not the number of stacks you drag), and the world hand per stow. Goods lifted off a pile and put straight back down are tidying, and never count. | 20 |
| Hauler | Stacks lifted off the ground by hand — one mark per stack, not per unit. This is its own counter and it is kept apart from Take a task's: the lift and the put-down are two halves of one trip and must not pay each other's cards. | 20 |
| Off to the latrine | The same visits as Relief, five more of them — the WHEN arrives before the DO. | 20 |
| Free time | In-game hours spent off duty — the only counter measured in hours rather than repetitions, because the deed has no repetitions in it. It is also the fastest-filling counter in the system: an idle companion banks an hour every 45 real seconds, so twenty is the second day for anybody left standing about. No rule can farm it for you — a program that fires cannot also be doing nothing. | 20 |
| Craft queue · Yard fill | Orders worked off a bench. A workshop has to stand first, so this one is late twice over. | 24 |
| Read the sky | The same weather counter as Wetness, further along — each spell of rain, snow or hail that arrives. Nobody can work for the weather keys; you have to be out in the years. | 30 |
| Fisher · Farmer · Hunter | Completed pieces of that work — a landed fish, a harvest, a kill dressed. Not strikes. Dressing takes a knife, so a hunter without one earns nothing here. | 30 |
| Gatherer | Handfuls gathered from a wild stand — berries, nuts, roots, reeds, twigs, loose stones — each completed pick that yields something. Gathering is the opening itself, so this is two or three days. Herbs do not count. | 50 |
| Sky turning | The same weather turns as Read the sky, most of twice over: knowing a shower falls and knowing one is coming are two different lessons. | 56 |
| Cool off | The second rung on the drink counter, so it never arrives in the same breath as Thirst and Drink. | 70 |
| In the dark | The last rung on the fire counter — seventy logs and lightings. Its partner Light a torch is not on this counter at all: it is five torches lit, so the DO is usually in the deck long before the WHEN it is written for. | 70 |
A newcomer arrives part-taught — and a word can be taught on
Somebody who joins the party does not start from nought. On joining they are handed about 70 % of what the settlement already knows:
- Card tallies, part-filled. For every worked-for word somebody in the party owns, the newcomer's tally starts at 70 % of its count — a party that has earned Drink hands over 14 of the 20. Where several cards share a counter, the share is taken off the cheapest one the party knows. It is always a tally, never the card: the last strokes are theirs to do.
- Skills. 70 % of the party's average level in each skill, rounded down — the average, not the best, so one master does not make every recruit a journeyman.
- A settlement can only pass on what it has learned. The first recruit of a run arrives with next to nothing and the eighth nearly trained, so growing the party gets easier, not harder. The violet grammar is never part of it.
A worked-for word can be taught. On the deck (Z) a locked card shows Learn from … whenever a companion in the party owns that word. Press it and the teacher walks over and the two sit down together: every 1.8 in-game hours cut one stroke on the student's tally, and both of them do nothing else until it is full — a twenty-deed word from nought is a day and a half of two people, a recruit's last six strokes an afternoon. The last stroke opens the card exactly as the deed would, and no building is needed.
A school makes a deed count for more, and does nothing else. While one stands in working order every deed counts half again toward a card (two deeds cut three strokes), every hour of work earns half again the skill experience, and a lesson is over in two thirds of the time; a second school adds the same again. It never lowers what a card asks for, and it hands nobody a word.
Found words cannot be taught, only given. The violet grammar is paper: hand the card itself over in the transfer window and let them spend it.
Grammar is found, and only found
| Word | Blocks | Tends to lie | What it lets you say |
|---|---|---|---|
| AND — The Knot | 1 | A cairn | A second WHEN on one rule; both have to be true before it fires. |
| UNTIL — The Long Hold | 1 | Among standing stones | The latch: once a rule fires it holds until its UNTIL is met, so nobody ping-pongs at a threshold. |
| ONCE — The One Time | 1 | A hot spring | Caps a rule at one run a day — for the errand worth one walk and not five. The day is spent the moment the rule starts, so a run cut short still counts, and the line then reads spent today. |
| is not — The Mirror | 1 | Underground | Turns a WHEN around: the rule fires while the condition is false. |
| OR — The Or | 0 | Underground | Flips the joiner between two conditions from AND to OR. "Warm up when freezing or wet" stops being two rules. |
| UNLESS — The Exception | 0 | A crater lake | A veto on the whole rule, sitting in the WHEN band: "WHEN Site waiting → Build UNLESS Precipitation" keeps the party out of a downpour without a second rule. It stops a rule starting only — one already latched by its UNTIL sees it out. |
| ANYONE — The Other | 0 | An old camp | Aims one WHEN at the whole party instead of the companion running it: "WHEN ANYONE Sickness ≥ 25 → Fetch herbs" is one companion keeping an eye on the others, which nothing else in the language can say. |
| Daylight — The last light | 1 | Among standing stones | The one findable sensor: hours of light left today, 0 once dusk has fallen (the day runs 09:00–21:00, and it never counts tomorrow's light, so a night rule stays quiet all night). WHEN Daylight < 2 h → go home turns the commonest death in the game into something you can program. |
Buildings ask for hands — Take a task answers
Every standing building watches its own needs and calls for somebody: a fisher's hut calls for a fisher while stores hold under 20 fish, a fire under 30 % fuel calls for tending until it is back at 75 %, a fire calls for boiling while the stores hold under 10 litres of clean water (a taker draws pond water, boils it and barrels it), a workshop whose yard has filled calls for it to be cleared onto a stockpile, open construction sites and demolition marks post themselves, and so do a latrine that is half full (only while a compost heap has room for it) and a room past 30% grime (which stays posted until it is swept clean). One 1-block Take a task rule goes and does the nearest of them, so a new recruit is just one more pair of hands — and doing one does earn cards, unlike a rule of your own. Workers only seek what the party has already discovered — and still remembers: on ground whose contents are forgotten no rule finds a bush, a loose stack or a carcass, though trees and water there are still known. A companion takes work only from the settlement it is standing in, and never from further than 120 cells: a far camp posts its own tasks and only somebody who is there picks them up. Tending a fallen companion is exempt — it has its own reach.
The rule needs a Planning table to run — the card is what lets you write it down, the table is what makes the settlement organised enough to answer. Without one the rule simply reads blocked and waits.
Read the program while it runs
The editor is also the debugger: every line shows what it is doing right now, and time keeps passing while you read it.
| State | Meaning |
|---|---|
| ACTIVE | This is the rule being worked. |
| latched | Its trigger is over, but the UNTIL is holding it on. |
| blocked | Triggered, but it cannot run — the target or the source is missing (nothing to fell in range, no pile that takes the load, or the tool: a Hunter with no knife in the pack neither shoots nor dresses). It retries every few seconds while the rules below it carry on. |
| waiting | Not triggered. |
| outranked | Triggered, but a rule above it is running. |
| despondent | Every line reads this at once: the companion's Mood fell under 15 % and they refuse the whole program — eating and drinking included — until it is back over 25 %. Only direct orders get through, so a companion starving beside a full larder is fed by hand, not by fixing the Eat rule. Saving and loading does not lift it. |
| no line is ACTIVE | The program is running and nothing in it applies. That is not a third state: the companion falls through to free time and the activity line says "Free time (no rule applies)" — naming the gap in the program, which is the half you can act on. |
"Why is she just standing there" has two answers, and they look different. A companion who is strolling a few steps about one spot is at free time — the program had nothing to say. One standing perfectly still is blocked, despondent, warming at a lit fire, or a hunter holding a stand. Watch the feet before you read the editor.
A program is as blind as an order. In the thick heart of a fog bank, as in a cave with no light, a companion with nothing burning feels their way: whatever walk a rule sends them on goes one cell at a time in a straight line, at about a third of the pace, and stops at the first thing in the way. A torch or lamp alight in hand, a mate's, a fire's glow or a roof ends it. In the dark does not read fog — that sensor is true only underground — so WHEN In the dark → Light a torch will not light the way through one, and neither will Precipitation (fog drops nothing). No sensor reads fog: strike the light by hand.
A small program that keeps somebody alive through a winter looks like this:
| WHEN | DO | UNTIL |
|---|---|---|
| Season is Winter | Fisher | — |
| Wetness ≥ 50 | Warm up | Wetness < 1 |
| Carry herbs < 2 AND Stores herbs ≥ 1 | Fetch herbs | — |
- Fill them up before bed: WHEN Clock 20–21 → Eat UNTIL Hunger ≥ 95 and, below it, WHEN Clock 20–21 → Drink UNTIL Waterskin ≥ 99. Eat goes first — fetching water can take the whole hour, and a meal skipped at eight is a waking at midnight.
- Hold the everyday drink on Thirst, not on the skin: WHEN Thirst < 50 → Drink UNTIL Thirst ≥ 95. A sip from the skin can never fill the skin, so an UNTIL on the waterskin turns every thirst into a walk to the water. Keeping the skin full is a rule of its own, low in the program: WHEN Waterskin < 30 → Draw water UNTIL Waterskin ≥ 99.
- Put Sleep above Warm up. A house bed is the warmest place a base has; with Warm up on top, a sleeper cooling on the way to bed turns round for the campfire instead.
Free time — off duty is something they do
A companion with nothing on their plate does not stand like a fence post: they stroll a few cells around the spot they stopped at and stay there. It is the same state whether automation is switched off or switched on with no rule that applies right now — there is no third state between working and off duty, and both bank the hours.
- At a lit fire nobody moves at all. If you parked them at the campfire, that is where they stay.
- Leisure never crosses a threshold. Indoors they stay indoors, outdoors they stay outdoors — house, cave or the open sky, and a roof counts as the same place as the room under it. Nobody wanders out of the shelter you put them in, and nobody wanders into a house either.
- An errand suspends free time, it does not end it. Only a need is an errand: after a drink, a meal, a warm-up, a cool-down or a dose they come back to the same spot and the afternoon reads as one afternoon. An order, a work shift, a haul or a night in bed moves the spot — so where you send somebody is where they idle, and an errand that ended outdoors starts the next stroll outdoors rather than marching back in through the door.
- The written rule walks them home first; nothing else does. A Free time rule sends the companion to the nearest burning fire — with none lit, to a house or a bed; failing that, to a cold fire ring — and the stroll happens there (Free time at home (Campfire)). An errand above the rule ends with the walk back home. Off duty, or with no rule that applies, they stay exactly where they stand, as above; with nothing built in reach the rule does the same.
- Write it last. As a written rule Free time is how you schedule an evening off — every rule above it still wins, so a thirsty companion goes drinking (the line says so) and then walks back. It takes no UNTIL on purpose: a latched fallback would refuse to give way to the rules above it.
- A rule that is running and deliberately holding still — a hunter waiting on a stand — is not idle and does not stroll.
Its card is the one the party earns by not working: 20 in-game hours spent off duty, and no rule can farm it for you, because a program that fires cannot also be doing nothing. And it is not a safety net — see the warning above.
Console: rest (bare: who is off duty and how long they have banked),
rest <hours>, rest here, rest home (where the rule would send each one).
Time & world
Read the land — wind, water, coast and soil
Every seed is its own island. The seed decides the shape — compact, stretched, cut by a great bay, or two lobes joined by a land bridge, with its mountain ranges at its heart or along its coast — and the proportions: a large desert or a small one (the jungle, the cold country and the bogs to match — together they always cover about two fifths of the land), a dry island or one full of lakes and rivers, open country or deep wood, one massif or many ridges, two to five bogs, two to four oases. What no seed changes: north is cold, and resources, animals and the year are as plentiful and as harsh on every island. On Hard the creator shows the island before you commit to it.
Every island has a wind, and it decides where the green is. The weather comes in off the sea from one direction, drops its rain as it climbs the high ground, and arrives on the far side wrung out. So the windward side is wooded and well watered and the far side of the high ground is dry — that is where the sand and the desert are. The direction is rolled fresh for every island, so it has to be read each run: walk the island and see which side the forest is on. There is no minimap, on purpose — this is what replaces it.
- Climbing costs no speed. Steepness is free, everywhere, for everyone.
- High ground is no colder. Climate is the biome alone.
- A ridge sees no further. Sight radius is the same on a peak as in a hollow. Scouting is walking.
- Soil does not pace a field. Every field is worked at the same pace, and the only soil number is the compost.
The island sheds its own water. Nothing is placed: rain runs off the high ground, threads gather into streams and streams into a few trunk rivers that widen as they go and empty into the sea, and water stands in the hollows as lakes, most with a brook draining out of them (one that would drain into the desert has none — see still water). A river is deep and impassable, and there are three ways over it: a bridge, the only one you place yourself; a finished beaver dam, which sits where the beavers wanted it and moves when they do; and a ford. Here and there a brook or a mid-sized river runs shallow from bank to bank — paler water — and companions and animals alike walk straight across, at 60 % pace. Fords are rare (at least 110 cells apart), never near a lake or a river mouth and never on a trunk river, which is crossed only by a bridge or a dam. A ford is drinkable like the river it lies in, and nothing can be built in it. Where a river is still a thread you can often walk around it, so following a river uphill makes the crossing cheaper.
The coast is not all the same. A beach (pale sand at the water) is open, buildable ground. A sea cliff (dark banded rock) is a wall: it cannot be climbed, built on, or come down to the water at, and about a seventh of the shoreline is cliff — so walking the coast is a real route choice. A marsh (dull grey-green, pooled with dark water) forms only where a big river empties into the sea: wadeable at little over half speed, never buildable, and rare enough — a handful of river mouths on the whole map — that the one you find is worth remembering.
Woods are thick or thin. Growth follows rain, height and steepness, so there is closed forest on the wet side, open groves inland, clearings, and a treeline above which nothing stands (and it sinks as you go north — cold means bare earlier). A tree in the wet lowland carries several times the wood of a stunted one at the treeline, and the crowns are drawn to match — so a wood worth walking to looks like one, and where a lumber camp stands is a real decision. Species follow the place too: oak in the warm wet lowlands, spruce in the cold heights, birch out at the thin edges, pine in between. The jungle grows none of the four — it has trees of its own.
The deep wood opens into glades. Where a forest is five or more cells deep it breaks, here and there, into a small clearing of about fifteen cells — some 160 to 190 of them on a map. A glade is open ground in the middle of the timber: room for a fire and a night, and the wood's own plants find it by themselves, so twigs and leaf piles lie there, with hazel and mushrooms now and then. It is a camp, never a settlement site — far too small to build a base on — and not a larder: food in a glade is as rare as on any forest edge, because the map holds few hazel bushes and a glade gets its share of them and no more. The desert and the ice have none, and the jungle has its own.
A run opens on temperate ground unless you choose otherwise. On Brutal and in the Tutorial the party always lands on ordinary temperate ground. On Hard the creator lets you pick the landing — temperate land, tundra, swamp, desert, ice or jungle — and a map with no such ground on its main land falls back to temperate and says so. Otherwise the far country is somewhere you go.
The map ends in sea or in mountains, on every side. There is no open ground at the edge of the world: high country rises into a range there, low country sinks into the sea, and a valley that would have run off the map ends in a bay. So where you can still walk, there is still map — and a coast or a rock wall at the rim is the rim, not a region to cross.
A party that lands on the coast finds that coast thin in wood. When the starting spot lies near the sea, the woods along that shore thin out — most near the start, less the farther along it and the farther inland, not at all past about a third of the way across the map — and as many trees stand inland and toward the far end of the island instead. The trees right around the starting spot itself stay. So a coastal first camp runs short of fuel sooner, and the way to move on points inland. A start inland changes nothing.
You are not the first party here. Out in the unexplored ground there are old camps — a cold ring of fire-blackened stones — and cairns stacked on the passes through the mountains. They are not scattered at random: a camp sits exactly where you would have settled, at fresh water with wood in reach, so finding one tells you the ground around it is good — and whoever left it usually left something behind on the ground to pick up: a cache that glitters, because a stack of wood on dark ground half a screen from the hearth is otherwise invisible. A cairn marks the one flat way through a range, which can save a long detour. Both are named the moment you see them and go into the chronicle (J).
Day/night and seasons pass; the clock, temperature (°C) and weather sit top-centre. Speed controls (or -/.) run pause / 1× / 2× / 5× / 10×.
The moon decides how dark the night is — and how far anyone sees in it. It turns through eight phases, one a night, and comes round every 8 nights: the run's first night is a waxing crescent, the first full moon stands over night 4, and since eight does not divide a seven-day season the full moon wanders through the year. A new moon is darker than a quarter moon, a clear full moon brighter and silver; clouds hide it — half under an overcast sky, a fifth in rain, nothing in a storm. Sight follows it: in the middle of a new-moon night a companion sees half as far as by day, under a full moon the whole way, and the nights between slide with the phase (fading in through dusk and out through dawn); the weather's own cut comes on top. A lit torch, lantern or headlamp adds its radius back, up to daylight sight — so a scouting walk at night wants a light, or a full moon. What counts as night — the watch, the hours animals raid, a broken night's sleep — does not change with the moon, and underground nothing knows about it. At night the clock plate names the phase; its tooltip gives the phase, how much of the disc is lit and the nights to the next full moon.
Weather follows the seasons, in spells of 0.5 to 5.4 in-game hours — a shower can be over in half an hour — while the two long skies are the exceptions (a storm runs 6 to 12, a fog 4 to 9), and every sky but one is worth planning around. Roughly how much of a season is wet — rain, snow or hail — is 32% in spring, 17% in summer, 34% in autumn and 42% in winter — with fog on top of that, commonest in autumn (about an eighth of it), so a good half of a winter is weather you would rather be indoors for. Wet clothes dry fastest at a campfire or under a roof (~4 in-game hours from soaked through) and outdoors only as fast as the sky allows — the pace per sky is in Buffs & debuffs.
| The sky | What it is worth |
|---|---|
| Clear (sunshine, and a summer drought) | The drying sky. Soaked clothes dry while the work goes on instead of waiting for a fire, and a drying rack beats its listed pace. If you have a wet party and no roof, this is the sky to spend. |
| Cloud | Almost nothing — the one sky with no bite. Drying and curing crawl under it, and that is the whole of it. |
| Rain | The water day, and it pulls three ways at once. It soaks anyone in the open (wet = up to 8 °C colder). A water barrel under the open sky fills itself — about 1 litre an in-game hour of clean rainwater, a fetching trip nobody walked. Fishing is better while it falls — the fish come up, and a rainy day at the water is worth about a third more. And it churns every pond and lake: drinking untreated still water is up to twice as dangerous during a downpour and for the half-day it takes the water to settle again. The sky hands you free water in the barrel and poisons the water on the ground in the same hour. How hard it falls decides every one of those figures — they are an average shower; see How hard it falls below. |
| Hail | It wounds. Health bleeds off anyone standing in the open; a roof, an enclosed room, a cave or the forest canopy stops it dead. One of the two skies that kill by themselves — the other is the storm. It is rare: about two or three spells a year, so it is an event rather than a thing you plan around — but it is still a weighted coin with no cap, and a year can hand you four. |
| Snow | It lies, and lying snow slows every companion — see below. Deep winter also freezes rivers and lakes (wells keep serving). |
| Drought (summer only) | Bakes: a hot sky is where the heat band bites, and where shade earns its keep. It dries small ponds until the next rain — and it dries clothes and racks like any clear sky. It is also dead still, which is exactly what makes it unbearable. |
| Fog | The quiet twin of the storm, and the only sky that costs nothing but time: it never wounds, wets, chills or drowns a fire. It takes sight and thickens the air (below), lies still for 4–9 hours, and is commonest in autumn. It comes in strengths, and that is the whole decision: a thin mist is an ordinary working day, a thick one takes sight to about a third and strands whoever is out in it — in its thick heart a companion without a light can only feel their way (below). It arrives with no warning at all — the storm is the only sky that announces itself, reader or no reader. Look at the air before you send anybody far. |
| Storm | The one sky that is an event. It wounds like hail but faster, blows a full gale, puts out any fire the weather can reach and cuts how far anyone can see to a third — and thickens the air on top of that, worst when it comes down hardest. Rare, 6–12 hours, and never in the first four days. Over frozen ground it comes as a blizzard, and its lightning can set a tree or a roof alight. See below. |
Two skies take your sight, and they take it twice over. A storm and a fog both pull the explored circle in — and they also thicken the air itself: colour and local contrast drain out of the whole picture. A lake is still obvious; berries, twigs and leaf piles stop standing out from the ground long before they leave your sight radius. So the cost to plan around is not the walking, it is that foraging in either is close to hopeless — and a thick fog washes the colour out harder than a storm does.
- A light ends it: a torch or lamp alight in their own hand, a mate's light they stand in, or the glow of a burning fire (embers do not count).
- A roof ends it.
- The edge ends it — you can feel your way out to it, one step an order.
- And it ends when the fog is seen to lift, not hours later at the weather's turn: if you can see through the air, they can walk through it.
How hard it falls matters as much as whether it falls. A shower runs anywhere from a drizzle to a downpour and shifts inside its own hours, so watch the rain rather than the word. Everything the rain does scales with it: how fast it soaks you through, how quickly a barrel fills, how badly the ponds are churned — and above all how long an open fire survives, where a drizzle barely troubles a pit and a downpour drowns it in under an hour.
Puddles are a warning, not a water source. Standing water means the sky is putting down more than the ground can drink — a drizzle never leaves any, however long it lasts, and light rain only a little; sand drinks it, which is why the desert stays dry. When you do see puddles, the ponds are at their worst to drink from right now, and the water goes on lying there for hours after the sky clears. You cannot drink it, fill a skin from it or put a fire out with it, and walking through it wets nobody. Sleeping in it does: the puddles are the same hollows after every rain, and a straw bed or a sleeper on bare ground in one is soaked from below, roof or no roof — see Stay alive. Where the ground stayed dry in the last rain is where the straw belongs.
A drought and a flood show on the water itself. A small pond in a drought empties in patches down to a cracked mud floor, and fills again when rain reaches it. Rivers run low — a trickle between bare banks — but never dry out and still give a drink; only small ponds do. Rain on rain swells them: one shower does nothing, a long wet spell or a downpour puts them brown and over their banks, and it takes about two dry days to run off. Hover fresh water and the readout says running low, swollen and rising or in flood. A flood is only seen and read for now: it closes no ford and drowns no field.
- it wounds anyone in the open, like hail but faster — the same cover answers it: a roof, an enclosed room, a cave, or the forest canopy;
- it blows a full gale, so the wind chill below is at its worst at the same time;
- it puts out every fire the weather can reach — not down to embers, out;
- and it cuts how far anybody can see to a third. That, not the damage, is what actually kills: a party caught in the open cannot find its way home.
- and its lightning can leave a tree or a wooden building smouldering — see Lightning and wildfire.
Over frozen ground a storm is a blizzard. The line that turns rain into snow turns the storm too: dense driving snow, a white murk instead of the dark blue one, a howling wind — and the clock plate, the arrival line and a master sky-reader all call it a Blizzard. It is still the storm in everything that hurts: the same wounds, the gale, the blindness, the drowned fires and the same advance warning. But its snow lands dry — it soaks nobody, fills no rain barrel and leaves no puddles — and it buries the ground in snow within hours.
There is one wind, and it is alive. Beyond the island's fixed prevailing quarter above, the weather carries a live wind with a direction and a strength that drift rather than snap — it wanders around the prevailing quarter instead of jumping about, so what you learned an hour ago is still roughly true. Each sky blows its own way: a drought is dead still and so is a fog — wind is what tears a fog up, so a still air is part of why it lies — while hail and a storm blow hardest. The clock at the top of the screen names it in a word — a breeze, windy, blustery, a gale — beside the temperature.
Wind chill is worth up to 9 °C, and the thermometer does not show it. A body standing in the open feels the wind on top of the air temperature: the effect ramps in below about 14 °C and is at full strength by 12 °C, and it only ever makes cold worse — it takes nothing off a hot day. The reading at the top of the screen is deliberately still the air, so a −4 °C snowfall and a −4 °C gale look the same up there and are not: check the wind word, not just the number. Any shelter stops the wind entirely — the same cover that stops hail and takes the edge off a drought. A wall on the right side of a fire does the same job for the fire.
Snow on the ground slows everybody down — from the first flake, with no threshold to stay under, up to 35% slower when the world is fully snowed in (and bare ground takes about two and a half in-game hours of snowfall to get there). It costs the companion you are steering exactly what it costs one working on its own, so a deep winter takes real hours out of the day: get the stores in before it lies. It is also what finally makes roads worth their price — a laid path saves you from ground that has got slower, so it is worth more in January than in July. The desert and the jungle never snow and a cave has no sky, so all three stay bare and fast — and the ice is never anything else: its snow does not melt, so it is the full 35% slower in every season. A companion walking over snow leaves footprints that fade over about eight in-game hours — anywhere snow lies, and on the ice, where nothing else marks the ground, they are the way back to the fire. Only companions leave them; animals do not.
Companions go out of their way to use a road or a path. A road is worth a third more speed and a path about a seventh, and either is taken out of the way whenever the detour still arrives sooner, on your orders and under the rule programs alike. So a road that curves around a hill is worth laying, and the stone you spend on one is not wasted the moment the route is not a straight line. Off the road everybody walks at the ordinary pace, and a companion whose road plan turns out to be blocked simply walks the ordinary way rather than giving up the order.
It does not rain on the desert. The sky is one sky for the whole island — the clouds and the falling rain you see are unchanged — but a rain, snow or hail spell reaches nobody standing in the sand. Out there nothing soaks you, hail cannot cut you, and no snow ever lies, in any winter. That cuts both ways: the desert is the one country where a hailstorm is not a reason to run for a roof, and the one where you can never count on the sky to refill anything.
Water has a quality as well as a salinity. Water that stands — a lake, a pond — is still water: drinkable, and every gulp builds the drinker's dysentery load — nothing on its own, but the pond you keep going back to breaks out as the illness. Running water is clean, and so are wells and hot springs — everywhere but in the jungle, where no water is, river and well included. A lake stays still water even though a brook drains it: what matters is that the water sits, not where it eventually goes — so follow the outflow a little way downhill and you are drinking from a stream instead. Unless the outflow runs into sand: a lake whose drain would cross the desert keeps no brook at all — the water sinks instead of running — so there is nothing downhill to follow and boiling is the only answer. The green country just upstream of the desert is where most of those sit, and it looks like the best water on the map. A waterskin filled at a lake carries pond water with it until it is drunk dry — the water you sent them to is the water they get: a skin scooped a step short of a pond's shore is pond water, and a well or brook behind the companion does not clean it. Choosing between a lakeside site and a river (or a well) is the point.
The cure is a fire. Right-click one and pick Boil water: with one companion selected it walks over and the fire exchange window opens on the hearth — pour the waterskin onto the Pan yourself, and take the clean water back from the Ready slot (it goes into the skin). With a group selected the unattended order runs instead: it pours, waits and collects by itself, and empty-handed simply collects what is already boiling. By hand it works too: right-click the tool slot in the character sheet (E) to pour the skin into your hand, then set it down on a fire (the whole skinful goes in), on a barrel, or on another companion to fill their skin.
Boiling costs time, and that is deliberate. A full waterskin — 3.0 litres, which is exactly what the pan holds — takes 36 in-game minutes on a campfire; a stone hearth is three times faster at everything it cooks. The pan boils unattended while the fire burns, so you load it and walk away. A companion drinks 2–3 litres a day, so one fire keeps a small party in clean water and no more — and it cannot sear fish while it boils. Boiling is the stopgap at a pond; a river or a well is the answer.
The land itself has a climate. About three fifths of the island is ordinary temperate ground; the rest is one of five named regions, each with its own colour on the map and its name in the readout when you hover it. The seasons turn the extremes inside out — knowing which half of the year a country is survivable in is worth more than avoiding it. A region's edge wanders — lobed and ragged, never a ruled line — so where a country ends is something you find out by walking it.
| Region | Where | Air | What it is |
|---|---|---|---|
| Tundra | The northern fringe | −10 °C | A taiga: cold, but wooded on about a third of its open ground on every map. A pleasant summer, lethal from the first autumn night. It is where an expedition north loads its fuel. |
| Ice | The heart of the tundra | −18 °C | Ground that gives nothing: no tree, no bush, snow all year. |
| Desert | The driest ground in the south | +8 °C | A summer death trap and the warmest ground in winter. No rain reaches it, no snow lies, and scorpions lie on the sand. |
| Jungle | The wettest ground in the south | +4 °C | Ground that takes: food in every season, and everything rots. |
| Swamp | Bogs, scattered | +1 °C | Soaks you like rain, and a fire cannot dry you while you stand in it. Mosquitoes all year. |
In a drought, shade is a resource. A roof, an enclosed room, a cave or simply the forest canopy takes about 6 °C off a baking sky — usually the difference between a summer afternoon that costs Health (the heat band starts at 35 °C) and one that merely feels awful. It is the same cover that stops hail, so a good spot is worth remembering twice. Shade never makes anybody cold — it will not pull the air below 22 °C, so there is no season in which standing under a tree hurts you — and it is not a substitute for water: a lake or a well still cools far harder. What it really changes is where the day's heavy work goes: in a drought, work the woods.
The desert has almost no water of its own. Rain never falls on it; a stream running down into the sand simply sinks; a lake cannot form there. What is left is one trunk river, if the biggest river on the island happens to run that way at all, and the oasis pools the generator guarantees — which are the only reason the country is crossable, and are what a crossing has to be planned around.
So the desert is not "hot country with fewer rivers", it is country you enter with full skins and a route between known pools. It is also, in winter, the warmest ground on the map — the trip that is suicide in summer is the sensible one in January.
There is one crater lake on an island, one set of hot springs and one ring of standing stones. The stones are more than scenery: an automation card lies among them — the one that lets a rule ask how much daylight is left.
The far country the ice and the jungle
Two regions lie at the ends of the map and are the reason to walk there. The ice is the coldest ground in the north and gives nothing; the jungle is the wettest ground in the south and takes everything. Each holds what home cannot give — and neither is a place to settle.
Where they lie. The ice is cut out of the middle of the tundra, so the walk north always goes forest, taiga, ice: nothing but tundra lies against the ice on any side that is not the sea, at least two cells deep, and a small islet off the polar coast is tundra too. That matters because the taiga is the last wood there is. The jungle is one region far in the south; the desert takes the driest ground there and the jungle the wettest, so the two share the south between them. The first step anybody takes onto the ice, and the first under the jungle's crowns, is written into the chronicle (J).
| The ice | The jungle | |
|---|---|---|
| Air | 18 °C colder than the season says. Midsummer noon is about 14 °C and a summer night is already under the 4 °C cold line; a first-winter night is about −32 °C. | 4 °C warmer. A summer midday is about 36 °C, just past the 35 °C heat line. It has no winter. |
| What falls | Always snow, and it lands dry. A heavy snowfall is a blizzard there, with everything a storm does — and a blizzard on the ice is a whiteout: sight drops to about a seventh, half of what a storm leaves you anywhere else. | Never snow: a snowstorm arrives as rain. And it rains there whenever the sky is merely overcast anywhere else. |
| The ground | Snow that never melts: white all year, and the full 35% slower to walk on all year. | It soaks you, like a bog: only a roof keeps you dry there. |
| What grows | Nothing. No tree, no bush, nothing to gather. | Everything, in every season — no plant there pauses for winter. |
| Fuel | None on the ground. What you carried, or blubber. | Any amount. |
| Water | As anywhere. | None fit to drink. Every water there is foul — the rivers too, and a well dug there. |
| Food keeps | Ten times as long — in a pack, in a pile, on the ground. | A third as long. A banana lasts one day where it grows. |
| An undressed kill lies | About 300 in-game hours | About 10 (30 at home) |
| Buildings and tools | As anywhere. | Wet rot: a building's condition falls twice as fast and a tool wears out in half the time. |
| Mosquitoes | None. | All year, and they carry marsh fever. |
| Fur | The key. Home's furs walk a winter day there; only the ice's own furs sleep a night. | A burden: it heats you and soaks faster. |
| The rock (digging) | Diamonds ×3 | Rubies ×2.6, gold ×1.2 |
Hover a cell and the readout says what its ground does to food. The climate that counts is the one where the food is lying: meat carried north keeps and comes home as fresh as the ice left it; a larder carried into the jungle is gone in days.
The ice how far you get is how much fuel you have
A fire is as much of a refuge on the ice as anywhere — there is just nothing to feed it with. No tree stands there and nothing lies on the ground, so an expedition is as long as the wood in its packs, loaded in the taiga on the way. Two things change that: fur that can sleep a night out there, and blubber.
- Blubber is the fire that needs no wood. A seal pays 6 slabs and a polar bear 10, on top of meat and skin; no other animal carries it. A slab burns a third longer than a log and weighs a third as much, in a campfire and a stone hearth alike — one seal keeps a campfire through a night. A fire still takes wood first; blubber comes after kindling and before charcoal. It is not food. It also fills the blubber lamp. A party that hunts can stay on the ice; a party that does not is on a round trip.
- Fur comes in two tiers, and the second one is made of the ice. Polar bear, arctic fox and seal leave an ice pelt, a white fur nothing else wears, and the polar coat, hood, mittens, leggings and boots are sewn from it. In the furs you can make at home a winter day on the ice can be walked and the night cannot; in the ice's own the night can. Coat and hood are enough for a still night; the other three are the margin when the wind gets up. The warmth of each piece is in Tools & clothing.
- Leave by your own footprints. In a whiteout you see a seventh of what you should, and the prints you left in the last eight hours are the only mark on the ground.
What lives there is written for that ground and found nowhere else — hunting them works as it does at home.
| Creature | What to know | Pays, besides meat |
|---|---|---|
| Seal | Lies at the ice's open water in small groups. Shy, slow on land, fast in the water. | Ice pelt, 6 blubber |
| Polar bear | The largest hunter on the map. It hunts seals and does not run from a hunter — and like any bear it comes for an open camp at night, and runs when somebody walks at it. | Ice pelt, 10 blubber |
| Snow hare · arctic fox | White: hard to see against the snow. | The hare a small pelt, the fox 2 ice pelts |
| Snowy owl | White, too. | Feathers |
What the ice holds. Three things lie out on the deepest ice, close enough together to be one errand — and it has an order: camp, then ship.
| The find | What it is |
|---|---|
| A mammoth in the ice | Frozen whole. Dress it like any kill — it takes a knife — for 40 meat, 2 pelts and 2 tusks of ivory. It never rots where it lies; the meat's clock starts when it is cut. Ivory is a trade good and nothing else: 3 kg a tusk, and dearer the further south you carry it. |
| The lost expedition's camp | A torn tent and a sledge with their kit on the ground: 5 preserved food, a blubber lamp, 4 blubber, their journal and a brass key. Finding the camp tells you which way their ship lies. |
| The wreck in the floe | A ship frozen in to her gunwales, and a place to go into like the pyramid — see below. |
| The northern lights | On a clear night over the ice the sky burns green — on roughly three clear nights in five. A companion who is there and awake gains 8 Mood, once a night, and remembers it; the first time goes into the chronicle. It is the one reason to stand a watch out there. |
The wreck is three decks at twenty below zero. Walk in through the breach in her side. Below is as dark as any cave — she has no shaft — and the cold is the building: at −20 °C a party in the furs of home loses Health slowly on every deck, and one in the ice's own furs does not. There is no dart, no plate, no valve and no secret; what she has is what a wreck has — rotten planking on two decks, which groans, splits and falls exactly as the manor's floors do, one open hatch in the main deck, a hole to fall through into the hold, and a bilge half under water. A map without ice has no wreck.
| Deck | What is on it |
|---|---|
| The Main Deck | A crew cabin with 6 blubber, the galley's 6 preserved food, the hatch — and the strongroom, with 3 diamonds behind a locked door. |
| The Hold | 2 blubber lamps, the captain's polar coat and 10 planks of ship's timber. |
| The Bilge | Half flooded: 4 gold nuggets, 3 tusks of ivory and the ship's lantern — the second one in the world. |
The strongroom key is not in the ship. It is the brass key at the expedition's camp, and the door opens for anybody standing at it carrying the key. A party that finds the ship first can walk all of her but that one room. The polar coat is the one piece of the ice's furs you can own without hunting for it.
The jungle food in every season, and nothing keeps
What grows there keeps growing through the winter. That is the temptation — and every other line of the table above is the price. Four things decide whether a trip south comes home:
- There is no drinking water. Every water in the jungle is foul: drinking it untreated builds dysentery exactly as a pond's does, the rivers included, and a well dug there is no better. Boil it, or bring full skins. A rain barrel still fills clean — and it rains there a great deal. The tile readout and the right-click tooltip say Jungle water. A Drink rule written for the river at home poisons its owner here.
- Sleep under a roof or beside a lit fire. Mosquito bites in the jungle build marsh fever: a companion who sleeps there unprotected comes down with it in about a day and a half; one under a roof or beside a burning fire never does. Herbs do nothing for it — fever bark does, and the fever tree grows right there. Carrying a patient out of the jungle slows the fever, bark or no bark. The sickness itself is in Stay alive.
- Put the furs down before you go in. A quarter of the warmth a companion carries is added as heat there, and the more fur they carry the faster they soak. Carrying a piece is wearing it, so the only way out is to leave the furs at the edge. A badge says when it is happening.
- Eat it there, or carry what keeps. Food ages three times as fast in a pack, in a pile and on the ground; a kill must be dressed within about ten hours.
Its wood is undergrowth. Among the trees it is dim at noon: a companion sees about half as far (11 cells against 20) and walks about 30% slower than in any other wood. Fell a tree and that cell is ordinary ground at once — a way through the jungle is one you cut. Binoculars double what is left, not what the canopy took. The trees are the jungle's own, and most are giants with a lot of wood in them: palms (base 6 wood), mahogany (10), the dark roof, and the rare kapok (14) that stands over everything. None of them turns in autumn.
The jungle is even from edge to edge. Its glades are small and lie everywhere at an even pitch, so what it grows is found all through it and not only at its rim. And nothing grows in stands there: every plant below stands singly. It is the one region with an even scatter — elsewhere you look for the patch, here you simply walk.
| Stands only in the jungle | Gives | What it is worth |
|---|---|---|
| Banana plant | Bananas | Plain food, all year. Keeps 3 days — one in the jungle. |
| Breadfruit tree | Breadfruit | Plain food and the more filling of the two, at 0.6 kg a fruit. Keeps 3 days. |
| Sugar cane | Sugar cane | Poor eating, but a bite lifts Mood (4 points) for a few hours. A trader pays for it. |
| Cocoa tree | Cocoa | Poorer eating still, a bigger lift (6 points), weighs next to nothing and never spoils. A trader pays well. |
| Pepper vine | Pepper | No food at all: a spice, 20 g a unit, never spoils — the dearest thing by weight a gatherer can carry out of the south. |
| Bamboo | Bamboo | The light timber: a third of a log's weight, and cut with a knife — no knife, no bamboo. The lumber camp saws two culms into two planks, and a fire burns it. |
| Lianas | Lianas (3 a cut) | Cordage without hemp: three twist into one at the bench, no workshop. Heavy — three times hemp fibre’s weight per cord — so make the rope in the jungle, not at home. A trader counts lianas as a jungle good. |
| Fever tree | Fever bark | Medicine, never a meal: it cures marsh fever and treats everything herbs treat. |
The Mood a sweet thing lifts is a treat and not a cure: it raises nobody's ceiling and drains back within hours. Banana, breadfruit, sugar cane, pepper and cocoa can also be sown — on jungle ground and nowhere else.
What lives there — hunting and raids work as they do at home:
| Creature | What to know |
|---|---|
| Parrots | In flocks. Feathers. |
| Monkeys | In troops, and the jungle's thieves: they rob an open camp at night the way raccoons do. |
| Tapir | The large game. |
| Jaguar | Hunts tapir and monkey, and does not run from a hunter. |
| Snake | Lies in wait. It comes for nobody and it can be seen — but a companion who walks onto one is struck, ordered there or not: a wound, and then venom that gets worse for as long as they stay on their feet and can kill. Bed rest and herbs turn it. Read the path before you click through undergrowth. |
What the jungle holds. Two things, on a map that has a jungle:
| The find | What it is |
|---|---|
| The overgrown temple | Three terraces with a tree come up through the shrine, and a place to go into — see below. |
| The ruins | A ring of old stone walls, 7×5 cells, in a clearing: about a third of it fallen, the rest worn below half, the middle of the south side open where the door was. They are ordinary stone walls — repair them, fill the gaps, roof them — and they save the mason about eighteen stretches of wall in a region you reach with what you carried. They belong to nobody — no settlement, no rent — until you mend the first one; from then the wet rot bills them at double like everything else there. |
The temple is three storeys at 28 °C, and the forest is inside it. Its traps are snakes' nests, and they keep the pyramid's bargain: drawn on the tile, plain under a torch and invisible without one. A nest bites once — 8 Health, and snake venom after it — and is then gone, so a file may follow the first one through. There is no dart, no plate, no seal and no rotten floor.
| Storey | What is on it |
|---|---|
| The Court of Roots | Lit through its broken roof — four shafts, so the first nests are met in daylight, two of them in the side rooms. 4 fever bark, 3 torches, 3 gold ornaments, and a hidden room with 3 rubies. |
| The Sanctum | The dark half. Two nests flanking the altar, pools to walk round, 6 pepper, and a hole in the floor. |
| The Drowned Crypt | A causeway one cell wide between two flooded halls, two more nests — and 5 gold nuggets, 2 opals and the jade mask, a keepsake worth 30 gold that a trader takes as goods, for 15. |
Lightning and wildfire a full barrel is the extinguisher
A storm can set the forest alight — and the base, where the base is built of wood. Fire ignites, it never destroys outright: there is always a window in which to put it out.
| Stage | What happens | What answers it |
|---|---|---|
| Strike | Only under a storm. Lightning takes the tallest, most exposed thing near where it comes down, so a lone tree on open ground goes before one deep in a stand — and a building that can burn is struck like a tree. | A lightning rod (below) takes every strike within 10 cells of it. |
| Smoulder | What was struck smoulders through the rain and lights nothing. It flares once the storm has passed and the air is warm and dry — about six hours of clear sky on a warm day. In the wet, and at 5 °C or colder, it never does, and after a day and a half it goes out by itself. | The cheap moment: 1 litre puts a smoulder out. |
| Forest fire | A burning cell lights the four forest cells touching it, one ring every half hour, and burns down in about two hours. It spreads forest to forest only, so a road, a river, a wall or open ground stops it — even a road with a kink in it — and so does falling rain, for as long as it falls. A burning forest sets alight a building touching it. | A firebreak: one cell of anything that is not forest. A burning tree takes 4 litres. |
| A building alight | It stands for about 4 in-game hours — 3 real minutes at 1×. After about an hour it lights the roof over it, the forest and the pieces next to it. | Put it out (below): about 4 litres for a wall cell, up to 20 for a hut. |
| Burnt | A tree is gone, with its wood and any chopping already banked on it. The black ground grows back into forest after 30–45 days unless somebody builds on it, and until then it shelters nobody from hail or storm. A building nobody put out burns down, and part of what it held burns with it: a quarter of the food and half of everything else survive, on the ground, and water in a barrel is lost. | — |
What burns is what grew. Any piece with wood, planks, twigs, leaves, reeds, fibre or cordage in it burns, and piece by piece — a wall cell, a door, a hut, a bed, a roof tile. Stone, a stone wall, a road, every floor, a campfire and a stone hearth do not, and inside the base they stop a fire just as a road does outside it. This is the one thing in the game that brings a building down and takes goods with it.
Right-click anything burning or smouldering with a companion to put it out — on a burning cell that order beats every other verb. They pour the water they carry, then fetch more from the nearest water barrel, well or shore and come back, piece by piece, until nothing burns. So a full water barrel in the base is the fire extinguisher. Only you can give this order: no rule and no task fights a fire.
The alarm says where. Click its line in the event log and the camera goes there, and the time warp drops to normal speed. Hover a burning building and the tile readout gives the time it has left and the water it still needs.
Nobody is set alight, and automation stays out. Fire never takes a cell somebody is standing on, and a companion working a rule or a task never steps into fire: they wait at the edge. One you steer may walk in, and loses Health for every moment they stand in it. Animals flee it, bears and wisents included.
At most 60 cells are down at once across the whole island — burning, or burnt and not yet regrown — so a fire is an event, never the end of the wood.
The dragon it is never aimed at you — where you settle is the decision
There is one monster on the island, and it gets worse every year. It cannot be fought or killed, it never flies at the party or the base — and the further from its lair you live, the less of it you see.
| Year | What it does |
|---|---|
| 1 | Only heard — a roar far off at night, every few days. |
| 2 | It crosses the sky, about every 8 days. |
| 3 | It roosts on a lair in the far mountains, and the land around it sickens — the blight (below) spreads out to about 150 cells over two months. Passages come about every 6 days. |
| 4 on | Its passages breathe fire on the ground below, two to four strikes a passage, about every 4 days. After that it stops getting worse, and once a year it moves to another lair — the blight moves with it rather than covering the island. |
- It is never aimed. Each passage is a straight line through its lair at an angle the seed decides, and its fire falls where the seed puts it. Nothing it does reads where the party or the base is. Far from its lair is safer, and that is the whole defence.
- It warns you. You hear it call before it comes, its shadow crosses the ground and its throat glows before each jet. On a fire passage heading your way (within 70 cells of a companion) the game says so in red, with the direction, and drops the speed to 1×.
- Its fire sets forest and buildings alight on the 3×3 it strikes — a burning building is put out like any other fire — and burns whoever stands within a cell and a half in the open: 10 Health at once (never the last point) and a bad burn (see Buffs & debuffs). Cover is a roof, a roofed building, rock or a cave; forest is not. A burn heals with herbs and a bed; left untended it turns deadly, and a second burn on top of the first is deadly at once.
- Fear. A companion awake who sees it pass loses 8 Mood, the same for everybody. Living inside its realm caps Mood — the The dragon’s realm badge — by up to 20 points at the lair, nothing at the realm’s edge.
- Terror. Game within 10 cells of its shadow bolts — bears and wisent too.
- The blight. Around the lair the ground sickens slowly. On ground past half blighted the water is foul — wells included, nothing grows back, nothing new takes root, and a field withers. Below that line food already rots faster, up to three times as fast. When the dragon has moved on the blight recedes slowly. The Blight lens (X) shows how far it has spread over ground you have explored.
- A rule can answer it: the sensor Dragon near (within 48 cells) and the action Take cover (walk to the nearest roof or rock within 30 cells and stay there), written WHEN Dragon near → Take cover high in the program. You earn both cards by getting a companion under cover by hand twice while it flies near.
- On the Tutorial it only flies over — no blight, no fire, no burns.
The weather has a PLACE — fronts, not one sky
The island does not have a weather. A spell arrives as a front: a soft-edged patch with a position, drifting on the island’s own wind. At most three at a time — the one that has passed and is fading, the one standing over you, and the one already visibly on its way.
- Rain or snow is decided by the GROUND, not the cloud. A rain front reaching the tundra arrives as snow — and lands dry, because snow does not wet you.
- Snow lies where it fell. It is a field, not a switch: the tundra stays white while the base thaws. The crunch underfoot, the white on the ground and the white on the tree crowns all read the same field, so a thawed camp is silent while the high country creaks.
- A front rains itself out against the rain shadow. The island’s green side gets the whole of a spell and the lee side a share of it — the desert is simply the dry end of that rather than a special case beside it. The rain barrels fill when the rain gets there, not when the spell begins somewhere else.
- The forecast has a direction. A weather-reader at level 50 says which quarter the weather comes out of; at level 70, how far off it still is.
- A party in two places needs a reader in each. The line is spoken to the group standing with the speaker, and a group with nobody who can read the sky gets no forecast at all.
- What you see is where you are. The rain thins across a front’s edge on screen; the cloud bank, the light, the ambience and the volume of the rain you hear follow the camera’s own place; the clock plate names the sky and the air temperature of the ground you are looking at; and a companion window’s pane streams for that companion’s weather, not the island’s.
Read the sky O
The game knows what the next sky will be — the next spell is rolled the moment the current one starts — and no panel is ever allowed to tell you. The only path from that knowledge to you runs through a companion who has learned to read the weather, and who can be lost.
The world leans before it turns. For the last three in-game hours before a change — about 135 real seconds of warning — things say something is coming and never what, and they glide across that approach instead of swapping in the frame the sky turns: the light, the haze and even your sight radius slide the whole way in. The tells are the cloud shadows gather ahead of the rain and thin ahead of the sun, drifting in on the island's own prevailing wind; the birds go quiet and the wind gets up when something wet is close; and the temperature slides into the coming weather's offset so that it lands exactly at the turn — the cold arrives before the snow, and the thermometer never jumps. Learn those three and you know to get under a roof. Naming the sky is a person's job.
The vigil. Select a companion standing under open sky and press O: they stand and watch for one in-game hour, produce nothing whatsoever, and learn. No workshop gates it — the sky is readable from the first minute of a run — and it is paid for in the scarcest currency the opening has, an hour of somebody's time. A roof, a cave or a forest canopy means there is nothing to read: the safest place on the map is the one place this cannot be learned, and a vigil that ends up under cover is paid nothing (it does not even use up the day's learning).
- Dawn and dusk count double — 08:00–10:00 and 20:00–22:00.
- The first watch of a day counts full, the second half, and the rest nothing. Standing there all day buys nothing more.
- After that a companion also learns by living through a sky they have not met in that season (worth three vigils, and there are only 25 such firsts to be had in a year), and by being right: a call that lands pays a full vigil, a call that misses still pays a quarter — a miss teaches too. Both go to everyone who was out in it, not only the speaker.
- Perception shifts how much warning a companion gets, and it pivots on 6 like every other attribute: an average 6 is worth nothing either way, a 10 buys about 10 extra minutes, and a 2 costs about the same. That is the whole of it — there is no bonus that keeps growing with character level. Intelligence decides how fast the vigil teaches them — the same two attributes that pay out everywhere else, doing their ordinary jobs here.
What a reader may say grows with them, and only a master says the word. Weather-reading runs to 100 like every skill, and what it buys comes in ten steps of ten levels: nothing at all is said before level 10. The line goes to the event log in the reader's own name — and only the best reader in the party speaks: one line per turn however many can read, and none at all if nobody has learned. Losing that companion costs the party its forecast.
| Level | Warning | What the line adds |
|---|---|---|
| 0–9 | — | Nothing is said at all. You are left with the three ambient tells. |
| 10–29 | ~10 min | "The light looks wrong — something is coming." |
| 30–49 | 30 min | Whether it is trouble or nothing to fear. This is also the level the Sky turning sensor needs. |
| 50–69 | 1 h | Which way it turns: something will fall, or it turns colder, or warmer, or holds. |
| 70–89 | 2 h | How long it will hold — passing quickly, holding for hours, or not letting up before evening. |
| 90–99 | 2 h | A look at tomorrow, and whether the year turns with it. |
| 100 | 2 h | Names it, and nothing else: "Hail, within the hour." |
Both halves can be programmed (the rule editor). The Read the sky action puts the vigil in a rule — WHEN Clock 08–10 → Read the sky is the dawn watch written down, and it blocks itself under a roof or in the dark. The Sky turning sensor lets a companion act on their own forecast — WHEN Sky turning → Warm up — and it reads through that companion's own eyes: somebody who has not learned reads "no" however black it gets, and it takes level 30 before it can fire at all. A rule is worth exactly what its reader is, and no card in the deck buys clairvoyance.
Caves bring a light
Mountains are not only a wall to walk around: search a mountainside for a cave mouth — a dark hole with a pale lip of broken stone and rubble spilled out below it. Right-click it, or walk onto it, and the party goes in; every rock cell touching the opening counts, corners included, so a near miss cannot set anyone mining the doorframe. Inside is a map of its own, and the way back is an arch of daylight in the wall. The world above keeps running the whole time — clock, weather, animals, everyone you left up there — so a scout can go down while the rest of the party works.
| What a cave is | What it means |
|---|---|
| Pitch dark | Completely dark — not dim, and not remembered: with no flame a companion has only a smudge about a cell wide around their own feet (against twenty cells in the open). Craft a torch first — Crafting tab (U), 5 twigs + 2 plant fibre — and carrying it lit gives seven cells back. See Torches & the lantern and the dark. |
| Sheltered | Rock roofs you: rain, snow and hail cannot reach, and wet clothes dry as they would under any roof. |
| A constant 8 °C | Underground replaces the sky — no season, no weather, no night. A refuge from a −15 °C winter night and from a 42 °C desert afternoon. |
| Ground you can build on | A cave floor takes a campfire, a stone hearth, a torch, a bed, a straw bed, a bedroll, a storage box, a water barrel, a planning table, planks, road — and stockpiles, so a cave becomes a real base rather than only a place to sleep. Dropped stacks stay put on it too. What will not go underground are the things the rock has made pointless: houses, farms and wall runs. The way out is never built over. |
The mountain tells you how big the cave is — a lone rocky knuckle holds a fissure you cross in a few dozen steps, a proper range a warren, a gallery or a pillared hall. Size the massif up from outside before you spend a torch on it. Mushrooms and stone wait deep inside, always a good walk from the entrance, so a cave pays only the party that explores it properly. Nothing lives down there; the danger is the dark and the walk home.
Some caves hold water — a still pool of seeped snowmelt, drunk from or filled at like any river. Because rock has no weather it never freezes and never dries up, which can make a known cave the most reliable water on the map in exactly the seasons that close everything else. It is standing water, so boil it. Wet ground above means more of it: swamp mountains are wettest, desert caves bone dry.
Rule programs keep running underground. A companion you send into a cave still follows its plan, and when a rule wants something the cave has not got — a drink, a meal, the stockpile — it walks out through the mouth by itself, does the errand up top, and is free to be sent back down. You never have to fetch anyone out by hand — unless their light is gone: a rule feels its way in the dark one cell at a time like anybody else.
And a cave counts as part of the settlement it opens into. Whatever you carry inside stays reachable from outside: a builder working at the mouth fetches timber from a stockpile you laid down in the cave, a tired companion claims a bed you unrolled in there, and a thirsty one walks in to a pool it has already seen rather than trekking to the river. The rule is simply that a cave is as far away as the walk into it — the mouth, plus however many steps deep the thing sits. So a pile just inside the entrance is practically next door, and one at the far end of a rambling warren is a real errand nobody will make automatically. Put your stores near the mouth if the camp outside is meant to use them. Only what the party has actually seen counts: an unexplored cave offers nothing, and neither does a pool in a corner you have never lit.
Dig & trade the money is in the rock
Gold nuggets, opals, rubies and diamonds are the money — and they are found by digging rock. Nothing drops them and nothing crafts them; the only ones that lie waiting are the few in the wreck and the temple. A nugget weighs 0.1 kg and a stone 0.05 kg, so a fortune is the one thing a migration carries whole; the pack lists them under their own Valuables chip. The same digging brings up iron ore and coal, which are not money but tools.
Digging needs a pickaxe in the digger's own pack. The stone one is a bench kit — 3 stone + 2 wood + 1 cordage, about 2 h 36 min of in-game work — and it also takes stone off a rock face ×1.5 faster. It wears like the axe: 400 seconds of work for a whole one, then mended by right-clicking a mason's yard for 1 wood. The iron pickaxe from the smithy works at ×2 and lasts three times as long. A pickaxe takes both hands, so a digger cannot hold a torch — which decides how a dig underground is lit (below). The makes, the hands and what a tool's quality means are in Tools & clothing.
| Where | The click | What it takes |
|---|---|---|
| A cave wall | Right-click rock that borders open floor. It widens the cave; the outermost ring of a cave's rock cannot be dug. | Pickaxe, and light at the rock: a lit headlamp on the digger, or a mate beside them holding a burning light. 36 s of work a cell. |
| A rock face on the map | With one companion selected who carries a pickaxe, the right-click opens a ring: Break stone or Dig a mine. Without a pickaxe there is no ring and the click breaks stone as always. | Pickaxe, 4 wood in the digger's pack to shore the entrance, and 135 s of work. The face needs open ground in front of it, 6 cells to any other way into the rock, and a mountain of at least 24 cells behind it. |
| A mine's wall | Right-click it to drive a gallery. | As a cave wall. |
- An order that cannot be carried out is refused at the click, with the reason — no pickaxe, no wood, too little mountain — never after the walk. The light is checked at the rock.
- A mine is a way in like any cave mouth, drawn as a doorway with its shoring. Behind it is a short entrance tunnel and then solid rock, a block sized by the mountain it was cut into (14 to 44 cells a side) — and as dark as a cave.
- One order drives a gallery, not one cell. The digger carries straight on, away from where they stood, until they strike something, the light goes out, or the rock in that line runs out. What happens after a find is your call.
- The spoil is stone: one a cell into the pack while it fits, left behind after that — and, in the right rock, ore or coal with it. A find the pack cannot hold is dropped at the digger's feet, where it glints.
- Digging is hand work. No rule can do it. It trains Masonry — so the work times above shrink with the skill, and with the pickaxe's own ×1.5 — and each cell counts toward the Stonemason card.
- Pyramid, manor, wreck and temple walls are never dug, and hold nothing.
Not every mountain pays
Each cell of rock dug is a chance at a find: 3 % in the poorest rock, 20 % in the richest, and most rock is poor. Three things set the odds, and all three can be reasoned about:
- The place. Richness changes from mountain to mountain. The first dig in a place says how rich its rock is, once, in the event log — barren, thinly veined, veined or richly veined — so the second dig is an informed one. Cutting a mine says it at once.
- The depth. Deeper is richer: the odds climb with every cell of distance from the entrance, to twice the base odds at 24 cells. A mine is a thing to drive, not a hole to poke.
- The climate picks the stone. A find is gold 56 %, an opal 20 %, a ruby 15 %, a diamond 9 % — and the land above tilts it, most of all in the far country: ice rock runs to diamonds (×3), jungle rock to rubies (×2.6, and gold ×1.2), desert rock to opals (×2.5), temperate rock to rubies (×1.4), swamp rock to gold (×1.3), and tundra rock keeps a trace of diamond (×1.2).
The veins are part of the world, fixed when the map is made. The same cell holds the same thing every time, so reloading never rerolls a dig.
Iron ore and coal
The rock holds what tools are made of, too. Ore and coal are spoil, not a find: they come out with the stone when a cave wall or a mine gallery is dug, go into the pack beside it, and never stop the gallery.
| Where | How | What it gives |
|---|---|---|
| Dug rock (cave wall, mine, gallery) | With the pickaxe, as above. | Each cell is a chance at one lump: 12 % in the poorest rock, 45 % in the richest. Six in ten are iron ore, four in ten coal. |
| An iron outcrop (rust-red) or a coal seam (black) on a mountainside | Right-click it and break it like any rock face — no pickaxe needed, though one speeds it. | 2 iron ore or 2 coal a load. They stand in small clusters, on some mountains and not on others. |
- Which mountains are rich in ore is not which are rich in stones. Ore has a richness of its own, so a mountain that is barren of gems may be the one to dig for iron — where to dig for money and where to dig for tools are two questions.
- Depth does not matter for ore. The first cells of a gallery pay as well as the last, so a short dig in the right mountain is enough.
- It is heavy. A lump of ore is 3 kg — as much as a log — and coal 1.5 kg, so a long gallery fills the pack fast; what does not fit is left behind like the stone.
- What it is for. The bloomery smelts ore over charcoal or coal into iron, and the smithy forges the iron knife, axe and pickaxe. Coal also burns in a campfire and a hearth, a third longer than charcoal.
Travelling traders
From day 8 a trader may walk in: once seven days have passed since the last one, each day is a 30 % chance. The event log names the direction, and they wait two days. A trader comes whether or not the party is full, and cannot be recruited.
Left-click the trader to open their table — and walk a companion over first. The bargain is struck with the pack of the living companion standing nearest, within 4 cells: never with the stores, and not with whoever is selected. That pack's weight limit holds.
| What changes hands | Rate |
|---|---|
| The trader sells | ×1.5 of what a thing is worth |
| The trader buys goods | ×0.5 |
| The trader takes gold and gems | Full value — that is what makes them money |
| Worth, in gold | |
|---|---|
| Nugget · opal · ruby · diamond | 1 · 3 · 5 · 10 |
| Gold ornament (goods, not money) | 6 |
| Jade mask · polar coat | 30 · 30 |
| Lantern · binoculars · fur coat · handcart | 25 · 18 · 14 · 8 |
| Iron pickaxe · iron axe · iron knife | 11 · 9 · 5 |
| Bow · coat · leather boots · leather trousers | 6 · 6 · 5 · 5 |
| Pickaxe · axe · fishing rod · bedroll · knife | 4 · 3 · 3 · 3 · 1.5 |
| Iron · iron ore · coal · charcoal | 2 · 0.3 · 0.3 · 0.2 |
| Leather · pelt · hide · flint · seed | 1.5 · 1.2 · 0.8 · 0.6 · 0.3 |
| Preserved food · travel cakes · herbs · nuts | 0.5 · 0.6 · 0.3 · 0.15 |
| Wood · stone · planks · cut stone | 0.1 · 0.1 · 0.4 · 0.4 |
| From the ice (priced by the walk, below): ivory · ice pelt · blubber | 14 · 2.5 · 0.3 |
| From the jungle (priced by the walk): pepper · cocoa · fever bark · sugar cane · breadfruit · bananas · bamboo | 1.5 · 1.2 · 0.6 · 0.4 · 0.12 · 0.1 · 0.08 |
| A rule card (any violet word) | 40 — so 60 asked, and 20 paid for a spare of yours |
- Selling reads as selling. The right column is headed Your pack — to sell; lay goods on the table and the footer says the trader pays you: 3 Gold nugget before you agree. A unit worth under a tenth of a nugget is shown as 20 for 1 gold.
- You are paid in whole stones, largest first, out of the trader's own purse; only the rounding under one nugget stays with the trader.
- A trader never takes goods for nothing. Two bargains are refused, with the reason: a plain sale worth less than one nugget — lay more on the table (wood sells at 0.05, so it takes twenty logs to make one) — and one that would leave a nugget or more unpaid because the purse cannot cover it.
- The purse is small — 8 to 20 nuggets, sometimes a few opals, rarely a ruby — and it is all a trader can pay with. So a big load is sold against something you want, or in the part the purse can cover.
- What a trader carries: two or three pieces of kit or clothing, two to four goods from far away (flint, feathers, leather, cordage, pelts, seed, and sometimes pepper, cocoa or fever bark), two or three kinds of provisions (preserved food, travel cakes, nuts, herbs) — and, every second trader, one rule card. It is the one way to buy a violet word instead of finding it, and the dearest thing on the table.
- Binoculars come from a trader or the kit page — nothing crafts a pair, and a trader only sometimes has one (18 gold of worth, so 27 asked). Whoever has a pair in the pack sees twice as far in the open: 40 cells against 20, with no hand taken. Not underground; a storm, a fog and the jungle's canopy still take their share of the doubled reach; a second pair adds nothing. Give them to whoever walks ahead.
- Not everything has a price. A trader will not deal in water, waste, spoiled food, or the one-of-a-kind finds of the run.
Under the pyramid the one place somebody built
Every other place on the map grew. This one was drawn — five storeys of rooms, traps, hidden doors and a tank of water, with a lantern at the bottom of it — and the whole expedition is paid for in torches.
The pyramid always exists. Nothing rolls for it: it prefers the deep desert, and on a map whose sand never grew it stands in the forest instead, or on open ground — a run without a pyramid is not possible. From outside it is a step of masonry 13×13 cells across, weathered, its top course broken off and the capstone lying in the sand. There is one way in, in the middle of the south face: a gate between two pylon towers, with a flight of steps running down onto the sand. Walk onto it or right-click it, exactly like a cave mouth. Inside you step in at the south edge of the first storey with the hall opening up ahead and the stairs down at the far end — as in the manor, the wreck and the temple. A dungeon a save entered before 0.26 keeps the layout it was built with.
Inside is an order of magnitude more building than there is hill — five storeys and about 1 570 walkable cells behind a wall you can walk round in a minute. The floors are joined by stairs, not tunnels: right-click one and the companion walks over, takes it and arrives standing on the step on the other floor, which is then inert underfoot until they walk off it, so nothing carries anybody back by accident. It works from either end, and a group order onto a stair is never spread out — send all three and all three cross, one after another, on one click. A line in the log names the floor you have reached. Underground the camera stops at the walls, panning and zoom alike, so you are never looking at a screen of black rock.
Five storeys, five ideas
Each floor asks one question, and only one. Reading the table before you go in is worth a torch on its own — the building is a network and not a chain, so knowing what is where saves the climb back up.
| Floor | What is on it | What it costs you |
|---|---|---|
| Entrance Hall | A silted colonnade, two side chambers — the east one holds a rack of 4 torches — a shaft to the sky, and a short dead end marked with jars and a bracket, whose end wall is a secret. | Nothing. It has no trap at all: this is the floor where you learn that light is the resource. |
| Gallery of Kings | A pillared gallery, a side hall with a hole in its floor, and the sealed door the scarab opens. | Health, and only for hurrying: three darts, every one of them in a long straight run and never in a room. |
| Servants' Warren | A collapsed dividing wall, a damp corner where the cistern seeps through, two passages narrowed by fallen stone, a shrine whose only door faces south, a chamber with two doors and a chamber with none — and behind its secret, the scarab seal. | Time, and therefore torches. No dart here, deliberately: a wrong turn already costs, and charging twice for it is charging twice. |
| The Cistern | 229 cells of water — the only water in the building — a walkway round it, and the valve in the south coping. | One dart where the walkway narrows, and the decision below. |
| Burial Chamber | One room, one bier: the lantern, the pharaoh's gold and preserved food. | Weight against light. One dart in the approach, and from here the way back is longest and the pack heaviest. |
The floors are a network, not a chain. The scarab seal lies in the Servants' Warren and the door it opens is a floor above it, in the Gallery of Kings — so finding the key sends the party back up. Eleven caches are scattered through the five floors (cordage, herbs, nuts, preserved food, torches, gold), and a share of the run's automation-card scraps lie deep inside as they do in any cave. The gold is a keepsake first: carrying it home buys a chronicle line and a hidden achievement, and a trader takes an ornament as goods — worth 6 gold, so 3 in the hand — not as money.
The dark, and what the light will not do
There is no dim. Underground — here and in every cave — you are in somebody's light or you are in black. Ground you have already walked is remembered by the run, and it is never shown: a mapped pyramid goes black again floor by floor the moment the last flame dies. With no flame at all a companion gets a smudge about one cell across — enough to see where your people are standing, nowhere near enough to tell a wall from a doorway, and nowhere near enough to walk by.
| The rule | What it means down here |
|---|---|
| Light does not go round corners | It stops at whatever reaches the ceiling — every wall, and every column. A corridor gives up only what lies straight ahead and the colonnade throws real shadows. Water, jars and sarcophagi do not block it: you look across a pool you cannot walk into, which is how you see the stair on the cistern floor from the rim. |
| A shaft is lit without a torch | Two cells of it, and they are the one fixed point in five storeys of identical dark. There is a shaft on each of the top two floors and nowhere deeper — worth knowing where one is before your last flame goes out. The daylight in the doorway reaches two cells in as well, so the way out is never a black hole. |
| A built fire lights a chamber | A campfire is 9 cells and a stone hearth 13, and neither has to be carried — but the fuel does. Making a camp down here is its own decision. |
| A torch is 7 cells and about 3 real minutes | The rack by the door holds four, which is the five-storey building and nothing more. Snuffing one (L) keeps what is left in the head, so half your light gets you there and the other half gets you home. One bearer carries the flame in and the others strike off it. |
| The lantern is 11 cells and about 12 real minutes | Four times the burn and half again the reach. Nothing crafts one and no trader carries one: there is one here, on the bottom floor, and a second only in the wreck in the ice. It is the difference between glimpsing this place and exploring it — which is why the trip that fetches it is the hard one. |
| Losing the light means feeling your way | A companion with no light at all — no flame of their own, nobody else's, no fire, no shaft, no daylight from the doorway — cannot simply be clicked onto the exit. Every order carries them one cell, in a straight line toward the click, at about a third of the pace; a wall that way stops them and the log says they found only stone. A far order raises a short red line over them — “Too dark — one step at a time”. It is a rule about moving, not about clicking: the exit order, queued waypoints and rule programs are all held to it. The rescue is a light: standing in a mate's torchlight (or a fire's, a shaft's, the doorway's) they walk normally again and can strike a torch off the mate's, and one who feels their way into the exit's two cells of daylight sees again and walks out. A torch out deep in a dungeon is a companion lost unless somebody goes down after them. |
Traps, and the footing
A trap never rolls dice. It always fires and it always costs exactly the same — and it is drawn on the tile like everything else, so it is plainly visible in torchlight and invisible without one. That is the entire mechanic, and the whole argument for carrying light: what the building charges for is hurrying in the dark, which is a decision you made. Hover a tile and it names the floor and what the trap will do, before you step.
| What it is | How many | What it does |
|---|---|---|
| Trapped slab dart | 5 | 22 health and 12 Mood. It is spent once it fires and becomes plain floor, so a single file may follow the first one through. Three of the five stand in the Gallery of Kings, in long straight runs and never in a room. |
| Hole in the floor | 2 | 30 health, 12 Mood, and it drops you a storey. A pit stays a pit, for ever — the party has to remember where it is. |
| Drifted sand x0.75 | a sixth of the floor | Nearly all of it in the entrance hall, which is drawn half silted shut. Wading it costs a quarter of your pace — on the way in, and again on the way out with a full pack. |
| Fallen stone x0.70 | scattered | Worse than sand on purpose: rubble is picked over one step at a time, sand is merely waded. Underground, time is flame — every slow cell is torch. |
Finding the secrets — a draught, then a job
Walking past a hidden door does not open it. There are two of them, drawn as plain masonry, and a light carries only a tell: within a few cells of one, a companion with a lit light feels a draught and says so — naming the floor and the direction it comes from, never the cell. The bearing is taken from where they stand, so a few steps and a second reading cross on one wall.
How near is up to them. Perception sets the reach: 5 cells for sharp eyes, 4 for average, 3 for dull. It is a reach and never a roll — the same companion feels the same thing on every step and after every reload — so who you send down the corridor first decides what gets noticed at all. It buys noticing and not cheaper searching: the walls you actually pay for do not move.
Then you dig. Right-click any wall down there and the companion walks over and chisels at it for 25 s — with a lit light in hand, at the wall. A hidden door becomes a doorway; honest rock costs the same 25 seconds and gives you nothing but the news that it is solid. The verb is offered on every wall on purpose — a right-click that behaved differently over the secret would be the secret — and a wall the party has never had light on cannot be searched at all. Cross two bearings first and it is one wall in the entrance hall and three in the Warren, 75 s at worst, under half a torch. Guess instead and you are paying 25 seconds of flame a wall for as long as your nerve holds — which is the whole reason the draught is worth walking towards.
The sealed door is the opposite: it is meant to be seen. No searching and no chiselling — it wants the scarab seal, and it opens for anybody standing there carrying it. The seal is not used up. It lies behind the Warren's secret, one floor below the door it opens, which makes that the one search in the building nobody can skip.
The cistern valve — the one thing that does not come back
229 cells of water lie on the third floor down, and because rock has no weather over it the pool never freezes and never dries: it is the only water in five storeys and it is there all year. The way down to the lantern runs across the floor of the basin, and the basin is full. From the rim, by torchlight, you can see the stair down there — water stops feet and not eyes. Nothing has to explain the valve in the south coping; the building does.
Console: dungeon (valve, draught,
pace, search <x> <y>, stairs) and
cave light report every number on this page out of the same tables the game reads
— developer builds only.
The Manor the second place somebody built
There is a great house with its roof fallen in on every map, standing on good open land near water, always in the temperate forest — so unlike the pyramid you do not have to cross a desert to reach it. It is 13×9 cells above ground, with two raised end pavilions and a proper doorcase whose both leaves stand open. Underneath: five storeys, 1 326 walkable cells, a flat 6 °C — colder than a cave — and it is darker than the pyramid, because it has no shaft at all. Bring light and bring spares.
It is not a second pyramid. There is no key, no seal, no valve, no sand and not one dart trap. The pyramid’s subject is a tomb somebody meant to keep you out of; the manor’s is mechanisms and decay — a house that worked, and then did not.
| Storey | What it is for |
|---|---|
| Great Hall | Teaches. One plate, one gate, a rack of torches, no hazard at all. |
| Long Gallery | Coming down. The floors are the danger here. |
| Servants’ Wing | Hides the secret. |
| The Cellars | The decision: two pressure plates in opposite wings and one gate on the stair. |
| The Vault | The family’s gold, a handcart — and, on a floor that has already split, an automation card. |
A gate can also be wrenched open by hand — but only by somebody the way out is not reachable from, and it never shuts again.
Six walls in the house can be read, once each, into the event log and the chronicle. They are the only account of what happened here.
Sound Esc → Settings → Sound
Sound in this game is information, not decoration: where the camera is, what the weather is doing, whether the settlement is working, and how much fuel is left in the fire. It is built to be listened to rather than left on.
| What you hear | What it tells you |
|---|---|
| Three ambience layers, cross-faded | The place under the camera (cave › roof › near water › mountain › forest › biome, and it splits day/night), the weather laid over it rather than replacing it (rain in a forest and rain in a desert are different sounds), and a settlement layer that comes in once four buildings stand — the sound of the base being inhabited, and the one you notice missing when the party moves on. The ice and the jungle have no bed of their own yet: they borrow the tundra's and the swamp's |
| Seven music moods, and long silences | Bound to the run's phase, not shuffled: the bare opening (under 6 buildings), the settled base, night, winter, an expedition (more than 60 cells from the settlement), and mortal danger. Music is the exception, not the bed: a track plays out and is followed by 5–12 minutes of nothing but the world. A change of mood — nightfall, leaving the settlement, winter — starts nothing; it only decides which track comes next. Mortal danger alone cuts in at once, and at most once every ten minutes — so music that starts out of turn means somebody is dying. The title screen opens on one of three calm pieces, never the same twice in a row |
| Work has a beat | One impact per work cycle — the axe swing, the pick strike — so a job you cannot see still has an audible rhythm, and it slows exactly when the worker does. Chopping picks the sound of the tree species actually being felled |
| Footsteps, on nine surfaces | Grass, forest floor, sand, snow, shallow water, road, planks, rock and swamp mud — so you can hear whether snow is lying yet, or that somebody waded the ford instead of using the bridge. The cadence rides the real stride, so a tired or overloaded companion audibly walks slower |
| A fire crackles, and thins | One voice per lit fire, positional, and quieter as it burns down — the fuel level is otherwise only visible in a panel, so a fire starting to sound thin is the reminder to put a log on |
| Walls and rock muffle | Step under a roof and the outside goes dull; go underground and it drops away behind reverb. A house being warm and dry was already a reason to build one — this is what makes it feel like one |
World sound is gated on the zoom. At the zoom the game starts at the work, the footsteps, the fires and the animals play at full volume; they fade out only as you pull back towards the overview (below zoom 0.6), where you hear the beds and the music and nothing else — and the near ones only within earshot of the view, so the other base is not heard while you watch this one. The river and the sea shore fade with the distance to the water and fall silent once you zoom out. So the detail you hear tracks what you are actually looking at, and eight companions never turn into a wall of noise.
Five sliders, one switch — Esc → Settings → Sound: Overall, Music, Ambience, World (work, footsteps, fires, animals) and Interface (clicks, windows, alarms and the mortal-danger heartbeat), plus a Silence switch that mutes everything and greys the sliders out. They are four genuinely different questions: the rain, the work loops and the clicks each ride a slider of their own, so turning the interface down does not turn the weather down with it. Turn Interface down, not World, if the clicking is what bothers you — and note that the heartbeat rides Interface, so muting that mutes your death-warning too.
Interface & keys
The game opens on an intro: three companions walk out of the dark, stop and turn to face you, the title fades in above them, and the whole picture dissolves into the menu that was standing behind it all along. Any key or click skips it, and it plays once per launch — quitting a run back to the menu does not replay it. There is no engine logo; the window opens straight onto the same leather the title screen and the loading screen stand on, so there is nothing to sit through before it. The people in it are drawn by the painter that draws the map, so they change when the companions do. It has no sound yet.
Every new run opens with a parchment after the loading screen: the four rules of the wild — think before you move (pausing costs nothing), stay warm and dry, water before food (rivers run clean, ponds make you sick) and nobody is coming (a wound left alone festers). The world waits until you click or press a key; the ambience and music are already playing. Never on Continue or a load, and Settings → Gameplay → New run switches it off.
The companion window holds everything you do to one companion, as five tabs — each key opens its own tab (press again to close; Ctrl+Tab walks the tabs). All five are about the companion you're steering — and pressing one with nobody selected claims that companion, so Tab advances from them, F centres on them and a right-click orders the one whose sheet you are reading. A box-selected group is left alone, and closing the window claims nothing back.
| Key | Action | Key | Action |
|---|---|---|---|
| E | Character tab (stats, carry, equipment) | Space | Build ring (radial menu) |
| R | Skills tab — and while you are placing a building, R turns the piece instead | Q | While placing a piece indoors: against the wall, or with a gap |
| T | Automation tab (rules) | L | Light / douse the whole selection |
| Z | Cards tab (this companion's whole deck) | 1–8 | Select companion (twice = camera) |
| ^ | Select the whole living party — the key left of 1 (` on US boards). It replaces the selection and the camera stays put. | ||
| U | Crafting tab — the bench (bedroll, cordage, bow, rod, axe, knife, coat, hat) | Tab / Shift+Tab | Next / previous companion (+camera) |
| Arrows · Enter · Backspace | In any ring: turn it, pick what is lit, go one level back — or press a sector’s underlined letter. In the build ring 1 2 3 pin the hovered entry to a shortcut and Del empties one | ||
| H | Draw & shoot (bow: hold to draw, release to loose, right-click to let down) | M | Widest zoom |
| O | Read the sky (an hour's vigil) | Open sky only — under a roof, in a cave or beneath the forest canopy there is nothing to read | |
| F | Centre camera on selection | G | Toggle fog (debug) |
| Y | Zones overlay (write on the map) | Esc | Close the overlay |
| X | Map lens — step to the next one | X | Keep pressing: the ring ends back at no lens |
| J | Chronicle (saved history) | - / . | Game speed up / down |
| K | Survey the country round about (selected companion) | N | The chart — only for a companion standing at a chart table |
| F5 / F9 | Save / load slot | There is no help key: this page is the manual | |
| F12 | Dev console (debug builds) | Esc | Close open window, else pause/settings |
| These are the defaults — the five tab keys E R T Z U sit side by side in one row. Rebind everything in Esc → Settings → Keybindings; a key you set yourself stays as you set it. | |||
The top-left corner is the roster and nothing else. A companion's card says who needs you with a word, a stripe and its frame, and hovering the card unfolds the full stat bars. The row of small bars beside each card — one per stat, always in view — is off until you switch it on under Settings → UI; the card is narrower without it. There is no running list of everything the settlement owns: a total of every pile on the map at once, from anywhere, through fog, is a question nobody standing in the world can ask — the goods are real things lying in one place somebody has to walk to. What you have is answered by the thing that holds it: left-click a stockpile for its panel, right-click it with one companion to open it beside their pack, and the build ring tells you what you can afford.
Only one window is ever open. Opening any of them — the companion window, a building, pile, site or room panel, the transfer window, the build ring, the chart, the chronicle — closes the one before it, so nothing overlaps. A stack in hand survives the switch: it is only ever put down where you put it down.
Every visible thing on the map answers a left-click with a small window of its own — a portrait and the thing in numbers, pinned where you clicked while the corner readout goes on following the mouse. What it shows and how it closes is under What a left-click opens.
How large any of it is drawn is yours to set. The windows ship small on purpose, so the map stays in view behind them; if that is too small to read, the answer is a slider and not a lower resolution — Settings → UI sizes each part of the interface by itself. A tooltip and a drop-down list are drawn at the size of the part they belong to, so enlarging the windows enlarges their small print with them.
A window wears the moment it is opened in. The panels are tanned hide and bone ink, and the frame reports on the companion you have open without a word: a tallow glow after dark, rime creeping in from the corners below freezing, rain running down it while it rains, soot on the top rim while that companion stands at a fire or under a roof — and the frame pulses red when that one companion is in mortal danger, which is the one layer worth acting on, because the party alarm cannot tell you which of them it is. Every layer reads a number the simulation is already acting on; none of it is decoration you have to interpret.
Lenses over the map X
X lays a lens over the ground and steps to the next one. The ring is off → Zones → Climate → Rainfall → Blight → off, so the bare map is always one press away and only ever one lens is up. A plate under the clock names the one you are looking at and what its colours mean.
| Lens | What it colours | Read it before you |
|---|---|---|
| Zones | The areas you painted, filled in. Overlapping zones average their colours — the outlines underneath still say which two. | Hand a workshop its work zone |
| Climate | The degrees this ground adds to or takes off the sky: blue below, amber above, ±10 °C to full colour. Temperate lowland comes out almost clear. | Choose where to winter, or plan a crossing |
| Rainfall | How wet the ground lies, dry sand to deep blue. Open water stays clear. | Site a camp, or guess where the hemp is |
| Blight | How far the dragon’s blight has taken the ground; clean ground stays unpainted. The one lens over something that moves: it is repainted each day while it is up. | Decide whether a site is still worth living on |
The event log — and the red alerts
Bottom right, a live feed of what the settlement is doing: arrivals and deaths, buildings raised, illnesses, level-ups, the traces a false companion leaves, season turns. Drag the grip in its top-left corner to resize it — it stays pinned bottom right and grows up and to the left. The log lies under every window: an open window covers it where the two meet and keeps its own size and place, so close the window to see the whole feed again.
What happens to one companion floats over that companion, where a harvest's gain shows: +1 Foraging (12) or +1 Level (5) in the boon green for a step up, and a red Cast failed, Shot missed or Spark failed for an attempt that came to nothing. Every skill level floats; the log keeps only every tenth, so a skill's hundred levels do not bury the feed.
The plate on top of the log is the craft queue: one row per companion with something on their bench, each entry with the product's picture and how many are still to come, the kit in hand with its progress. Click an entry to take it off. It is hidden while nobody is crafting.
The clock takes its own foot off the accelerator. A red rim and a heartbeat only ever reach a player who is looking, and at 5x or 10x the line into mortal danger is crossed between two glances at the screen. So the time warp has a brake: the moment somebody crosses that edge, the game drops itself to 1x. It slows, it does not pause — a pause would hand you a frozen board to study, and 1x hands you the emergency at the speed the game is meant to be played at, with the clock still running while you decide.
- Once per emergency. It pulls the speed down on the way into the red and then stays out of the way, so you can wind back up to 10x to send help across the map without being dragged down again every frame. It re-arms when nobody is dying.
- It never starts a game you paused. A run paused on purpose stays paused, and simply comes back on the 1x rung.
- Every difficulty, Brutal included. It needs no exception there: Brutal's refusal to pause while the rule editor is open guards the pause, and a brake that only moves the speed rung never goes near it.
- Settings → Gameplay → Slow to 1x when someone is dying, default on.
A worker that cannot work says so, too. No tree in reach, no rock face, no farm, no water to draw, no bow or rod in the pack — the companion posts one red line naming the reason and stops, rather than standing there looking busy. It comes once per reason, so a new problem is never buried under a repeat. A farm in winter stays quiet on purpose: dormant fields are the rule working, not a failure.
How much it says is up to you: Esc → Settings → UI offers Everything, Fewer (no wildlife chatter) and Only what matters. Verbosity only filters the live feed — the chronicle (J) always keeps the full history.
Achievements — yours, not the run's J
Forty-six achievements across six shelves: the opening hours, surviving the year, the companions, the rule programs, the map, and a small set that is Brutal's own. The point of them in a game you are meant to lose is where they are kept — they live in your profile, beside the settings, and survive a death, a new world and a deleted save. Losing everything does not lose these.
The chronicle (J) has a second page for them, with a tally per shelf and a bar on the counted ones. Twelve rows stay nameless until they happen, most of them because naming a hidden place is the spoiler. Nothing is ever awarded for time served, and losing a companion is marked quietly and hidden — it is a thing that happened to you, not a to-do item.
Four of them ask whose hand did the work. A run keeps count of your interventions: taking a companion over, giving an order, moving goods with your own hand, and staking a build site. Watching, panning, opening a window and running the clock fast are not interventions.
| Achievement | What it asks |
|---|---|
| A Day Off | A whole day without giving a single order. |
| Unbidden | A full year — 28 days — without one intervention. Any single gesture starts the count over; saving and continuing does not. |
| By Hand | Reach day 100 without a rule program ever doing the work. Writing a program is fine — the first piece of work a rule or a claimed task completes ends the attempt for that run. |
| Hand and Program | Reach day 100 with rules at work and your own hand in it — at least one intervention. |
The two day-100 rows carry a bar: the best day any run reached with that style still intact.
Thirty-two of the forty-six are watched today; the rest are waiting on a signal each. The list, and which is which, is in docs/achievements.md.
Difficulty & saving
Difficulty is chosen on the title screen, per run, and it decides what a mistake costs. The title screen offers three — Tutorial, Hard and Brutal — and opens on Hard. The Tutorial saves exactly like Hard; what else it changes is below.
| Hard | Brutal | |
|---|---|---|
| The creator | Everything open: the island's seed and preview, the landing and the season, the attributes, the kit | Island rolled and unseen, temperate land, spring, attributes fixed — names, looks and the kit stay free |
| Saving | Save and load freely | Permadeath — the game saves itself, and Continue resumes exactly where you left off. The save suspends a session; it never undoes a death |
| It saves | When you do (F5) | On an interval, at every dusk, on every death, in danger, on pausing and on quitting |
| Leaving | Asks first when nothing was saved or loaded in the last minute — on Quit, Main Menu and the window’s close button alike: save and leave, leave without saving, or stay. The dialog names the slot it would write and how long ago the last save was | Saves itself on the way out |
| Rule editor | Pauses the game while open | Time keeps running while you plan |
Each run gets its own named slot: the Esc menu names, overwrites and deletes them, the title screen loads any of them. The autosave interval is in Esc → Settings → Gameplay.
A save keeps what everyone was told to do. The standing order rides along with what it was aimed at, the work already banked, and the whole Shift waypoint chain queued behind it — so you can plan a march across the map, save, and load into a party still walking it. A batch craft keeps its kit and its materials, an hour of vigil stays stood, and a watch that has already seen the night fall knows it.
A save from an earlier release does not load. A save keeps the seed and what you changed on the map, not the map itself, and this release grows a different island from the same seed — so the game refuses the file rather than set a camp down on ground that has moved.
Where the files live. Saves and settings sit in %APPDATA%\Companions (~/.local/share/Companions on Linux) — the game keeps its own folder rather than one under the engine's name. If you played an older build, its folder is copied across on the first start and the original is left untouched, so an existing installation carries on either way.
While the prototype is being tested, manual saving is left enabled on Brutal too.
The Tutorial — a full run on a small island in plenty
The third button on the title screen, ahead of Hard. It is the easy way in and a whole run — play it as long as you like. Play starts it at once: no creator, three companions rolled for you.
| What is different | How |
|---|---|
| The island | One island, always the same, a quarter of the real one (384×384), with two and a half times the plants and twice the animals. The party lands on temperate ground beside a river, with a still pond (sand rim, flint on it) and a cave in an ore-bearing mountain a short walk away; hemp, stones, branches, twigs, berries and herbs lie round the landing |
| Nothing is handed out | No start item and no building — every tool, fire and shelter is made by hand, from the same items and buildings Hard has |
| The needs press half as hard | Hunger, Thirst, Relief and Mood lose only half of what they would on Hard — their own drain, the heat’s extra thirst, the cold’s extra hunger, what a meal costs Relief, and every Mood loss — and Mood’s ceilings (a hard life, dirt, waiting wishes) press only half as deep. Health, Tiredness and everything that fills a bar are unchanged |
| An instinct | A companion in mortal danger drinks, eats or sleeps by itself — the one place in the game with self-care |
| Animals are harmless | Dangerous animals warn and charge but do no harm: no blow, no wound, no venom |
| The weather | The first two days are always sunshine |
Your companions explain the game in speech bubbles that stay until you click the little arrow in their lower-right corner — the next page, or closing on the last one. Fifteen lessons in a row, from moving and drinking through tools, fire, a straw bed and a roof, walls, fishing, a scouting trip for feathers, hunting, caves and mines to the rule program, plus a word at the first lit fire (boiling), the first night, kill, cave and card, a fallen companion and the first autumn. Keys are named as you have them bound, and the right mouth speaks: the one who earned a card announces it, the one who walked into the cave finds it dark, and a fallen companion is never the one calling for help. Early on come Tab / Shift+Tab to hop between companions, Shift+right-click to queue orders, and the advice to keep every companion busy at once rather than one working while two watch.
Each lesson sets tasks, and the next lesson waits until every one is ticked. They stand in small green at the left edge, in groups under their own headings, several at once:
- The first steps: select a companion; see every companion drink and every one eat (the list counts them, 1/3, 2/3 — food can be handed over in the transfer window); fill a waterskin; queue two orders.
- Tools and fire: 6 plant fibre, an axe, 3 twigs, a campfire, a flint, the fire lit, pond water boiled. A Wood group (collect 10) appears the moment somebody carries an axe.
- The camp — bed and roof come before walls. Straw beds (six leaves each, Build → Camp) and a thatch roof dragged over them (four leaves a tile, Structure → Roofs, its pillars staked for you): three beds and a finished roof of at least 3×3 over the beds and the fire, the fire lit. Only then walls and a stockpile.
- The night: at 22:00, or once anybody’s Tiredness falls under 30 %, put every companion to bed yourself.
- Food and the way out: everybody fed and drunk to the full; make a rod and fish; then scout 40 cells out — gathering on the way, food above all — and bring back 4 feathers for the coming bow; only then hunt, enter the cave and dig ore.
- Automation: the lessons open with the first card, walk you through the first rule and Auto, and end wanting three rules on one companion and programs running on two.
Settings worth knowing about
Esc → Settings, five pages. The ones players actually miss:
- Gameplay — Slow to 1x when someone is dying, edge-scroll speed and border width (0 switches edge scrolling off), the autosave interval, and whether a new run opens with the four rules of the wild.
- UI — everything about the interface itself: how large it is drawn (below), the event log's detail, whether companions speak, the small stat bars on the companion cards (off as shipped) and the FPS readout.
- Graphics — resolution, window mode, VSync, anti-aliasing and quality. A fresh install opens at 1280×720; 1280×800 (the Steam Deck's panel) is in the list on every machine, not only on one that happens to be 16:10.
- Sound — five volumes (Overall / Music / Ambience / World / Interface) and a Silence switch. Which one to reach for is in Sound.
- Keybindings — every binding above can be reassigned.
The size of the interface is seven sliders, not one. Each runs from 70 % to 150 % in steps of 10 and takes effect when you let go of it; 100 % is how the game ships. Everything scales the whole interface at once — the map keeps its own zoom — and the six under it resize one part each, multiplied on top of it:
| Slider | What it resizes |
|---|---|
| Companion cards | The roster in the top left: the cards with their portraits and bars, and the condition badges beside them |
| Windows | The companion window with all five tabs, and every window you open by clicking the map — fire, workshop, stores, rooms, traders, the chart and the chronicle. Their drop-down lists follow |
| Date and speed | The date plate at the top and the time-warp bar in the top right, with the FPS and zoom lines under it |
| Info panel | The readout in the bottom left that names what the mouse is on — and the pinned window a left-click on a thing opens |
| Event log | How large the feed is drawn, and with it the card that flies into that corner when one is learned. Dragging the log's grip still decides how much it shows |
| Text size | The type everywhere, without the frames around it. A few hand-set labels and the drawn automation cards keep their size |
Reach for the part first, and for Text size last. Large type in a frame that did not grow crowds; if a window is too small to read, enlarge Windows.
Architecture & conventions
Engine, layout, and the ground rules the codebase holds itself to.
- Engine: Godot 4.x, 2D top-down. GDScript only (no C#).
- Language: all identifiers, comments, node/scene names in English — no German anywhere in code or the scene tree.
- Naming:
snake_casefor vars/funcs/signals/files;PascalCasefor classes/nodes/scenes;class_namefor reusable scripts. - Data-driven: tunables live in
.tresResources (resources_data/) and@exportvars — not magic numbers. Numbers should be tunable without touching code. - Decoupling: cross-cutting state lives in autoload singletons; systems talk through signals where it decouples them.
- A freed object compares
== nullas TRUE. Sonode != nullshort-circuits and never catches a freed one —is_instance_valid()is the only safe test. Any registry that outlives a scene teardown (cells → nodes, caches) must prune or skip stale entries with it. - What animates gets its own
CanvasItem. Godot re-runs the whole_draw()of any item that callsqueue_redraw(), so a moving part goes on a child canvas item and only that is redrawn (WorkshopView._life_layeris the pattern). A guard on the redraw does not satisfy it; drift check 11 refuses a barequeue_redraw()in a per-frame callback. - A hidden node still holds its drawing.
visible = falsekeeps the recorded commands, and those are renderer RIDs in pools capped at 262144 — so a gate that hides mustqueue_redraw()on the way out as well as in, and a gate on the fog is not a gate on the camera. Consoledrawn; tests/draw_budget_probe.gd measures it, on a display only. - Performance is measured on the late-game fixture (
scenario latebase, see Testing) — a probe on a fresh map measures a settlement that does not exist. A per-frame cost is booked by name withJobRunner.profile_add("<system>:<branch>", since), which is whatperfprints. - A
.tresis written in the editor's own form (uids, sorted keys, no;comments) through tools/resave_resources.sh or tools/resource_format.gd, or the editor rewrites it on every F5. No code may read meaning from a Dictionary's key order in a.tres— a save re-sorts it.
| Path | Holds |
|---|---|
| scripts/autoload/ | Singletons (managers, world & save state) |
| scripts/player/ | Companion rig: stats, skills, controllers, jobs, automation |
| scripts/world/ | Worldgen, terrain/biome/landmark, renderers, camera, weather, fog |
| scripts/resources/ | Resource nodes, animals, harvest cycle |
| scripts/buildings/ | Buildable, build controller, sites, stockpile inventory |
| scripts/items/ | Item catalog, item graphics, ground items |
| scripts/audio/ | The sound library's resource classes, the music/ambience directors, the signal router, the work profiles and the bus layout (the per-companion FootstepPlayer and WorkSoundPlayer sit with the rig, in scripts/player/) |
| scripts/ui/ | HUD, panels, dev console, settings, screens |
| scripts/main/ | The main scene's script, GameVersion, the console's ScenarioStager and GamePace — the day-length factor every timed job is scaled by (see Time) |
| resources_data/ | All .tres configs: buildings, animals, resources, stats, skills, palette, theme |
| tests/ | Headless suite + benches + the screenshot harness |
Autoload map
The singletons every system reaches. Persistent autoloads must reset in
WorldGenerator._ready (a reload doesn't re-instantiate them).
| Autoload | Owns | File |
|---|---|---|
GridManager | Cell↔world math, occupancy grid | autoload/grid_manager.gd |
TerrainManager | Per-cell terrain / biome / landmark layers, walkability, water bodies, climate | autoload/terrain_manager.gd |
TimeManager | time_of_day, day, season; ambient temperature; rollover signals | autoload/time_manager.gd |
TimeWarpManager | Pause / 1–10× via Engine.time_scale. _write_scale() is THE one write of it, and both pauses stop the clock itself: behind a tree pause (Esc menu, dev console) _sync_tree_hold() holds the scale at 0 and restores it on release. clock_is_stopped() and the clock_stopped(stopped) signal are what anything that must stand still listens to | autoload/time_warp_manager.gd |
WeatherManager | Season-weighted weather spells, snow cover | autoload/weather_manager.gd |
FogManager | Three-state per-cell visibility, and the memory that fades it (resources_data/fog_memory.tres) — see World generation & terrain | autoload/fog_manager.gd |
PartyManager | Members, selection, embodiment. The drag box is drawn by world/tile_inspector.gd at z_index 110 — above the cave floor (z 2), the fog and the darkness (z 100). It sat at the default 0 until 2026-07-26 and was invisible in every cave while the hit test, being pure geometry, went on selecting. | autoload/party_manager.gd |
BuildingManager | Placement, sites, rooms, action-area serving, water bodies | autoload/building_manager.gd |
CityInventory | Aggregate facade over all stockpile tiles | autoload/city_inventory.gd |
AnimalManager | Running population tallies, capacities | autoload/animal_manager.gd |
TaskBoard | Building-posted tasks (11.6) | autoload/task_board.gd |
SimClock | The game-time scheduler (subscribe(id, period_hours, callable), periods in game hours under a real-time frame budget) and the schema-free per-chunk store (value_at(cell, key), 64-cell chunks) — the layer any slow simulation ticks on. The store carries the snow cover; write-up docs/sim-clock.md | autoload/sim_clock.gd |
CarcassManager | Every kill lying in the field: lay(), at(cell), find_near(), the rot sweep | autoload/carcass_manager.gd |
RunRecorder | The run's margins and the intervention ledger: note_hand(kind) (order / embody / site / goods), note_automation(), untouched_days(). Saved with the run; the achievements that read it are not | autoload/run_recorder.gd |
SaveManager | Named save slots, migration seams | autoload/save_manager.gd |
EventLog / Chronicle | Live feed / saved history | autoload/event_log.gd, chronicle.gd |
AchievementManager | The profile store — 46 feats that outlive the run, deliberately outside saveable and outside the reset list | autoload/achievement_manager.gd, achievements/achievements.gd |
SoundManager | The library (id → row), the five buses and the voice pools. play(id) is THE entry point and world_gain_at(pos) THE zoom gate (it used to be copied in three files). Owns the directors — see Audio | autoload/sound_manager.gd |
KeybindManager / GraphicsManager / GameState / ResourceManager / GroundItemManager | Input, graphics prefs, run state, resource registry, dropped stacks | autoload/… |
World generation & terrain
WorldGenerator.generate() builds the world.
TerrainManager.is_walkable(cell) is THE passability seam (nav bake, collision,
standability, rooms all read it — a bridge's set_walkable_override opens a crossing
for all of them). TerrainManager.climate_offset_at(cell) is THE climate seam.
TerrainManager.is_drinkable_water() is THE drink seam; is_fresh_water()
is salinity only; is_still_water() is THE quality seam (7.5 — a cell the generator
marked STANDING, or a body that reaches no sea), and
IllnessController.wear_bad_water() is the one place an untreated drink is billed.
Since the terrain pitch (2026-08-04) three more: TerrainManager.height_at /
slope_at / altitude_at (the height field every later pass reads),
rain_at (how wet a place is, as a RANK) and fertility_at (how well it
farms, likewise a rank).A cell has five orthogonal per-cell layers: terrain (what it physically is — world/terrain_types.gd: PLAINS/WATER/FOREST/MOUNTAIN/SAND/SHALLOW plus CLIFF and MARSH, the coast's own sorts), biome (its climate — world/biome_types.gd: temperate/tundra/swamp/desert/polar/jungle, grown as one region each — the enum is append-only, its value is the stored byte), landmark (world/landmark_types.gd: crater lake / hot springs / standing stones, the traces somebody left — old camp / cairn — and the authored places: pyramid, manor, mammoth, lost expedition, wreck, temple, ruins), cave (world/cave_types.gd: where a cave opens — its mouth; the rooms behind it are their own map), and height (world/height_layer.gd: elevation, slope, rainfall and soil fertility — the physical field and what is derived from it per cell).
_classify always computed a height field, used it for three thresholds and
threw it away. Keeping it is what every later pass is built on, and each of them
replaced a placed or random thing with a consequence of the shape of the land:
- Height & slope — 5 fbm octaves under a domain warp (a coast that bends instead of a circle) plus a ridged fractal squared under a slow spine mask, so highlands arrive as ranges with saddles. Steepness costs a walker time (to half pace), billed through both movers, so an automated haul pays exactly what an embodied march does.
- Drainage (world/hydrology.gd) — priority-flood depression fill + D8 flow accumulation. No river is placed any more: channels are cut at quantiles of the land's accumulation (thread / stream / trunk), lakes are where the fill has to stand water, and every lake is given the outlet brook the fill says it has.
- Coast sorts — steep shore → CLIFF, flat shore with a trunk river arriving at the sea → MARSH, flat shore otherwise → a beach (which needed no new id: it is SAND).
- Orographic rain (world/orography.gd) — moisture is an air mass crossing the map from a seed-rolled wind, not a second noise field.
- Forest density — rain × headroom under the treeline × footing on the slope, multiplied (each is a veto). The density is the wood stock, and the canopy sizes its crown off that stock. Species follow the place.
- Soil fertility — flat × wet × (1 + bonus × log drainage): a floodplain. ROADMAP 14.5 wanted this and could not have it without a soil layer.
- Traces — old camps at water with wood, cairns on passes, each with a cache on the ground. Not a new system: a landmark already carries naming, fog discovery and a chronicle line.
area_scale() does not
move under the spawners. And rainfall and fertility are stored as ranks, because
the raw fields are so skewed (the wettest cell can carry hundreds of times the median) that a value
threshold calls half the island a desert.BiomeTypes, one table per rule, and a biome that is
absent from a table simply does not have the rule. Consumers ask TerrainManager per
cell, never the enum, so a seventh region is rows and no branch.
| Table | Values | Asked through |
|---|---|---|
CLIMATE_OFFSET | tundra −10, swamp +1, desert +8, polar −18, jungle +4 °C | TerrainManager.climate_offset_at(cell) |
SOAKS | swamp, jungle — only a roof keeps you dry | BiomeTypes.soaks(), WetnessController |
EVERGREEN / EVEN_SCATTER | jungle: stands regrow in every season, and nothing clumps into patches | BiomeTypes.evergreen() / even_scatter() |
UNDERGROWTH | jungle forest cells: UNDERGROWTH_PACE 0.7, UNDERGROWTH_SIGHT 0.55. Fell the tree and the cell is ordinary ground | TerrainManager.undergrowth_at(cell) |
BARREN / FROZEN | polar: nothing spawns and no animal is born there; the snow never melts and what falls is snow | BiomeTypes.barren() / frozen() |
SPOIL_RATE | polar 0.1, jungle 3.0 — food in a pack, in a pile or on the ground, and a carcass's rot clock | TerrainManager.spoil_rate_at(cell) |
FOUL_WATER | jungle: every water is billed like a pond's, rivers and wells too | TerrainManager.is_foul_water(cell) |
FEVER_AIR | swamp 0.4, jungle 1.0 — how fast mosquito bites build marsh fever | TerrainManager.fever_air_at(cell) |
ROT_RATE | jungle 2.0 — building decay and tool wear | TerrainManager.rot_rate_at(cell), read by BuildingNode.rot_rate() and Loadout.rot_rate() |
FUR_HEAT | jungle 0.25 — that share of the clothing warmth carried is added as heat | TerrainManager.fur_heat_at(cell) |
SETTLE | jungle 0.4, polar 0.2 — a factor on the site rating (worldgen and the debug lens only) | BiomeTypes.settle_factor() |
CellGrid
base (scripts/world/): TerrainGrid (type, wood/species/chop,
walkability), BiomeLayer (biome grid, climate_offset, soaks),
LandmarkLayer (landmarks, sites, warmth_at, the NO_WARMTH
sentinel) and WaterBodies (salt mask, lazy body labelling, fresh/salt/still/pond).
The public API is frozen — every TerrainManager.X seam kept its exact
signature, so nothing calling it had to change. The facade keeps only what crosses layers or touches
the tree: the felling signals, the salt/water-body invalidation in set_terrain, the
composite drink seams (is_drinkable_water/is_still_water), and the
season-driven freeze/drought state. The layers themselves are RefCounted — never in the
tree, never aware of TimeManager or EventLog.Caves
A cave is one cell on the world map — its mouth — and a map of its
own behind it (world/cave_interior.gd, generated by
cave_interior_generator.gd and owned by the CaveManager
autoload). The mouth cell keeps its MOUNTAIN terrain, so the terrain renderer, the spawn rules and
the walkable tally — and with them every spawn density — are exactly where they were.
How many: cave_count (18 since 2026-07-26, raised from 7) is a
request, not a headcount — _carve_caves opens at most one mouth per
mountain massif, so a world gets however many massifs clear
cave_min_massif_cells (70) and cave_min_spacing (55): measured across five
seeds on the 512² map, 13–17. Performance is not the limit and the number was
set to saturate the land: an entered cave costs ~40 navmesh polygons (+0.5%) and ~1 MB. It used
to cost ~4.5 ms on top of the wall-build freeze as well; since that freeze was traced to the
navigation map's free-edge merge and switched off (2026-07-26), a wall costs ~21 ms with
every cave in the world open — down from 1278 ms
(tests/cave_scale_probe.gd, tests/nav_edge_probe.gd).
Each interior is laid out in a reserved band of world coordinates east of the
island rather than in a separate scene. That is the whole trick: one World2D, one
navigation map, one physics space, so nothing is unloaded and the surface simulation keeps
running while the party is underground — and selection, right-click orders, the camera and
every autoload work down there unchanged. TerrainManager stays the one map seam:
is_walkable, is_underground, is_cave_dark,
is_buildable and cave_sight_radius route off-grid cells to
CaveManager, so no caller needs to know which side of the ground it is asking about.
The band's one recurring trap (paid twice, 2026-07-26): GridManager
covers only the surface grid and answers “neither empty nor floor” for every
band cell, so any predicate built on it silently rejects the whole underground. That is what made
building impossible down there and destroyed a stack dropped in a cave
(GroundItemManager._find_drop_cell found no cell and the caller threw the item away).
Both now branch on is_underground and read the building/site dictionaries, which are
keyed by world cell and have no bounds at all. Buildable.stands_underground() is the
separate question of what may stand there: interior_placeable or stockpile. An interior is generated deterministically from the
world seed and the mouth cell, so an unvisited cave costs nothing and still comes back identical.
The layout (re-carved 2026-07-26). The interior is scaled against the
mountain massif behind the mouth — CaveManager._massif_cells flood-fills it
lazily on first entry — on the square root of its cell count: 70 cells of rock give ~80 floor cells and
~29 steps of depth, 290 give ~275 and ~51 (tests/cave_layout_probe.gd, 200
seeds each). The same weight picks the cave’s form (fissure / warren / gallery /
great hall), which drives its proportions, chamber count, corridor width and name; both axes are still
drawn independently, so the ratio remains deliberately unrelated to the world’s. Chambers are
wobbling ellipses, passages wander, two cellular passes smooth the result, dead-end spurs go nowhere on
purpose, single rock pillars are left standing in the halls, and the interior is then
trimmed onto what was actually carved. Pools (CaveInterior.Tile.WATER) are
laid deep in the cave and draw back wherever they would cut a passage;
TerrainManager routes is_fresh_water / is_still_water /
is_drinkable_water through CaveManager.is_water, so underground water is real
water to the drink order, the waterskin and the HUD — still, and never frozen or dried. Finds sit at
least 8 steps along the walk from the exit (CaveInterior.depth_at, a BFS), and the
renderer shades the floor with the same measure.
The doorway is one shape, drawn from both sides
(world/cave_doorway.gd, 2026-07-26). CaveRenderer cuts it into
the mountainside and CaveInteriorRenderer draws the same opening from within full of
daylight, so walking in and looking back shows one door. It carries a rubble fan, a stone lip shaded
from near-black to nearly white as it turns toward GamePalette.mountain_light, two or
three chips out of the rim, an uneven doorstep and a darker throat behind the opening —
everything hashed off the mouth’s own cell, so no two caves share a doorway and nothing is
stored or seeded. It was tuned against screenshots, and the constants carry what the screenshots
ruled out: too much rim wobble stops reading as a doorway, chips that reach too far in become fangs,
and a bright stroke over the lit half is a smear of paint (hence a shaded band).
| What a cave gives you | Detail |
|---|---|
| Pitch dark | Sight collapses to 2 cells underground (against 20 in
the open), tracked per interior (CaveInterior._seen) because the fog grid is sized to the
surface. A carried torch adds 7 back — craft one in the Crafting
tab (U) from 5 twigs + 2 plant fibre. Without a light you explore blind:
CaveManager.gropes(character) is the seam every mover asks, and a groping companion
gets one cell per order at a hand's pace. Thick fog on the surface enters the same
state — WeatherManager.fog_blinds_at(cell)
(fog_grope_thickness 0.7, asked of the haze) feeds
CaveManager._refresh_fog(), and a light, a roof or the edge of the bank ends it. |
| Shelter | Rock roofs you: rain, snow and hail cannot reach, and wet clothes dry as they would under any roof. |
| Constant 8 °C | Underground replaces the sky entirely — no season, no weather, no day. A refuge from a −15 °C winter night and from a 42 °C desert afternoon. (Building underground is not possible yet, so there is no fire down there to warm you further.) |
| Finds | 2–5 spots per cave (mushrooms, rock, loose stones), seeded at least 7 cells from the exit, so a cave pays the party that explores it rather than the one that peeks in. |
| Going through | Standing on a mouth (or on the exit tile) takes a
character through — and since 2026-07-25 a right-click on either resolves to
Command.ENTER_CAVE for the whole selection. It had to: a mouth is a hole in a MOUNTAIN
cell, so the click fell through to “mine the rock”. A mouth is also only one
cell with rock on every side, so CommandController._mouth_click_cell snaps a click on
that rock (within MOUTH_CLICK_CELLS) to the mouth itself — the cell, not just the
verb, since the order carries the clicked cell with it. Open ground beside a cave is left
alone. |
| Crossing the threshold | An interior has no navigable link to the
surface, so CaveManager.route is the portal seam every mover asks: a walk that crosses
is really two walks, aimed at the exit tile (or the mouth) first. That is why rule programs
keep running underground — a thirsty companion leaves the cave by itself, because the
way out is the first leg. World searches centre on the mouth while inside
(CaveManager.search_center); reach tests still use the real cell. |
Key tunables — scripts/world/world_generator.gd
| Group | Exports (on the WorldGenerator node in Main.tscn) |
|---|---|
| Shape | world_seed, height_base_frequency, height_octaves, height_warp_amplitude, height_ridge_*, height_spine_*, island_falloff, water_share (0.1385), mountain_share (0.045), sand_share |
| Water network | river_thread_/mid_/trunk_share (0.02 / 0.006 / 0.0012 of the land's flow), river_mid_/trunk_half_width (1.2 / 1.7 — a trunk stays ≤4 tiles, the ceiling the bridge-only rule needs), lake_min_cells (120), lake_min_depth (0.045), lake_min_rain (0.20 — a basin drier than this holds no lake) |
| Runoff | rain_runoff_floor (0.7) + rain_runoff_exponent (1.5): Hydrology.flow_accumulation takes a per-cell runoff array, so drainage is a water budget rather than an area budget. Deliberately mild — past a gentle setting the redistribution starves the map's settle sites |
| Desert water | desert_channel_tier (2 = trunk only) and desert_channel_half_width (0.0). _flood_water_cell is the one veto: it refuses a desert cell unless the caller vouches for it, so the lake pass, the outlet brooks, the elbows and the disc a border river stamps sideways all obey it — before, only the channel loop was gated. Measured over three seeds, desert water cells fell 1486/1769/1126 → 99/18/429. A crater lake may no longer sit in a desert either; the guaranteed oasis pools are untouched and are why the country is still crossable |
| Coast | coast_cliff_slope (0.013 — the shore's 85th percentile), coast_delta_radius (4) |
| Forest | forest_share (0.22 at the cut; the biome pass lifts it to ~30% of the land), forest_treeline (0.46) + forest_treeline_north_drop (0.16), forest_slope_bare, wood_per_forest_cell (8), birch_/spruce_/oak_share |
| The closed edge | _close_map_edge() makes the outermost ring of every world sea or rock: inside a band of edge_closure_band (32) cells high country is raised into a range and low country sunk into the sea (edge_mountain_share 0.55 decides the split, edge_decision_smooth keeps a side from flickering between the two), and _seal_map_edge() runs after every later pass that writes terrain, so nothing can reopen it. About 6% of the walkable ground goes; spawn counts follow area_scale(), so densities hold. All tunables are in the Map edge export group of scripts/world/world_generator.gd; tests/map_edge_probe.gd and console mapedge read the ring out. |
| Glades | _open_forest_glades() cuts small clearings into the deep wood: one try per square of a forest_glade_spacing (18) lattice, only where the wood stands forest_glade_min_depth (5) cells deep, radius drawn from forest_glade_radius (1.5–2.8) — a camp, never a site. It runs after the spawn pick and draws from hashes, not the shared rng, so a seed's spawn, rivers and landmarks stay where they were; its wood does not, which is why the save version moved (Save / load). The centres are kept in forest_glades (not saved; console glades). The jungle's are a different pass: _weave_jungle_glades() leaves the low tail of a seeded noise open at jungle_glade_spacing (7), which is what spreads its plants from edge to edge |
| Soil | soil_slope_barren (0.020), soil_flow_log_full (9.0), soil_flood_bonus (1.5); the farm end is JobRunner.farm_barren_work_factor (0.45) |
| Biomes | tundra_share, desert_share, swamp_share, swamp_bog_count, polar_share (0.05 — cut out of the tundra's coldest ground) with ice_tundra_margin (2: _ring_ice_with_tundra() turns land that close to the ice into tundra, islets included), jungle_share (0.08, on the wettest ground), biome_terrain_affinity, biome_edge_wander (0.18) + biome_edge_lobes (3.0) — the border noise, sized relative to each region's own width so the shape holds at any map size |
| Far-country wood | tundra_tree_multiplier (2.0, _thicken_tundra_forest()); jungle_tree_multiplier (3.0) held between jungle_min_/max_forest_share (0.7 / 0.85), jungle_big_tree_share (0.8) at jungle_big_tree_vigour (1.5–2.5× the wood), species by jungle_palm_share (0.28) and jungle_kapok_share (0.14), the rest mahogany |
| Far-country finds | _place_ice() / _place_ice_finds() (the wreck, the mammoth, the lost expedition; ice_finds_enabled, ice_find_spacing 12) and _place_jungle() (the temple and the ruins: ruins_enabled, ruins_half_width/depth 3 / 2, ruins_fallen_share 0.3, ruins_best_condition 0.45). The ruin's walls and the frozen carcass need the scene tree, so they are raised after generation by _raise_pending_ruins() and _lay_pending_mammoths(). A ruin wall is nobody's until it is mended: it founds no settlement, pays no rent, and is stood silently — no log line, no chronicle entry, no placement sound. The four dungeons are DungeonCatalog.ALL (resources_data/dungeons/: pyramid, manor, wreck, temple); write-up docs/dungeons.md |
| Landmarks | crater_lake_count/radius, hot_springs_count/radius, standing_stones_count/radius, old_camp_count/radius (5), cairn_count/radius (4) + cairn_max_slope, landmark_min_spacing |
| Spawn | spawn_water_dry_quantile (0.85 — the floor is a quantile of how far this map's land lies from a drink, never a constant), spawn_water_max_walk (90, a hard ceiling), spawn_open_land_share, spawn_wood_share (0.12). _pick_spawn_cell tries temperate cells only first, so a run never opens inside a named region; it falls back to any biome only when no temperate cell passes |
| Fords | _carve_fords: ford_spacing (110, 0 = off), ford_brook_reach, ford_bank_margin, ford_still_clearance (4). A ford is a short reach of TerrainTypes.Type.SHALLOW across fresh running water below the trunk tier — walkable, not buildable, drinkable as its river, 0.6 pace in Player's terrain speed table. There is no ford predicate; TerrainManager.ford_sites() lists them (console, tests). It draws from its own rng (hash([seed, "fords"])), after the spawn pick |
| Rim wood | _shift_rim_wood(spawn): a spawn within rim_spawn_quantile (0.3) of the sea thins its coast by rim_wood_thin (0.5) out to rim_wood_radius (0.3 of the map) and replants the same number of trees inland and across the island (rim_wood_inland_weight, rim_wood_growth_weight). The tree total is conserved; console trees, tests/rim_wood_probe.gd |
- Every border was the same ruled line. The compass half of a biome's suitability is a linear ramp, and an iso-cost contour over a linear ramp is a straight line — so every map got the identical wedge in the identical orientation. The fix is a warped fbm field applied as a potential on the growth flood's priority, never as a step cost (a step cost averages away along the path). Tundra border length grew 43% on the test world, and both tundra and desert are still exactly one connected region — which the suite now asserts. The tint mottles per cell to match; a flat wash is what made a biome read as a coloured sheet, and the terrain shader's edge blend compares terrain ids, so it never fires on a biome-only seam at all.
- The desert was not where it does not rain. Placement weighted dryness against a fixed south pull 50/50, which the seed-rolled wind can contradict outright — on seed 777 the desert sat at rain rank 0.559 while the tundra held the real rain shadow at 0.093. Dryness now carries 0.8 of the weight, and the desert takes ranked fallback seeds so it cannot vanish when the tundra claims the driest ground first.
- A biome that grew into a dead end stayed there. Seed 777 walled its desert into a pocket and produced 24 cells of a requested 29000. A region that comes up short is now rolled back and re-seeded.
- SiteQuality had drifted unwatched — the suite only ever scores a 256² test
world. Measured on the shipped map, the best cell on seed 12345 scored 0.134
against a 0.50 threshold: no good settle site existed anywhere, before the desert was
touched at all. Stone was the cause (median walking distance 83 cells against a range of 20, so
a linear falloff zeroed it almost everywhere — and the four components multiply).
Walking ranges went 12/12/20 → 20/28/64; three seeds now report
0.048% / 0.077% / 0.046% of cells good, back inside the documented 0.04–0.12% band. Console
sites. Since 0.26 it counts food and was re-calibrated again: a fishing ground (a big lake or the sea) in reach raises a site, and a site without one loses a tenth of its score, never all of it; rock may lie 112 cells off (was 64) before a site counts as poor in stone, because the mountains had moved and one test map was down to 2 good sites. Five seeds now hold 65–679 each.
area_scale(). Spawn counts are densities over
REFERENCE_WALKABLE_CELLS (203000), so a change that eats walkable land silently thins
every resource and herd in the game. water_share fell 0.185 → 0.1385 across this pitch
purely to pay for what the drainage and the cliffs carve. Re-run
tests/river_probe.gd after touching any of them and check the tally is
back in band (measured 201–203k, scale 0.99–1.00).The spawn's wood rule is correctness, not difficulty. Since the rain became orographic, "dry" and "barren" are the same place — the rain shadow grows no forest, so no fuel, no fibre, no forage. Aiming the opening at the driest sixth alone put the party where nothing grows: tests/run_playtest.sh measured 3 of 12 companions surviving four days before the pitch, 0 of 12 after it, and 5 of 12 once
spawn_wood_share went in. A start with no fire is not a hard start but an unwinnable
one — difficulty belongs in spawn_water_dry_quantile, never in an accidental
barrenness.chunk_cells 64; one wall re-bakes only its chunk, ~5ms), the
navigation map skips Godot's quadratic free-edge merge (the wall-build freeze in person:
983 ms → 21 ms per wall, no path changed — flush-trimmed chunk seams connect exactly and never
needed it) and every spawn count is a density via TerrainManager.area_scale()
(walkable land over REFERENCE_WALKABLE_CELLS 203000 — the 512² reference, so the shipped map
scales every count above 1). What bounds the size is the frame, not the bake: the herd out of sight
does not tick (Resources & animals) and only what the camera sees is recorded.
Three chunk grids exist and are not the same one: SimClock.CHUNK_CELLS 64,
ResourceManager.CHUNK_CELLS 32, TerrainGrid.INDEX_CHUNK 16.Rendering: world/terrain_renderer.gd (per-cell texture),
terrain_snow.gdshader, tree_canopies.gd (crowns draw over
walkers at z 4; _apply_walkers feeds the reveal+sway shader),
room_floor_renderer.gd, fog_overlay.gd. All world
colours live in resources_data/palette.tres via GamePalette.
Nav: walkable_navigation_region.gd; collision: terrain_collision.gd.
Mining, fire, regions and the zoom limit
| File | Seam | Tunables |
|---|---|---|
| world/mineral_veins.gd | MineralVeins — where the currency lies. Static and pure: a function of the world seed, the mouth and the cell, nothing stored, no rng, so a save carries only what was dug. gem_at(), richness_at(cell), chance_at(), weights_for(biome). Ore and coal are a second, independent roll: ore_at() / ore_richness_at() read the same field at ORE_FIELD_OFFSET, so a mountain poor in stones may be rich in iron; the find comes out with the stone and never stops a gallery (CaveManager.ore_at(cell), asked before the dig in WorkerCommands._cmd_dig). On the surface the same two goods stand as resource nodes (resources_data/resources/iron_outcrop.tres, coal_seam.tres, masonry). The one verb is Command.DIG (WorkerCommands._cmd_dig) at three places: CaveManager.dig() on a cave or mine wall, CaveManager.open_mine() on a surface rock face. Write-up docs/mining-and-trade.md | BASE_CHANCE 0.03, RICH_CHANCE 0.2, DEPTH_FULL_CELLS 24, WEIGHTS gold 56 / opal 20 / ruby 15 / diamond 9 before BIOME_BIAS (diamond ×3 on the ice, ruby ×2.6 in the jungle); ORE_BASE_CHANCE 0.12, ORE_RICH_CHANCE 0.45 (no depth bonus), ORE_WEIGHTS iron ore 60 / coal 40; JobRunner.dig_seconds 36, open_mine_seconds 135, mine_shoring_wood 4; resources_data/equipment/pickaxe.tres (×1.5 masonry), iron_pickaxe.tres (×2). The pickaxe is two-handed, so underground _cmd_dig asks for light at the rock: Loadout.light_radius_of(digger) (a headlamp) or CaveManager.is_lit(stand) (a mate's flame) |
| world/wildfire.gd | Wildfire — a node in Main.tscn (group wildfire, in the saveable group), forest and buildings alike. strike(near) scores the target and rod_covering(cell) diverts it; light(cell) / ignite_piece(node); is_burning(cell), water_needed_at(cell), douse(cell, litres, who); advance(hours) runs on game time. The order is Command.EXTINGUISH — no rule and no task gives it. What burns is BuildingManager.is_flammable(node), read off the paid cost (FLAMMABLE_COST), never a flag on the .tres; burn_down() is the only door in the game that destroys goods | strike_chance_per_storm_hour 0.2, rod_reach_cells 10, smoulder_hours 36, spread_interval_hours 0.5, burn_hours 2, max_down_cells 60, regrow_days_min/max 30/45; buildings: building_burn_hours 4, building_spread_after_hours 1, litres_per_cell 4, max_building_litres 20, keep_food 0.25, keep_other 0.5 |
| world/land_regions.gd | LandRegions — “can I walk there from here”: TerrainManager.land_region_at(cell). Walkable is not reachable. Ground that opens joins a neighbour's label in place, ground that closes refills on a worker thread while the standing labels keep answering | |
| world/terrain_grid.gd | chunk_holds(type, cell) — per-chunk terrain-type counts, so a ring search for rock or forest tests only chunks that hold any | INDEX_CHUNK 16 |
| world/zoom_relics.gd | ZoomRelics.widest_zoom() — how far out the camera may go; CameraRig.min_zoom_now() reads it. A relic counts while a companion carries it or a stockpile holds it; the best one held wins. CardFinds._deal_relics places exactly one of each underground, drawing after every card | BASE_WIDEST_ZOOM 1.0, clear_crystal 0.5, seeing_stone 0.2 (= CameraRig.min_zoom) |
| world/party_zoom.gd | PartyZoom.widest_zoom() — the party-size floor beside the relic one: CameraRig.run_floor() takes the wider of the two, so under the seeing stone the head count changes nothing. Static and derived from the party, nothing stored. CameraRig watches both floors and, when the party's really moved the limit, calls PartyZoomBanner.announce(from_percent, to_percent, party) (ui/party_zoom_banner.gd; pop_seconds / hold_seconds / fade_seconds in real time). Console zoom, zoom banner | BASE_SIZE 3, STEP_PERCENT 20, FULL_SIZE 8 (200 % = zoom 0.5) |
| player/vision_component.gd | The sight disc is reveal_radius × Loadout.sight_multiplier_of(character) — the best carried EquipmentDef.sight_multiplier, never a product, so a second pair of binoculars adds nothing. In the open only; a storm and the jungle's undergrowth still take their share | resources_data/equipment/binoculars.tres: sight_multiplier 2.0 |
| world/snow_tracks.gd / aurora.gd / far_country_record.gd | The far country's three small nodes. SnowTracks: footprints where the snow lies past snow_cover_needed. Aurora: a clear night over polar ground lifts the Mood of whoever is there and awake, once a night (MoodController.on_wonder()), leaves a memory and, the first time, a chronicle line. FarCountryRecord.note_all(): the first step onto the ice and into the jungle, ticked in game hours so an unwatched run records it too | fade_hours 8, max_prints 420; night_chance 0.6, mood_lift 8; check_hours 0.25 |
The fog’s memory — autoload/fog_manager.gd
FogMemoryConfig
(world/fog_memory_config.gd, data in
resources_data/fog_memory.tres) holds the ladder:
hold_days 4 / 8 / 16 / 28 / 56 and climb_gap_hours 10 / 24 / 48 / 96 (how
long a cell must have been out of sight before the next look climbs a rung).
is_content_known(cell) is THE gate for what grows and lies on a cell: it goes
false for the last content_share (a third) of a memory, and that is where
content_alpha(cell) fades the nodes in the fog_content group, the
click stops finding them (CommandController, TileInspector) and so
does every search (ResourceManager.find_near, JobRunner).
is_discovered(cell) still answers for the ground until the memory runs out.
was_ever_seen() is the record that never fades; memory_hours_left()
and memory_rung() are the readouts.The front that walks the old route is not simulated: cells are stamped as they leave sight
(STAMP_MINUTES_PER_CELL 1.0), so they come due in the order and at the pace they were
walked, and _run_queue() files at most VEIL_PER_FRAME (100) a frame. The
edge is soft over edge_minutes (20), and ground whose contents are forgotten is drawn
at edge_brightness (0.5). What the party built is pinned:
_anchor_building() sets RUNG_PINNED on a building's footprint plus
anchor_margin_cells (2) and releases it when the building goes. The memory rides the
save under the manager's own key; a save from before it comes back with everything explored at
legacy_rung (5 — fully settled). reveal_all() hands the map over for
good; set_fade_enabled() is the console's fog fade, and
fog memory reads one cell.
The player’s map lenses roadmap 14.5
WorldOverlays.OVERLAYS is the registry — a lens is a
row (title, hint, a per-cell colour function), and cycle() walks
off → zones → soil → climate → rainfall → off, so no lens can be
reached without passing through the bare map. _regate() is the ONE fog gate: it zeroes
the alpha byte of every cell FogManager.visibility_state() does not call discovered, so
a lens can never scout. The debug lenses (sites, forage) stay
outside the registry at z 120, above the fog, on purpose — a red/green
“settle here” map would hand the player the one judgement the design pillar reserves for
them. Console overlay. Write-up:
docs/world-overlays.md.Resources & animals
.tres
(resources/resource_type.gd); a creature is a .tres
(resources/animal_species.gd) — a new creature needs no code branch.
ResourceType.restock decides where a source comes back and
ResourceType.tires() whether it wears out under foraging (8.3);
HarvestCycle.work_node is the one harvest seam; Animal._can_enter is the
movement seam (flies); ItemCatalog holds per-kind nutrition/shelf life.| Concern | File / config | Notable fields |
|---|---|---|
| Resource definitions | resources_data/resources/*.tres | spawn_terrain, spawn_biome, yield_item, harvest_time, work_scale (rock/fish 10), restock, spawn_seasons, regrow_days, spawn_abundance, fatigue_per_unit, fatigue_recover_days, fatigue_regrow_penalty, skill (what a pick trains and which card it marks — foraging on every hand-picked stand), patch_size / patch_radius / patch_share (how a type clumps into stands — ignored where BiomeTypes.even_scatter() holds). The jungle's eight (banana_plant, breadfruit_tree, wild_sugar_cane, pepper_vine, cocoa_tree, bamboo, lianas, fever_tree) and the two mountainside ores (iron_outcrop, coal_seam) are rows here and nothing else |
| Spawning & restock | world/resource_spawner.gd | count_per_type (120, a density × spawn_abundance), _target_count, _pick_restock_cell. The registry is autoload/resource_manager.gd: find_near(cell, radius, filter) walks only the 32-cell chunks its radius touches, and save_columns() is how the nodes ride the save (type paths once, then an index and a cell per node) |
| The land wears out (8.3) | resources/resource_node.gd, world/forage_overlay.gd | forage_fatigue (0..MAX_FATIGUE 3), regrow_days_now(), fatigue_share(); saved as an additive fatigue key; BuildingManager.settlement_pressure() is what wildlife reads |
| Animal species | resources_data/animals/*.tres | flies, flee_radius_cells (0 = never flees), settlement_shyness, speed_variance, carrying_capacity, initial_population, food_yield, spawn_near_fresh_water_cells, group_chance + max_group_size (the share that keeps company, and how big it gets), home_range_cells, prey_max_body_scale (the predator seam — a size ceiling, never a species list), hop_height, horn_size (a spike curving out and forward — antler_size is the branched rack, and they are two fields on purpose), vitality (hits to kill: 1, deer/boar/wolf/tapir 2, bear/polar bear/wisent/jaguar 3), hide_yield + hide_item (ice_pelt on polar bear, arctic fox and seal) / feather_yield / blubber_yield (seal 6, polar bear 10), raid_appetite (NONE / CROPS / STORES) + raid_radius_cells + raid_cooldown_days, swims + swim_speed_factor, spawn_near_water_cells, and the look's vocabulary (head_size, muzzle_color, paw_size, shoulder_hump, shag, tusk_size, young_coat, coat_spots, tail_bands, leg_pairs, claw_size, antler_share — the share of a species that carries the rack, rolled per animal, picture only). A species file is a save key: a save names a creature and a carcass by its .tres path, so a rename needs a row in AnimalSpecies.RETIRED_PATHS (pig → boar) and every loader goes through AnimalSpecies.load_saved(path) |
| The creature underfoot | resources/animal_species.gd, autoload/animal_manager.gd | A species opts in with underfoot_ailment (+ underfoot_damage, underfoot_radius_cells, underfoot_cooldown_hours) and nothing else — the snake (snake_venom) and the scorpion (scorpion_sting). AnimalManager.check_underfoot() strikes a party member who walks onto one; the creature seeks nobody. It is the one way an animal hurts a companion nobody ordered at it, so “no animal damages a companion” is not an invariant to test for |
| The roster's budget | resources_data/animals/*.tres, tests/test_resources.gd | 360 animals across 27 species at the 512² reference — the start and the ceiling are one number (the sum of carrying_capacity), each scaled by TerrainManager.area_scale() (about 2.27 on the 768² map, so roughly 820 in play), pinned as a total in the suite and scaled at runtime by area_scale(). It is the one thing no per-species field records, so a new creature must buy its room out of it |
| Animal behaviour | resources/animal.gd, world/animal_spawner.gd | Parametric _draw; breed_check_days (no per-frame registry scan); _can_enter |
| The herd out of sight | autoload/animal_manager.gd | An animal neither in tracked sight nor on screen does not tick: sleep(animal, seconds) hands its wait to the manager, advance_sleepers() pays it out in levelled slots through Animal.lod_payout(), and every public mutator calls wake() first. of_species(id) is the registry split by species — the only way to look for kin. SLEEP_SLOTS 16, PAYOUT_BUDGET_USEC 3000; console wild lod |
| The kill | resources/carcass.gd, autoload/carcass_manager.gd | Animal.fall(arrow_kind) is THE kill door: it lays a Carcass and nothing reaches a pack until it is dressed — Command.BUTCHER, through JobRunner.dress_carcass(), which the order and the Hunter rule share and which is what marks the Hunter card. Animal.butcher_yields() is the yield list (food_yield, hide_yield, feather_yield, blubber_yield). Dressing takes a knife: JobRunner.knife_refusal() is THE gate — dress_carcass asks it, so the order, the Hunter rule and the task board stop at the same place, the click says so before the walk, and a Hunter without one does not hunt. Any make answers (tool_refusal(&"knife", …) names a tool class); knife_factor() is the iron knife's ×1.5 through Loadout.work_multiplier(&"butchering"). ROT_HOURS 30 at home, divided by Carcass.rot_rate, which CarcassManager.lay() takes from TerrainManager.spoil_rate_at(cell) and the save keeps (about 10 h in the jungle, 300 on the ice; 0 = frozen in, the mammoth). DRESS_TIME_SCALE 2.0. Console carcass; review sheet tests/carcass_sheet.gd |
| The shot | player/aim_controller.gd, player/projectile.gd, items/ammunition.gd | The draw is the shot: AimController.draw_power(held) / is_steady(held) (full_draw_seconds 0.9, hold_seconds 1.3, skill lengthens the hold). Both shots are a flying Projectile — launch() aimed, launch_decided() for the Hunter's rolled shot, so the animal falls when the arrow arrives (tests call JobRunner.land_arrows()). Ammunition.pick(inventory, target) nocks the cheapest kind whose DAMAGE (stone 1, flint 3) still covers target.vitality_left(); a wound heals after Animal.WOUND_HEAL_DAYS (1). Ammunition.land() rolls recovery: SURVIVES_A_MISS 0.9, SURVIVES_A_HIT 0.65. The Hunter collects its own with JobRunner.gather_arrows() |
| Wildlife helps itself | resources/pilfer.gd | Pilfer is THE seam: find_near(cell, radius, appetite, …), take(target) (one mouthful, never a stack), is_raiding_hour() (TimeManager.get_darkness() > 0.5). The fence is asked of the target (reachable() → BuildingManager.encloses_at(), a door counts as shut). Being caught ends it: Animal.RAID_FLEE_CELLS (4) is a floor under flee_radius_cells, so bear and wisent run too, and only an awake companion counts. Console wild raid |
| The dragon | resources/dragon.gd (+ dragon_graphics / dragon_fire / dragon_voice / dragon_look), resources_data/dragons/dragon.tres | The picture. The simulation is DragonManager (autoload/dragon_manager.gd, save key dragon): lairs from the seed on their own rng stream, the stage from the year (stage_for_day, holds from year 4), passages as seeded straight lines, _strike → Wildfire + the burn ailment, the blight as SimClock’s first job read through TerrainManager.blight_at. The picture is hung under it only while in sight. It moves by transform alone — the drawing is recorded once. Every number is an Inspector field on the look (groups “Life” and “Fire breath”). Review sheet tests/dragon_sheet.gd (film=, orbit=1, fire=1) |
| Harvest & felling | resources/harvest_cycle.gd | chop_tree → TerrainManager.chop_wood; ResourceType.HARVEST_TIME_SCALE 1.8, stretched by GamePace so a harvest costs a fixed span of game time (see Time) |
| Fish stocks & the hand line | world/fish_stocks.gd, player/worker_commands.gd | FishStocks keeps one stock per water body (FISH_PER_LAKE_CELL 2.0, river and sea 0.25 a cell; caps 400 / 60 / 150; REGEN_PER_DAY 0.5), read through TerrainManager.fish_stock_at / fish_capacity_at / fish_density_at; fishing_yield_note(cell) is the one sentence the tile readout and the Fish entry's tooltip both print (FishStocks.richness_word()). Command.FISH (WorkerCommands._cmd_fish) needs a rod and no hut: it owns only which water and where to stand — every cast is JobRunner.fish_at(), the same payout the hut's trade uses. Console fish, fishstock |
AnimalManager.count_of() is a
running tally, so _spawn() calls setup() before
add_child(). And "every animal stands on walkable terrain" is false — fliers only obey
the map edge.Companions
The companion rig is scenes/player/Player.tscn / class_name Player,
instanced three times as nodes Character1/2/3 (a node name is a save key
— rename via SaveManager.RENAMED_CHARACTER_NODES). Behaviour is split across small
controllers on the rig.
| Controller / file | Owns | Key seams / tunables |
|---|---|---|
| player/player_stats.gd (+ player_stats_config.gd) | The eight stats (health, thirst, hunger, tiredness, relief, hygiene, mood, temperature) and their decay. There is no sleep debt any more — an old save's sleep_debt key is simply not read | stat_changed signal; config in resources_data/stats/*.tres. health_locked refuses every Health loss at the one write — the console's god sets it, because freezing the survival nodes alone left fever, venom, traps and fire able to kill |
| player/vitals_controller.gd | Eating/drinking application, healing gates | heals_at_rest() (a bed's), regenerates() / regen_blocker() (the waking one), begin_meal/drink_if_below (the ONLY consumption entries) |
| player/temperature_controller.gd | Drift toward felt warmth, read in °C | _target_warmth() (climate offset, then campfire maxf); in_danger_band(); felt_breakdown() is the step-by-step sum the gauge's tooltip and the console's felt both print; drift_per_second (0.5 — a body takes minutes to follow the air); cold_extreme / warm_extreme (−15 / 40 °C, the bar's ends and the Warmth sensor's range) |
| player/wetness_controller.gd / comfort_controller.gd | Wet debuff; the room-comfort lift (ceilings are MoodController's) | _standing_in_swamp; WetnessController.chill() = chill_degrees (8 °C soaked) × wetness; room_quality_at × (1 − grime). Water from below: a sleeper is soaked by the puddle under the bed — WeatherManager.puddle_at(cell) averaged over the bed's cells, times what the bed lets through (Buildable.ground_damp: straw bed and bare ground all of it, the bedroll 0.5, a framed bed 0, and any floor under it 0), at puddle_soak_hours (3) for a bed standing wholly in water. A roof is not asked; walking through a puddle wets nobody. puddle_soak_hours_here() is what the wet badge reads. Console puddle |
| player/mood_controller.gd | Mood's ceiling: every deprivation is a factor and the factors add | mood_ceiling() = max − the sum of factors(), floored at floor_ratio (0.30) so the factors alone never reach despondent_below. Built in _build_factors(), the points are exports: leisure 18, company 15, cooked meal 15, table 10, slept outdoors 12 / on earth 8 / no bed 8, woken in the dark 12 each (on_woke()), a need at warn 6 / emergency 12, health 8 / 15, grief 20 per death, plus dirt and wishes. The ceiling is one half of the tooltip; the other is StatVisuals.mood_ledger(character) — every cause moving the bar right now with its points per hour (wet, ill, the latrine's smell, a homely room, dry, a wish, and hold_rate_per_hour(), the slide down to the ceiling), whose sum is the rate the bar shows. A new Mood mover that is not in the ledger makes that sum a lie. Console mood |
| player/deprivation_controller.gd | Hunger and thirst slow before they kill | speed_factor() / work_factor() multiply into the ONE speed and work seams. low_ratio 0.25 (the same line the bar turns yellow at, StatVisuals.WARN_RATIO), low_work_penalty 0.10, empty_walk_penalty 0.25, empty_work_penalty 0.40; the ramp is ramp_share (⅓) of the stat's empty_damage_hours — 4 h thirst, 28 h hunger. Console deprivation |
| player/relief_controller.gd | Relief, the accident, the smell | No self-care: the visit is Command.RELIEVE (order or rule). JobRunner.relieve_trigger_ratio 0.30 is only the warning, relieve_ready_ratio 0.70 the gate a visit counts under. accident_mood_cost 0.18, stink_radius 2, foulness_here(). A latrine is Buildable.relieves, 8 visits (stock_units_per_tile). Console latrine |
| player/hygiene_controller.gd / hygiene_work.gd, buildings/room_grime.gd | Hygiene and room grime | mood_ceiling(): body under unwashed_below 0.5 holds Mood to filthy_ceiling 0.6 at worst, a room past RoomGrime.WORTH_CLEANING 0.3 to squalid_ceiling 0.7 — the worse of the two. work_soiling is the per-skill dirt table. Grime is stored per cell in BuildingManager (rooms have no stable id): grime_at(cell) is the room mean, soil_room_at() / sweep_cells() the two writers. Orders Command.WASH / Command.CLEAN, task TaskKind.CLEAN. Console hygiene |
| player/schooling.gd | Newcomers arrive taught; words taught on | Schooling.teach_newcomer() (called by PartyManager when somebody joins) part-fills tallies and skills to ARRIVES_AT 0.7 of what the settlement has — never the card, never a found word. tuition_factor() = 1 + BuildingManager.tuition_bonus() (Buildable.tuition_bonus, the school's 0.5), read by CardDeck and CharacterSkills: it makes a deed count for more and never lowers what a card asks. A lesson is Command.TEACH (can_teach(), LESSON_HOURS_PER_MARK 1.8). Console school |
| player/illness_controller.gd | Ailment onset/cure | runs whatever player/ailments.gd declares |
| player/ailments.gd | What each sickness IS | cause, course, cure — a new one is one entry in Ailments.KINDS. Six today: fever, dysentery, food_poisoning, marsh_fever, snake_venom, scorpion_sting. The optional medicine field names the ONE item whose dose moves an ailment (marsh fever: fever_bark, which also treats everything herbs treat); IllnessController.medicines_wanted() is what the healer's supply run and a rescue read, so the right medicine is carried to the patient. Marsh fever's load is built by mosquito bites × TerrainManager.fever_air_at(cell), and the air a patient lies in also sets how fast it worsens (full speed in the jungle, 0.7 in the swamp, half anywhere else) |
| player/loadout.gd | What a companion works with and wears | has_tool(), work_multiplier(activity, worked), class_tool(tool_class), can_use(tool_id), worn(slot)/warmth_bonus()/wind_block(), sight_multiplier(), carry_bonus(), vessel_of() (static); the two hands and the head (below); the water bag: bag_of() / sync_bag() — a second Waterskin node whose room follows the bags in the pack (WaterVolume.BAG_LITRES 10 each), filled by JobRunner._do_draw_water after the skin and drunk from by others through _find_water_carrier |
| player/character_skills.gd (+ skill_set_config.gd) | Learning by doing | practice() = XP entry, multiplier() = effect; resources_data/skills_config.tres. ResourceType.skill names what a pick trains (foraging), and JobRunner.CARD_SKILL_KEYS which card that skill marks. The ladder is 100 levels (SkillDefinition.max_level): xp_base 4 × xp_growth 1.0414 per level, per_level_bonus 0.008 (a master is still +80 %), xp_rate 0.05/s. A skill's pace is moved through xp_base, never xp_rate — the character level counts the same XP the skills are credited with, so a higher rate would speed that ladder up too. Running and Resilience cost xp_base 8 because walking and being cold fill hours of every day, and Crafting 8 because one finished tool banks a long stretch of work at once. graded(skill, novice, master) is THE seam for a skill that buys a chance or a quality rather than a pace — it runs on mastery(), the level share bent by mastery_curve (2.0, steep at first) — and failure_xp is what a miss teaches (fishing and hunting 6, fire-making 3). learning_factor() is Intelligence on all skill XP: CharacterProfile.LEARNING_SPAN 0.35. Fifteen skills; firemaking and crafting are the two newest. Console skill curve, odds |
| player/character_level.gd (+ character_level_config.gd) | The general level 1–40 | add_xp() is the ONE entry and it is called from exactly one place, CharacterSkills.grant_xp(); spend_point() the ONE spend. The level is derived from lifetime XP, so a re-tune re-levels every companion honestly. resources_data/character_level_config.tres: xp_base 75 (15× slower), points_per_level 12, attribute_cap_level 13. Console level curve |
| player/job_runner.gd | Executes jobs/needs; the tuning heart | see below |
| player/command_controller.gd / worker_commands.gd / worker_needs.gd | Right-click resolution, order execution, need handlers | hold/drag thresholds; _fetch_from_stores. An ordered harvest loads past the budget: HARVEST and CLEAR walk and work with a full pack and stop only in _held_at_ceiling(verb) — Inventory.at_overload_ceiling(), OVERLOAD_FACTOR 1.5 — where the order waits rather than ends; a rule still stops at the budget. A trade hands the order back: hold_for_transfer() snapshots the passive companion's order through get_state() (the save's own door: target, banked work, latches, waypoint queue) and _resume_after_hold() restores it when the window closes; any newer order drops the snapshot, and NOT_RESUMED lists the six commands that are never handed back (they would reopen a window, or their load is already home) |
| player/character_profile.gd / nordic_name_generator.gd | Identity | display_name() = the name seam; disposition (hidden), recruited, joined_day |
| player/renegade_controller.gd | False companions (5.4b) | work_factor() (via the ONE work seam), desert_day (drawn once, saved), _tell() |
| world/wanderer_controller.gd | A rig that is NOT in the party (5.4) | its PRESENCE is the flag (Player.is_wanderer()); Phase, wanderer_at() |
How a companion is drawn — scripts/player/companion_figure.gd 2026-08-06
One painter, one look. CompanionFigure.draw(canvas, feet, unit, look)
paints the figure in cell coordinates, and everything calls it: the map figure, every
CharacterPortrait (HUD row, character sheet, transfer window, companion window — framed on
head and shoulders), and the character creator's previews. Player draws nothing itself.
The portrait's old private bust, with its own hair pools and its own beard rule, is gone — that is
what let the party row stop looking like the companion on the ground.
| Seam | What it decides |
|---|---|
CompanionFigure.derived_face/_shape/_hair/_skin/_marks(key) | The look the dice give an identity. All fold off identity_seed(), which mixes String.hash() first — folded raw, Character1..3 collapsed onto two of six faces |
CharacterProfile.hair_shape() / hair_color() / face_trait() / skin_color() / face_marks() | "Chosen beats rolled", decided ONCE. The five look_* fields are the only part of a look that is not derivable, so the only part get_state() saves. Player's same-named seams delegate here |
Player.face_expression() | The face actually worn: the identity trait, overridden by trouble. Tiers come from StatVisuals.tier(), the same seam the HUD bars read, so a face cannot disagree with its bar |
Player.hair_color() | Age-greying lives on the companion, so a grey head is grey on the map and in the row alike |
_kit_flags() | What the figure wears — read off the pack, because carried is equipped |
WorkPoses player/work_poses.gd | What each job LOOKS like — fourteen profiles, the tool drawn into the hands and taken off the back for as long as it is held. It runs on its own beat, not work_ratio, and there are two work channels so a pose and the thing it is working on cannot fall out of step. The beat is fed by the same clock that pays for the labour, which is why a tired worker visibly swings slower. Console pose |
look_marks uses -1 for "derive", because 0 is a real answer: a player who
deliberately picked a clean face must not have freckles dealt to them. look_shape uses
-1 and the two colours use alpha 0 for the same reason. Any future flag-shaped look field
needs the same treatment.A drawing change is only reviewable if it can be seen:
tests/figure_sheet.gd renders every face, kit piece, view, silhouette, tone
and mark into one PNG, and tests/creator_shot.gd renders the creator panel.
Both want a real display (DISPLAY=:1). Console: look,
expression.
Recruiting — scripts/world/wanderer_spawner.gd
A wanderer is a companion rig (Player.tscn) that has not
joined — not a second kind of person. That is the whole design: its identity, carry, drawing and
save entry are the ones every companion already has, so recruiting is
PartyManager.recruit() → rename onto a free Character<N> (a node name
is a save key) + Player.join_party(). A stranger is frozen while it waits
(Player._halt_survival) and reveals no fog. Leaving runs the other way:
Player.leave_party() attaches a fresh controller in LEAVING and the rig walks
off the map and frees itself — expulsion and desertion share that one door.
Spawner knobs: first_possible_day (6), min_days_between (6),
arrival_chance (0.22/day), linger_days (3), renegade_chance (0.3),
approach_cells (45). One stranger on the road at a time; a full party is sent nobody.
Console wanderer [spawn [renegade]|here|panel|recruit|send|desert].
A trader is a wanderer too (WandererController.trader, WandererSpawner.spawn_trader()): trader_first_day (8), trader_min_days_between (7), trader_chance (0.3/day), trader_linger_days (2). The bargain is items/trade.gd — Trade.quote() prices it and Trade.settle() is the one function that moves goods (BUY_MARKUP 1.5, SELL_RATE_GOODS 0.5, SELL_RATE_CURRENCY 1.0, CARD_CHANCE 0.5). A quote carries its own refusal: quote() returns reason, and settle() moves nothing while it is set — a sale worth less than one nugget, one the trader's purse cannot cover, a load the pack cannot carry. Only the rounding under one nugget (lost) stays with the trader. A far good is priced by the walk: Trade.distance_factor(item, cell) runs from NEAR_FACTOR 0.6 in the item's HOME_BIOME to FAR_FACTOR 2.0 once it has been carried FAR_SHARE (0.45) of the map, and both buy_price() and sell_price() go through it. The stock is rolled from KIT, FAR_GOODS and PROVISIONS (the binoculars are a KIT row, worth 18 gold in ItemCatalog); the window is ui/trader_panel.gd (TraderPanel.strike(), reach_cells 4). Both strangers arrive only on ground the party can walk to. Console trader.
SaveManager._collect_characters walks the TREE, not a name list —
the party grows now, so CHARACTER_NODES would be a lie the moment somebody joined.
A restore builds rigs the fresh world doesn't have (_rebuild_character) and
frees Players the save doesn't know. The WandererController must be attached
before the rig enters the tree, or it registers a hotkey slot it isn't entitled to.Equipment — scripts/player/loadout.gd (17.1)
Loadout is a component Node on every rig and the ONE answer
to "what does this companion work with, carry water in, and wear". Its effect flows through
JobRunner.work_delta() → Player.work_speed_multiplier() — the same
single work seam skills, fatigue, wetness and illness already stack on. Never a second bonus
path.items/equipment_def.gd (.tres in
resources_data/equipment/) is the data seam: id,
slot (TOOL/VESSEL/HEAD/CHEST/HANDS/LEGS/FEET — append-only, a slot is a save
key), applies_to (the same StringNames the skills use),
work_multiplier, tool_class + tier (the makes of one tool),
max_durability/wear_per_work_second,
repair_workshop/repair_cost, warmth, wind_block,
carry_bonus_kg (the handcart's 90), sight_multiplier (the binoculars' 2.0) and
defense (shipped inert for 4.6). EquipmentCatalog registers them.
A new tool is a .tres plus one preload line — the same rule animals
and buildables follow. Twenty definitions today: the stone makes axe and
pickaxe (×1.5, 400 durability, mended at the lumber camp / mason's yard for 1 wood)
and knife; the iron makes iron_axe and iron_pickaxe (tier 1,
×2.0, 1200 durability, mended at the smithy for 1 charcoal) and iron_knife
(×1.5 butchering); handcart, binoculars, and twelve pieces of clothing in
three tiers (cloth and leather, fur, and the ice's polar set).
One tool per class counts. work_multiplier() picks, per
tool_class, the best make in the pack that is neither broken nor blocked by the hands,
and only that one multiplies in and takes the wear — a stone axe beside an iron one is a spare,
not a third tool. A gate names the class, not the make: class_tool(&"pickaxe") /
has_class() / the static class_tool_of() / carries_class()
answer with the best make carried, and JobRunner.tool_refusal(tool_id, verb) is the
sentence every refusal goes through (“none in the pack” and “the hands are
full” are different sentences).
Two hands and a head. The hands are the one part of the loadout that is
not derived from the carry: Loadout.Hand (LEFT / RIGHT),
take_in_hand(item, side), stow_hand(side), hand(side),
held_items(), and for the head put_on_head() / take_off_head() /
head_gear(). What an item needs is data in ItemCatalog:
two_handed (axe, pickaxe, bow, fishing rod and the iron makes;
ItemCatalog.is_two_handed()) and head_gear (the headlamp;
is_head_gear()). blocked_by_hand(tool) / blocking_item(tool) are
true only for a two-handed tool while something else is held in either hand, and
can_use(tool) = carried and not blocked is the gate the bow, the rod and digging ask;
the axe and pickaxe simply give no bonus. What is on the head blocks nothing. The flame lives
beside it (light(), snuff(), burn(), is_alight(),
light_radius()): a lamp with a refuel item in the catalog (the blubber lamp,
the headlamp) takes the next slab from the pack in _refill() instead of being consumed.
Saved as hand (the right, the old key), off_hand and head; absent
keys load empty, and a two-handed tool stands in both fields.
Carried = equipped for everything but the hands and the head, so has_tool() reads
the pack and worn gear is just carried items with tool: true in the ItemCatalog — which is
what keeps a haul from shelving someone's coat. Warmth is applied by
TemperatureController right after the biome offset as insulation
(clothing_comfort_cap 20°): it lifts a cold body toward comfort, never past it, so carried
gear is never a liability you can't shed. Wear rides the raw delta on the exact tick that reads
the bonus, so it is deterministic — no dice, the contamination-load principle.
In the jungle the same warmth turns on its bearer: TerrainManager.fur_heat_at(cell) adds a
quarter of it as heat, and the only way out is to put the furs down. Wear is multiplied by
Loadout.rot_rate() (the jungle's 2.0).
Repair is Command.REPAIR (right-click the matching workshop). Console equip,
durability, warmth.
A made tool has a quality, and a repair stops at it.
JobRunner.craft_quality() grades the maker's Crafting skill between
craft_novice_quality (0.5) and 1.0, and Loadout.set_crafted_condition(tool,
quality) writes it once: the tool starts at that share of its kind's durability, and
_ceiling(def) = max_durability × quality(tool) is what
repair() mends back to — never past it. repairable_tools() leaves out a
tool already at its ceiling. QUALITY_FLOORS 0 / 0.65 / 0.8 / 0.95 name it Poor, Average,
Good, Epic (quality_tier(), quality_name()); has_quality() is
the gate for every readout, so a found or traded tool, or one from an older save, is whole and shows
no grade. Saved under quality beside durability. Console
durability quality.
The big tuning surface — scripts/player/job_runner.gd
Movement/work: move_speed, work_seconds, mine_seconds,
fish_seconds. Needs/thresholds: need_trigger_ratio/recover_ratio,
emergency_ratio, warm_seek_below/cool_seek_above,
despondent_below (0.15) / despondent_recover (0.25) — a latch, and the latch itself rides the save, so a companion between the two lines does not come back cured. Automation: base_rule_slots (30; rule_slot_budget() adds the planning table's 6),
dev_self_care (re-enables the dormant self-care tiers — tests / a future easier
difficulty). Hunting: hunt_range_cells, hunt_base/min/max_hit,
hunt_giveup_seconds, hunt_stalk_cells (40 — how far the Hunter ranges from its first stand), hunt_stand_seconds (18). The three chances a beginner fails at all run novice → master on CharacterSkills.mastery(): a cast fish_base_chance 0.25 + fish_skill_chance × mastery, 0.9 for a master (cast_chance(); the water's own water_chance(density) is rolled after it, so a fumbled cast teaches and an empty lake does not), a point-blank shot hunt_base_hit 0.35 → hunt_master_hit 0.95 (hunt_hit_chance()), a spark light_novice_chance 0.45 → light_master_chance 1.0 (light_chance(), which each miss in a row raises, so never more than four running; a failed spark costs no tinder and a lit torch always lights a fire). Crafting never fails — it grades (craft_quality(), see Equipment). roll(chance) is the one die and skill_odds_line(skill) the sentence the Skills tab's tooltip and the console's odds print. A miss pays the skill's failure_xp and floats a red line through FloatingTexts.spawn_fail(). Fatigue penalties live on player/player.gd
(fatigue_walk_penalty, fatigue_work_penalty, mood_low_ratio 0.6 and mood_work_penalty 0.5 — work slows linearly from 60 % Mood to half at empty).
Command.RELIEVE, Command.WASH). The comfort/emergency tiers are dormant behind
dev_self_care. Don't silently re-add safety nets.The bedroll is a bed, not a charm 2026-07-26
bedroll.tres,
yields_item) are unchanged — the kit is made at the
bench now rather than on a 1×1 craft spot. Sleep quality rides on the new
Buildable.sleep_rest_factor (0.7 here, 1.0 on every built bed), read in
JobRunner._rest_in_bed.Until 2026-07-26 JobRunner.has_bedroll() was the mechanic: carrying one
upgraded a rough night from inside the pack. On the user's decision it must be placed
first, so rough_rest_factor()/rough_metabolism_scale() no longer read the
carry at all and has_bedroll() now means only “there is one here to
unroll”. Everything else goes through the ordinary bed path — it is claimed by
reserve_free_bed, walked to, slept in, saved and demolished like any bed.
Placing and packing up. BuildingManager.unroll_bedroll(character,
container) lays one out on the nearest free cell within 4 (both orientations tried, since it is
1×2), paid straight from the carry (payable_from_carry) and stamped with
BuildingNode.unrolled_by — the companion's node name, because that is what the
save file already keys characters by. JobRunner._release_bed() is the one place a night
ends, so the pack-up hangs there: self_unrolled_bed() gates it, so a companion rolls up
only what it laid out itself and a bedroll the player placed stays put — that is how
you tell an automated companion where to sleep. pack_up() calls
remove_building(node, false): no half-cost salvage, because half of a one-item bedroll is
nothing. Player-facing it is JobRunner.Command.PACK_UP on the right-click ring beside
Sleep. Console bedroll.
The night watch — JobRunner.Command.WATCH 2026-07-28
BuildingManager.night_watch_advice(node) is the one answer
to “does tonight need somebody sitting up with this fire”. It returns
{} for anything that is not a finite-fuel heat source, else
needed/cold/fire_hours/night_hours/
coldest_c/reason — the fire panel and the console both read it, so
the sum exists once.The arithmetic behind the warning: a campfire filled to max_burn_seconds (324 s)
burns 7.2 in-game hours and the night is twelve, so a party that
all lies down around one on a cold night wakes up short a companion. Cold is the whole
gate — the reading is taken at 03:00, the coldest hour, through
WeatherManager.get_effective_temperature() asked about a future hour, because
a watch is set at dusk while it is still mild. The order itself holds position inside the heat
radius and refuels on every tick the fire will take, ends at first light (not at the next dawn edge
— a watch set at dusk must not end immediately), and costs the watcher a night's
sleep — which is simply a night not slept: Tiredness keeps falling, and there is no debt
carried into the next day. Console watch.
Sleeping and mending — player/vitals_controller.gd 2026-07-29
VitalsController.SLEEP_METABOLISM_SCALE (0.5) is THE
sleeping burn, read by JobRunner._rest_in_bed, its rough branch,
rough_metabolism_scale() and GatherComponent. Waking repair is
regen_per_second = SLEEP_HEAL_REFERENCE (0.12, a good bed) ×
WAKING_HEAL_SHARE (0.3), and regen_blocker() names the one thing
stopping it.Buildable.sleep_metabolism_scale was deleted rather than set to 0.5
on every bed (2026-07-29, user decision): four beds each carrying their own copy of one number is
how they came to say 0.5 / 0.6 / 0.75 / 1.0 in the first place. A bed now pays in rest, warmth,
shelter and healing only. The waking trickle never adds to a bed's rate —
_process applies the shortfall, so a sleeper mends at the bed's pace and 30 %
cannot quietly become 130 %; a bed that heals less (the laid-out bedroll heals nothing) is
topped up to it instead. Temperature is the only thing that still moves a sleeper's burn: the
cold-hunger and heat-thirst terms keep running, scaled by the same half. Console regen.
Good sleep is rewarded; a short night leaves no debt.
Player.deep_sleep_factor() runs from 1.0 at lying down to 1 + deep_sleep_bonus
(0.4) after deep_sleep_full_hours (8) slept in one piece, and multiplies both the rest
and the bed's healing in JobRunner._rest_in_bed. A gap longer than
deep_sleep_grace_hours (0.1) ends the run and its depth; being woken in the dark still
costs Mood through MoodController.on_woke(). The run rides the save for a companion saved
in bed. Rest, bed healing and waking repair are all paid per game hour
(paced_rest_per_second(), _paced_bed_heal_per_second(),
VitalsController.paced_regen_per_second() — see GamePace under
Time), so a night keeps its length and its worth when the day's length is
changed. Console stat sleep_hours.
A worker that cannot work says so — JobRunner._report_no_work(reason)
Until 2026-07-27 only the fisher announced it; a lumberjack with no forest, a stonemason with no
rock face, a hunter with no bow and a water carrier with no source returned zero velocity and stood
there, which from outside is indistinguishable from working. A farm in winter stays silent
deliberately — dormant fields are the rule working. drop_work() now really does
drop every alert latch, including _danger_reported, which had been swallowing the first
mortal-danger alert of the next episode. The full tick order and the four layers are in
docs/automation-and-jobs.md.
Backstories & wishes Milestone 15
derived() picks roll no dice: the
attributes are rolled first and BackstoryCatalogue ranks its 75 authored pasts
by fit_score against that hand (ties broken by a per-person hash), then
WishCatalog derives 1–2 of its 27 wishes from the backstory's tags. A backstory
moves nothing — no attribute, no skill, no item — and neither reads the
hidden renegade disposition (a headless test greps for it). A wish is fulfilled only by a signal the
game already emits; there is deliberately no grant hatch. Mood is a CEILING, not a
bonus: a neglected wish is 12 points (CompanionWishes.neglect_ceiling) in
MoodController's sum, added to every other factor. The summed ceiling is floored at 30 %
and JobRunner.despondent_below is 15, so wishes can never stop anybody working. Console backstory, wishes. Write-up:
docs/backstories-and-wishes.md.Automation internals
AutomationProgram (an ordered
AutomationRule list); AutomationInterpreter evaluates it top-down (first
feasible triggered rule wins; UNTIL latches). Actions are existing behaviours — rules only choose
which runs.| File | Role |
|---|---|
| player/automation_program.gd | The rule list + block budget accounting |
| player/automation_rule.gd / automation_condition.gd | One WHEN→DO UNTIL rule; a sensor condition |
| player/automation_interpreter.gd | Top-down evaluation, latch, live diagnosis (ACTIVE/blocked/waiting) |
| player/work_actions.gd | WorkAction + one subclass per trade (Lumberjack / Fisher / Farmer / Stonemason / Hunter / Hauler / Healer / Gatherer / Caretaker / Sleep): feasible(), tick(), label(). The shift's legs are re-asked every tick in order — lumberjack: tidy loose wood, deliver the pack to trade_yard(), load the trunk, fell; fisher: deliver only on a pack full of fish, then fish. _find_worked_tree() ranks by banked strikes (ties to the nearest), which is what makes a shift finish what it started |
| ui/automation_panel.gd / ui/word_picker.gd | The rule editor (Automation tab, T). Every word — the DO action, the WORK trade, the WHEN sensor — is a WordPicker: still an OptionButton (items, ids, disabled flags and item_selected are the model the suite reads), but it opens its own list with the hovered word's CardSheet beside it. A new rule is blank on both sides: with no condition the WHEN band is one sensor picker standing on no entry, picking a word writes the first condition, and the + for an AND condition exists only once there is one — nothing is preselected. The live badge is the interpreter's diagnosis, with one case the interpreter cannot give: a despondent companion's program is not ticked at all, so the panel asks JobRunner.is_despondent() itself and every rule reads refused — despondent with the Mood that ends it (despondent_recover) |
| autoload/task_board.gd + buildings/building_task_rule.gd | Buildings post need-driven tasks; the "Take a task" block claims the nearest. Headless since 0.18 — no panel, no per-building switch in the UI; tasks / tasks silence in the console are the only doors. AutomationInterpreter._feasible still refuses the block without a planning table standing (so the rule reads blocked), but the editor no longer disables the word — cards alone decide what may be written |
| player/job_runner.gd (hauler) | hauler_radius (30) is the plain round; _find_yard_to_clear() swaps it for the union of the zones under _search_center() when the companion stands in any (scan widens to 512 cells — the zone is the fence), decided fresh every tick with no latch. Source is BuildingManager.yards_holding_near (yards only), sink is haul_target_in_reach (flagged stockpiles only), and the delivery leg is neither range- nor zone-gated so a loaded companion is never stranded |
player/work_actions.gd → FreeTimeAction | Off duty and "no rule applies" are ONE state, reached through three doors into the same run_free_time() ledger (automation off, a program with nothing to say, a written Free time rule). Holds the leisure anchor; the fence is [room, cave, roof] compared as one place, so an indoor companion stays in and an outdoor one stays out. Console rest/rest <hours>/rest here |
| player/automation_cards.gd | The catalogue: 56 table rows plus the 3 authored finds = 59 words, as AutomationCard rows — kind, glyph, mark key, the count of deeds, rule text, flavour. The three findable specials are .tres files. The mark key is the counter that pays a card, and a deed marks it through JobRunner.mark_card(key) only when a hand did it: Light a torch has a key of its own, torch (5), marked in Player.light_torch() — the one door the key, the order and the fire window share — and no longer rides the fire key that feeding a campfire pays |
| player/job_runner.gd (gatherer) | find_gather_node(hut) picks the next stand; a zone bound to the hut is the reach, else search_radius (45). The hut's filter has ONE writer, BuildingManager.set_gather_item() (gather_allows() reads it). The shift and a right-click harvest pay through the same harvest_node_cycle. The load goes to the hut's yard, never on to a stockpile |
| player/caretaker_work.gd | CaretakerWork.find_chore() is where the round is ordered: muck in the pack → a full latrine → night soil on the ground → a marked or derelict building → a latrine at WORTH_EMPTYING (0.5) → a room past 0.3 grime → wear below MEND_BELOW (0.5). empty() is THE latrine payout, shared by the trade, TaskKind.EMPTY and the Command.EMPTY_LATRINE order |
| autoload/task_board.gd (scope) | A claim keeps to its own settlement: _within_border() compares BuildingManager.settlement_at() and caps the walk at claim_radius_cells (120). TEND is exempt. The board refreshes on real seconds, so time warp does not multiply it |
| autoload/run_recorder.gd | What an intervention is: note_hand(kind) is called from the four places a player's hand lands — an order, an embodiment, a site staked, goods moved. It deliberately does not read JobRunner.card_provenance(), whose HAND also covers a companion with no program. note_automation() has one caller (mark_card_as). Console hands |
| player/card_deck.gd | One deck per companion (a node on the Player) — owned cards + every counter. THE ownership seam: nothing else may answer "may this companion write that word" |
| autoload/card_collection.gd | Fans a banked mark out to the right deck, watches the world-wide marks (sunrise, season, weather) and reports an unlock |
| autoload/card_finds.gd | Deals the eight copies of each findable word onto the map — preferred landmark or cave first, overflow into the far country |
| ui/cards_panel.gd / card_sheet.gd | The Cards tab (Z) and the 63:88 sheet every card is drawn on — the only body a card has since the vocabulary bar was removed |
WorkAction object rather than a _do_* branch:
JobRunner.run_job ticks the matching action and job_action(job) hands it out.
The convergence that buys: AutomationInterpreter's per-job feasibility switch is
gone — a WORK rule asks job_action(job).feasible(), so the WORK rule, the
task-board path and the action's own tick guard all read the same answer. It is a
deliberately thin strategy: the runner keeps the shared handlers, the machinery the orders and the
suite call, and the one work accumulator.Work actions are gated by standing workshops (Buildings) — except
SLEEP, FREE, HAULER and CARETAKER, which
BuildingManager.is_job_unlocked returns true for unconditionally: none of them has a workshop, so the card is the only gate. Old saves
migrate a painted schedule into time-window rules on load. Console: rules, prog,
tasks, shift, hauler, gatherer, caretaker, auto, cards,
deck, school, hands.
Buildings & construction
Buildable .tres
(buildings/buildable.gd) — a new building is data, not code.
BuildingManager._serves is the action-area seam (every find_*_near passes
through it). Buildable.paint (CHAIN/AREA/single) drives placement.
makes_walkable + TerrainManager.set_walkable_override is the bridge seam.
_stand_by = which cell to use a building from. Buildable.cost_alternatives
+ pick_cost = the "3 twigs or 3 wood" seam: a site commits to ONE variant, so
everything downstream (delivery, the fetch trip, the panel, the save) still sees a plain cost
dictionary. RecipeCatalog.is_station(id) is what makes a building a WORKSHOP WITH A
QUEUE (19.1) — derived from the recipes, never a flag; JobRunner._do_craft is the ONE
handler the CRAFT order and the CRAFT task share. Buildable.has_yield_store() is the
fence for the WORKSHOP YARD (2026-07-29). The carried kits go through a second door
(2026-08-16): Command.HAND_CRAFT, reached only through
WorkerCommands.begin_hand_craft() — no site, no ghost, no store, paid out of the
crafter's own pack and banked through work_delta against
HAND_CRAFT_SKILL (JobRunner.CRAFT_SKILL, crafting — it
trained building until the skill existed). Its order is _do_craft's: bank the
labour, THEN pay, THEN pocket, which is what makes an interrupted craft cost seconds and never
materials. Buildable.yields_item is still the fence between a kit and a building, and
craft_seconds() its labour: build_seconds_per_cell over the footprint,
stretched by GamePace — every kit carries its own number (fish hook 9 →
handcart 126), five times what they were. A finished tool is graded on the way out
(craft_quality(), see Equipment). The bench has a
queue: begin_hand_craft(kit, count) while something is being made appends to
WorkerCommands.craft_queue ({kit, left}; the same kit again just raises
the count), hand_craft_queue() lists it with the kit in hand at index 0, and
cancel_hand_craft_at(index) takes one entry off — the same three doors on
Player are what the crafting tab, the HUD's CraftQueuePanel and the console
go through. A queued kit's materials are spoken for, not paid
(hand_craft_reserved()); one whose materials went elsewhere is skipped with a message
when its turn comes. A new order drops the whole queue; it rides the save with the order
(craft_queue, kits by resource_path). Console craftqueue. A queue shops its own yard first
(2026-08-20): JobRunner.craft_sources / has_cost_from answer yard →
pack → stores, a half-covered cost drains the yard and takes the rest off the pack, and only a
shortfall against both walks to the stores. Console craft sources.The workshop yard, and working a building by hand 2026-07-29
StockpileInventory in the same
BuildingNode.stock field a stockpile uses — so the city-store aggregate, the map
drawing, the save and the demolish drop all keep working with no new code: all four key off
the field, not the flag. What makes it a yard rather than a shelf is that
Buildable.stockpile stays false, which is what keeps haulers out and
leaves a right-click on the hut meaning “work here”. Data:
yield_store_items (empty = no yard) and yield_store_tiles (1 = 20 units)
on the .tres.The order is WorkerCommands._cmd_work, and it deliberately owns none of the doing: it
walks the worker in, latches reported for duty — it has to latch, because each trade's own
search sends the fisher to the water and the lumberjack into the trees, so “am I still at the
hut?” reads false a second after arriving — and then hands every frame to run_job,
the same WorkAction the rule program and the task board drive. One
implementation per trade. It resolves below REPAIR and CRAFT in
CommandController, so no click that meant something yesterday means something else
today. Console yard.
| Concern | File | Notes |
|---|---|---|
| Craft recipes | items/craft_recipe.gd / items/recipe_catalog.gd | A recipe is not a Buildable: inputs → output, work_seconds (billed through paced_work_seconds()), skill, station. New recipe = a .tres + one preload line. The metal chain is five of them and two buildings, with no code of its own: iron.tres (2 iron ore + 2 charcoal) and iron_coal.tres (2 iron ore + 1 coal) at station = &"bloomery"; iron_knife / iron_axe / iron_pickaxe (1 / 2 / 3 iron + 1 wood) at &"smithy"; all train crafting. resources_data/buildings/bloomery.tres and smithy.tres carry the ordinary CRAFT and yard-clearing task_rules and no unlocks_job, so anyone who takes tasks works them — no trade, no card. The queue lives on BuildingNode.craft_queue as plain dicts (saved); Sensor.CRAFT_QUEUE posts it |
| Building definitions | resources_data/buildings/*.tres | cost, cost_alternatives, size, category/secondary_category, action_radius, build_seconds_per_cell, room_warmth, comfort, speed_factor, heat_output/radius, burn_seconds, refuel_item + fuel_alternatives (item → seconds a unit burns, read through fuel_seconds_for(); campfire: twigs 8, bamboo 27, blubber 108, charcoal 243, coal 324 against a log's 81 — fuel_items() is THE preference list: the primary first, then the alternatives cheapest burn first, sorted in code because a save re-sorts the dictionary's keys), ground_damp (how much of a puddle a bed lets through), yields_item, task_rules, preserve_per_hour/preserve_open_air/preserve_hand_fed (the last one is THE larder fence: true = cures only its own stock and stops when full — the drying rack; false = draws from CityInventory — the smokehouse) |
| Placement / ghost / paint | buildings/build_controller.gd | request_build_path; CHAIN walls, AREA floors; ghost console |
| Placement rules, rooms, serving | autoload/building_manager.gd | cell_placeable, _room_id_at (≤400-cell flood), warmth_at/sheltered_at, grime_at, adjoining_water_body, floors in _floor_cells |
| Construction sites | buildings/construction_site.gd | Fetch/deliver/build; saved (incl. its committed cost variant); reconsider_cost re-picks while nothing is delivered; cancel_site drops materials. order_group is THE commit seam (0 = none, never chained onto): BuildingManager.begin_order_group() stamps one per gesture, find_site_in_group() has no radius at all, and WorkerCommands._chain_or_finish goes through it — which is what ended the old 8-cell hand-on. BUILD_CHAIN_CELLS (8) survives only as the bound on the shopping list; teardown keeps its own 24-cell chain |
| Site supply | player/worker_commands.gd | Pack first, then the store nearest the site — yard or stockpile, no preference — on all three build paths (order, BUILD rule, claimed task). The refusal distinguishes "none anywhere" from "out of the site's reach". Console buildorder prints the whole shopping trip |
| Building node & panels | buildings/building_node.gd, ui/building_panel.gd, construction_site_panel.gd | stack_at = "what lies on this cell" |
| Settlements & bases | autoload/building_manager.gd, resources_data/buildings/camp_flag.tres | settlement_at(cell) is THE scope seam — derived, never stored (settlement_span_cells 45, spatially hashed). Stores, blueprint tints, recipe colours and site costs resolve through it (CityInventory.count_near / remove_near; ANYWHERE = unscoped), as do the music and the settlement bed. A base is a settlement with a flag: BuildingNode.flag_name / flag_radius (10–90, 45), written only by rename_flag() / set_flag_radius(); the roster's place tag reads flag_near() (CharacterStatusPanel.place_reach_cells 45, place_leave_cells 55) |
| Ways & upgrade lanes | buildings/buildable.gd, world/road_router.gd | Buildable.upgrade_line + tier declare “the same thing in a better material”: lane way = path (free, ×1.15) → road (1 stone, ×1.35), lane floor = earth_floor → reed_floor → plank_floor. upgrades(other) lets the better tier be staked straight over the lower; the old piece stands until the new one is finished. Speed is BuildingManager.ground_speed_at(cell) → Player.ground_speed_factor(); RoadRouter.route() takes the detour when it pays. Console upgrade, road |
| The ground bill | resources_data/buildings/earth_floor.tres | BuildingManager.offer_floor_for_room() stakes Levelled Earth on every raw interior tile when a wall ring closes — no cost, 2.4 s a cell. The roof is not staked with it any more: offer_roof_for_room() still exists and still stakes a whole room's thatch with its pillars, but only the console's roof offer calls it — the player draws the roof. A floor (and a roof) blueprint lives in its own registry (get_floor_site_at) and reserves no cell, so furniture can go down on a floor still being laid. Console room level |
| Room heating | autoload/building_manager.gd | room_heated_at(cell): a room gives its room_warmth (wall and door 18, stone wall 24, wood roof 22) only while a burning heat source stands inside it — heated_room_warmth_at() is what the temperature reads. A prefab house is not a room: shelter_heated() asks for a fire whose heat_radius reaches its footprint. Unheated, both still shelter. What a room is, read out: RoomReadout.facts(buildings, cell) (ui/room_readout.gd, stateless and Control-free) gathers temperature (the air in the room now, heated or not — never the room_warmth the walls merely can hold), cleanliness, comfort, roof, furniture and size; rows(info) is the room window's six coloured lines, summary(info) the line under a piece of furniture, plain(info) the console's room — one sum, three surfaces |
| The piece window: Move & Demolish | world/tile_inspector.gd, ui/building_actions.gd | TileInspector.click_layers(cell) is the ladder a repeated left-click walks: roof → piece → floor → room. Move is BuildController.select_move_for(node) → BuildingManager.stake_move(), a prepaid blueprint (work, no material; the old piece works until _finish_move); Buildable.is_movable() is the fence. The demolish drag peels one layer per drag in BuildController._demolish_layer(). Console move |
| Roof layer | world/roof_renderer.gd, buildings/roof_graphics.gd | A wall ring is not a roof: tiles live in BuildingManager._roof_cells, borne within ROOF_SUPPORT_RADIUS (3) of a wall, door or pillar (roof_supported_at). sheltered_at(world_pos) is THE cover seam. Drawing: RoofRenderer.draw_alpha(cell), pin_cell() (the Lean-to window), GraphicsManager.set_show_roofs(). Console roof |
| Rent | buildings/buildable.gd, buildings/building_node.gd | max_condition (100) and decay_per_day (0.5; leaf roof 3.0, stone wall 0.1, roads and the flag 0). BuildingNode.works() is what every consumer asks — a derelict piece stops working, it never collapses. The daily bill is multiplied by BuildingNode.rot_rate() (TerrainManager.rot_rate_at, the jungle's 2.0); a ruin's wall is billed only once it has been mended and so taken over. Such a wall is stood through BuildingManager.place_abandoned(), which marks it nobody's before building_placed fires — every listener that tells the party's work from the world's (the event log, the chronicle's first-of-its-kind, the placement sound) has already run by the time the node is returned. BuildingManager.mark_repair() posts the mend. Console decay |
| Walls that stand up | buildings/building_node.gd | A wall, door, house entrance or pillar is drawn as a plinth: its top moved WALL_RISE (0.25 of a cell) north, and the strip that leaves is its south face, shaded by WALL_FACE_SHADE. The drawing stays inside the piece's own cell, so no click and no room changes; a north-south run shows no face. door_runs_east_west() is which way a door hangs, read off the four neighbours: what stands first (walls and doors, encloses_at), then what is staked (wall and door blueprints), a run on both sides beating a run on one — so a ghost, a blueprint and a built door all lie along their wall. Review sheet tests/house_sheet.gd (one room at four wall heights) |
| The baked body | buildings/building_bakery.gd | A standing building's body is baked once into a texture and drawn as one rect, stock tiles and marks live on top. BuildingNode._repaint() is THE “the picture changed” door — call it instead of queue_redraw(). Never baked: a heat source, a sparkling pile, a preview, a roof tile; past MAX_ZOOM 1.25 it draws by hand; headless bakes nothing. tests/bake_compare_probe.gd |
SaveManager._restore_rank): a floor can't be laid on an occupied cell, so restoring a
bed before its planks loses the floor silently.The field year, and the fourteen crops 2026-08-30
BuildingNode.field_work_due(season) is THE seam — it
answers SOW / TEND / HARVEST / NONE and everything asks it: the order
(WorkerCommands._cmd_work), the rule (WorkAction.FarmerAction.feasible),
the task board's FIELD_WORK sensor and the panel's status line.
advance_field_work(work, seed_paid) is the ONE door that moves a field, and it returns
{units, seeds}. A crop is a CropType .tres
(buildings/crop_type.gd, listed by CropCatalog) — a new
crop is data. plants_its_own_produce() (seed_item == yield_item) is what
folds the harvest and the seed-back into one number; perennial is what makes
_close_field_year keep field_sown and the winter arm sleep instead of
unsowing. The crop list is derived, not chosen: a test walks
resources_data/resources/*.tres and fails if an edible plant has no crop.
Fourteen files in resources_data/crops/: the nine of ordinary ground and
five tropical ones (banana, breadfruit, sugar cane, pepper, cocoa) whose
CropType.grow_biome names the jungle — −1 means anywhere, and a field
outside the named biome cannot carry the crop. A field on BiomeTypes.evergreen()
ground has no winter: it is sown and brought in all year and no frost closes it.
Console field. Full write-up: docs/farming.md.One drawing per plant — the ripe field IS the wild stand 2026-08-30
PlantGraphics.draw()
(resources/plant_graphics.gd) holds the plant drawings (seventeen in
PlantGraphics.Plant, the jungle's eight among them), and BOTH ResourceNode._draw and BuildingNode._draw_field_crop
go through it. PlantGraphics.Plant is its OWN enum —
ResourceType.Look and CropType.Look are append-only save formats and
neither may constrain the other; ResourceNode.shared_plant() and
BuildingNode.crop_plant() meet in the middle, and −1 means “grows in one
place only”. maturity is ONE draw_set_transform about the foot of
the cell, so at 1.0 it is the identity — that is what makes the rule a
property of the code rather than a resemblance somebody maintains. Colours are entirely the
caller's, and the crop's are copied off the wild .tres. The field keeps only
the ground (_field_water, _field_litter). Review sheet:
tests/field_sheet.gd, whose last column is the wild stand.The kitchen and the healer’s hut 2026-08-30
.tres recipe with
station = &"kitchen", so the ordinary station queue is the only door and the
kitchen unlocks_job = -1 — there is no cook trade, only the
cooking skill. Dishes.KINDS maps a dish to one of four boons and
NourishmentController keys them by boon, not by dish (so a second dish
of the same kind replaces); the grant fires in VitalsController._begin_bite, the single
mouthful funnel, which is why the sheet's double-click, the EAT rule and eating out of a stockpile
all count. Four landing points: TemperatureController._finish_target,
Player.work_speed_multiplier(), speed_multiplier(),
rest_multiplier(). — The healer's hut is heal_per_second = 0.18
against a good bed's 0.12, and Rescue.remedy_for(cause) is the seam that turns a
down-cause into carry-to-warmth / carry-to-water / carry-to-bed / fetch-and-tend / vigil. The hut's
existence, not the card, is what makes TaskBoard post TEND. What a healer
carries to the bed is IllnessController.medicines_wanted() — fever bark for a marsh
fever, from the pack or the stores, where herbs would do nothing. Console
kitchen, healer.Items, inventory & storage
ItemCatalog (items/item_catalog.gd)
is the ONE data seam for weight, nutrition and shelf life — there is no generic "food" item, every
source yields its kind. ItemGraphics.draw() is THE inventory look.
Inventory is weight-based (capacity_kg, space_for) with FIFO
age batches. StockpileInventory.tile_layout() = one type/tile, 20 units;
CityInventory aggregates. An item is a row and nothing else: what it
weighs, feeds, lights, needs of the hands and is worth are fields of ItemCatalog.ITEMS
and VALUES, and what it does as a tool is an EquipmentDef
(Companions → Equipment). Iron ore, coal, iron, the knives, the
fish hook, blubber, ice pelts, ivory and the binoculars all arrived as rows — none has a
branch of its own.| File | Role |
|---|---|
| items/item_catalog.gd | Per-item weight / nutrition / moisture (thirst from eating) / shelf_days / rest_factor / mood (points one swallowed unit lifts — sugar cane 4, cocoa 6; a treat, never a ceiling, read only by MoodController.on_bite). category(id) is THE chip seam (CATEGORIES: all, food, drink, medicine, tools, clothing, materials, valuables, cards). is_food() is nutrition > 0 — herbs carry none, which is what keeps medicine out of every meal. CURRENCY / is_currency(): gold nugget 1, opal 3, ruby 5, diamond 10. VALUES / value(id) is what a thing is worth in gold before a trader's markup and the walk (iron ore and coal 0.3, iron 2, knife 1.5, iron knife 5, iron axe 9, iron pickaxe 11, ivory 14, binoculars 18, jade mask 30); format_price() prints a unit price under a tenth of a nugget as “20 for 1 gold” rather than “0.0 gold” |
| items/item_catalog.gd (hands & light) | Four fields are everything Loadout and the dark ask of an item. two_handed (is_two_handed()): axe, pickaxe, bow, fishing rod, iron axe, iron pickaxe. head_gear (is_head_gear()): the headlamp — worn on the equipment row's head tile, so it is never is_holdable(), which is “two-handed, or a light” and nothing else (a handful of berries in the hand would only block the bow). light_radius + burn_hours: torch, lantern, blubber lamp and headlamp (the last two 6 cells for 12 game hours); burning_lights() is the list the flame's countdown walks. refuel (refuel_item()): what a burnt-out light is filled with — blubber for the lamp and the headlamp, empty for a torch, which is its own fuel and is consumed. tool: true (is_equipment()) makes it personal kit a haul never shelves (is_personal_kit()) |
| items/water_volume.gd | The litres seam: vessel sizes (BAG_LITRES 10) and part-litre pours |
| items/item_atlas.gd | ItemAtlas.draw_tile(): the goods on a stockpile and on the ground are one textured quad per tile off a runtime-baked atlas, not ten polygons. Headless bakes nothing and keeps draw_procedural(). Console perf atlas |
| items/item_graphics.gd / ui/item_icon.gd | Procedural item drawing (world + inventory) |
| player/inventory.gd | The carry: kg budget, take_amount/take_all_of, age batches. OVERLOAD_FACTOR 1.5 / at_overload_ceiling() is where an ordered load stops. The ground decides how fast food dies: every store is an Inventory — a pack, a pile, a stack on the ground — and at the day rollover _on_day_rolled() calls age_for_climate(1.0) before the ordinary check_spoilage(). It reads spoil_rate_here() (TerrainManager.spoil_rate_at of the cell under the store's nearest Node2D ancestor: 3.0 in the jungle, 0.1 on the ice, 1.0 elsewhere) and moves each batch's day stamp by the difference to an ordinary day. Because it is the stamp that moves, FIFO, the freshness bar, the per-batch slots and a transfer that carries the age along all agree with no second clock — meat carried north comes home as fresh as the ice left it. Sampled once a day for where the store stands at that moment: exact for a pile, an approximation for a pack that crossed a border. Console spoil |
| buildings/stockpile_inventory.gd | Physical tile store, storage rules |
| items/ground_item.gd + autoload/ground_item_manager.gd | Dropped stacks (age as they lie) |
| player/world_hand.gd + ui/character_sheet_panel.gd | ONE hand (owned by the sheet, character_sheet group); resolve order site>stockpile>hearth>companion>ground |
| ui/transfer_panel.gd | Carry↔pile and carry↔carry exchange window |
| ui/workshop_view.gd | FireView for the trades: THE picture of a workshop, hung in both windows one can open (BuildingPanel and StockpilePanel) and asked for by WorkshopView.shows_for(buildable). Painted with BuildingGraphics.draw() — the map's own brush, keyed by Buildable.Style and never by id — so a new .tres gets its portrait free. Stateful (IDLE/READY/WORKING), and "it moved" is sampled from craft_worked and the yard's contents, because nothing on a BuildingNode records who stands at a bench |
Time, weather & temperature
TimeManager only tracks & broadcasts
(time_changed/day_changed/season_changed) — it knows nothing
about gameplay. WeatherManager.get_effective_temperature() is the one weather-temp
seam. Ambient feeds TemperatureController._target_warmth().
WeatherManager.precipitation_at(cell) is THE "does the spell reach here, and
how hard" seam (v0.10.0; a rate multiplier 0.3–1.7 since 0.19.0, and
exactly 1.0 at the middle of a band, so an average spell is the old game).
is_precipitating()/is_precipitating_at() are now defined as it
being above zero, so there is no second per-cell rule to drift out of step with the desert mask: the sky stays one sky and the visuals are untouched by design, but
a rain/snow/hail spell reaches nobody in the desert, and no snow lies there. Every consumer that
used to ask the bare is_precipitating() — wetness, hail damage, snow cover, drying —
asks the per-cell one instead.18.1/18.4.
next_weather is rolled when a spell starts;
approach_progress() is THE one number the three ambient tells ease on, and
no UI may read next_weather — naming the sky belongs to
SkyReader. open_air_drying_factor(cell) is THE open-air drying seam (a
soaked body and a drying rack scale their own duration by it), snow_cover_at(cell)
THE snow seam (0 in the desert and underground), bad_water_scale() the rain-churn
multiplier on an untreated litre, and air_temperature_at(cell) the one sum of
effective temperature + climate offset.0.19.0.
precip_strength (0..1) is the wind's twin — rolled per spell from a band,
drifting inside the spell, pinned by force_weather(), one line in the save.
runoff_factor() is the response curve that makes a drizzle leave no
puddles, and puddle_cover() is derived from water_runoff — so the
puddles ride the save with no key of their own and can never disagree with what
drinking it costs. sight_factor() (the fog-of-war disc) and haze_factor()
(the fullscreen murk) are two numbers, deliberately. FOG_BAND is a
separate table from PRECIP_BAND on purpose: falls_from_the_sky() is
PRECIP_BAND.has(), so never add FOG to PRECIP_BAND — a fog that
answered yes would wet everyone standing in it. Strength buys a rate, never a
temperature: get_effective_temperature() is untouched.| File | Exports / seams |
|---|---|
| autoload/time_manager.gd | day_length_seconds (18 min), days_per_season (7), start_time_of_day, per-season *_temp, day_night_swing; get_ambient_temperature(), jump_to_day(). escalation_for_day(day) (0..1) is THE year clock: winter is winter_temp (−6) − winter_bite (4.5) × escalation over winter_ramp_years (3), then it holds. The clock stands still on the title screen |
| autoload/weather_manager.gd | min_/max_spell_hours (2/6), temperature_jitter, snow_accumulate_/melt_per_hour (0.4/0.15); is_precipitating() (the sky) vs is_precipitating_at(cell) (the ground under it); turn_slide_hours (1.5), dry_sun_/dry_cloudy_factor (1.7/0.35), dry_cold_/warm_temp (5/20 °C), runoff_per_hour/runoff_settle_per_hour/runoff_bad_water_extra (0.45/0.11/1.0); SPELL_HOURS (rain/snow/hail 0.5–5.4, storm 6–12, fog 4–9), PRECIP_BAND vs FOG_BAND (0.30–1.00), precip_gust_min_hours, puddle_max_level (0.429). The forecast, the strength, the runoff and the snow ride the save |
| player/sky_reader.gd / sky_reading.gd | Per companion: reading() is pure (level → what may be said), can_read_sky() the ONE shelter gate for all three XP paths, lead_hours() the Perception lead, HARSH_LEVEL (3) the sensor's rung. SkyReading.best_reader() decides who speaks — one line per turn, event log, never chronicled |
| autoload/weather_manager.gd (storm) | A blizzard is not an enum value: it is Weather.STORM in its snow phase. is_blizzard_at(cell) / storm_snows_at(cell) (snow_phase_below 1 °C) decide; sky_name(cell) is the word a player reads. Same wounds, gale, blindness and warning; water_fall_at() answers 0 for it, so it soaks nobody, fills no barrel, churns no runoff — and lays snow. effective_storm_frequency() = storm_frequency × (1 + storm_growth 0.5 × escalation) |
| autoload/weather_manager.gd (fronts) | The sky has a place: weather_at(cell) is THE “what is over this cell” seam, front_arrival(cell) the hours until the next one, stage_front(kind, hours) the staging hand. A front is a Dictionary, not a class. front_speed_cells_per_hour 120, front_fade_hours 2.5. Console front |
| autoload/weather_manager.gd (sight) | What a sky costs the eye, per cell: sight_factor_at(cell) scales the fog-of-war disc, haze_factor_at(cell) the murk. storm_sight_factor 0.3; fog rides its thickness between fog_sight_thin 0.78 and fog_sight_factor 0.36, and that is its entire cost — it wets, chills and douses nothing. storm_haze 0.72, fog_haze 1.0. The thick heart of a bank blinds: fog_blinds_at(cell) is true where the haze, with fog_haze divided out, reaches fog_grope_thickness (0.7 — the upper third of FOG_BAND). It is asked of the eased haze and not of the raw strength, so the rule ends when the fog is seen to lift rather than hours later at the weather's turn; fog_about() is the one-compare gate in front of it. No mover reads it: they ask CaveManager.gropes(character), which also knows the lights and roofs that push a fog back (World → Caves) |
| autoload/weather_manager.gd (far country) | The sky is one sky; the ground decides what arrives. _phase_of(sky, cell): on polar ground rain and snow are always snow, over the jungle a snow front comes down as rain. jungle_overcast_rain (0.3) is the rate a merely overcast sky rains at over the jungle. snow_cover_at(cell) answers 1.0 on polar ground whatever the field says and 0 in the jungle and the desert. A snowfall on the ice at or above polar_blizzard_strength (0.55), with the front covering at least half the cell, is a blizzard (is_blizzard_at), and a blizzard there is a whiteout: polar_whiteout_sight (0.15) caps sight_factor_at, about half of what a storm leaves elsewhere. The temperatures are not weather: they are BiomeTypes.CLIMATE_OFFSET (World) |
| world/puddle_field.gd | PuddleField — where the standing water lies, so the game can ask what the picture already shows. WeatherManager.puddle_at(cell) (0 dry .. 1 a full puddle) is the seam; puddle_cover() is still derived from the runoff, so a puddle has no save key. The shader's basin noise is computed a second time on the CPU, and both sides read the same 256×256 table of bytes (LATTICE_SIZE, fixed LATTICE_SEED; the shader as the texture puddle_lattice_texture()) — a port of the GPU hash to float64 answers a different field, and a bed visibly on dry ground would soak its sleeper. Change an octave constant here and in assets/shaders/terrain_snow.gdshader in one commit. holds(terrain): sand 0.22, rock 0.35, marsh 1.4, open water 0. The same hollows fill every time, because the table's seed is not the world's. Consumer: the sleeper's soak in WetnessController (Companions). tests/puddle_probe.gd renders the real shader on a display and compares; console puddle |
| player/temperature_controller.gd | shade_relief (6 °C) floored at shade_floor (22 °C), applied on the sibling WeatherHazard.is_sheltered() — the same cover that stops hail. felt_degrees() / body_degrees() are the °C readouts and felt_breakdown() the one sum behind the tooltip; damage starts at cold_danger_degrees 4 / hot_danger_degrees 35. Resilience divides the cold's Health toll |
| player/player.gd | snow_speed_penalty (0.35) folded into ground_speed_factor(), so it multiplies a road rather than replacing it and the embodied mover and JobRunner pay the same |
| world/day_night_cycle.gd | CanvasModulate tint interpolation |
| world/weather_particles.gd / weather_hazard.gd / cloud_shadows.gd | Rain/snow/hail particles (sized for a downpour and thinned by amount_ratio — one emitter at two settings, never two to keep in step), the near streak layer, the ground-level splashes under the fog, the heavy-rain veil, hail Health damage, cloud shadows. The murk is a fullscreen WeatherHaze ColorRect on assets/shaders/weather_haze.gdshader; the puddles are the ground_wet uniform on assets/shaders/terrain_snow.gdshader — snow cover's exact seam |
Temperature damage: cold below 4°C / heat above 35°C (temperature_controller.gd).
Pacing: the 18-minute day and ×1.8 task lengths; HARVEST_TIME_SCALE is the harvest seam.
Work and the body follow the day’s length — scripts/main/game_pace.gd
GamePace.factor() is today's
TimeManager.day_length_seconds over REFERENCE_DAY_SECONDS (1080 — the
18-minute day every number in the data was balanced against; a constant, deliberately not
TimeManager's default). A duration is multiplied (GamePace.scaled(seconds))
and a per-second amount divided (GamePace.rate(per_second)), so a job, a
drink and a night each cost a fixed span of game time whatever the day's real length. Static
and tree-free, because half its callers are Resources. At the standard day the factor is 1.0 and
nothing moves; the only door that changes it is the console's
daylength [<minutes>|x<factor>|reset], which is not saved and holds until the
process ends.| What | Where the factor enters |
|---|---|
| Building and crafting | ConstructionSite.total_build_seconds, BuildingNode.teardown_seconds, Buildable.repair_work_seconds and craft_seconds, CraftRecipe.paced_work_seconds, BuildEntry.build_seconds. Read a recipe's time through paced_work_seconds(), never work_seconds, or the bench and the panel disagree |
| Work | ResourceType.harvest_seconds() and AnimalSpecies.harvest_seconds() (gather, chop, clear, dressing a carcass), JobRunner._produce (the generic, mine and fish clocks), the order clocks in WorkerCommands (dig, search, open a mine, light a torch, feed a fire, a shot), BuildingNode.field_work_seconds() and light_work_seconds(), ItemCatalog.cook_seconds(), Waterskin.fill_rate(), dousing, washing, sweeping, mucking out |
| The body | Drinking, sipping, chewing, relief at the latrine, warmth drift, and the heat, cold and exertion extras on thirst and hunger. Rest, bed healing and waking repair are paid per game hour the same way (Companions → Sleeping and mending). Illness needed nothing — IllnessController has always counted game hours |
| Learning and wear | Work XP and tool wear in JobRunner.work_delta, resilience XP while ill, the sky vigil — without these a stretched job would teach and blunt twice |
| Stays in real seconds | Walking, and the fire's fuel and embers (the order). Everything that races walking: the chase (hunt_giveup_seconds), every animal timer, the bow's draw — scaling a timer while the legs keep their speed changes who wins. Run XP (paid per second walked), the AI watchdogs, all animation. The known price: cooking stretches and fuel does not, so a meal costs more wood at a longer day |
A new clock or per-second rate goes through GamePace at its one choke
point, or the dial bends everything but it. Progress is stored in seconds, so changing the
day in mid-build shifts that build's fraction. Write-up:
docs/time-and-temperature.md.
A paused clock decides nothing. Engine.time_scale = 0 does not stop
_physics_process — the engine still calls it, with a delta of zero. Everything
scaled by delta stood still by itself; a decision did not, so Player returns
on a zero delta before the runner is ticked (only _advance_visuals(0.0) runs, so a
selection ring still follows the click). An order given in the pause is taken and acted on when
time runs. What ticks on the render clock rather than on delta must be told: a GPU emitter is
stopped by neither the time scale nor a paused tree, so a fire's smoke listens to
TimeWarpManager.clock_stopped (Autoloads) and sets its
speed_scale.
tests/pause_probe.gd is the measurement.
Audio & the sound library
SoundManager.play(id) is THE
entry point — no gameplay file plays a sound directly. SoundManager.world_gain_at(pos)
is THE zoom gate (0 at or below world_zoom_silent 1.2, full at or above
world_zoom_audible 2.0; it existed three times in three files until v0.10.0).
SoundRouter is THE bridge from gameplay signals to ids, and
WorkProfiles is THE map from a job to its loop + impact.Before v0.10.0, eighteen audio files carried the whole game and every path was a constant in
sound_manager.gd: building, dying, hunting, fishing, tending a fire,
crafting and every footstep were silent, and the sound of the game could only grow if somebody opened
GDScript. It is now 225 rows across nine banks in
resources_data/audio/, each with a plain-language description, and filling
one is dragging a file into stream. Full write-up:
docs/audio.md.
play() on a streamless
row returns quietly, which is what lets the list ship complete and mostly empty (37 of 225 filled
today). 2 · An unknown id is a bug — it warns once, and
test_meta._test_sound_library fails the suite on it: it scans every
.gd under scripts/ for library-prefixed ids and
checks each exists. Rename a row and forget a caller and you find out in the test run instead of
never.| Class / file | What it is |
|---|---|
SoundEntry audio/sound_entry.gd | ONE sound: id, description, stream, bus, kind, volume, positional, cooldown, max voices, priority, ducks, conditions |
SoundBank audio/sound_bank.gd | One themed page: name, category, default bus, Array[SoundEntry] |
SoundLibrary audio/sound_library.gd | The root (sound_library.tres): Array[SoundBank] + the id → row index |
SoundConditions audio/sound_conditions.gd | When a row is allowed to play — hours, seasons, weather, biome, interval. The owl and cuckoo used to be hand-written timers with their hours compiled in; a thirteenth call is now a row, not a patch |
The nine banks: music (moods + stingers) · ambience_beds
(place · weather · settlement) · ambience_spots · work (every job: start,
loop, impact, finish) · footsteps (nine surfaces) · creatures ·
buildings · ui · world. Naming is
bank/subject_variant — work/chop_impact_oak, amb/bed_forest_night.
Use an AudioStreamRandomizer for variations and an AudioStreamPlaylist for a
mood; both are Inspector-only. tools/gen_sound_banks.gd regenerates the banks from its
table and never overwrites an assigned stream; rows that vanish from the table are
reported, never deleted. docs/sound-checklist.pdf prints all 225 rows with
tick boxes as a shopping list.
The mix — five buses, five sliders, one Silence
Master
├── Music moods, stingers
├── Ambience the three beds, the spots
├── World positional: work, footsteps, fire, animals
│ ├── effect 0 low-pass — the roof
│ └── effect 1 reverb — the cave
└── UI clicks, windows, alarms, the heartbeat
There used to be two buses and three sliders, one of which ("SFX") carried the ambience beds, every
work loop, the heartbeat and every UI click — so turning the interface down turned the rain
down with it. A pre-v0.10.0 audio_settings.cfg migrates: the old SFX value
seeds Ambience, World and UI. Ducking is a tweened number, not a side-chain — a
stinger names the buses it pushes down in its ducks field and
SoundManager.duck() lets them back up over duck_release_seconds; a number is
something a headless test can assert, and it does. Room acoustics are bus state, not
sounds: underground the reverb comes up to 0.5 and the outside beds fall 12 dB, under a
roof the low-pass closes to 4 kHz and they fall 7 dB, both owned by
AmbienceDirector._set_room() off TerrainManager.is_underground() and
BuildingManager.is_indoors() on the camera's cell.
The six layers
| Layer | Owner | How it works |
|---|---|---|
| Music | MusicDirector | Seven moods asked of the world every few seconds — danger / winter / opening (<6 buildings) / expedition (>60 cells from the settlement centre) / night / settled. A 90 s minimum dwell (min_dwell_seconds) stops the mood twitching. A mood change does not start music: it only decides which track comes next — the one sounding plays out and the silence runs its length, gap_min_seconds 300 to gap_max_seconds 720, drawn per gap. Three doors still start a track at once: the run's first evaluation, force_mood() / leave_title() (the title screen and the console), and danger — which cuts in at most once per danger_rest_seconds (600) and in between only takes the mood. A track must end, so the director never asks SoundManager.stream_of(), which hands a BED row back as a looped copy that never reports finished; _stream_for(mood) returns the row's own file. The title screen draws from a pool: music/title holds an AudioStreamRandomizer (no repeats) over three calm tracks, with its own gap of 20–60 s (title_gap_min_seconds / title_gap_max_seconds). Every clock in here is real seconds (ignore_time_scale), so neither the time warp nor its pause stretches a silence or freezes a cross-fade half-way. tests/music_density_probe.gd measures how much of fifteen real minutes is scored — run it before believing any claim about how often the music plays. Deliberately not vertical stems — layered stems need material written to fit together, which a free library cannot supply |
| Ambience | AmbienceDirector | Three cross-faded layers chosen per camera cell, once a second: PLACE (cave › roof › near water › mountain › forest › biome, split day/night), WEATHER laid over it rather than replacing it, and an OVERLAY at ≥4 buildings. Water without emitters: 51,000 water cells would kill the frame, so a bounded ring scan (radius 8, stride 2) asks how far the nearest water is and whether it is salt or still. The far country borrows: the ice plays the tundra's wind (amb/bed_tundra_wind) and the jungle the swamp's two beds — a bed is a recording, and a borrowed one is wrong by a shade where the plains' birdsong over an ice field would be wrong outright. Its cross-fades, the room tween and SoundManager.duck() all set_ignore_time_scale(true), so a pause in mid-fade does not leave two beds half up |
| Spots | ambience_spots.tres | Any row carrying a SoundConditions with an interval schedules itself and its own conditions decide whether anything sounds |
| Work | WorkProfiles + WorkSoundPlayer | JobRunner._report_work(target, ratio, loop, profile) already reported ratio 0→1 every frame to drive the progress ring. When it snaps back, a cycle completed — an axe swung — and the impact fires on that edge, so the rhythm is correct by construction. Nine sites passed null here and were silent; they now name a profile and know nothing about audio. Chop impacts pick the species from the terrain at the work position rather than threading it through fifteen call sites. A work loop and a snore hold with the clock: WorkSoundPlayer and SnorePlayer set stream_paused while Engine.time_scale is 0 (the Esc menu's tree pause stops a player by itself; the speed bar's does not) |
| Footsteps | FootstepPlayer | The cadence is free: Player._advance_visuals already accumulates _walk_phase from distance travelled to swing the drawn legs, and one step per PI of it is one step per stride — self-correcting for terrain, roads, exhaustion, overload and the zoom-speed coupling without knowing about any of them. Nine surfaces, ordered by what overrides what: underground › floor › road › shallow water › snow › forest/mountain/sand › swamp › grass. A dedicated four-voice pool plus the zoom gate caps eight companions at four voices |
| Life & surface | AmbienceDirector._tick_fires(), SoundRouter | One keyed voice per lit heat source, positional and louder while well fed — idempotent, so it can run every tick. SoundRouter turns the game's own signals into ids (buildings placed/removed, jobs unlocked, deaths, recruits, party wiped, alert/warning feed categories, season changes, saves, pause, cave transitions), so the list of what the game can be heard doing is one file long |
- Never
stream.loop = trueon aload()ed resource — it mutates the shared cached copy for everyone, which turned one companion's work loop into everybody's. Four places did it.SoundManager.stream_of()andWorkSoundPlayer._looped()duplicate first — and aWorkSoundPlayertherefore compares against_source, notstream, or it would swap the stream every frame. AudioStreamWAVhas noloopproperty. It hasloop_modeand a frame range, sostream.set(&"loop", true)compiles, runs, returns nothing and does nothing — which is how every LOOP and BED row filled with a .wav played once and stopped until 2026-08-05.loop_endmust come fromget_length() * mix_rateand not fromdata.size(): the WAV importer defaults to QOA compression, so the bytes are not frames.- MP3 loops click — encoder padding at both ends. Beds and music belong in .ogg with loop points set at import; one-shots in .wav; anything positional in mono, or the panning is lost.
SoundRoutersuppresses everything for 1.5 s after a load, because loading a save re-places every building and would otherwise fire forty clicks in one frame.- A row can be waiting for a file or waiting for a caller, and both sound the same.
Of the 190 empty rows, 81 sound the moment a file lands and 108 do not, because
no line of code plays them yet (the whole
creaturesbank among them — animal.gd contains no audio at all). Fill the 81 first; the other 108 are ROADMAP Milestone 21. And watch the third silence: 13 rows are filled but shadowed by the olderResourceType/AnimalSpeciesstream slots, which_wanted_loop()consults first, so swapping the file changes nothing (20.7 / 21.8). - Autoload
_readyhas not run when a module test starts. The full suite gets there after many awaits; a standalone--module=metadoes not. Both sound testsawait process_framefirst.
UI & panels
StatVisuals = glyph+tier+colour;
StatusEffects.list(character) = "what is on this companion right now". The
companion window is one framed TabContainer with five tabs
(E/R/T/Z/U by default — R is shared with rotating a building on purpose, and a
key the player rebound stays as set) — a tab's visible ≠ the window standing, so read
is_visible_in_tree(). WindowAtmosphere is the frame's weather layer: it
reads numbers the simulation already keeps, caps every layer under 13% opacity, and costs no frames
when it has nothing to say (console atmos). Size is three numbers that
multiply: the UI size (the root window's content_scale_factor), the part's
own factor from GraphicsManager.UI_ELEMENTS, and for a window
UiWindows.DEFAULT_WINDOW_SCALE (0.65). Inside, nothing learns it happened — a
panel lays itself out in its unchanged design units, which is why no metric moved.Sizes — autoload/graphics_manager.gd, ui/ui_windows.gd, ui/ui_settings.gd
| Seam | What it decides |
|---|---|
GraphicsManager.UI_SCALE_MIN / UI_SCALE_MAX / UI_SCALE_STEP | The UI size: nine notches, 70–150 % in steps of 10, the root window's content_scale_factor — not a theme or font scale. A slider applies on release, because it is itself part of the interface it scales and a live apply moves the grabber out from under the hand; keyboard and wheel apply at once. An older setting outside the band is clamped and snapped to a notch |
GraphicsManager.UI_ELEMENTS | THE table of parts: cards, windows, clock, info, event_log, font. One row is one slider on the settings' UI tab (UiSettings, between Gameplay and Graphics), one id for the console's uisize <part> <70-150> and one key under [ui] in user://graphics.cfg. set_element_scale() is the one writer — the slider and the console both go through it, and it saves; get_element_scale() answers 1.0 for a part nobody touched |
HUD._SCALED_PANELS | The four HUD parts are plain scale on the panel, each with the corner it grows from as its pivot, so a resized panel stays on its screen edge. The pinned tile window belongs to info. Whatever measures a scaled panel in screen pixels reads get_global_rect(), never position + size — size is the unscaled layout size |
font | Rewrites the project theme's font sizes in place from the values it shipped with, read once before the first scaling (never derive the base from the live theme, or rounding drifts). It cannot reach a size set outside the theme: the per-node font_size overrides and text drawn by hand, such as the automation cards. Frames do not grow with the type |
UiWindows.DEFAULT_WINDOW_SCALE (0.65) | Applied by UiWindows.register() to the full-rect host of every window: scale on the host, its right and bottom anchors at 1/scale so it still covers the screen. The windows part multiplies with it. A screen measure is divided before a window uses it: layout_room(node) is screen_room() in the asker's own units and view_size(node) replaces get_viewport_rect().size. What is placed at the pointer opts out with register(self, false) (the two rings, the zone bar). Console windowscale [<0.4-1.5>] writes the raw factor live and saves nothing |
UiWindows.scale_popup(popup, owner) / scale_dropdown(button) | A popup inherits nothing and must be told. A dropdown is an engine window of its own, so it opened at full size out of a window drawn at 65 %; every dropdown built inside a scaled window goes through these (the rule editor's five, the building panel's two). A PopupMenu sizes its frame by the factor, a PopupPanel does not, so WordPicker.open_list multiplies the frame itself. Review sheet tests/word_picker_sheet.gd |
UiWindows.scale_tooltip() / tooltip_scale_of(owner) | A tooltip follows the part it explains. The engine builds it, so GraphicsManager listens on the tree's node_added for the tooltip panel and defers to scale_tooltip. The factor is what the player chose for that part, not what it is drawn at: a window's shipped 0.65 is divided back out, so a tooltip is still 1.0 wherever no slider moved. Two traps: the engine resets the factor and the size after add_child, so the work runs deferred; and headless opens no tooltip at all |
The panels, file by file
| File | Role |
|---|---|
| ui/hud.gd | Root HUD; binds the companion window on control switch |
| ui/tile_pin.gd / tile_dossier.gd / tile_portrait.gd | The tile window: a left-click on any thing the party can see pins the corner readout beside the clicked point (pointer_offset 26 px), fixed and upright at size_cells 5×6 × cell_px 48, live every refresh_seconds 0.5. One set of builders, two outlets: HUD.capture_readout(painter) runs a show_*_info builder with its output diverted into a dictionary, so a clicked tile and a hovered one cannot disagree — never write a second builder for the verdict. HUD.pin_readout() puts TileDossier.facts(kind, subject, …) under it: [label, value(, colour)] rows read off ItemCatalog, the ResourceType, the AnimalSpecies, the Buildable — a row is data or it is not there. HUD.tile_subject(cell) is WHICH thing a cell holds. TilePortrait is the thing alone on a plain plate in a SubViewport with a world of its own, rendered once per change, and it is not a second drawing: each kind is staged by the code that draws it on the map, so new content has a portrait the day it has a .tres. Bare and unexplored ground open nothing. No tooltip on any part of the window, deliberately. Review sheet tests/tile_portrait_sheet.gd; console pin <x> <y> / pin off, through the same TileInspector.inspect() the mouse uses |
| ui/craft_queue_panel.gd | CraftQueuePanel, a scripted node in scenes/ui/HUD.tscn: the plate on the event log's top-left corner, following its size and scale. One row per companion with a non-empty hand_craft_queue(), an ItemSlot per entry (product and count), a bar on the kit in hand. It polls and rebuilds only when the queue's shape changes; a click on a tile is cancel_entry(), the door the console's craftqueue cancel uses too. Hidden while every bench is empty. The queue itself is in Buildings |
| world/floating_texts.gd | What floats over the map, three doors and one grammar: FloatingTexts.spawn_gain(item, amount, pos) (“+2 Berries”, every yield path), spawn_fail(what, pos) (a cast, shot or spark that came to nothing, in StatVisuals.HARM_COLOR) and spawn_rise(what, level, pos) (“+1 Foraging (12)”, “+1 Level (5)”, in StatVisuals.BUFF_COLOR). The last two are not lightened toward white — there the colour is the message. Every skill level floats; only every tenth (Player.SKILL_MILESTONE) and the cap reach the event log and the memory ring |
| ui/companion_window.gd + companion_header.gd | The 5-tab frame (enum Tab); subject()/bind_character(); host_of(); toggle_tab |
| ui/character_sheet_panel.gd / skills_panel.gd / automation_panel.gd / cards_panel.gd / crafting_panel.gd | The five tabs (Character / Skills / Automation / Cards / Crafting). The crafting tab is a bench, not a placement door: it drives WorkerCommands.begin_hand_craft(kit, count), the ONE entry into Command.HAND_CRAFT, and the console's crafting goes through the same select_kit / craft_pressed / step_batch the mouse does |
| ui/window_atmosphere.gd | The window's weather: night glow, frost, rain, soot, the mortal-danger pulse. Per-companion, never the party |
| ui/card_find_overlay.gd / card_sheet.gd | The card ceremony's three modes — LOOK, EARNED and FOUND. FOUND is the lift: it draws the envelope and refuses to show a face, which is what keeps a find a promise rather than the payoff. Console cards found |
| ui/character_status_panel.gd / stat_bar.gd / stat_visuals.gd / status_effects.gd / stat_icon.gd | Party cards, bars, badges |
| ui/stat_visuals.gd (tooltips) | StatVisuals.rich_tooltip() renders a badge tooltip as BBCode: a bold head with the number, cause in NOTE_COLOR, cost in RATE_LOSS_COLOR, hard harm in HARM_COLOR, remedy in RATE_GAIN_COLOR. A number takes one of three seams and never its own colour: severity_hex(ratio, danger) (red pinned to that badge's own lethal line), remaining_hex(left, warn_at) for a boon running out, tier_hex(tier) for a condition word. Drift check 15 refuses a badge builder with no bold head and no colour |
| ui/tooltip_markup.gd | TooltipMarkup.colorize(text) — the token layer (keys, quantities, have/need) for menu and ring tooltips; composes with the one above |
| ui/character_status_panel.gd (roster) | The card's word takes turns through StatVisuals.all_conditions() on real time: emergency_word_seconds 3.0, warn_word_seconds 1.5; stripe and frame stay on the worst. Portraits are regions of one shared viewport (ui/portrait_bakery.gd). tests/status_panel_probe.gd times a card |
| ui/zoom_readout.gd / fps_counter.gd | The corner readout: zoom under FPS, one switch (GraphicsManager.set_show_fps). The readout reads autoloads by path, never by global name |
| ui/learn_card_dialog.gd | LearnCardDialog.ask(deck, pack, card) — the one door that spends a found card, from the Cards tab and from a double-click in the pack alike. Dialogs get the leather from the theme (Window / AcceptDialog in resources_data/ui_theme.tres), not from a class; review sheet tests/dialog_sheet.gd |
| ui/alert_screen.gd | Mortal-danger heartbeat (fires at EMERGENCY health tier; health_alert.gdshader) |
| ui/build_radial_menu.gd | The build ring in slot mode: every ring has BuildCategories.RING_SLOTS (7) places, and a ring with fewer entries comes up as an arc under the mouse. One _draw, hit-testing by angle+radius (no node per sector). Keyboard: step_hover(), activate_hovered(), press_key(letter). Shortcuts: assign_shortcut() → BuildingManager.set_build_shortcut(), saved with the run under build_shortcuts |
| ui/radial_geometry.gd | RadialGeometry = THE sector maths for both rings: slot_window(), slot_angle(), slot_sector_at(); fits_labels() / overflow_px() are how “too full” is measured — the suite walks every verb the world ring can show |
| ui/radial_keys.gd | RadialKeys.accelerators(labels, low_priority) deals each sector the first free letter of its name; shortcut sectors take theirs last |
| ui/world_context_menu.gd | The right-click ring in the world; same geometry, same keys. A Shift-click opens it queued — the verb picked joins the waypoint chain. Console context |
| ui/build_categories.gd | The tree as DATA. CATEGORIES is the main ring (three shortcuts, Demolish, Build, Blueprints, Zones) and SUBCATEGORIES everything under it (Workshops → harvest / larder / materials / care, Structure → walls / roofs / floors / crossings, Supply → camp / water / stores); entries GROUPED from the live catalog by Buildable.category — never a list of ids. PLANNED = the greyed placeholders (empty since 16.3, kept as the mechanism). FURNITURE is a real category id deliberately NOT in CATEGORIES, so it gets no sector — the room panel asks for it directly. entries_for matches category or secondary_category, so a piece that belongs in two lists says so itself (the straw bed: furniture and Supply) |
| ui/room_panel.gd | Furniture hangs on the ROOM, not a building (16.3). Binds to a cell, never a room id (ids regenerate on every placement). Drives the ordinary BuildController.select_buildable(buildable, fence) — never a second placement pipeline. Console room panel |
| ui/building_icons.gd | BuildingIcons.draw() = the building icon seam (the twin of ItemGraphics.draw); monochrome, unit-square, one drawing per Buildable.id — unknown id → silent fallback swatch. Console icons audits which entries still wear it |
| ui/build_icon.gd | BuildIcon = the Control that PICKS the seam: a kit (yields_item) draws as its item via ItemGraphics, everything else as its building. Used by the shared entry button and the construction-site panel |
| ui/build_entry.gd | BuildEntry.cost_labels_for() / tooltip_for() feed the ring's info panel AND the crafting tab — one source for what a thing costs |
| ui/loading_screen.gd | Pushed phases; everything switched via RenderingServer (force_draw()). Wears the title screen's leather. The phase weights are measured, not guessed — tests/loading_film.gd times a real cold start and is what to re-run when a load gains or loses a stage; the bar runs all the way to 100% and holds there before the game takes over |
| ui/event_log_panel.gd / chronicle_panel.gd | Feed / history. The feed lies under every window (EventLogPanel.Z_UNDER_WINDOWS, −1; the craft-queue plate shares it): an open window covers it where the two meet and keeps its size and place whatever size the log was dragged to — no window is fitted around the log any more. peek_rect() is where the hovered card sheet stands and where a learned card lands (ui/card_find_overlay.gd); it carries the event_log size factor, so both follow the log's slider. There is no task-board panel any more (0.18): the board runs, nothing draws it — tasks in the console is its only readout |
| ui/path_preview.gd | The waypoint line: hold_ms (2000) is a ceiling, the line dies with the plan; the clock is Time.get_ticks_msec(), never delta, so Engine.time_scale cannot stretch it, and PROCESS_MODE_ALWAYS lets the fade finish while paused. One show_for() entry, real NavigationServer2D routes per leg |
| ui/wanderer_panel.gd | The recruiting decision (5.4): identity + attributes, take in / send on. Must never read the hidden disposition |
| ui/new_game_panel.gd | The character creator (13.1), code-built, no .tscn. Both doors into a run go through it — the title's Play and the death screen's Retry — and through NewGamePanel.begin_run(), which arms GameState.pending_party (handed out once, by Main._apply_created_party()) and claims a fresh save slot. Every named choice is an arrow picker; the colours stay swatch grids. attributes_locked() reads GameState by path — a class_name script compiled as a test dependency cannot speak autoload globals |
| ui/pause_menu.gd | The Esc ladder (closes ui_windows group before pausing) |
| ui/ui_windows.gd | UiWindows.register(self) = the one window seam: joins the ui_windows group and makes the window exclusive — showing one closes every other, so windows can never overlap. A new window needs that single line (and a close() that opens nothing). The four map-click windows share one scheme: build_frame() is the skeleton, screen_room() where a window may stand, fit_window() places and caps it every frame — the scrollbar gutter is always reserved, so the width a label wraps at is a constant and the window settles on its first frame (tests/panel_fit_probe.gd) |
| ui/settings_panel.gd + gameplay/ui/graphics/audio/keybindings_settings.gd | Settings, five tabs: Gameplay / UI / Graphics / Sound / Keybindings. UiSettings (scenes/ui/UiSettings.tscn) holds everything about the interface — the UI size and Show FPS, the event log's detail, Companions speak, the small stat bars on the companion cards (GameState.card_pips, off by default; console pips) and the six part sliders. Moving a setting between tabs moved nothing on disk: each value persists in the autoload and the per-domain user://*.cfg it always did, deliberately not one settings file. Rebinding moves a key (the loser is left unbound, and persisted as unbound); bindings are stored as physical keycodes |
Save / load
saveable group in _ready and implementing
save_key() / save_state() / load_state() — since 17.4
SaveManager._collect walks that group instead of a hand-written list, so a new system
is saved the moment it joins and forgetting is structurally impossible. Saves are named
slots on disk (user://saves/<name>.save). brutal_testing_saves
is true while the prototype is tested (Brutal saves/loads freely) — flip it to restore the
permadeath pillar.A save does not store the map — it stores the seed. A load grows the world
from the seed again and lays the player's diffs over it by raw cell coordinate, and that contract
holds only while the generator is the same generator. So SaveManager.SAVE_VERSION
(9) is bumped by any change to worldgen, not only by a change of file
layout, and a slot of another version is refused in read_meta() rather than read: it
would set its buildings, companions and resource nodes down on ground that has moved out from
under them. The refusal is the feature. Version 8 is the glades cut into the deep wood
(WorldGenerator._open_forest_glades): the pass runs after the spawn pick, so a seed's
spawn, rivers and landmarks stay put, but a few hundred trees per map became open ground, and the
species quantiles and the stock normaliser run over every forest cell that stands — so every
other tree shifts by a hair. Version 9 is the closed map edge (_close_map_edge), which sinks or raises the outermost band of every world. The reasons for 3 to 9 stand as comments above the constant; add the
next one there. The file is two Variants and the order is load-bearing: a small metadata header
first (what the save browser lists), the payload second. version is the file format;
the header's game_version is the build stamp and never gates a load.
What a load costs. Its floor is a new game's stand-up; everything above that is
the restore. tests/load_time_probe.gd walks the path
load_game takes and prints apply_state step by step
(SaveManager.report_costs), every listener on BuildingManager's and
TerrainManager's signals by total cost and call count, and the first frames after
— re-run it after anything that touches the restore. Three rules came out of it:
- A load replays signals, so a listener that does whole-world work per signal is
quadratic here.
building_placedfires once per restored building andterrain_changedonce per cell the save disagrees with the seed on.RoomFloorRenderernow only marks itself stale and repaints once, deferred (_mark_dirty), andTerrainRendereruploads its textures once a frame. A new listener on either signal coalesces, or it shows up in the probe. TerrainManager.layers_restoredmeans “the ground may have changed”, not “rebuild”.TerrainCollisionkeeps the walkable mask it built from and rebuilds only the rows that differ; pastRESYNC_FULL_REBUILD_ROWSit rebuilds everything.- A pending load grows nothing the save is about to replace.
ResourceSpawnerandAnimalSpawnerskip their placement whileSaveManager.has_pending_load(); the resource spawner still deals the pool the restock draws from.
Load order still matters, and is kept explicitly: _apply_saveable(key)
places the order-sensitive members by hand (terrain before buildings, the task board after them,
weather last) and an order-free tail sweep catches every other member — so both
halves are safe against a newcomer nobody remembered. Members register with the literal group name,
because SaveManager autoloads last, after them all. Session meta, CityInventory
and the tree-walk collectors stay hand-written on purpose.
Hand-written keys beside the group: room_grime, floor_offered / roof_offered, build_shortcuts, settlement_names (only the next base number — a flag's name and radius ride its building), wanderers. Resources ride as columns (ResourceManager.save_columns()); a save with one dictionary per node still loads. The autosave collects on the main thread and encodes and writes on a worker (flush_write() before any read or rewrite of the slot; a forced save lands before it returns). On Hard, SaveManager.exit_needs_confirm() makes Quit, Main Menu and the close button ask when nothing was saved in the last minute (PauseMenu.ask_leave); Brutal saves itself on the way out.
Node names are save keys (see Companions). Since recruiting (5.4)
_collect_characters walks the tree, not a fixed name list, and
_rebuild_character builds the rigs a fresh world doesn't have. Restore obeys a rank
order (ground → structures → fixtures). A slot shorter than a stored Variant's 4-byte header
(MIN_VARIANT_BYTES, checked in _open_for_read) is skipped without
being read: a save interrupted mid-write leaves a 0-byte file, and get_var() on
it prints an engine error GDScript cannot catch. Difficulty (Hard = free save/load, Brutal =
suspend-only + slot wipe) is picked on the title screen. Console: saves, save,
load, delsave, difficulty, orders.
Standing orders ride the save too (2026-08-16): the active
JobRunner.Command, where it was aimed, the work already banked, the whole
WorkerCommands.queued waypoint chain, and the few things a command cannot read back off
the world — a batch craft's kit (by resource_path) and its latched cost, an hour of vigil
already stood, a watch that has seen the night fall. An exchange travels by name and a hunt by
position, because neither node identity survives a load. Saves written before this simply
carry no orders, which is a load into an idle party, not an error. The bench's queue rides with the
order (craft_queue, kits by resource_path).
State that lives only in memory must be re-derived on restore, or a load changes the
run. Three cases, each one a bug once: a companion is restored by raw position, so
CaveManager.arm_at(character) both re-arms the threshold latch and calls
reconcile() — without the second half a companion saved inside a cave
and not moving (asleep, say) was in no interior until they took a step, with no sight, no light and
no glow from the mouth. The despondency latch rides the save, because it is entered under
despondent_below and left at despondent_recover, and a companion between
the two lines otherwise comes back cured. And the deep-sleep run is saved for a companion saved in
bed. A key that is absent simply loads as its default; what an older layout needs is a lift at the
reader, never a second format:
| Key | What the reader does |
|---|---|
| Skills (player/character_skills.gd) | get_state() writes LADDER_KEY (_ladder = 100) beside the skills. A state without it was written on the ten-level ladder and is lifted in restore_state(): one old level is LEGACY_LADDER_STEP (10) new ones, and the XP held is walked up the new rungs, never past the ninth |
| Loadout (player/loadout.gd) | hand (the right hand — the old key), off_hand, head, and quality beside durability. A held two-handed tool with no off_hand comes back in both hands; a tool with no quality record is whole and shows no grade |
| Stats | A stored sleep_debt is not read |
| Animals and carcasses | Named by their species' .tres path, through AnimalSpecies.load_saved(path) and RETIRED_PATHS (pig → boar). A carcass keeps its rot_rate |
| Fog (autoload/fog_manager.gd) | Beside the visibility grid: rung, ever, and the two minute arrays seen and rung_at, packed, plus fade. A cell in sight at save time is settled as if it left sight that minute, so a save does not depend on who stood where. Without the memory keys every discovered cell starts at FogMemoryConfig.legacy_rung (World) |
| Not saved, on purpose | The day's length under the console's daylength, the glade centres (re-derived from the seed), puddles (derived from the runoff, which is saved), the party's zoom floor (derived from the party) |
AchievementManager keeps user://achievements.cfg in the
profile, not the run: it is NOT in the saveable group and NOT in
WorldGenerator._ready's reset list, or permadeath would wipe the very record it is
supposed to leave behind. Its one call in the generator, begin_run(), is run
bookkeeping and not a reset. A test breaks if anybody "tidies" that up.Console commands
Every command the dev console knows, what it does and one example each.
F12 opens the console (debug builds only); Esc or
F12 closes it and the game pauses while it is open. Handlers live in
scripts/ui/dev_console.gd — help inside the console is the
authoritative list, and every new mechanic ships a command here.
Most commands act on the selection: the companions currently selected, or the whole party
when nobody is. select 2 is therefore usually the first thing you type.
Companions & stats
| Command | What it does | Example |
|---|---|---|
select [<n>|all|none|next|prev] | Select and control the n-th companion (1-based). Everything below that says “the selection” means these. all takes the whole party, as ^ does; none clears; next/prev step the party as Tab / Shift+Tab do. | select 2 |
who [reroll|effects] | The selection's identity: name, age, body, the five base attributes. reroll draws a new one, effects prints what those attributes are worth right now. | who reroll |
roster | The HUD's companion shelf exactly as the cards read it — hotkey digit, condition word, current activity, and every trouble waiting its turn behind the headline (also: …). | roster |
stat <name> <value> | Set health / thirst / hunger / tiredness / temperature — also sleep_hours, the hours slept in one piece, which is what the deep-sleep bonus pays on (it holds only while they stay asleep). | stat thirst 8 |
fill | Top every survival stat back up to full. | fill |
skill [<id> <level>|curve [<id>] [xp/day]] | List the selection's skills, or set one outright (levels 0–100). curve prices a whole skill ladder in days of practising it (default lumberjacking at 17 XP a day, the measured pace of a specialist). | skill curve fishing |
odds [pin <0..1>|off] | What the selection's rolled skills are worth right now — the cast, the shot, the spark and the soundness of a made tool, the very lines the Skills tab quotes. pin fixes the die every rolled trade asks (0 = anything above 0 % works, 0.99 = nearly nothing does), off lets it roll again. | odds pin 0.5 |
equip [<id>|hand|hold <id> [left|right]|stow [left|right|head]] | Give the selection a tool (equip axe, equip iron_axe, equip headlamp); with no id, list what a tool speeds and the makes of each kind (axe/iron_axe, pickaxe/iron_pickaxe, knife/iron_knife — the best carried one of a kind does the work). hand reports both hands and the head, and whether the bow, the rod, the axe and the pickaxe can be used as things stand; hold takes a carried light or two-handed tool in hand — optionally into one named hand, and a headlamp goes on the head; stow puts it away: both hands, one of them, or the head gear. The sheet's double-click and its drag, same doors. | equip hold torch left |
durability [wear <s>|repair|quality <pct>] | Read the selection's tool wear and the quality each tool was made at; wear <s> ages it by that many work-seconds (to watch the bar drop and the axe break), repair mends everything back to its quality and never past it, quality <pct> remakes every carried tool at that grade through the door a finished craft uses. | durability quality 60 |
warmth [<id>] | The selection's worn gear, the degrees it insulates, how much of the wind it blocks and whether they stand in shade; naming a piece (coat, fur_coat, hat, fur_hat, fur_mittens, leather_trousers, leather_boots, polar_coat, polar_hood, polar_mittens, polar_leggings, polar_boots) grants it first. On jungle ground it also says what the furs cost there: the degrees of heat, and how much faster they soak. | warmth coat |
regen [<rate>] | Whether the selection is mending and, when it isn't, the one thing blocking it (a bar under half, too cold/warm, sick). A number sets the waking Health-per-second rate, so the trickle can be watched in seconds. | regen 5 |
fatigue | The exhaustion drag: tiredness ratio, the walk/work pace it costs right now, and the deep-sleep bonus a long sleep has earned (stage it with stat tiredness and stat sleep_hours). | fatigue |
rest [<hours>|here|home] | The leisure ledger: hours banked off duty toward the Free time card, the rest debt duty has run up, and where each one is spending it. A number banks that many in-game hours outright; here drops the spot they were sitting at, so free time re-anchors where they stand; home prints where a Free time rule would send each one. | rest 5 |
weight [<kg>] | Show the carried load against the weight budget, or set the budget itself. | weight 60 |
carry [<kg>|clear|lift] | The load and its overload: how far past the budget, what it costs the legs, whether it is immobile. A number piles stone on until the pack weighs that much; lift gives the pickup order on the stack underfoot, which takes the whole stack at any weight. | carry 50 |
wet [<0-100>] | Rain soak, the degrees it costs and how fast it is drying where the companion stands, or set it. | wet 100 |
puddle [<0-100>] | Where the standing water lies: how deep the selection's cell — and the bed it sleeps in — stands in a puddle, and how fast that soaks a sleeper. A number sets the runoff in percent: puddle 100 floods every hollow, puddle 0 dries the ground. | puddle 100 |
felt | The selection's felt temperature in °C, step by step — air, climate, wind, wet, clothing, meal, water, springs, fire or room, shade — the very breakdown the temperature gauge's tooltip shows, plus the body in °C and on the bar, and where the damage starts. | felt |
deprivation [empty <thirst|hunger> <hours>] | The selection's hunger and thirst stages: bar, stage, hours empty and the walk/work drag. empty empties that bar and sets how long it has stood empty. | deprivation empty thirst 4 |
mood [age <what> <hours>|wake [<times>]] | What holds each companion's Mood down: the summed ceiling, every factor with its points, and the clocks behind them. age <leisure|company|cooked|table|all> <hours> winds that clock back; wake books a broken night through the entry a companion woken in the dark goes through. | mood age company 30 |
hygiene [<hours>|wash <x> <y>|clean <x> <y>|grime <x> <y> <pct>|dust [<days>]] | Bodies and rooms: every Hygiene bar with the Mood the dirt holds it at, and every room holding grime. A number drains the bars by that many in-game hours; wash and clean give the orders through the ring's and the room panel's own doors; grime sets a room's dirt, dust settles that many days of it. | hygiene grime 120 84 60 |
latrine [<hours>|fill|use <x> <y>|empty <x> <y>] | The relief chain: every Relief bar and how long it has left, every latrine and the visits it has room for, who is on each seat, who waits in what order and who is on the way, and where the night soil is (latrines, packs, ground). A number drains every bar by that many in-game hours — far enough, and the accident happens; fill fills every latrine to the brim; use and empty give the ring's two orders at that cell (empty marks the Caretaker card). | latrine use 120 84 |
sick [<kind>] [<0-100>] | Ailments and the contamination loads building toward them, or force one. Kinds: fever, dysentery, food_poisoning, marsh_fever, snake_venom, scorpion_sting — they stack; sick 0 cures all. sick load <kind> <n> sets a load outright. | sick dysentery 50 |
jungle | What the ground does to the selection where it stands: whether the water is foul, how much fever the air carries and how fast the bites are filling the marsh-fever load, the wet rot on buildings and tools, and what worn fur costs. | jungle |
underfoot [<species>] | The creatures that lie in wait: bare, how many snakes and scorpions lie on the map and what each does; with a species the selection is struck by one, through the door a real step goes through. | underfoot snake |
effects | Every buff and debuff on the selection — the same list the HUD shows as badges, with what each one does. | effects |
dose | Make the selection swallow a herb against a sickness — the same entry the sheet's double-click and the Take herbs rule use, so it can refuse for the same reasons (nothing to treat, a dose already running, no herbs in the pack). Nobody doses themselves. | dose |
down [tend|carry|drop|expire] | The fallen: every body on the map, what felled it, what would wake it and how much of the half-day rescue window is left. With a healthy companion selected it fells them down the real vitals path; tend/carry/drop order the rescue through the right-click's own resolver, and expire runs the window out, which is the death. | down carry |
meal [eat|bite <item>|waste <0-1>|chew <points/s>|grace <days>] | What the stomach would do: the richest bite still worth taking, what would be eaten next, and whether it is full enough to stand the EAT rule down. meal eat begins one through the rule's own entry point; meal waste sets how much of a unit may spill (1 = the old eat-to-completely-full); meal chew is the swallow rate — how fast a mouthful reaches the bar; meal bite forces one unit down through the sheet's double-click entry and says whether the freshness dice landed; meal grace sets how close to rotting food must be to be eaten past the brake. | meal chew 8 |
skin [<litres>|stale|clean|drink|pour [<litres>]] | Waterskin fills in litres and what is in them; set the fill (skin 0 = dry, skin 3 = full), mark the contents still (dirty) or clean, make the companion drink, or pour it into the barrel or pan it stands at (a part litre included). | skin pour 0.4 |
bag [add [<n>]|<litres>|stale|clean] | The water bag: what each of the selection carries — bags, fill, and what the carry weight still lets in. add puts bags in the pack (the room follows the count), a number sets the fill, stale/clean what is in it. | bag add 2 |
alert [on|off|auto] | The mortal-danger alert screen (red rim + heartbeat): force it for a look, or hand it back to the party's health. | alert on |
alert slow [on|off] | The brake: drop to 1x the moment somebody falls into the red (= Settings > Gameplay > Slow to 1x when someone is dying). Bare, it reports the state. | alert slow on |
face n|s|e|w | Point the standing map figures at a compass direction — a staging aid for screenshots. | face s |
figures [iso|top] | Map-figure style: upright 3/4 view or the old bird's-eye look. | figures iso |
detail [fine|coarse|auto] | Hold the companion figure at one level of detail. The game drops the face, the stubble and the hair styling once a body is drawn smaller than CompanionFigure.DETAIL_FINE_PX; auto hands the decision back to the zoom. | detail coarse |
headsplit [on|off] | Draw the companion's head on its own canvas item (the default) or in one pass with the body. Off must change nothing visible — tests/head_split_probe.gd proves it. | headsplit off |
look [<name> face=|shape=|hair=|skin=|sex=|freckles|scar|glasses|warpaint|earring|eyepatch|bare|reset] | What the party is wearing, and the character creator's edits reachable mid-run: set the face trait (one of twelve), the hair silhouette (0–17), the hair or skin colour, the drawn sex=, toggle any of the six marks, strip every mark (bare) or hand the whole look back to the dice (reset). | look Sigrid skin=#c8a078 eyepatch |
expression [<name>|auto] | Force one expression on every map figure and portrait — for looking at it — or hand the faces back to the companions' own stats. | expression weary |
pose [<profile>|off] | Hold a work pose on the selection (chop, mine, fish, craft, … — bare lists them all), so a swing can be looked at without walking anyone to a tree. pose off hands the body back to whatever the job really is. | pose chop |
orders | What every companion stands under right now, waypoint chain and all — the same dict the save writes, so orders / save / load / orders proves a standing order survived the load. | orders |
path [off] | Draw the waypoint line over the selection's whole order chain — the same call a click and a selection go through, so the two-second line can be staged without a mouse. It reports every chain it drew; off takes it down. | path |
reclick [<x> <y>] | Right-click the same job again through the door the mouse uses: the repeat order is dropped for the companion already doing it, so the half-done work keeps its progress. Bare uses the standing order's own click point; a cell of your own must still redirect. It prints the work each companion kept. | reclick |
order <x> <y> [queue] | Right-click that cell with the current selection: resolves the verb there and hands it out, so the order gate (materials nowhere = nobody walks, and the log says so) can be driven without a mouse. queue is the Shift-held waypoint form, which is never gated. | order 120 96 |
march <x> <y> | The selection walks there as a column — whoever gets ahead stops and waits for the last companion. Parked for the trek, so this is the only hand that still orders it. | march 200 180 |
camp [<x> <y>] | Bed the selection down: everyone carrying a bedroll unrolls it, the rest sleep on the ground. No cell = where the party stands. Parked with march. | camp |
highlight [<x> <y>] | Flash the green command feedback on a cell without ordering anyone — the only way to stage that visual for a screenshot. | highlight 118 94 |
wanderer [<action>] | Recruiting: list who is on the road; spawn [renegade|loyal], here, panel, recruit, send, desert. | wanderer spawn renegade |
tale | What a newcomer would tell you: picks an undiscovered landmark, lifts the fog around it and prints the line — what recruiting one does. | tale |
temperament [list|<id>] | How the selected companion speaks: their temperament, what it means and how readily they talk; list names every one the game ships, an id hands them another. Voice only — it moves no stat, no skill and no work clock, by design. | temperament dry |
speech banks|stats|check|line <id>|preview <tag> [k=v …] | The companion line bank: banks and stats size it and show which temperament tags have gone quiet, check audits every row (character cap, unknown tag, a dialogue half whose partner is missing) and is what the headless test asserts on, preview draws real lines out of the real selection for a made-up world. | speech preview grim season=winter place=fire |
voice [say [<n>] [words]|poll|reset] | The voice system's board: who would speak next and which gate is blocking whom. say makes companion n talk (no words = a line from the bank), poll runs one selection pass ignoring the rolled interval, reset forgets every speech budget and drops any running exchange. | voice poll |
memories [<name>] | What a companion carries: their memory ring, newest first, with the in-game day, the kind, the subject and how heavily it weighs. The ring is bounded and drops its least salient record, so this is also how you see what a run has already forgotten. | memories Sigrid |
backstory [<name>|pools] | Where a companion comes from: their rolled life, the attribute hand it explains and the tags it hands to their wishes. pools lists the five pages and their sizes, match ranks the stories this companion's dice would reach for through the pick's own scoring, and a story id hands them that life — a life, not a bonus: it moves no stat and no skill. | backstory Runa |
wishes [<name>|list] | What a companion still wants, whether it has been granted, how far off it is and what it is doing to their Mood ceiling. There is deliberately no wishes grant. | wishes list |
Windows, items & the hand
| Command | What it does | Example |
|---|---|---|
sheet [<n>] | Toggle the character sheet (E), or open it on the n-th companion. Opening it selects that companion, exactly as the key does. | sheet 2 |
sheet filter [<category>] | Narrow the carry grid to one category — the chips over the grid — or report the filter that stands and how many batches it shows. | sheet filter food |
skills [<n>] | Toggle the Skills tab (R) — level, attributes and skills — or open it on the n-th companion. | skills 2 |
shop [list|panel|work] [<id>] | The workshop portrait: list names every workshop that gets one and the state each is in, panel raises the window, work banks a beat of work so the picture moves. | shop panel lumber_camp |
rules | Toggle the automation rule editor (T). rules tab [back] steps the open drawer's input fields as Tab / Shift+Tab do. | rules |
craft [<recipe> [<n>]] | The workshop craft queues (19.1): bare, every standing station with its orders plus every known recipe; with a recipe id it puts that order on the nearest station that makes it. craft panel opens the nearest station's window with an order staged, craft clear empties every queue, and craft sources says where each next order takes its materials from — per input, what the workshop's own yard gives, what the crafter's pack gives and what has to be fetched. | craft sources |
crafting [<kit> [xN] [craft|dblclick]|gates] | Toggle the crafting bench (U) — where carried kits like the bedroll are made. With a kit id it selects that entry and reports the ingredients out of the subject's own pack; x3 steps the batch spinner (clamped to what the pack can pay for), craft presses the button — which cancels the kit in hand, and queues behind another kit that is being made — and dblclick takes the double-click door, which starts a run, never cancels one, and says why when it will not. It drives the panel's own select_kit / craft_pressed / step_batch, so it cannot drift from the mouse. crafting gates is the census: every kit in the catalogue, open or workshop-locked and why. | crafting bedroll x3 craft |
craftqueue [cancel <n> [<member>]] | The bench's craft queue the HUD shows above the event log: every companion with something on the bench, the kit in hand first with its progress, then what waits behind it. cancel 1 takes the kit in hand off the selected companion's bench, cancel 2 the first one waiting — the door a click on the entry uses. A trailing 1-based member number names another companion. | craftqueue cancel 2 |
atmos [auto|off|night|frost|rain|fire|alert] | What the open window wears. Forces one layer on so a screenshot can be staged for a sky this seed never rolled; echoes the live values. | atmos frost |
windows [close] | The exclusive windows: every registered window and which one stands — at most one ever does, since opening one closes the rest. close clears the screen (the Esc ladder's rung). | windows close |
tileinfo [<0-3>] | Which of the four looks the bottom-left mouseover readout is drawn in (a pitch: 0 as shipped, 1 one accent, 2 the traffic light, 3 the token) — the words are the same either way. | tileinfo 2 |
tileinfo coords [on|off] | Put the hovered cell back into the readout's title — the coordinate every <x> <y> command on this page wants. A dev aid, off by default. | tileinfo coords on |
hover <x> <y> | Point the mouseover readout at a cell without a mouse, through the same TileInspector.hover a real motion uses, and echo what it now says: a companion, a wild animal standing there in live sight, or the tile itself — whichever the pointer would really be on. | hover 118 94 |
pin <x> <y>|off | Left-click a cell without a mouse, through the same TileInspector.inspect a real click uses: it pins the tile window to the thing there (bare ground pins nothing), opens whatever panel the click opens too, and echoes what the window says. off closes it. | pin 118 94 |
uiscale [<0.5-3>] | Blow the UI up for a screenshot, this window only — it saves nothing. | uiscale 1.5 |
uisize [<part> <70-150>|reset] | Size one part of the interface in percent, exactly as the slider under Settings > UI does — and saved like it. Parts: cards, windows, clock, info, event_log, font. Bare, it lists what each stands at; reset puts all back at 100 %. | uisize event_log 80 |
windowscale [<0.4-1.5>] | How large the windows (companion, fire, stores …) are drawn against the HUD — 0.65 is the shipped size, 1 the old one. A live trial: it saves nothing. | windowscale 0.8 |
transfer [mate] | Open the carry↔stockpile exchange (snapping a companion to its nearest pile); transfer mate opens it between two companions. | transfer mate |
zone [list|new|name|color|paint|erase|tool|del|go|at|open|close] | The whole zones overlay as commands — every branch presses the button the overlay presses, the fog refusal included. | zone new "North woods" |
level [<n>|xp <amount>|curve [xp/day]|spend <attr>|refund <attr>] | The selection's character level: bare reads it, a number jumps to it, xp grants raw experience through the skills' own funnel, and spend/refund place a point through the same call the sheet's + makes. curve prices every level in days at a given XP/day (default 30, an ordinary working day). | level curve |
hearth [<logs>] | Open the nearest fire's panel and stage it: logs in the flame (0–4) and raw fish on the pan, so the fuel slot and the pan's progress have something to show. It echoes what the fire portrait is drawing, which is the one thing a script cannot see. | hearth 3 |
boil [hand] | Run the whole boiling chain: fill the skin with pond water, stoke the nearest fire and issue the real order. boil hand opens the fire exchange window instead. | boil hand |
cook [<units>] | Cook carried raw fish/meat into its cooked kind. | cook 3 |
hand [grab|take <item> [n]|drop|place <x> <y>|equip [<part>]] | The world hand: report what is held; grab snaps the one selected companion to its nearest pile and lifts the first tile's stack, take lifts a named item straight out of their pack, drop gives it back, place puts it down on that cell (walking there first when it is out of reach), equip puts what is held on — bare into the right hand, or into left|right, onto headgear (the headlamp's tile) or onto the clothing row's chest|head|hands|legs|feet. | hand take wood 2 |
give <item> <n> [carry] | Add items to the city stores, or with carry straight into the selection's packs. | give berries 20 carry |
shine [<item>] [<tier>] | Bare: the tier table, the marked item types and every glinting stack on the map. With an item, drops a glinting find at the selection; shine mark <item> makes a whole type sparkle wherever it is drawn. | shine wood 2 |
drop <item> [n] | Lay a dropped stack on the ground at the first selected companion (right-click it in play to pick it up). | drop wood 5 |
spoil <days>|rate | Age all perishable food (stores and packs) by n days and rot whatever expires. rate reads how fast food ages where each companion stands (1.0 = the tuned shelf life; the jungle 3.0, the ice 0.1). | spoil rate |
fish [<x> <y>] | Bare: hand the selection a fishing rod — all it takes to fish by hand; the Fisher rule also wants a hut on the water. With a cell: order the selection to fish that water by hand, through the right-click's own door. | fish 120 84 |
chronicle [<text>] | Toggle the run's chronicle (J); with text, write that line into it stamped with the current day. | chronicle A hard winter began |
context [water|workshop] [queue] | Open the right-click context ring on the nearest water or workshop — the same entries a right-click offers; queue opens it as a Shift-click does, so the verb picked joins the waypoint queue. With a ring up, context keys lists the sectors' letters, context key <letter> presses one and context nav left|right|enter walks it. A fire grows no ring, so there is nothing there to stage. | context water |
World & terrain
| Command | What it does | Example |
|---|---|---|
world [character] | Map size, walkable land and the density scale it gives every spawn count (1.0 = the 512×512 reference; the shipped map is 768×768), with the live populations. character prints what this seed made of the island — its shape and proportions. | world character |
seed [<number|word>] | Bare: this run's seed. With one, start a new run on that island, a word hashed as the creator's field does (Hard only). | seed walrus |
river [<0..1>] | Drought and flood on fresh water: bare reports, a number stages a flood. | river 0.8 |
biome [<name>|<x> <y>] | Biome census as a share of the walkable land; a name (temperate, tundra, swamp, desert, ice, jungle) teleports the party into the heart of one, a cell reads it out with its climate offset. | biome tundra |
cave [<n>|walk <n>|in <n>|out|light|view|grope|<x> <y>] | Caves: list every mouth and what is known of its inside, teleport beside one, order the selection to walk in, send the party in or bring it out, or read a cell. | cave in 0 |
cave light | What the time of day is worth underground (nothing, bar the glare in the doorway), what each companion's own light is worth — a smudge, with no flame — and every fire burning down there with its reach, its strength and whether it is down to embers. | cave light |
cave grope | Who underground is feeling their way in the black — one cell per order, no path, no way out by a click — and which cell the next step reaches out from. It also names who on the surface is held the same way by thick fog; stage one with weather fog, then precip 1. | cave grope |
cave view | What the camera is bounded to underground and how far the rim can be panned clear of the HUD. | cave view |
dungeon [<n>|walk <n>|in <n>|out] | The hand-authored places (the pyramid, the manor, the wreck in the floe, the overgrown temple): list every one and what is known of its inside, teleport beside a door, order the selection in through the real one, send the party inside at once or bring everyone back into the daylight. | dungeon in 0 |
dungeon floors <n> | Every storey of one place with its traps, secrets and caches. | dungeon floors 0 |
dungeon reveal <n> | Map one that has already been entered. | dungeon reveal 0 |
dungeon stairs | Pairs every storey step with the cell a climber actually ends up standing on — it steps off the stair, which is where the pairing can go wrong. | dungeon stairs |
dungeon search <x> <y> | Order the selection to work that wall over — the same order a right-click on it gives, with the walk, the light check and the 25 seconds. It deliberately does not say in advance what is behind it. | dungeon search 214 88 |
dungeon draught | How far each companion feels a hidden door. Perception scales it, so who you send in first is the whole mechanic. | dungeon draught |
dungeon pace | The floors that cost speed, and how much of each storey is made of them. | dungeon pace |
dungeon plates | The manor's machinery read off the building itself: every pressure plate and whether it is held, every gate and whether it is up, and every cracked floor with the crossings it has left. | dungeon plates |
dungeon valve [<x> <y>] | What valves the place has and whether anybody has pulled them; a cell orders one pulled through the walk, the light check and the full forty seconds. Water does not come back — the one act in the game with no undo gets no shortcut here either. | dungeon valve |
dungeon look | Counts the vocabulary storey by storey — every column, frieze, plinth, jar, bracket, rubble patch, mosaic and shaft, plus which cells are lit with no torch at all. | dungeon look |
dungeon blink | Fire the storey-change wipe through the very node a stair fires it through. A real one only fires when the camera was on the storey being left. | dungeon blink |
landmark [<n>|<x> <y>] | Designed landmarks (crater lake, hot springs, standing stones): list them, teleport to one, or read a cell. | landmark 2 |
height [<x> <y>] | The height field: the waterline and how the land is spread over it, or one cell's elevation, steepness and what that steepness costs a walker. | height 120 84 |
flow [<n>|<x> <y>] | The water network: the trunk/stream/thread census and the drainage each tier is cut at, or how much land drains through one cell and whether its water stands or runs. A single number teleports the party to the bank of that biggest river. | flow 120 84 |
fords [<n>] | The fords: bare counts them and lists the ten nearest the party; a number teleports the party to that one in the list. | fords 1 |
rain [<x> <y>] | Which way the wind blows on this island and where the wet and dry quarters lie, or one cell's rainfall as a share of the island — never a raw amount. | rain 120 84 |
soil [<x> <y>] | Fertility: how the good ground is spread and where the best of it is, or one cell's rank and what a farm on it would cost in time. | soil 120 84 |
water [<x> <y>] | Bodies of water. With a cell also its quality — still water wears a dysentery load, running water is clean. | water 120 84 |
salt [on|off] | Sea salinity — off makes all water drinkable again (a testing hatch). | salt off |
freeze [on|off] | Midwinter ice: the state and its window; off stops surface water freezing. | freeze off |
tree [<species> <x> <y>] | Forest species census, or plant a tree of that species on a cell: pine, birch, spruce, oak, or the jungle's kapok, mahogany and palm. | tree oak 100 100 |
mapedge [go] | The closed edge: what stands on the outermost ring (sea or rock, never ground), how much of it the generator sank and raised, and the nearest a walker can get to the outside; go takes the party to that cell. | mapedge go |
glades [go] | The glades worldgen cut into the deep wood: how many, how far apart, and the nearest one to the party; go takes the party there. Empty on a loaded save — a restored world was not generated, so nobody kept the list; the glades themselves are in its terrain. | glades go |
trees [<x> <y>] | Where the wood is: the map's trees and wood, the share by rain quartile and the lone trees scattered over the treeless country; a cell reads the wood standing within the site scorer's supply window and how far the nearest tree is. | trees 120 84 |
wildfire [strike [<x> <y>]|light <x> <y>|douse <x> <y>|burndown <x> <y>|out [<x> <y>]|dry [<x> <y>] <v>|run <hours>|regrow [<days>]] | Lightning and fire: bare lists what smoulders (with its drying against the flare line), what burns — trees and building pieces, with the litres each still needs — the lightning rods, and the burnt ground owed back. strike is a lightning strike near the cell (the score picks the target; a rod in reach takes it), light sets a forest cell or a building piece alight, douse right-clicks the cell with the selection (the extinguish order), burndown burns that piece down at once, out puts one cell or everything out, dry sets a smoulder's collected drying, run advances the fire, regrow fast-forwards the burnt ground. | wildfire strike |
dig <x> <y> | Order the selection to dig that rock through the ring's own door: a cave or mine wall drives a gallery, a surface rock face cuts a mine. Refused at the click without a pickaxe, like the mouse. | dig 214 88 |
dig now <x> <y> | Break that rock open at once through the handler's own door — no walk, no pickaxe, no time. | dig now 214 88 |
dig veins [<x> <y>] | How rich the rock is there (default: the first companion's cell, or the mouth of the cave they are in) and the odds a dug cell pays — in stones at the door and deep in, and, on its own richness, in iron ore and coal. | dig veins |
chop <x> <y> [strikes] | Bank chop strikes on a tree; with no count, all but the last — the next strike fells it. The reply names both halves of the fall: what went into the chopper's pack and what stayed at the stump. | chop 100 100 |
trunk | Who is still clearing a felled trunk and how much room they have left, plus every wood stack lying on the ground. | trunk |
canopy [reveal|sway <n>] | The forest roof's live walker feed (who thins and sways the crowns), or retune the reveal alpha / sway amplitude. | canopy sway 2 |
relief [<knob> <v>] | The mountain hillshade and snow-cap knobs — freq, amp, ambient, snowline, snowsoft, light x y. | relief snowline 0.7 |
sites [on|off|<x> <y>] | The base-site quality heatmap (red bad, green good) plus how rare a good site is. A cell scores that one place: the four components, and which rung of the water ladder it drinks from. | sites on |
forage [on|off|clear|wear <0-3>|<x> <y>] | The foraging-fatigue lens (green rested, red picked over) plus wear stats; a cell reads one patch out, wear/clear drive the whole map. | forage on |
navmesh [rebake] | Navmesh chunks: layout, polygon count and bake timings (what one wall costs). rebake bakes the world again and times it. | navmesh rebake |
room [panel|furniture|level] [<x> <y>] | Room detection: is the cell inside an enclosed room, and if so the room window's own six-line readout — temperature now (heated or not), cleanliness, comfort, roof, furniture, size. room panel opens its furnishing window (under a roof with no walls, the Lean-to window); room furniture itemises the comfort average; room level reads the ground bill — raw tiles, staked tiles, the labour owed — and stakes the levelled-earth blueprints the way closing a wall ring does. | room panel |
reveal | Uncover the whole map (fog drops to explored) — and hand it over for good: revealed ground is not forgotten again. | reveal |
fog on|off | Fog of war on or off. | fog off |
fog fade on|off | Whether the party forgets ground it has left. | fog fade off |
fog memory [<x> <y>] | What is remembered: bare, the share of the map remembered against the share ever seen, the days each rung holds, the wait before the next one and the two fronts' length; a cell reads its rung, the hours it has left, its brightness, whether its contents are still known and whether a building holds it for good. | fog memory 120 84 |
tracks | Footprints in the snow: how many lie on the ground, how long they take to fade, and whether the selection's own cell would take one. | tracks |
grid [<alpha>|off|full] | How loud the cell raster is outside build mode (0–1, default 0.1); placing anything still snaps it to full. off hides the resting grid entirely. | grid 0.3 |
tp <x> <y> | Teleport the selection (or everyone) to that grid cell. | tp 100 100 |
overlay [list|off|<id>] | The player's map lenses (zones, soil, climate, rainfall) — fog-gated, one at a time, the same door X uses. Bare, it names the one that is up. | overlay fertility |
Time & weather
| Command | What it does | Example |
|---|---|---|
time <hour> | Set the clock, 0–24. | time 22.5 |
moon [<phase>] | The moon: phase, lit share, nights to the next full moon; a phase sets it. | moon 0 |
day <n> | Jump to day n; the season follows the calendar and the rollover signals really fire. | day 20 |
daylength [<minutes>|x<factor>|reset] | How many real minutes one in-game day takes: bare reads it, a number (1–1440) sets it, x2 multiplies the default, reset restores it. Everything counted in game hours stretches with it — needs, illness, spoilage, weather, the calendar — and so does every piece of work and every body rate (GamePace): building, crafting, harvesting, sleep, healing, eating. Only walking and fire fuel stay in real seconds. Not saved: it holds until the game is closed. | daylength x2 |
year [<n>] | The escalation clock: the year, how far up the winter ramp it is, this year's and the ceiling winter's base temperature, and the storm weight. A number jumps to the first day of that year; the rollover signals fire, as with day. | year 3 |
season <name> | Jump to the first day of the next spring / summer / autumn / winter. | season winter |
tint [<season>] | The seasonal ground tint; with a season name, jump to its middle where the tint is strongest. | tint autumn |
weather [<name>] [hours] [next] | Bare: the sky and the temperature, what is pre-rolled to follow it, how far the world has already leaned that way, the rain runoff with what it costs a drink and what it gives a fisher, and every barrel's catch rate. With a name it forces sunshine / cloudy / rain / snow / hail / drought / storm / blizzard / fog for a few in-game hours (default 6) and reports, per companion, whether the spell is actually reaching that one — the desert answers no. A third argument forces what comes after the current spell, which is how a turn and all three of its tells are staged by hand. | weather rain 6 hail |
snow [<0..1>] | The snow lying on the ground — the one winter visual that otherwise takes two and a half in-game hours of snowfall to stage. Reports the cover, whether it is melting, and what each selected companion's ground speed is under it. | snow 1 |
precip [<0..1>] | How hard it is coming down — the word, the rate everything is running at, what a soaking and a bare pit cost right now, the puddles on the ground and every barrel's fill. A number pins it, exactly as wind pins a gale, and it stages a fog's thickness the same way. It is precip and not rain because rain <x> <y> is already the map's orographic rain shadow. | precip 0.9 |
runoff [<0..1>] | The standing water the ground is holding — what the puddles are drawn from, what it costs an untreated drink, and how long it has left to settle. | runoff 1 |
sky [read] | Weather-reading: every companion's level, their minutes of warning and how many skies they have seen; who would speak, the line they would say, and whether it has been spoken for this turn. sky read sends the selection into the real vigil, through the same entry point O uses. (Set a level with skill weather_reading <n>.) | sky read |
dry | What the sky is worth to drying right now: the open-air factor and air temperature where the selection stands, plus every standing preserver and the pace the weather leaves it. A clear sky beats the reference pace, an overcast one crawls, rain stops a rack dead. | dry |
clouds [<0..1>|auto] | Cloud-shadow cover: a number forces it now (staging), auto follows the weather again. | clouds 0.8 |
aurora [on|off|auto|see] | The northern lights: whether tonight has them, the share of clear nights that do, and whether each selected companion stands under them. on/off force the sky, auto gives it back to the clock, see lets whoever stands under them take them in at once. | aurora on |
front [<x> <y>|stage <kind> [hours]] | Where the weather is: every front on the map — its sky, how hard it falls, its middle, its heading and how much of the island it covers — plus what each selected companion stands under. A cell reads the sky over it, the rain shadow's share and the hours until the next front reaches it; stage cuts a front and aims it at the middle of the map. | front stage rain 6 |
weather storm | Force the storm, the one sky that is an event. It comes down as the season has it — a blizzard over frozen ground; weather blizzard forces the snow phase whatever the season. Reports its length and when the map has gone — sight is cut to a third, so the report is the only way to see what it is doing. It prints AIR THICK at N% beside SIGHT COLLAPSED, because the murk and the sight radius are separate numbers and showing one would hide the difference between a storm and a fog. | weather storm |
wind [<0..1>] [n|e|s|w|…] | Read or set the live wind: the strength, the quarter it blows from, the word the clock shows for it, and the chill in degrees each selected companion is actually feeling. | wind 1 n |
speed <x> | Time warp: 0 pauses, then 1 / 2 / 5 / 10 … | speed 5 |
sim [chunk <x> <y>|set <x> <y> <key> <value>|advance <hours>|budget <ms>|jobs|focus] | The simulation clock: bare prints the clock, the chunk grid, the jobs, what is banked and what the last drain cost. chunk reads the chunk store under a cell, set writes one value there, advance moves the world clock by game hours and pays everything due, budget retunes the per-frame millisecond budget. | sim advance 6 |
Resources & animals
| Command | What it does | Example |
|---|---|---|
res [<id>] | Resource-node census, or teleport the party to the first node of that type. Ids: berry_bush, herbs, rock, mushrooms, hazel_bush, mussel_bed, bird_nest, wild_roots, twigs, loose_stones, leaf_pile, cactus, wild_hemp, wild_grain, wild_rice, reeds, flint_nodule, crow_feather, eagle_feather, vulture_feather, iron_outcrop, coal_seam, and the jungle's eight: banana_plant, breadfruit_tree, wild_sugar_cane, pepper_vine, cocoa_tree, bamboo, lianas, fever_tree. | res mussel_bed |
res patches [<id>] | The stands: how many separate patches each clumping type formed, their mean and largest size against what its .tres asked for, and the share standing as single plants. With an id, teleport to the biggest stand of that type. | res patches wild_grain |
animal [<species> [n]] | Population census and how each species is spread (biggest party against its group ceiling, and whether it hops), or spawn n adults in a ring around the party. Species: deer, boar, pigeon, crow, wolf, bear, badger, beaver, raccoon, hare, fox, eagle, vulture, squirrel, turkey, wisent; the ice's seal, polar_bear, snow_hare, arctic_fox, snowy_owl; the jungle's parrot, monkey, tapir, jaguar, snake; and the desert's scorpion. | animal wolf 3 |
animal pockets | The map's separate walkable patches, and every animal standing on one too small to live on — a walker never leaves the patch it was dealt. | animal pockets |
animal warden [now] | The population warden: live count against ceiling and rescue floor per species, and which of the three rails is engaged — twins and triplets, a pair walking in off the map, or animals quietly leaving. now drives one warden step. | animal warden now |
hunt [<species>] [<n>] | Stage a hunt: arm the selection with a bow, and a knife to dress the kill with, and spawn prey nearby (default three deer), so the manual aim (hold H) and the Hunter rule can both be tried at once. | hunt hare 5 |
hunt wait | The stand a hunter falls back to when there is no prey in sight. | hunt wait |
wild [now|hunt [<species>]|nuts|raid|lod] | The wood's own hunters and its birds: every predator with what it hunts, what the dice said about each chase and how many are still sated, then every flier airborne against landed, then every swimmer afloat against ashore — and whether anything is standing somewhere it never may. now spends every cooldown, hunt sends the predator nearest the selection after its prey, nuts sends a squirrel or raccoon to strip a hazel bush, raid sends the nearest raider at whatever the settlement left in the open and names what it found — or why nothing is reachable, which is the fence answering; it refuses by daylight (time 23 first). lod says how much of the herd the sight gate is holding back. | wild hunt fox |
beaver [<n>|work [<n>]|cycle [<days>]|cross] | Beaver colonies: each one's home, the lodge-and-dam pair it is building and how far along, the trees it has down and what it owes back. An index teleports the party there, work runs colony work checks, cycle advances a whole 8–12 day build so the move, the hauling and the old pair fading out can all be seen, cross lists the dam cells the party may walk over and checks each against walkability, the navmesh and the terrain collision. | beaver cycle 10 |
mosquitoes [here|list|activity <0..1>|auto|bite <0..1>] | The swarms: what the field is doing and what is biting the selection, here the cell they stand on, list the nearest swarms with their size, activity forces the whole field on or off whatever the season and the sky say (auto hands it back), bite sets the bite level that ruins their night. | mosquitoes bite 0.8 |
regrow | Refill every stock resource (berry bushes and the like) to full right now. | regrow |
restock | Run the seasonal spawn pass now — seeds and clears mushrooms, nests and nuts. | restock |
branch <x> <y> | at <x> <y> | Order a branch broken off the tree at that cell, or (at) say what the tree has and which axe it wants. | branch at 120 84 |
flint [give <n>] | The fire striker: what the selection carries and whether the nearest fire could be struck by each of them. No flint, no spark. | flint give 2 |
feather [give <n>] | Where feathers come from — the three finds standing in the world and the three birds that pay. | feather |
arrow [give <n> [flint|stone]|land hit|land miss|strike <species>] | The quiver: what the selection can still shoot, per kind, and whether it could take a shot. give stocks flint arrows (stone for the cheap ones); land hit|miss rolls the recovery once at each companion's feet; strike puts stone arrows into the nearest animal of that species until it dies, and says how many it took and which arrow a mixed quiver would have nocked. | arrow strike deer |
carcass [lay [<species>]|dress|rot] | The kills lying in the field: every carcass — where, what it holds, the arrows lodged in it, how far it is dressed and the hours left before it rots. lay puts one two cells from the selection (default a deer with one flint arrow in it), dress orders the selection to the nearest one as a right-click does, rot ages every carcass past its hours and sweeps. | carcass lay bear |
blubber [give [<n>]] | The ice's fuel: which animals pay in it, what a slab burns for at each fire and where it stands in the fetch order, and the lamp it fills. give puts slabs in the selection's packs (default 6, one seal). | blubber give 10 |
fishstock [<x> <y> [<n>]|census|regrow <days>] | What is left to catch: bare reports the water under every fisher's hut and fish trap; a cell reads that water's kind, size, stock against capacity and the chance one cast lands, and a trailing number sets the stock. census lists every fishing ground on the map; regrow runs the daily breeding-back forward. | fishstock census |
fishtrap [<x> <y>|soak <hours>] | The fish trap: every one standing with its water body, its catch against its ceiling and the hours to the next one. A cell lays one there through the player's own path; soak hands every trap that many in-game hours through the seam its tick calls. | fishtrap soak 12 |
trader [spawn|here|panel|buy <item> [n]|sell <item> [n]|leave] | The travelling traders: bare prints the clock and the trader on the map. spawn sends one now, here puts the trader beside the party and makes them wait, panel opens the trader's table, buy/sell strike that bargain through the table's own door, leave sends them on. | trader buy flint 2 |
dragon [fly|rest|fire [off]|clear] | The dragon graphic, nothing else — no gameplay, no save. fly (the default) brings one in from 48 cells off: it calls two or three times out of sight, then flies in and circles the party. rest lays it down on the spot, fire has it breathe fire in bursts once it has arrived (nothing burns, nobody is hurt), clear takes it away. | dragon fire |
dragon status|stage <0-3|auto>|pass|blight <days> | THE dragon (gameplay): status prints stage, lair, realm, the blight under the party and the next passage; stage pins it (0 rumour, 1 passage, 2 roost, 3 fire) or follows the year; pass sends it across now on its own seeded line; blight runs that many days of blight over the whole map. | dragon stage 3 |
Building & automation
| Command | What it does | Example |
|---|---|---|
build <id> [<x> <y>] [site [<pct>]] | Conjure a finished building free of charge, or with site lay its construction site — optionally part-built. It walks past every placement rule, which is what makes it useless for asking whether the rules work — that is span's job. | build smokehouse site 50 |
span <id> <x> <y> <w> <h> | Commit a drag-sized footprint through the player's own path — the span trim, the fog gate and the refusal message included. The way to test a long bridge without a mouse; it names what went down and both sizes, or says nothing was laid and leaves the reason in the event log. | span bridge 110 22 6 1 |
cost [<id>] | Build costs: every entry with its cost variants (“3 twigs or 3 wood”), the labour each takes, what the settlement holds, and what standing blueprints committed to. | cost campfire |
radial [<cat> [<n>]] | The radial build menu: toggle it, or pin it open on a category and list what that ring holds with each entry's state. A trailing index hovers an entry, raising its info panel. radial shortcut [<1-3> <id>|clear] lists or sets the main ring's three shortcuts; radial keys lists the letter each sector carries, radial key <letter> presses one and radial nav left|right|enter|back walks the ring — all through the menu's own doors. | radial workshops 3 |
icons | Audit the building icons: which catalog entries have a drawing of their own and which fall back to the placeholder swatch. | icons |
looks | The world twin of icons: which standing buildings are drawn as themselves on the map and which still fall through to the plain plank hut. | looks |
yard [<x> <y>] [<n>|clear] | Reports a workshop's own store — the trade it serves, what it accepts, what lies there and the room left. A number fills it with that much produce (to watch a shift end on a full yard), clear empties it, yard build [<w> <h>] stakes one out beside the workshop (default 2×2) through the controller the panel's button arms. Without a cell it takes the nearest one. | yard 20 |
stores [<item>] | Which store the selected companion's hands are actually in where it stands, and which one a fetch would walk to — the two questions the pile-identity fix split apart. With no item, every kind the store in reach holds. | stores wood |
watch [advice|set] | Reads night_watch_advice off the nearest fire — fuel hours, hours of night left, the temperature at the coldest hour and whether a watch is wanted. set puts the first companion beside it on the real Command.WATCH until first light. Since 0.17.0 this is the only way to order a watch — the fire panel's button and its advice line were removed. | watch set |
flame [light|strike|out|embers|soak <0..1>|fuel <logs>] | The nearest fire's three states. Bare reports lit / embers / stone cold, burn time left, how wet the pit is, its exposure to the sky, and what a light would cost here and now. out spends flame and embers (what a storm does), soak 0.8 wets it past lighting, light cheats one alight, strike gives the real order. | flame strike |
torch [light|out|toggle|give|burn <h>] | The torch and its flame: what the selection carries and how much is left in each head. light strikes one at a burning fire or a mate's lit torch (the fire window's own button, same door), out snuffs it and keeps the rest, toggle is the L key for the whole selection, burn runs that many in-game hours off the flame. | torch burn 2 |
bedroll [unroll|packup|list] | Bedrolls: list every one lying on the map with who unrolled it, lay out each selected companion's own, or roll up whatever they are standing on. | bedroll unroll |
bed [in|up|list] | The sleeping pose: every bed with its pillow point and who is lying in it, in tucks the selection into the nearest free one on the spot, up gets them out again. | bed in |
ghost <id> <x> <y> [<w> <h>] [<rot>] | Pin the placement ghost at a cell without touching the mouse — w h fakes a live drag; on the wall it pins a chain anchor so the open run previews. ghost off releases. | ghost wall 40 40 6 1 |
cancelsite [<x> <y>] | Cancel the construction site covering that cell — delivered materials drop to the ground. | cancelsite |
move [<x> <y> <to_x> <to_y> [<turn>]|finish] | The piece window's Move: bare lists the staked moves, a cell pair stakes one through the door the button uses (a prepaid blueprint — work, no material), finish completes them all. | move 120 84 124 84 |
plot [<x> <y>] | What is still in the way on a staked plot: bare lists every construction site with something standing on it; a cell right-clicks it with the selection, which on a site cell means clear. | plot 120 84 |
wallhug [on|off] | Against the wall or with a gap: the build ghost's Q toggle, through the entry the key uses. Bare reports the ghost's state and the prompt line. | wallhug on |
upgrade [[<id>] <x> <y>] | The upgrade lanes: which pieces are the same thing in another material and what stands in each tier; a cell reads the lane there and what could be built straight over it; with an id it stakes that better material through the player's own path and reports the refund — the old piece stands until the new one is finished. | upgrade road 120 84 |
roof [<x> <y>|offer <x> <y>|lay thatch|boards <x> <y>|site <x> <y>|hover <x> <y>|hover off|show [on|off]|under] | The roof layer: how many tiles stand, of which tier and how worn; a cell says what is over it, whether anything bears a roof there and whether it is sheltered. offer stakes thatch blueprints over the whole room in one go — closing a wall ring no longer does that by itself — lay commits a tile (and the pillars it needs) through the player's own path, site reads the blueprint a click finds there on either layer, hover parks the cursor on a cell, show is the “Show roof” switch, under lists the tiles hidden because somebody stands beneath them. | roof lay thatch 120 84 |
decay [<days>|<x> <y>|mend <x> <y>|wreck <x> <y>] | The rent every building pays: bare lists what has worn below full, worst first; a number ages the whole settlement that many in-game days; a cell reads that piece's condition; mend marks it for repair, wreck rots it through on the spot. | decay 30 |
basket [<x> <y>] | The reed basket: every one standing with what it holds against its capacity; a cell weaves one there through the player's own path. | basket 120 84 |
compost [<hours>] | The waste chain: every compost heap, what is on it, what it is short of and how far off the next load of fertilizer is, plus where the spoiled food in the settlement is and which fields went in composted. A number runs every heap forward that many in-game hours. | compost 12 |
area [<id> [<cells>]] | Action areas: every standing building with one, its reach and who stands inside it. With an id and a number, retune that building type's reach live (0 = unlimited). | area campfire 25 |
pilerule [<x> <y>] <rule> | A stockpile's storage rule: everything, nothing, food, materials, or a list of item ids. | pilerule wood stone |
auto on|off | Run or stop the rule program of the selection. | auto on |
prog [basic|grammar|off|switch <n> [on|off]] | Dump the selection's rule program and live rule state; basic assigns the built-in basic-supply program, grammar a three-rule demo using ANYONE / UNLESS / ONCE, off removes it. switch <n> darkens or lights rule n (the number the editor shows) — a dark rule is skipped but still costs its blocks, so the rules under it never move up. | prog switch 3 off |
tasks [silence [on|off]] | Dump the needs board: every task the standing buildings post, with its claim state. The board has no window in the game — this is where it is read. silence stops the nearest posting building from asking, which is the only door that switch has left. | tasks silence off |
jobzone [<x> <y>] [<zone>|none] | The zone a job building works — lumber camp, fisher's hut, farm, mason's yard, hunting lodge, and never a fire, a stockpile, the drying rack or the smokehouse. Binds a zone by name or id through the same door the panel's Work zone picker presses; none clears it back to Anywhere. | jobzone North wood |
shift | Which of the three harvest contexts each companion is in — loose, a job building worked by hand, or an automated shift — the yard its trade would bring a load to, and the leg it would run next (tidy, deliver or work). | shift |
hauler [run [<ticks>]|reach <cells>] [<n>] | The hauler trade: what one companion's round covers — which painted zones it stands in and therefore what fences it, and the next yard with produce inside it. run works the trade through the very entry a WORK rule uses; reach retunes the plain round (a painted zone still wins). | hauler run 120 |
gatherer [run [<ticks>]|filter <item> on|off|limit <item> <n|off>] [<companion>] | The gatherer's trade: whether the job is unlocked, every gatherer's hut with its filter, zone and stock/limit per yield (limit sets one), and the stand the companion's shift walks to next. filter ticks or unticks a yield on the hut nearest the party through the door its panel presses; run works the trade through the WORK rule's own entry. | gatherer filter twigs off |
caretaker [run [<ticks>]] [<companion>] | The caretaker's round: every latrine with how full it is, every building worn below the line, and the chore the companion's round would take next, in the round's own order. run works the trade through the WORK rule's own entry. | caretaker run 120 |
paint <id> <x> <y> <x2> <y2> | Drag-paint a run of sites through the player's own path — the seam a wall drag and a floor area both end in — and report the order it committed them under — and that nobody was sent, because a commit is not an order. One drag is one order, and a builder put on it works that order to the end and nothing else. | paint wall 100 40 100 52 |
road [<x> <y>|on|off] | The road preference: the network and what the selection's own walk is routed over; with a cell, what a route there saves against the direct walk. on/off toggles the preference itself — the speed bonus is untouched either way. | road 140 120 |
unwall | Who is standing inside a wall right now, and step them clear — the same sweep a finished wall and a load both run. It reports even when nobody is stuck, so it doubles as the “is anybody sealed in?” check. | unwall |
buildorder [<x> <y>] | What the site at that cell (bare: the one nearest the party) belongs to — its order, every other site of the same commit, who is working it ("nobody is working it — a commit is not an order" until you send somebody), and where the remaining materials come from: the pack first, then every store holding any of them with its distance from the site, and which one the trip goes to. | buildorder 120 84 |
buildqueue | The build queue in placement order: what an automated builder takes next, and why every site above it is being skipped — somebody is already on that tile, or nothing can pay for it. | buildqueue |
unlockjobs [on|off] | Treat every work rule's job as unlocked, workshop or not. | unlockjobs on |
cards [<n>|party|finds|all|reset] | The card census. Bare or with a number: one companion's deck, owned and counted (decks are per companion). party — how many words each of them knows and what is next. finds — every found card lying on this map, its word and its cell. all makes every word writable and stops counting; reset empties every deck. | cards party |
deck [<n>] | Toggle the Cards tab (Z) for a party member — that companion's whole deck, locked cards included. Like sheet, it selects them. | deck 2 |
cards give <id> [<n>] | Hand one card over, as consuming a find would. | cards give found_last_light |
cards learn <id> [<n>] | Double-click the carried card in the carry grid — the player's own gesture, through the very entry point the sheet uses: one copy leaves the pack and the word is known. | cards learn found_last_light |
cards mark <key> [<c>] [<n>] | Bank marks on one counter of one companion's deck, without doing the work. | cards mark haul 3 |
cards show <id> [<n>] | Hold one card's 63:88 sheet up as it really stands for that companion — open or locked, tally and all. | cards show found_the_or |
cards ceremony <id> [<n>] | Play the full unlock ceremony for it — the flip, the fanfare and the plaque. | cards ceremony job_1 |
cards found <id> [<n>] | Play the lift ceremony — the sealed envelope climbing out of the world, and no flip. The find is a promise; the face belongs to the deck. | cards found found_the_or |
cards peek <id> | Stand that card's sheet above the event log, exactly as hovering its line there does — the same entry point the mouse uses, so it cannot drift from what a player sees. | cards peek found_the_or |
cards queue [<count>] | Lift that many finds back to back — the ceremony queue on demand; bare, it just reads it. | cards queue 3 |
cards flight [<id>] [<n>] | The same lift ceremony with its timetable printed: how long the card owns the middle, how long it is in the air, where it lands and how long it perches there — the four must still sum to the unchanged total. | cards flight found_last_light |
school [teach <who> <card>] | What the settlement teaches: the tuition factor every standing school adds, what the next recruit would arrive holding (per mark key and per skill), and who could teach whom which word. teach sends the nearest able teacher to give that lesson, through the entry the Cards tab's button uses. | school teach Ida sensor_2 |
settlement [<x> <y>|name <id> <text>|radius <id> <cells>] | The settlements on the map (buildings within 45 cells of each other), their name, size and centre; a cell says which one owns the stores there and what it holds. A settlement with a camp flag is a base: name renames it and radius sets its flag's ring — the flag window's two controls, same doors. | settlement 120 84 |
floorplan [<x> <y>|stamp <x> <y>|forget] | The remembered plan: bare describes it, a cell records the room there, stamp lays it down again, forget throws it away. | floorplan stamp 120 84 |
teardown [<x> <y>|all|clear|finish] | Demolition as work: bare lists what is marked and how far along, a cell marks/unmarks that building, all marks everything standing, clear unmarks, finish completes them at once. | teardown all |
freebuild [on|off] | Buildings cost nothing and rise instantly. | freebuild on |
field [crops|crop <id>|<x> <y>] | The farming year: what stands in every field, how ripe, how well tended and what it wants next. field crops lists all nine with their windows, their seed and which are perennial; field grow <days> runs the standing crops forward, field work [n] does n cells by hand and pays the seed for every furrow. | field crops |
kitchen | The cooking trade: whether a kitchen stands, every recipe with whether the settlement can afford it right now, the queue, and the selection's live boons. | kitchen |
healer | The healer's round: whether a hut stands, who counts as a patient, and which of them the settlement has posted as tasks. | healer |
Sound
| Command | What it does | Example |
|---|---|---|
sound list [<bank>] | The library: every row and whether it has a file, with the totals. With a bank name, just that page. | sound list footsteps |
sound missing | The shopping list — every row still without a file, with its description. The descriptions are written to be pasted straight into a sound library's search box. | sound missing |
sound play <id> | Hear one row right now. | sound play work/chop_impact_oak |
sound bed [<id>] | Which three ambience beds are running; with an id, force the place bed. | sound bed amb/bed_forest_night |
sound mood [<id>] | Which music mood is playing and which one the world wants — the two differ while the 90 s dwell holds. | sound mood music/winter |
sound bus [<name> <0-1>] · sound mute | Read or set a bus level live (Master / Music / Ambience / World / UI); mute silences everything at once. | sound bus world 0.4 |
sound where | What the camera is currently hearing: cell, terrain, biome, weather, hour, indoors or underground, nearest water, snow. The fastest way to find out why a bed is not what you expected. | sound where |
music [next|stop|start] | The music director: skip, silence or restart it. Bare, it says which mood is playing and why. | music next |
Saves, meta & staging
| Command | What it does | Example |
|---|---|---|
saves | List the save slots on disk (user://saves). | saves |
save [<name>] | Write a save slot; with no name the run's own slot, as F5 does. | save winter-test |
load [<name>] | Read a save slot back; with no name the run's own slot, else the newest. | load winter-test |
delsave <name> | Delete a save slot from disk. | delsave winter-test |
difficulty [tutorial|hard|brutal] | Show or switch the run's difficulty (normally picked on the title screen). | difficulty brutal |
tutorial [next|skip|show <id>|list|tasks|done|reset|on|off] | The Tutorial's lessons: which one is up, its tasks, and stepping, showing or resetting them. | tutorial tasks |
startitem [<item>|none ...] | The creator's kit page: bare lists the nine choices; one item hands it to the selection; up to three start a new run whose party brings them, in party order. | startitem flint axe knife |
runsetup [<biome> <season>] | Bare: where this run landed and which season it opened in. With both, start a new run there (Hard only). | runsetup tundra winter |
achievements [<shelf>|reset] | Every feat and whether this profile has it — they outlive the run. A shelf name (opening, survival, party, automation, exploration, mastery) narrows it; reset forgets every mark on the profile file, not in the run. | achievements survival |
achieve <id> | Mark one, down the same path the game itself uses. | achieve first_light |
margin [flush|path] | How close this run ever came to the edge: per companion and bar the lowest point, the hours lived under each of the game's three bands, plus days of food in hand and orders given. flush writes the roll-up to the run log now, path just prints where that log is. | margin |
hands | The intervention ledger: how often the player's own hand touched this run, by kind (an order, a takeover, goods moved by hand, a site staked), the days untouched and since the last order, and whether automation has worked this run — what the day-100 playstyle achievements read. | hands |
god [on|off] | Freeze all survival stats — no decay, no death, and no Health loss from anything: an illness, a snake, a cave trap, a wildfire and a cornered animal are all held off. Healing still lands, and stat health … still sets it. | god on |
scenario <name> | Jump-start a test state: startbase (the old free settlement), base20 [<day>] [here] (stocked base at day 20, moved to the map's best site unless here), broke (strip all supplies). | scenario base20 |
scenario latebase [day] [hour] [apart] | The late-game fixture: eight companions in two full bases at opposite ends of the island, every building the catalogue has standing in each, the stores full, every fire lit, the whole party on rule programs, day 45 at breakfast — the worst realistic case every performance measurement runs on. tools/late_game_save.sh writes it as the “Late Game” slot. | scenario latebase |
intro [fast|skip] | Replay the opening intro over whatever is on screen, through the same entry point the first launch uses (the console hides itself for it). fast runs it at four times the speed to check the timeline, skip plays it and skips a beat in. | intro fast |
shot [file.png] | Save a screenshot of the game view with the console hidden; prints the full path. | shot look.png |
float [<item> [<n>]] | Spawn a floating “+n item” gain text at the party centre. | float wood 3 |
fps [on|off] | The FPS readout under the time-warp bar; bare, it reports frame rate, frame time and draw calls. | fps on |
pips [on|off] | The small stat bars on the companion cards (= Settings > UI > Small stat bars on companion cards, off as shipped). Bare, it says which way it stands. | pips on |
zoom [in|out|banner [malus]] | The camera zoom: the level the readout under the FPS counter shows, the clamp it sits in, how much world is on screen, which zoom relics the party holds and the party's own share — its size, the overview that buys and how far out that reaches; the wider of the two floors wins. in/out take one notch through the wheel's own door. A wider clamp comes from a relic (give clear_crystal 1 carry / give seeing_stone 1 carry) or from a bigger party. banner rehearses the WIDER VIEW announcement without recruiting or burying anybody, banner malus the red NARROWER VIEW. | zoom banner malus |
drawn [window <x> <y> <w> <h>|off] | The draw window: how many resource nodes are recording renderer commands right now, against the renderer's RID pool. Bare re-reads the camera, window forces one in cells, off gives the window up so every discovered node draws — the state that exhausts the pool. | drawn |
perf [mark|reset|ablate|watch|atlas] | What this frame costs and what is being ticked, for catching a slowdown in the act: run it while the game is healthy, then again once it is slow, and the second report prints the difference. ablate switches off one subsystem at a time and names the culprit outright. It also prints the physics steps per frame and the tick books by name (the companions' runners, building:preserve and the like). watch is the slowdown watchdog, armed from the start: when the frame stays past 150 ms for three seconds it writes the census, the dials and a full ablation to user://logs/slowdown_<stamp>.txt (watch off|on|<ms>). atlas reports the baked item tiles; atlas reset empties them. | perf ablate |
renderer | Which renderer this build actually got, on which GPU, and where the window sits — the first question when a build runs badly on one machine and fine on another. A driver that is not the one the project asked for means the engine fell back, and a fallback is slower and looks different. | renderer |
smooth [on|off] | Feathered edges on the hand-drawn world shapes (= Settings > Graphics > Smooth shape edges); off is about two thirds cheaper to draw, bare it reports the state. | smooth off |
version | The build's version, the engine under it and the save-format version. | version |
clear | Wipe the console's output. | clear |
help | The full in-console command list — always the authoritative one. | help |
Testing & tools
| Tool | Command | Purpose |
|---|---|---|
| Headless suite | tests/run_suite.sh | The full suite, tests/run_tests.gd in its fixed interleaved order. It is the server's job (tools/ci_run.sh, on every push); locally it runs before a release. It parse-checks every changed .gd first — a parse error in a test file hangs the suite rather than failing it |
| One module | tests/run_suite.sh --module=<name> | Seconds, while working (test=<name> for one test, --module=list for the names). A pre-check, not a green suite |
| Error gate | tests/error_gate.py | Both paths fail on a new engine-error signature against tests/error_baseline.txt. The exit-leak budget is zero: one leaked object at exit fails a full run. --rebaseline re-locks the floor, and its diff is the review |
| Probes, sheets, films | tests/run_probe.sh <script>.gd -- args | Isolates user:// and takes the machine lock. A raw godot --script res://tests/… refuses to start (ProbeEnv.guard()) — it would write into the player's real save directory |
| Server verdict | tools/ci_report.sh · tools/ci_watch.sh | The remote and the runner live on the development VM dave; every push queues a full run there. ci_report.sh reads the newest verdict back and says which commit it is about, ci_watch.sh turns a new one into a desktop notification. dave is not a quiet box: a lone red from it is re-queued before it is believed (bin/ci_queue.sh add --force <ref> on the server) |
| Job gate | tools/job_done.sh --module=<name> | The module, the drift gate and the warning gate, one verdict; it never prints green for a gate it did not run (--no-module="<why>" for a job that touched no code). Under the verdict it prints where the review stands, without letting that change the verdict |
| Review gate | tools/review_gate.py status|brief|pass|block [ref] | Every gate above is a machine and none of them reads. The senior agent (.claude/agents/senior.md) reads a finished branch with eyes that did not write it — another model, no edit rights, handed the branch and the governing docs/ file and never the author's reasoning — and records a PASS or a BLOCK here. See the callout below |
| Landing | tools/jobs.py land | Under an exclusive lock: fetch, ask the review gate, rebase the branch onto origin/master in its own worktree, merge --ff-only, push, clean up. A code change with no PASS is refused before the branch is touched, and --force does not cover it. Bare, tools/jobs.py prints the board of jobs in flight |
| Drift gate | tools/project_map.py --check | Fails when the documentation comes loose from the code; --write regenerates docs/INDEX.md. Among its checks: 11 a bare queue_redraw() in a per-frame callback, 14 a .tres or a scene reference not in the editor's own form, 15 a badge tooltip with no bold head and no colour. What predates a check is frozen in tools/drift_baseline.json |
| Warning gate | tools/warning_gate.py | A new GDScript analyser warning is a failure; the old ones are frozen in tools/warning_baseline.json |
| Resource save | tools/resave_resources.sh <res://path> | Writes a .tres the way the editor does, so F5 rewrites nothing; generators save through tools/resource_format.gd |
| Late-game fixture | tools/late_game_save.sh | Writes scenario latebase as the “Late Game” slot from a seed; regenerate it rather than keep it. Every performance change is measured on it: tests/fps_collapse_probe.gd -- save=… pin=0 for the run over time, tests/frame_budget_probe.gd -- save=… for where one frame goes (class by class; mode=draw per draw call, mode=hitch per slow frame) |
| Screenshot harness | DISPLAY=:1 tests/run_probe.sh res://tests/screenshot.gd -- out=… seed=… grid=… cmd="…" | Boots the real game with rendering, stages state via console, saves a PNG (needs a display — DISPLAY=:1, not --headless). These wiki screenshots were made with it. |
| Figure sheet | DISPLAY=:1 tests/run_probe.sh res://tests/figure_sheet.gd -- out=… scale=6 | The real companion figure drawn many times over on a plain background — every face, kit piece, view, silhouette, complexion and mark, the walk cycle in profile, the portraits beside them. A drawing change is only reviewable side by side, which a game screenshot cannot do. Needs a display |
| Creator shot | DISPLAY=:1 tests/run_probe.sh res://tests/creator_shot.gd -- out=… seed=… slot=… | Renders the character creator on a bare tree — no world, no run, exactly its situation on the title screen. Needs a display |
| Review sheets | DISPLAY=:1 tests/run_probe.sh res://tests/<sheet>.gd -- out=… | One PNG each, drawn by the game's own drawing code, for the things nobody can judge in a running game: game_sheet.gd (the deer and the wild boar in every body they come in — stag, hind, fawn, piglet), gait_sheet.gd (one stride of each walker in eight frames), far_sheet.gd (the wreck, the mammoth's pit, the lost camp), tile_portrait_sheet.gd (every portrait the tile window can show), fog_memory_sheet.gd (the whole fade of a forgotten strip in one picture, through the real fog shader) and house_sheet.gd (one real room at four wall heights — the review surface for the taller wall, which is not built and not decided). All need a display |
| Soak test | tests/soak_test.gd | N-day base-balance net (not in the suite) |
| Benches / probes | tests/animal_bench.gd, grid_benchmark.gd, river_probe.gd (the whole terrain census — drainage, coast, wind, wood, soil, spawn and the land tally), height_probe.gd, gen_cost_probe.gd, water_probe.gd, sim_night.gd, nav_edge_probe.gd | Targeted performance / behaviour probes |
| Load time | tests/run_probe.sh load_time_probe.gd -- "save=/path/Late Game.save" | Where a save-game load spends its time: it walks the path SaveManager.load_game takes and prints apply_state step by step (SaveManager.report_costs) and the stand-up of Main child by child. A load is “grow the world from the seed again, then lay the save over it”, so what is left after the restore is tuned is worldgen, which a new game pays too |
| Pause | DISPLAY=:1 tests/run_probe.sh pause_probe.gd -- out=… seed=… "cmd=weather rain" | What still moves while the game is paused: photographs the same view twice, a real second apart, and writes the differing pixels in red — then checks that a sleeper given an order in the pause is still asleep until time runs. Needs a display: the dummy renderer draws nothing and every diff is empty |
| World & weather probes | forest_depth_probe.gd, jungle_scatter_probe.gd, fog_fade_probe.gd, puddle_probe.gd, music_density_probe.gd | How deep the wood is and what the glades change about it (spacing=0 is the wood before them) · whether the jungle is even, ninth by ninth, with a PNG · whether a forgotten patch dims step by step on the real screen · whether the puddle the game asks about is the puddle the shader draws · how much of a real save has music under it. The fog and puddle probes need a display |
tools/job_done.sh green → the
senior agent reads the branch → tools/jobs.py land. The senior
blocks on three things and nothing else, each with a failure scenario and a
file:line: a correctness bug it has traced, a standing decision reversed, and state
that will not survive a save or an autoload reset. Everything else is an advisory:
reported, and the change still lands — a veto on everything would strand finished work in a
worktree nobody can see.The verdict is keyed on the changed lines, not on a commit: per file, the added and the removed lines, sorted, with no context and no positions. So a PASS survives the rebase a landing performs, and does not survive a fix — a fixed change is a new change with no verdict yet, and a BLOCK needs no clearing. Verdicts live in <git common dir>/companions-review/, shared by every worktree and never tracked; tools/review_gate_selftest.sh proves the gate in a scratch repository.
Exempt is a change of prose and pictures only — the changelog, the roadmaps, and files under docs/, wiki/, pitch/, playtest_reports/ and assets/ whose extension cannot execute. A directory alone exempts nothing: a script under wiki/ or a shader under assets/ is code, and so are CLAUDE.md and .claude/, which are instructions every session executes. One second round after a fix; still disputed, it is the developer's, who alone holds the override (
COMPANIONS_REVIEW_WAIVE=i-am-the-developer). It is a gate against forgetting, not a
tamper-proof one, and it is no playtest: the reviewer cannot see the game.RefCounted, not a SceneTree) is the
toolkit — every constant, autoload accessor, world-builder and assertion helper lives
there once, so the modules compose in one process; the tree APIs the tests need are re-exposed
as vars set by bind(tree). Eleven domain modules extend it
(test_core / terrain / resources / water / survival / equipment / jobs / automation /
building / ui / meta.gd) and hold only their _test_* functions —
every helper belongs in the base, none in a domain.
run_tests.gd stays thin: set up once, bind the modules, then dispatch in the
original order — grouping is organisational only, execution order is byte-identical,
which is what makes the split safe against hidden inter-test ordering dependencies. A new test goes in
its domain module and the dispatch list.get_first_node_in_group
goes through the base's wrapper, and current_scene/paused/all(self)
/close_all(self) take tree, not self. And an
async test must be awaited — a detached one runs on and resets the
autoloads in the middle of a later test.Godot binary for this environment: ~/Downloads/Godot_v4.7-stable_linux.x86_64. After
adding a class_name, rebuild the class cache before headless tests. Claude cannot see the
running viewport — visual work is verified through the screenshot harness or by the developer.
screenshot.gd with the same out=, seed= and
cmd= line and drop the PNG back in place.Versioning
One number, one source, and the two things it is deliberately not.
The game's version lives in exactly one place:
application/config/version in project.godot — the engine's own
field, so an exported build carries it in the PCK for free. Everything in the game reads it through
GameVersion (scripts/main/game_version.gd), a static class like
BuildCategories: GameVersion.string() gives "0.5.0",
GameVersion.label() gives "v0.5.0" — the one spelling every screen uses, so
no label re-types the "v".
A release is not a build. The number only moves when a release is cut, so
between two of them every build wears the same one — twenty-three commits and three features
once all reported 0.5.0. Since 2026-07-26 the class answers both questions:
GameVersion.string() is the release, build_id() is
this build — <commits>.g<sha>, plus .dirty for an
uncommitted tree, and empty when the build is the release.
build_string() puts them together as 0.5.0+23.gb81e6d1. It is derived
from git, never typed, and never a gate — pure provenance.
build_id() asks git describe (once per process, then cached), and for
an export tools/stamp_build.sh bakes build_stamp.txt
beforehand — carried into the PCK by include_filter. The stamp is
gitignored on purpose: committed, it would change with every commit and could only ever
name the one before the commit it ships in. In the editor git wins, so a stale stamp
is harmless.tools/export.sh does both halves: it stamps, then names the file from the seam
(build/survival_0.5.0+27.g8331277.exe) — the path on the command line
beats the preset's, so the preset stays generic. It has to: the editor's export dialog writes
whatever filename you pick into export_presets.cfg, which is how a
hand-typed survival_0.3.0.exe came to sit there two releases later.
The suite now fails on any preset whose output path contains a version.Scheme: plain semver. While the prototype runs at 0.x, MINOR goes up
per completed feature batch and PATCH for fixes; 1.0.0 is reserved for the release that
closes the run arc (ROADMAP Milestone 10, the migration cycle). Milestone-derived numbering was
rejected — milestones complete out of order, so the version would have run backwards.
SaveManager.SAVE_VERSION is the save file FORMAT — the only number that may ever
refuse to load a file. GameVersion is the build that wrote it, stamped into each
save's header as game_version and shown in the save browser's tooltip. A save from an
older build always loads; the stamp is provenance, never a gate.It moved to 3 on 2026-08-04, and the reason generalises: a save does not store the map, it stores the seed and regenerates the world from it, then lays the player's diffs over the top. The terrain pitch replaced the height field, the rivers, the coast, the moisture and the forest — so the same seed grows a different island, and an old save would put a house in a lake and a fisher's hut inland. Reading it would be worse than refusing it: the refusal is the migration. Whenever a change makes a seed stop meaning the same map, this number has to move — it stands at 9. 9 is the closed map edge, which sank or raised the outermost band of every world; 8 was the glades cut into the deep wood, which left a seed's spawn, rivers and landmarks where they were and moved its forest, so an older save's diffs would be laid over a different wood.
Where it shows: the title screen's bottom-right corner, the pause menu, every save's header, the
console command version (which also prints the engine build and the save format), the
Windows executable (mirrored into export_presets.cfg), and the line at the
top of this page. The first four show the build — a save header carries
build_id beside game_version, so two runs saved a week apart under one
release number no longer read as the same game.
Cutting a release (full steps in CHANGELOG.md): bump
project.godot, mirror the number into
export_presets.cfg and this page, write the changelog section, run the
headless suite, commit, then git tag -a v<version>. The suite fails if the
three copies drift apart — that check is what keeps the mirrors honest.
A MINOR release costs more than a PATCH. Only x.y.0 freezes its own
wiki archive — the page plus a re-shot copy of every screenshot, roughly 10 MB per
release. Paying that for a one-line fix is what made a bump a ritual, and a ritual that expensive
does not get performed, which is how a whole day of work ended up sharing one number. A patch
release therefore rides on the archive of its minor line: needs_wiki_archive() and
release_line() are the seam, the suite checks a patch against
v<major>.<minor>.0, and wiki/snapshot.sh leaves a
patch alone entirely — no archive, no picker, no page edit (--force for the rare patch
that really changed what the page says).
tools/cut_release.sh <version|patch|minor|major> performs every mechanical
step: it validates (semver, strictly forward, no such tag, clean tree, an
## Unreleased section that actually says something), bumps
project.godot and all three mirrors including the page's
„last revised“ date, gives the Unreleased section its number, runs
wiki/snapshot.sh and the suite, then commits and tags with
--commit. --dry-run shows every edit and writes nothing;
--shots re-shoots the wiki first. Each mirror edit dies if its pattern did
not match — a silently un-bumped mirror is the failure it exists to prevent — and a
MINOR refuses to run without --shots/--skip-shots and
without --wiki-done/--wiki-skipped: the archive freezes whatever
pictures are on disk forever, and the minor is the one moment this page gets written at
all. It never pushes, never merges, and does not publish the build.Who cuts one: the developer, a PATCH included — no session cuts a release. The script refuses to run from inside a git worktree; a session ends at merge-and-push and names a release that looks due in one line.
Publishing the build — one .exe, always the newest
The download button at the top of this page links companions_<version>.exe sitting next to index.html on the server, and exactly one build exists there at a time. Publishing is the last step of a release, after the tag:
| Step | What it does |
|---|---|
| tools/export.sh | Builds build/companions_<version>.exe and deletes the
superseded builds in build/ (--keep-old opts out).
A build off the tag has no build id in its name; every other build carries
+<commits>.g<sha>, which is what stops a dev export from ever being
published. |
| wiki/deploy.sh | Reads the filename back out of this page, uploads that build if the server does not already have it, and then deletes every older companions_*.exe there — never before, so a failed upload cannot leave the site with no download. |
| wiki/snapshot.sh | Strips the download block out of the copy it freezes: an archived page offers no download, because that build's file is gone the moment the next release lands. |
What an exported build actually is — none of it visible in the editor, which is
why all of it had been wrong for a year. The .exe no longer carries the
test suite or the wiki (the export filter shipped 59 test files and every screenshot:
157.5 MB → 147.5 MB, and the living wiki/ gained the
.gdignore its archives always had). It says who made it and wears its
own campfire icon, written from one geometry by tools/gen_icon.py so
icon.ico and icon.svg cannot drift apart, and
there is no companions.console.exe beside it any more. The game
also keeps its own user directory (use_custom_user_dir): the UserDir
autoload runs first of all and copies an older installation's folder across once, never
deleting it — this had to land before the first Steam build, because Cloud file patterns are written
against that path. tools/export.sh --linux builds for two platforms, and
tools/steam_upload.sh pushes a build to a SteamPipe depot (it refuses a
working-tree build, refuses --live unless asked, and reads the ids from an ignored
tools/steam.env). It is deliberately not part of
cut_release.sh: cutting is not publishing.
The link is a mirror like the version number — cut_release.sh rewrites
it and the suite fails if it drifts. It has to be strict: this vhost answers a missing file with
this page and a 200, never a 404, so a link to an unpublished build would hand
a reader HTML under an .exe name rather than fail visibly.
The wiki archive — one frozen page per release
This page is a living document: it always describes the build in development. So that it can also say what an older build did, every minor release freezes a full copy under wiki/v<version>/ — the page and its own copy of the screenshots, because an archived page showing today's pictures would defeat the point of archiving it. The picker in the sidebar reaches every frozen build; a frozen page wears an amber banner and links back here.
| Script | What it does |
|---|---|
| wiki/shots.sh | Re-shoots every wiki screenshot from the real game, one list, same seed each time so two
builds' pictures are comparable. DISPLAY=:1 wiki/shots.sh for all of them,
or name a few: wiki/shots.sh hero party. Needs a display — the harness boots the
game with rendering, so --headless cannot do it. |
| wiki/snapshot.sh | Freezes the live pages + screenshots as wiki/v<version>/, stamps the archived banner into the copies, and rewrites the version picker on the live pages. Reads the version from project.godot, so it runs after the bump. Idempotent. |
| wiki/deploy.sh | Uploads the live page and every archive directory, then the build (above). |
Release order, and it matters: edit the page for the release →
wiki/shots.sh (so the frozen set is this build's) → bump
project.godot, export_presets.cfg and the page
→ wiki/snapshot.sh → changelog, suite, commit, tag.
Keeping this in sync important
When a player-facing mechanic changes (a control, a building, a gather target, a survival rule):
- Write the changelog entry under
## Unreleased. That section is this page's to-do list — see the next callout. - At the next MINOR release, update the matching Player Guide section here, and — if the change touches code structure (a new file, seam, tunable or console command) — the matching Developer Reference section, re-shooting the screenshot where it shows.
tools/cut_release.sh minor prints back every
## Unreleased heading and refuses to run without --wiki-done or
--wiki-skipped. A patch touches this page not at all (2026-08-08,
user decision): it bumps the version the game reports and stops there, shipping no build
— so the page goes on naming the MINOR it was written for, and a fix reaches players at the next
one. The single exception is a fix worth publishing on its own, where the download link alone is
moved by hand.The developer reference is derived from the seam catalogue in the project memory index (memory/MEMORY.md), where each system names its one seam — the fastest place to confirm where a mechanic actually lives.
Companions — prototype developer wiki. Player Guide is the player’s manual; Developer Reference maps mechanics to files, seams, tunables and console commands. Screenshots made with tests/screenshot.gd (seed 12345).