Isekai Mugen Soul Online Devlog #6: A Living Village, a World That Re-Plants Itself
The settlement milestone and everything after it: peasants who eat, marry and have children, gossip that has to travel, a dungeon that notices being ignored, factions, the apocalypse, offline catch-up, succession — and a world that is procedurally re-seeded every time it survives an ending.
Welcome to Devlog #6 of Isekai Mugen Soul - Online (異世界無限ソウルズ)!
Devlog #5 ended with a promise: the world had monsters worth fighting and a mechanic worth naming, and what it did not have was people. Eight days later it does. There is a village that eats, works, marries, has children, resents you, remembers what you did, mans a ballista when raiders come — and, once every ten game days, watches the sky fall.
This entry covers the settlement milestone and the ones after it: modular building, land, relationships, gossip, the dungeon that notices being ignored, factions, the world's ending, absences, succession, and — as of this round — a world that is procedurally re-seeded every time it survives an ending.
🧱 1. The homestead became a kit
Milestone 5's building system was a fixed list of buildings: a cabin, a well, a chest. It is now a modular kit on a 2 m snap grid — foundations, floor boards, walls, doorways, doors that actually swing, windows, fences, beds you sleep in, a stove you cook at, and storeys, so a second floor stands on the walls below and a third on those.
Two rules make it a game rather than a toy:
Everything has structure points and can be broken. A wall is 55 hp; four landed swings at 14 damage take it down, and the piece that falls reports who broke it. That is what makes a base a thing to defend rather than a thing to own.
Ownership is a claim, checked every time. Every verb — open the door, sleep in the bed, cook, demolish — re-reads the piece and asks whether this character may touch it. A door is not "locked" by a flag somewhere; it is locked because the piece says whose it is, every time anybody asks.
🏡 2. A village that lives without you
The settlement is eight peasants with needs, jobs, and a weekly wage. They get hungry (satiety falls), tired (energy falls), they take duties — farming, hauling, standing a watch — and they give up on a post when hunger gets bad enough, which is a rule that turned out to matter more than the numbers suggested: a village that will starve rather than leave a wall is a village that dies politely.
They also marry, and they have children. A child inherits appearance from both parents
through the same 15-channel DNA the Unique NPCs use, and traits are inherited with the
source design's exclusivity rule enforced — Determined and Indecisive can never
coexist, and the persistence layer re-validates every villager it loads and drops the ones
that fail. One bad record cannot leak into a world where four other systems trust its
traits unexamined.
The living village also works the land you own: assign a villager to a field and crops come in, assign them to a post and they stand it. And when raiders are at the gate they man the ballistas — a claim, re-verified on every read, so a ballista whose gunner has walked away does not keep firing.
💬 3. Relationships, and news that has to travel
Affinity is a number that moves through deeds, not through a dialogue tree: a greeting is worth 0.5, a real conversation 1.5, a gift 4, an errand 12, standing beside somebody while something attacks them 6. Cross the second rung and a villager becomes a friend; cross higher and you are betrothed, then married — and marriage is not cosmetic, it is the gate the succession system in §9 stands on.
Prices move with it. Reputation bands shift merchant prices by 8 % a step, and the discount is applied where the money changes hands, not in a panel that could disagree with the till.
Underneath all of it is gossip, which is the most "alive" system in the game. An event is filed with a position; anybody within 10 m of it becomes a witness and holds a perfect account. Everybody else can only learn it by being told — by another villager who happens to walk close enough, or by the player who was there. A retelling costs fidelity and adds a hop, and a number in a story drifts upward as it travels, because "one puglin" told three times is a pack of them.
A villager asked what they have heard answers with a sentence, not a record:
I heard it straight: Testpilot raised a wall solid at near -4, -3, 13 minute(s) ago.
And this round found a real bug in that recital — see §8.
⚔️ 4. The dungeon notices being ignored
Every dungeon carries a single number: the Maintenance Index. It rises 0.08 a second while nobody deals with the place — a scouting party at seven minutes, a raiding party at fourteen, a horde at twenty-one — and killing things at the mouth brings it back down.
A wave musters on a rising edge, in a ring at the dungeon mouth, and is ordered to the nearest wall a creature can actually damage. It walks there. It then breaks things, including your things, and killing its soldiers takes the bar down further, so defending a settlement is a real way to keep the dungeon quiet.
The whole thing is operator-observable (tools/admin-dungeon.mjs), because a mechanic
nobody can watch is a mechanic nobody can trust.
🏛️ 5. Factions, and deeds as events
Three factions — The Clearing, the Adventurer's Guild, the Merchant's Association — each with a standing ladder from Hostile to Exalted and a colour. The design rule that kept this honest: a deed is an event, not a computation. Killing something inside the village's reach credits the village by exactly the table's number for that ground; the same kill outside it credits nothing. Selling wood moves the merchants by the deed's value, buying moves them by less, and the till charges the price the panel advertises.
🌑 6. The world has an ending, and it is made of parts that already existed
Once per ten game days — four real hours — an ending arrives: a celestial collision, a demonic breach, or the Void Dragon. There are two warning phases (two game days out, one game day out), a twelve-game-hour arrival window, and a two-game-day aftermath.
The design constraint I am proudest of: the ending introduces no new systems. The collision forces the weather (a blizzard already halts outdoor crops), the breach musters the dungeon's largest wave, and the dragon is one creature from the ordinary mob table with a spawn weight of zero. All three arrive through code that was already there and already tested, which is why the arrival can be answered — kill the dragon, break the wave — and why the aftermath withdraws whatever it brought without touching a single thing a player built.
🌍 7. A world planted per cycle
This round's feature, and the one that makes the spec's phrase "a freshly seeded parallel world" mean something.
When the world survives an ending, it is re-planted: a new forest, on a new seed, on the far side of the catastrophe. The rule is one sentence — a new world may differ anywhere except where somebody has built or claimed — and it is enforced with keep-clear discs over every land parcel and every standing structure, built from the two lists both the server and the client already have, so there is exactly one implementation of "what counts as owned".
The mechanism is four lines of arithmetic and about a day of thinking:
forestSeedForCycle(base, cycle) = (base + cycle × 2654435761) >>> 0
A Knuth multiplicative step, chosen over a random roll for the reason everything in this project is seeded: the client regenerates an identical world from one integer on the wire, so a roll that lived only on the server would be a client colliding against trees nobody else can see.
The save holds the base seed and the wire carries the derived one. That asymmetry is the whole bug-avoidance story in §8.
🐛 8. Four bugs worth naming
The seed that re-derived from its own output
The obvious implementation of a per-cycle world derives the seed and saves it. Then the next boot derives from its own output, and the world is new after every restart: boot one steps the base once, boot two steps the already-stepped value again. A forest that is supposed to change once per apocalypse would change every time the container recycled — and it is invisible for exactly one restart, which is the worst possible length for a bug.
It is the same shape as the offline Index bug from three rounds earlier (a value written
back into the save and then read as its own input), which is why it was recognised in
minutes rather than hours this time. The fix returns {base, seed}, persists the base,
replicates the seed, and the shared tests assert the invariant and assert that the naive
version moves the world — so the test cannot be satisfied by a room that ignores its seed.
The rule that deleted trees out of a world that already existed
The keep-clear rule protects a new world. Applied unconditionally it also deleted obstacles out of the world people were already living in — trees that had been standing before the claim was — and it did so only on the server. The client regenerates the world from the seed, kept drawing them, and the result was trees you could walk through and could not chop, right beside the buildings they had been kept away from.
A live check found it by walking to the nearest tree to the settlement and being told "There is no tree within reach" about a tree it was standing next to. The save now records the seed the world is made of, and a boot that derives the same seed grows the world unchanged. The mechanism also had to travel: a re-planted world is the seed minus those circles, so the keep list rides along with it, quantised to a tenth of a metre.
The villager with five better stories
The recital is capped at five lines, ordered by reliability — which is right for a person reciting what they know, and had one failure: a villager holding five first-hand accounts never mentions what a player told them a minute ago. The player's telling is worth 0.82 and everything else outranks it, so the story is not in the answer. From the player's side that is indistinguishable from the telling having failed: you walk up, you say what you saw, you ask what they have heard, and your story is not there.
The fix is one sentence and no new tuning number: the recital is the four most reliable lines plus whatever they heard most recently. The test that pins it was checked against the old ordering to make sure it fails there — a test written for a fix that passes without it is a test of nothing.
The harness that blamed the game four times
Four live-check failures in one sweep were the harness, each reporting the wrong thing:
- Distance now is not absence then. "A villager 14 m away has not heard about it" picked the nearest villager past 14 m and failed with "Wren at 14.9 m, holding 1 version(s)" — because Wren had been standing inside the 10 m witness radius when the wall went up and had wandered off since. The server was right; the check was asserting a precondition it had never established.
- A topic is a place. A rumour's topic is where it happened, so a wall raised where a wall was raised an hour ago is the same story to a village that still remembers it.
- The story that travelled is the one the server said it told. The check assumed the player had exactly one thing to tell; after a few live runs the player's own ledger holds several deeds and the server hands over a different one.
- A tool has to tidy up after its own past. Two runs died mid-check and left walls standing in the commons; every later run's cleanup check then reported "1 piece(s) left" about a piece it had never built.
Each of those now reports the specific precondition it could not meet — "the village already remembers an event at this spot", "no villager far enough away could prove news has to travel" — while every other way the same check can fail is still a failure.
♻️ 9. Absences, and what a soul keeps
Offline catch-up. A character who logs off is not deleted from the world; the world clock advances, the villagers get hungrier, crops grow, and the dungeon's Index rises — up to a ceiling, because an absence should not hand somebody an unwinnable raid they never had a chance to answer. The number is capped at 16 (below the first threshold of 35) and the welcome-back report says what the sky did while they were gone.
Succession. This is the endgame, and it is gated on a person: an heir is a villager of generation 2 or later — born in this world, not one of its founders — who likes you enough (net affinity 20) to take up your life. What crosses: the estate, the line's traits, three quarters of the purse, and every perk the soul has bought with points earned from the level you reached, what you raised, what you held, who you befriended and how many endings you survived. What does not cross: the level, which is always 1, because without that succession is a power loop — marry into the village, hand the life over, arrive at level 99 in a fresh body.
The crossing is irreversible in three places, and the order is the feature: everything is re-checked, the perks are bought, the new body is created, and only then does the estate move and the old life end. A test fails creation deliberately and asserts the estate has not moved.
🧪 10. Verification
Everything above is guarded twice: unit tests for the rules, and headless tools that speak the real WebSocket protocol against the live server for the wiring.
- 493 shared tests and 426 server tests — rules, arithmetic, ordering, persistence.
- 13 live tools, ~283 checks, all green against the deployed build: modular building (19), storeys (18), crops (29), land (32), militia (25), gossip (20), relationships (24), companions (21), dungeons (24), factions (17), the apocalypse (23), offline catch-up (20), succession (11).
The live tools are deliberately not a browser test: they log in, walk with real input frames, place real pieces, break them, and read the answers off the wire. When one of them fails, the rule for this project is that the failure has to say which precondition it could not meet — because four of this round's failures were the harness, and a check that cannot say why it failed gets re-diagnosed from scratch every single time.
🔮 What's Next on the Roadmap
- Milestone 7 — production hardening. Position quantisation (required before any 100-player load test), glTF-Transform decimation and KTX2 textures, Vertex Animation Textures for mob swarms, and memory profiling on iOS Safari and Android Chrome. The 100-player test itself is waiting on a bigger host.
- The aesthetic matrix — the other half of procedural seeding. A re-seeded world differs in where things are today; making it differ in what it looks like needs a second settlement and a per-world look registry.
- Couriered mail and town diffusion over the weighted road graph, which also need that second settlement.
- The real assets. The placeholder list is public and maintained — see the asset list — and 3D models are the one thing this project cannot generate for itself.
Progress: 493 shared tests, 426 server tests and 283 live protocol checks all green, on a build that keeps a village of eight alive, a dungeon that notices being ignored, and a world that re-plants itself every time it survives an ending. The game is live and playable at isekai.garciamoonshine.com.