In short: GoSurvive isn’t out yet. This page explains everything the game does, in plain words, for the
people building it.
Not published = English only. Don’t touch the translation files (messages/uk.json, es, pt-BR, zh-Hans, de). New text goes in messages/en.json only — other languages fall back
to English on their own. We translate everything in one go right before launch.
- This page is plain English in code, not in
messages/. Edit the
section files in src/routes/manual/sections/. - Numbers here are read from the game’s config, so they can’t go stale. The
words can: if you change how something works, fix its section in the same commit.
- The page is public (the website links it). Never write anti-cheat limits or how
the server checks the phone here.
- Want more detail?
GAME_DESIGN.md § Survival has every rule; README.md has the tech.
Code: src/routes/manual/, messages/en.json, locale-parity.test.ts
In short: Walk around your real city. Every building you pass gets searched for supplies. Eat and drink to
stay up, level your skills, and make your own gear. Run dry and you pass out and lose your bag.
The point: get people outside walking — without staring at their phone. The game
plays itself while you walk; you open it to eat, cook and plan.
The story
- Something called the Event wiped everyone’s memory. People who couldn’t think it
through turned into the dead. The smartest kept their minds but lost every fact — they can still
read and reason, and that’s it.
- The dead are drawn to thinking minds. That’s why they hunt you.
- A bite doesn’t turn you. There’s no infection — not now, not ever.
- Running dry doesn’t kill you. You collapse, a stranger robs you of all but your most valuable
things and leaves a soda. You never lose your skills.
The big idea: you can only pick up what you can still name. Learn a skill and the
things it uses start showing up in your loot. This is the game’s main progression — not a side system.
The loop
- Walk. Buildings you pass get searched by themselves, even with the app
closed. About 1 in 50 holds something.
- Loot lands in your backpack.
- Eat and drink. Both bars drain all day, full to empty in 24
hours.
- Read books you find for skill XP.
- Make things: fire, food, clean water, wood, fish, gear.
- Level up. Every level that matters unlocks something new to find, use or make.
What’s live: every rule in this manual. Zombies and tower defence aren’t built
yet — see Coming next.
In short: Two bars up top (calories and water), one backpack button bottom-right, and the map is your
city.
- Top bar: calories and water side by side, burning down live. A bar turns red when
it’s running low. Tap either to open the backpack.
- Backpack button (bottom-right): tap to open the backpack. Hold it, or slide
off it, and it fans out Skills, Activity, the 2D map, compass follow and Bug report — let go on one to open it.
- Your avatar shows your total level: all your skill levels added up.
- The map: walking past a building searches it. A searched building bounces, puffs
a bit of dust and fades grey. Tap any building for its sheet.
- Loot shoots out of the roof it was found in, hovers there, then flies into your
backpack. Better finds get confetti or light rays. If the building is off-screen, it pops under
the top bar instead.
- XP pops under the top bar every time you earn any: the skill's icon and how much
you got. More of the same skill lands on the same pop and counts it up, and XP from a walk with
the app closed pops when you're back.
- A new level gets a big "Level up!" card over everything: the skill, its new level,
and what that level just unlocked. A level that unlocks nothing shows what's next and at which level.
Tap anywhere to close it, or it goes by itself after a few seconds. Levels you reached on a walk
with the app closed show up when you're back.
- Tap the world itself. There are no action buttons on the map: tap trees to chop
wood, water to fish or fill a bucket or bottle, and stuff on the ground to pick it up. Too far away
and it says how many meters short you are.
- A job running (chopping, fishing, scavenging) shows right under your avatar: its
tool in a dial whose rim fills up, and the time left. Tap it to see how it's going or stop it —
a scavenge opens its building's card.
- Chat (bottom-left): its last three lines sit over the map, and ride just
above any sheet you open; tap them to open it. When a sheet covers them, the answer to a tap
in it (what you examine, why a use did nothing) pops up on the thing you tapped instead, and
the chat keeps it. Chat is one feed, RuneScape-style: Global, your country, and the game talking to you
— Combat in red (a zombie reaching you and its line, every blow and bite, every kill)
and Game in yellow (levels, finds, fires, books, things made, jobs done, what you
examine, and why a tap did nothing). The game never pops messages up mid-screen: it all lands
here. Tap a chip to hide one, tap again to bring it back. The picker by the text box says
where you write: Global or any country. DMs are separate and never filtered.
- Reduced motion or battery saver turns off the bounces and shakes.
Kept from the old game: chat (now with combat and game lines) and the walking pills (GPS,
steps). Everything else from it is hidden — see Leftovers from the old game.
Code: VitalChips.svelte, BackpackButton.svelte, ActivityChip.svelte, HudFan.svelte, LootDrops.svelte, XpDrops.svelte, land-tap.ts, SurvivalLayer.svelte, ChatFeedPane.svelte, survival-log.ts, say.ts
In short: You hold up to 2,000 kcal and 3 L of water. Both burn around the clock,
app open or not — full to empty in 24 hours. Hit zero on either and you pass out.
- You burn 83.3 kcal and 125 ml every hour, day and night.
- A new survivor wakes like one who just passed out: 210 kcal and 500
ml of water, so food and water come first.
- Hold an item in the backpack and pick Eat or Drink.
- The bars never go over the top — extra is wasted.
Can’t be eaten: Raw rat meat, Burnt rat meat, Raw perch, Raw trout, Raw pike, Burnt fish, Pot of raw stew. Cook the raw stuff (see Fire & cooking); burnt food is
junk.
Passing out
- You don’t die. Someone robs you: the backpack, what you wear, the book you were
reading, and your fire goes out. A running woodcutting or fishing job stops, and what it made goes
too.
- They take everything — unless you have perks. Hidden pocket keeps your most valuable
things, one more a level, counted one by one: a hatchet beats a bottle of water, and between two
of the same the one in better shape stays. Bookmark keeps the book you were reading.
- They leave a soda. You wake with 210 kcal and 500 ml of water the
next time the game hears from you (Fuller soda and Kin’s kit add to that).
- You keep every skill, all your XP and every perk. See Perks.
- It’s worked out on your next request, from the exact moment a bar hit zero, in the order
things happened — a book that finished before then still counts.
- The server keeps the news until your phone has shown it, so you always see what you lost, even
after a walk with the app in the background.
For devs: the bars are a snapshot plus a timestamp, burned down whenever they’re
read. Nothing ticks on the server.
Code: vitals.ts, items-food.ts, items-water.ts, advance.ts, PassOutDialog.svelte
In short: 7 slots, more with a bag on your back. Most things take one slot each; small stuff
stacks. A full backpack means new loot is lost.
How to use it
- Tap an item to pick it up for “use”, then tap what to use it on: another item
or your fire (see Use X on Y).
- Hold an item for its menu: eat, drink, read, empty, use, drop, examine — only the
ones that make sense for that item. Keep your finger down and slide it to one: letting go there
picks it. Let go anywhere else and the menu waits for a tap.
- Drag it onto another slot to move it. Same item tops up the stack; anything else
swaps places.
- Drag it out of the backpack, onto the map, to drop it. The item shows a Drop tag once it’s out; change your mind and bring it back in.
- On a computer: click, hold and drag work the same, and a right-click opens the
menu too. Keyboard: Enter picks an item up, the menu key opens its menu, arrows walk it, Escape
closes it.
- Drop puts the whole stack on the ground where you stand.
- A find with no room is lost and pays no XP.
- Water and trees aren’t used from the backpack — tap them on the map.
Bags
- Sew a bag with Crafting and wear it on your back (Gear) for more slots. One bag
counts, the biggest one.
- Taking a bag off, or swapping it for a smaller one, only works once everything you carry fits
in what’s left.
- A recipe that would make something with nowhere to put it doesn’t run. Make room first, then
nothing you make gets lost.
- Pass out and the bag goes with everything else: you’re back to 7 slots.
- Carrying more than fits (a backpack from before bags)? The extra slots show in red. Nothing
new goes in, and each one disappears once you eat, use, drop or move what’s in it.
Stuff on the ground
- A dropped stack shows on the map as a sticker of the item, right where it was dropped, and
lies there 24 hours.
- For 1 min only you see it, so you can grab back the wrong thing. Then anyone
nearby can take it. Nobody sees who dropped it.
- Walk up and tap the sticker. Too far away and it tells you how many meters short you are. It’s
the whole stack or nothing, so it has to fit in your backpack.
- You can only take what you could have found or made yourself. Anything else is a bundle with a
question mark until you know enough to tell what it is. Your own drops you can always take
back, until you pass out: whoever robs you takes every stack you left lying too, wherever it
is.
For devs: every item is data — a stack size and the verbs it answers to. A filled
container is its own item: an empty bucket and a bucket of dirty water are two ids. So anything can
be used up or turned into something else by config alone.
Code: inventory.ts, backpack.ts, items.ts, InventorySheet.svelte, slot-gesture.ts, SlotMenu.svelte, ground.service.ts, ground-items-layer.ts
In short: Nothing lasts. Tools and weapons wear down every time you use them and break at zero. Food goes
off with time — raw meat and fish within a day, so cook it.
Wear
- A tool or weapon starts at 100 durability. Every use takes a bit off: each log
you cut, each fish you land, each blow you strike with it in hand, each recipe it comes out of whole
(a hatchet splitting a log, a filter you pour a bottle through).
- At zero it breaks and is gone. The chat says Worn out: …, and a woodcutting or
fishing job stops if you carry nothing else that will do.
- Anything you make comes out whole.
Spoiling
- Food keeps a set number of hours from when it lands in your backpack — found, caught or
cooked. A fish you caught with the app shut has been ageing since you caught it.
- Cooking gives you fresh food, however close the raw piece was to going off. So the trick is to
cook a catch the same day.
- Spoiled food can’t be eaten or cooked. Drop it — or tip out a spoiled stew to get the pot
back.
- Water, drinks and burnt food never go off.
Seeing it
- A thin bar along the bottom of a slot shows what’s left. It turns red under a quarter. Spoiled
food turns a sick olive and loses its bar.
- Hold the item: the menu says exactly — Keeps 19 more hours, Spoiled, Durability 73/100.
- Dropping something doesn’t reset it. It comes back up as worn and as old as it went down.
For devs: wear and freshness live on the stack (durability, spoilsAt), not the item, so they travel with it — worn, dropped, picked up. Two
stacks merged keep the worse of the two. Food spoils by timestamp: nothing ticks on the server.
Code: condition.ts, items-food.ts, items-gear.ts, ItemTile.svelte
In short: 10 slots on your body. Wear a tool and it leaves the backpack, so you carry more. It still
works from your hand. A bag on your back makes the backpack bigger.
How to use it
- Open Gear from the backpack button’s hold menu. Your survivor is the stencil; each
slot sits where that thing is worn.
- Tap a thing in the backpack to wear it. A tool goes into your first free hand;
with both full it takes the right one, and the old tool drops into the slot the new one left.
- Tap a worn thing to take it off. It needs a free backpack slot, and a bag only
comes off once everything you carry fits without it.
- Only what you can wear shows here. Food, wood and books stay in the backpack.
- Under the stencil sit your stats: attack speed (seconds between blows), damage a hit and your lure. They’re the numbers the fight
runs on, so a level or a weapon in hand moves them — see Zombies.
- Hold a thing in the backpack to examine it. The backpack’s own hold menu has Wear too.
- A worn hatchet or rod still starts a cut or a fishing session. A recipe needs the thing in a
backpack slot, so take a hatchet off before you split or carve with it.
- Pass out and what you wear is robbed with the rest.
For devs: ten slots in gear.ts; an item names its slot with wear, a tool says hand. Clothing is content: give an item a slot in
the admin panel and it is wearable. What clothing does is still open.
Code: gear.ts, GearSheet.svelte, GearStencil.svelte, SurvivorStats.svelte, items-gear.ts
In short: The dead stand around every building and come for you once you’re inside your lure — 40
m to start, 0 m more per skill level, 45 m at most. Within 5
m you trade blows on your own — only a brute is slow enough to outwalk, and barely.
Where they are
- Every building holds about one for each 300 m² of footprint (at most 12);
hospitals and schools more, sheds fewer. A few stand on open ground.
- They’re rolled fresh every day, in the small hours, and everyone sees the same ones. One you
put down stays down for everyone until then.
- Who they were comes from the building: an office’s dead were project managers and sysadmins, a
hospital’s nurses. Each still says one line.
Weapons
- Every blow has a type — Bash, Stab or Chop — and every kind takes more or less
from each: a brute shrugs off a club and fears a hatchet; a runner folds under a club and dodges
a point. Bare hands are Bash. Pick the tool before the fight; nothing changes during it.
- Only the weapon in your hand swings — the right hand first, then the left. Nothing in either
hand that counts as a weapon means bare hands.
- Hatchets are weapons too: the rusty one as found, the sharp one honed from it. The rest are
made: split a log, then grip a club or carve a spear — see Crafting. The felling and
fire axes are retired, so only one you already carry swings.
What each kind takes from a blow
The lure
- The dead are drawn to thinking minds. Your lure is the faint red ring around you: 40 m
plus 0 m per level across all your skills, capped at 45 m. The better you
get, the farther they feel you.
- Anything standing inside it wakes and comes. They only move while the game hears from you, so
opening the app among buildings is what brings them.
- From the moment one wakes for you it wears a health bar over its head — green for what it has
left — with a tag that says what it is: a figure reaching and dragging a foot for a shambler,
one sprinting for a runner, a heavy one with its arms hanging for a brute. You see them
through buildings too.
- Walk away faster than one and it falls behind; far enough and it gives up where it stands.
- Tap a building and Hide to shut yourself in at its door. Nothing reaches you in
there, however your GPS wanders, and they wait outside its wall for the moment you come out. You
can’t shut the door with one already on you: fight it off or get clear first.
- You’re out again when you tap Step out on that building, start anything outdoors,
or walk off. Standing inside a building without hiding keeps nobody out.
The fight
- It fights itself. Every zombie within 5 m bites at its attack speed
from the moment it gets there, none waiting its turn, and you strike back at yours. Nothing to tap.
- Attack speed is the time between your blows, as games count it. Bare hands swing every
1.5 s and hit for 5 to 15; a weapon swings at
its own speed for its own damage and type. Agility makes either faster: +0.5%
attack speed for every level past the first, never faster than one every 0.5 s.
- Every blow you land splashes its damage over the zombie, and it flashes and staggers. Every
bite flashes the edges of your screen red.
- The chat keeps the score: each one that reaches you and its line, every blow, every bite and
every kill is a red Combat line (see The screen).
- Every kill pays Fighting XP. If the dead empty your calories you pass out as usual: someone
drags you clear, and they lose you.
- A bite costs calories, nothing more. No infection, no turning.
For devs: the server rolls, wakes and fights them on its own tick, run first on every
open-app survival request. The fight is a pure function of when each zombie got there, your attack
speed and a seeded roll per blow, so the phone plays the same function to show each blow as it lands;
the server's next answer overrules it. Every number is live content (Admin, Survival, Zombies).
Code: zombies.ts, spawn.ts, pursuit.ts, fight.ts, zombie-step.ts, zombie-manager.ts
In short: Build a spear turret, set it down on a 4 m square near you, and it shoots the dead coming
for anyone inside its ring. They bite it as they pass; mend it with a split log.
Building and placing
- Craft it (table below), then hold it in the backpack and pick Place.
- Your action circle fills with 4 m squares: green where it can
stand, red where a building, water or another turret is in the way. Tap a square
to move it there, then hold the button to set it down.
- One turret to a square, and you can keep 3 standing at once.
What it does
- It fights for everyone: any zombie inside its ring that’s coming for someone
gets shot, on the turret’s own clock, oldest in the ring first. The ring on the map is exactly
how far it shoots.
- Its kills pay Fighting XP to whoever the zombie was after.
- Every zombie within 5 m of a turret that isn’t biting someone bites the turret. At 0
it falls apart. The dead walk around it, so one set back from their way, still in range, stays whole
longer.
- Tap a turret for its sheet: its hit points, and one button — Mend while it’s
hurt (anyone can), or Take back once it’s whole and yours.
Code: src/lib/shared/config/survival/defences.ts, src/lib/shared/survival/defences/, src/lib/shared/survival/zombies/battle.ts, GAME_DESIGN.md § Tower defence
In short: Just walk. Every building you pass gets searched, and about 1 in 50 holds something. What
you can find depends on what you know.
- It rides on the walking tick that scouts buildings: same buildings, same moment, no tapping.
Works with the app closed.
- Each freshly passed building has a 2% chance of a find. At
most 3 finds per tick, so opening the app downtown can’t fill your bag
in one go.
- A searched building restocks 24 hours after it was searched.
- Each find pays Looting XP.
- Walking, cycling or in a car, it all loots the same. A faked location or a GPS jump pauses it.
- Finds made in the background pop when you come back to the app.
- Standing still at a building digs deeper, off the same table — see Scavenging.
You only find what you can name. An item stays out of the draw until your
Looting level is high enough. Tools stay invisible until you know the skill that uses them — no
hatchet before Woodcutting, no twine or scrap before Crafting. Better tools never turn up at
all: you make them (see Crafting).
Weight is how often it turns up next to everything else you can currently find. Rarity is worked out from the weight and only changes how loud the loot pop is.
Code: loot.ts, looting.ts, foot-traffic.service.ts
In short: Tap any building to zoom in on it (out, for a big one, so it all fits): its name and type sit
over the roof, and under it the scavenge.
- Scavenge: one button on top of the card, arrows to pick the length and what
it should find — or "Backpack full after 2 finds" when your backpack runs out of room first,
at that length and every longer one. See Scavenging. Out of reach, it says how many
meters short you are.
- Searched or not is the map’s color, not the card’s: solid ash grey hasn’t
been searched yet, a paler grey you can see the map through has. A searched building restocks
24 hours later.
- Name and type: the building’s name, or its address when it has no name, and its
type on a sticker under that. Tap the type to see what else is inside (a museum with a restaurant
and a hotel) and what a scavenge there can bring home: each find with its chance of turning up in
the time set on the button, at your Looting level. Tap again to fold it away.
- What else the map knows: year built, architect and heritage status under the scavenge
button, and a photo and Wikipedia text when there is one. Anything the map doesn’t know is left
out. Landmarks get a sticker.
- Tap the name to read the building’s history, when it has one (a book on the name says so). Tap
another building to swap. Tap empty map or the same building again to close, and the camera
goes back to you.
- Looking is free: it changes nothing and counts for nothing.
Every building has the one card. What a special building (pharmacy, supermarket,
library…) adds is what its scavenge leans to. Height isn’t shown because the stored height is the
old game’s, not the real one.
Code: BuildingCallout.svelte, BuildingKinds.svelte, RunFinds.svelte, find-odds.ts, building-camera.ts, building-fit.ts, ScavengePanel.svelte, ActivityButton.svelte, building-about.ts, GET /api/survival/building
In short: Eight skills, levels 1 to 99, all known from day one: no book to find first. Every
action pays XP to the skill it uses, and every step pays Agility.
How fast you level
- The level curve is RuneScape’s: level 2 takes 83 XP, level 99 takes 13,034,431.
Half of that XP sits past level 92.
- Level 99 takes 8 hours a day for 5 years (14,600 hours) — 892.8 XP an hour, in any skill.
- Each skill says how many actions an hour of play holds. One action’s XP is just the split:
- XP is stored in tenths (so 1.5 XP never drifts). A skill caps at 200,000,000 XP.
- Failed attempts pay nothing.
Agility
- Every step the game counts trains Agility: 357.1 XP a thousand steps. An hour of play
holds 2,500 steps, so 20,000 steps a day reaches level 99 in 5 years.
- Steps walked with the app closed count too; their XP lands the next time the app talks to the
server. Steps from before you had a survivor don’t.
- Its guide says how many steps the next level is, not how long. The XP is worked out on all
your steps at once, so lots of small syncs pay exactly what one big one would.
- It makes you hit faster: +0.5% attack speed for every level past the first —
see Zombies. The guide’s What it does shows yours.
The Skills sheet
Each skill you know is one bar: your level on its badge, the fill showing how close the next
level is, and what that level brings waiting at its far end (just the number when that level
brings nothing new). A skill still being built stands dimmed on a shelf below. Tap a bar for its
guide: XP banked, about how much play the next level takes, how to train it (its book among the
ways), what its level does outside its own job (Agility’s attack speed), and every level that
unlocks something — ticked when you have it.
Code: skills.ts, xp-curve.ts, walking.ts, skill-guide.ts, SkillsSheet.svelte, SkillDetailSheet.svelte
In short: A book pays its skill XP. Reading one takes 6–10 hours of real time
and keeps going with the app closed. Books teach nothing new: you know every skill from day one.
- One book at a time. The read takes 8 hours on average, anywhere from
6 to 10, and you win XP worth hours of playing that skill
(table below).
- Stop reading and the book goes back in your bag — progress is gone. The hours stay
the same next time: they’re rolled once and kept until a read finishes, so you can’t restart until
you get a short one.
- Pass out mid-read and the book is stolen with everything else.
Books come from looting — see the Looting table for which ones and how rare.
Code: config/survival/reading.ts, shared/survival/reading.ts, ReadingBanner.svelte
In short: Every one of the dead you put down adds to your Tally: a shambler 1, a runner
2, a brute 3. The Tally buys perk points; spend one to open a perk or
lift it a level. Perks stay when you pass out. The backpack doesn’t.
How it works
- Open Perks from the backpack button’s hold menu.
- The Tally never goes down: perk points are bought off it as it grows, dearer as you go (the
table below). A pass-out adds nothing to it.
- Perks grow on one tree: a perk opens once the one it grows from has its first level. Hidden
pocket, Kin’s kit, Mend and Daily round are open from the start.
- Tap a perk to pick it. A picked perk you can take shows the one button that spends
the point, and there’s no taking it back.
- Pass out and the robbers take everything your Hidden pocket doesn’t keep. Then you see the
life you just lived: how long it lasted, your steps, the dead you put down, what you found and
made, and what ran out.
For devs: the rules are code defaults in config/survival/perks.ts.
The engine pays the Tally in the fight and counts each life from its own events; a pass-out
closes the life into the notice and a survivor_lives row.
Code: perks.ts, life.ts, pass-out-keep.ts, PerksSheet.svelte, LifeRecap.svelte
In short: Tap an item, then tap what to use it on. Every pair is one recipe. Some need a skill level, some
can fail, and every success pays XP.
- You can use an item on another item, on your fire, or on water near you.
- Either order in a recipe table means you can tap either one first.
- A recipe’s skill level is the level that unlocks it. Below it, the game says no and tells you
why.
- Failing gets rarer every level and never hits zero — cooking can always burn, a
fire can always fail to catch.
- A success pays one action of that skill’s XP. A failure pays nothing.
- What you make lands in the slot the used item left, so a container stays where it was.
Anything with no room is lost.
For devs: the build fails if two recipes share a pair, an item has no way to
get it, or a skill can’t be trained from level 1 (progression.test.ts). Add a
recipe in the recipes-*.ts file for what it makes.
Code: interactions.ts, interact.ts, recipes-*.ts, progression.test.ts
In short: Light a fire, then cook on it. A fire burns 3 min; feeding it wood adds more, up to
15 min ahead.
Fire
- You have one fire. While it burns it sits as a chip in the backpack with its time left — pick
an item, then tap the chip to use it on the fire.
- Matches on wood lights it. A failed strike wastes the match and the wood.
- Lighting it again while it burns never cuts its time short.
- Later you can feed it wood to keep it going. The bow drill lights it with no match at all, but
it’s retired: only one you already carry still works.
- It goes out when its time runs out, or when you pass out.
Cooking
- Raw meat and fish go on the fire. A failed cook leaves something burnt (junk).
- The fire is one you light yourself, so a cook needs Firemaking too.
- Bigger catch, easier to burn: a pike needs a better cook than a perch.
- Stew takes two steps: raw rat meat or perch into a pot of clean water, then the
pot on the fire. It’s a meal and a drink in one and gives the pot back. A burnt stew leaves only
the pot.
Code: recipes-fire.ts, recipes-food.ts, world.ts (STATIONS), FireTarget.svelte
In short: Water from a lake, river or the sea is dirty. Boil it in a pot, drop in a tablet, or pour it
through a filter. No skill needed, and nothing can fail.
- Fill up: tap water inside your action circle while you carry an empty bucket or
bottle. The sheet that opens fills one container per tap.
- Bucket route: pour the bucket into a cooking pot, boil the pot on your fire,
drink the pot. The pot is yours to make: beat it out of scrap metal (see Crafting).
- Bottle route: drop in a purification tablet (used up) or pour it through a water
filter (kept). No fire needed.
Drinking gives the container back, so the loop never ends. The first bottle you refill is
usually a bottled water you found and drank.
Code: recipes-water.ts, items-water.ts
In short: Make gear out of loot. Crafting never fails — if you know how, you make it.
- Its materials (twine, scrap metal, the whetstone, rags) only show up in loot once you know
Crafting — same rule that hides a hatchet from someone who can’t use one.
- Every recipe pays one action of Crafting XP.
- Good tools are made, not found. Loot only ever hands you the rusty hatchet.
Rig more twine onto an improvised rod for a fishing rod, beat scrap metal
round with a hatchet’s back for a cooking pot, and hone a rusty hatchet on a
whetstone for a sharp hatchet (levels in the table).
- Crafting feeds the other skills: both of Fishing’s rods, the pot that boils water and stew,
Woodcutting’s sharp hatchet, and the filter that cleans bottles forever.
- The pocket knife, bow drill, felling axe, fire axe and carbon rod are retired: nothing drops
or makes them, and anyone who still carries one can keep using it.
- Weapons come off one log. Any hatchet or axe on wood splits it into two half-logs (the tool is
kept); rags round a half-log make a wooden club; a hatchet on a half-log
shaves it to a wooden spear (Crafting 5 — an axe splits but doesn’t whittle);
rags round the spear’s grip make a wrapped spear that swings a touch faster
(Crafting 15). What each does to whom is in Zombies.
- A thing fits inside what it’s made from: the club is the half-log’s thick end, the spear its
shaved length, so both come out of a split log and neither out of the other. An upgrade is a
new item, never a number on the old one.
Code: recipes-crafting.ts, items-gear.ts
In short: Woodcutting, fishing and scavenging run on a timer you pick (10 min to 8 h)
and keep going with the app closed. Short runs give way more per hour.
- Tap trees, water or a building for its button. Tap the time on its right end for another
length (10 min, 30 min, 1 h, 2 h, 4 h, 8 h, round and round); hold the button to start (a scavenge deals its cards
on a tap instead).
- Close the app or walk away — it keeps going where you started it.
- Phone in your pocket? On Android the step notification shows the job and the time it ends, and
what’s new in your backpack. When its time’s up your phone pings you (“Done scavenging”).
- One job at a time: a cut, a fishing trip or a scavenge, never two.
- What a run gives is locked in when you start, in half crates (half logs, half fish). The whole
ones land evenly through the run, the last at the end; a half is a coin flip.
Why short runs win (level 1, first tool, everything else ×1)
How a job ends
- Time’s up.
- Your backpack has no room for the next log or fish.
- You stop it: tap its marker on the map, then tap Stop? — you keep what it made.
- You pass out — what it made is stolen with the rest.
Each log or fish pays one action of XP. While a job runs, a marker stands over where it’s
happening — the building, or the trees or water you tapped — with the job at work, a rim that
fills up and the time left, and the same dial sits under your avatar. Tap that for the job’s
button (a scavenge opens the building’s card): it keeps counting down, the next find rummages,
and each find pops on it. Hold it 2 seconds to stop it there; you keep what it made. The phone
refreshes the moment it ends, so the next one can start at once.
For devs: no heartbeat. The server lands the finds that fell due whenever time passes
— on the next request; while a job’s button is open, the phone asks as each one falls due. Woodcutting
adds two factors for the trees, scavenging one for the building; see their own pages.
Code: activities.ts, activity.ts, activity-odds.ts, ActivitySheet.svelte, ActivityButton.svelte, ActivityChip.svelte, RunningActivitySheet.svelte, ActivityMarker.svelte, survival-notification.ts
In short: You need the skill, a hatchet, a free slot and trees in your action circle. Better hatchet,
thicker woods and more trees mean more logs.
Hatchets — you swing the best one your level allows
Tree land — the kind that covers most of your circle counts
Stand (how many trees)
0.5 + 0.2 × log2(1 + trees), never more than ×1.3: ×0.7 for one tree, ×1.02
at five,
×1.3 at fifteen.
Trees are counted from the map’s land, not the drawn trees: how much of your circle each land
covers, times how thickly it’s wooded — the same odds the 3D map plants its trees with.
Code: config/survival/woodcutting.ts, shared/survival/woodcutting.ts, tree-stand.ts
In short: You need the skill, a rod, a free slot and water in your action circle. Better rod, better
level, bigger fish.
Rods — you use the best one your level allows
- Each catch is drawn by weight from the fish your level reaches.
- A level you reach mid-trip counts from the next cast.
- Fish land in the backpack raw — cook them (see Fire & cooking).
- Every rod is crafted, so an angler needs Crafting too: the improvised rod first, then the
fishing rod rigged from it (table above). The carbon rod is retired.
Code: fishing.ts, activities.ts
In short: Looting that stands still. Tap a building inside your action circle and search it for 10 min
to 8 h; what turns up leans to what the place is.
- The building is the button: its card has one Scavenge button showing the crates
a run gives. Tap the time on its right end for another length; it opens on the length you used last.
No tool needed, and the weather doesn’t reach indoors.
- Tap Scavenge and your cards fly out of the building. The middle one is always the
approach card: bare hands, with arrows that set how loud you go. Beside it sit up to two cards for
things in your bag that help. Tap a card, or flick it up toward the building, to start; the thing
on it is used up. Nothing starts until a card is played, and a tap on the map puts the hand away.
- Louder finds more and wakes more. A loud approach draws extra dead to the building’s
wall, once a building a day, and they are waiting there when you come back. The card you played
stays on the roof as a small chip while the run goes.
- Any building works. A home gives the plain loot table; a shop, a library, a pharmacy lean.
- Every find comes off the Looting table, so you still only find what you can name — a library
full of books is no use before… well, it’s a library.
- Each find pops on the button, then out of the roof into your backpack, and pays Looting XP
like a walk’s.
- It runs like any timed job: what it gives is locked in at the start, and it ends when time’s
up, the backpack is full, you stop it (tap the marker on the roof, then Stop?) or you pass
out. One job at a time.
- Out of reach? The card says how many meters short you are, and nothing is sent.
The approach card's stance
The things a card can spend (one per run)
Size — bigger floors, more crates
What each kind of place leans to (× on the loot table's weights; anything unlisted ×1)
Why short runs win (Looting 1, size ×1), in crates
For devs: a place’s kind comes from its OpenStreetMap building type and the types
of the shops inside it (never the raw shop kind). The server reads the building and checks your reach
from its own last fix; the phone only names the building.
Code: scavenge.ts, scavenge-cards.ts, scavenge.service.ts, scavenge-crowd.ts, ScavengePanel.svelte, ScavengeHand.svelte, ActivityButton.svelte, activities.ts
In short: Anything you can act on sits inside the ring around your marker (50 m). Tap the thing itself;
there are no action buttons. The real weather where you stand changes your odds.
Tap the world
- It has to reach into your circle. Too far away and it tells you how many meters short you are.
- Missing something (the skill, a tool, a free slot)? It says what instead.
- Water is any water on the map: sea, lake, river, even a thin stream. Only the bit
you tapped lights up.
- A tree is one of the 3D trees on tree land: forest, woods, park, orchard,
garden and so on (see Woodcutting). Tap the tree itself; the grass around it does
nothing. Zoomed far out the trees are hidden, so zoom in to cut.
- The phone reads all this from the map it already has loaded, so a tap costs nothing.
Weather
The real sky over you, read by the server — never by your phone. Very strong wind turns any sky
into a storm. If the weather can’t be read, nothing changes. It’s locked in when a job starts.
Code: world.ts, land-tap.ts, tree-tap.ts, world-targets.ts, water-spot.ts, WaterSheet.svelte, survival-weather.ts
In short: One pure engine runs on both the server and the phone. Only the server saves, and it rolls every
die.
- Engine —
src/lib/shared/survival/. A pure function of (state,
command, time, dice): no database, no clock, no Math.random. - Data —
src/lib/shared/config/survival/. Every item, recipe, loot
entry, tool, fish and number. Change the game here. - Server —
survival.service.ts locks the survivor’s row, runs the engine,
saves, then fires hooks. Dice are crypto-random. - Time catches up on every call. Bars, books, fires and jobs settle on the next request;
nothing ticks in the background. A refused command still saves the time that passed.
- API —
GET /api/survival (state now), POST /api/survival (one command: move, drop, act, use, stopReading, startActivity, stopActivity, ackPassOut), GET /api/survival/building, GET /api/survival/weather. A refusal is
a 200 with a rejected code, because time still passed. - Looting is server-only — the walk tick calls it (
lootBatch). - Storage —
survivors and survivor_skills. Every save
bumps a version; the phone keeps the newest reply, whatever order they land in. - Events & hooks — every change is a
SurvivalEvent. Server: onSurvivalEvent(type, fn) runs after commit. Phone: survival.onEvents(fn). Plug new mechanics in there, or add an effect type in effects.ts. - Phone —
survival-store.svelte.ts holds the state and burns the bars
down between replies.
Tests that guard the design
progression.test.ts — no dead ends: every item has a source, every skill trains from
1. engine.test.ts, recipes.test.ts, fishing.test.ts and friends
next to the engine. - Anything touching loot, vitals or scouting also needs the testing ground (
tests/integration/ground, npm run ground). - The tables on this page have their own tests in
src/routes/manual/lib/.
In short: GoSurvive started as a copy of WalkStreet, a walking property-tycoon game. Most of it is
switched off or hidden — not deleted yet.
- Switched off: trips, freight, franchise, briefcases, perks, tenantdex, battles, partnerships, intel, architect studio. Their APIs answer 503, their jobs don’t run, their buttons are gone. Switch:
legacy-features.ts. - Hidden but still running on the server: cash, income, building ownership,
tenants, districts, missions, challenges, boosts, leaderboards and more. Switch:
legacy-hud.ts. - Scouting still pays cash in the background. Nobody sees it.
- Kept on purpose: the 3D map and real buildings, GPS walking and steps, accounts,
chat, the admin panel.
Strip as you build. Delete an old system only when its GoSurvive replacement lands.
The old systems are tangled together (the building core imports the economy), so speculative deletes
break things.
Heads-up: GAME_DESIGN.md below its Survival section still describes the old game.
Git history here starts on 2026-10-17; the old game’s history lives in the walkstreet repo.
Code: legacy-features.ts, legacy-hud.ts, GAME_DESIGN.md § Legacy Features
In short: Not built yet: special buildings on the map, the planning map, and tower defence beyond its
first turret. Here’s what’s decided so far.
- Zombies are in (see Zombies): opening the app among buildings is
what brings them, so when and where you open it is a choice. Next for them: weapons
that Fighting levels unlock, night rules, hordes, and zombie zones on the planning map.
- Special buildings have their own loot now: a scavenge leans to what the place
is (see Scavenging). Still to come: showing them on the map by type, and a
picked-clean restock. Homes keep looting in the background and never show loot markers.
- Two views: a close 3D street view that opens when an attack starts, and a 2D map
for planning a trip (special buildings, zombie zones, your route).
- Tower defence has begun (see Tower defence): a turret on the world’s
grid. More defences come onto the same grid.
Design rules for anything new: every new level must unlock something to find,
use or make — never just a bigger number. Gate new loot on the skill that uses it. No shops,
no skill trees that only multiply.
Open work and its priority live in docs/BACKLOG.md.
Code: docs/BACKLOG.md, GAME_DESIGN.md § Survival