Everworld
A generative 3D RPG with no main quest and no quest library — kingdoms, families, and feuds are simulated daily, and every quest is derived from something that actually happened.
Overview
Everworld generates a fantasy world from a seed — kingdoms with their own name phonology and gods, settlements with laid-out buildings, hundreds of named people with families and grudges, and a century of history — then simulates it daily whether or not you are playing. There is no chosen one and no main quest. It runs in a browser tab with no backend and no model calls: everything is simulation.
Problem
Open worlds normally mean servers and gigabytes of hand-authored content, and their side quests come from a library of templates with the names swapped. The experiment here: how much genuine world can a seed, a generator, and a simulation loop produce — and can quests be derived from simulation events rather than written in advance?
Seed to consequence
Seed
Worldgen
History
Daily sim
Events
Quests
Quests are a projection of the event log, so they reference real people and real places. If the giver dies before you return, the quest dies with them.
What one seed produces
- 3–7 kingdoms with distinct cultures — name phonology, palettes, god names, architecture — plus dynasties, heirs, and sibling rivalries
- 16+ settlements with laid-out buildings: keeps, temples, named inns, smithies, alchemists, manors, market stalls
- 300–500 named NPCs with families, homes, workplaces, wealth, personalities, ambitions, secrets, and an opinion graph over each other
- Religions that spawn heresies, guilds that suffer coups, bandit bands with named chiefs and real camps
- A century of written history — foundings, successions, wars, plagues — seeded into present-day relations
Systems that feed each other
The interesting behaviour is not in any single system; it is in the loops between them.
- Ecology: wolves eat deer, starving wolves raid farms, culling the wolves lets deer strip the crops
- Economy: bandit raids raise a trade route's danger, trade suspends, settlement prosperity falls — clear the camp and the power vacuum can breed a new band
- Politics: rulers die, successions are contested, dynasties collapse into anarchy, unrest breeds rebellion
- Consequence: killing a named NPC is permanent — families mourn, businesses pass to heirs, factions elect replacements, and the bereaved may come for you on the road
- Truth: quest givers can lie, so a
claimand atruthare stored separately and the turn-in asks what you want to do about the difference
Technical notes
Array identity is load-bearing — never sort a world array in place
Entity references are indices into the world arrays. A single in-place sort silently reassigns every relationship in the world: children acquire different parents, feuds re-target, quests point at strangers. This invariant is written into the repository documentation because it is invisible in the code that would violate it.
Deterministic generation from a seed, with no backend
The world is a pure function of its seed, so content variety comes from generators rather than asset volume. The deploy is static files and saves live in localStorage — hosting cost is zero by construction.
Headless browser scripts as the verification suite
A world simulation has no natural unit boundary, so verification is behavioural: one script boots the game, generates a world, checks the panels and dialogue, and runs 30 simulated days; another exercises terrain streaming, wildlife spawning, a kill and its ecological consequence, and loot.
Unit tests over the simulation internals, which would pin implementation details of systems that are meant to be rewritten as the design changes.
Results
- ~8,000
- 0
- 2
- Live
Lesson
Determinism is the cheapest content pipeline there is. And an invariant that cannot be seen at the site of its violation — never sort this array — belongs in writing, not in memory.