What works
55 of 294 checks in 65 tracked features are proven. Client build 25810808. Updated . Each check is a thing that must work as on retail; it is proven only when it was seen to work with the real client or with bots. No percent: a share of retail cannot be measured.
- Live
- Seen working with the real game client.
- Bots
- Seen working with test bots.
- Tests
- Automated tests pass.
- Code
- Code exists, not yet proven.
- None
- Not done yet.
Foundation
16 of 58
Project setup and checks (M0)
1/1
Live
- Live
Build, lint, tests, licence policy, Docker infrastructure.
Game data pipeline (M1, M1b)
0/2
Tests
- Tests
All datasheets, text and 41 world files from your own install.
- Tests
The committed player attack table is the one of the paks again (it lacked the fields added since: aim, dodge cancel and block windows, root motion; refreshed 2026-11-01).
Collision, roads, water
2/9
Live
- Live
Tutorial and open world collision files.
- Live
Bodies stand on decks, stairs, roofs.
- Tests
Since 2026-11-10 (tests only) also the trees and stones of each region's distribution file (2,728,908 rows) and the engine's static colliders: 730,257 more bodies in the open world (2,146,861 now), 882 more in the tutorial.
- Tests
Closed meshes count as solid for mobs.
- Tests
Since 2026-11-10 (tests only) the collision tool also reads each region's slice data file (
region.slicedata): the meshes and the collision flag of each slice and variant that the region's trees, stones and plants place. - Tests
361,192 rows whose variant no variation table holds now stand with their own mesh (303,313 of them have no collision, such as bushes); 284 rows keep an unknown variant.
- None
Temple door wall opens by a quest trigger: not done. Retail player feet on our ground at La Roussette: 83 % of samples.
- None
Mobs sunk in the ground or stuck in walls (Janszoon, the cave) need a live check.
- None
284 tree and stone rows name a variant that no variation table holds: they stand as their plain slice (the region's slice data file is not read yet).
Capture decoders
0/2
Tests
- Tests
99.993% of 25.3 million bundles read.
- None
Raid group data, a few classes.
Client patch
1/1
Live
- Live
Cert bypass, Steam offline login.
Login server and launcher (M2)
3/8
Live
- Live
Saved servers in the launcher (2026-11-04; seen on Linux in both themes): a list of servers, each with its own name and login, and a click connects.
- Live
Password or Discord login (live on Linux: Discord login with the server check and allow list, a linked password account; saves the Discord username and email), Linux Proton start, two worlds.
- Live
Windows: a second player logged in and played from Windows on the game server (2026-11-09) with the Windows launcher and the patch script of the Windows test package of 2026-11-08 and its how-to.
- Tests
Site news in the launcher (tests only): the 5 newest posts of the site's launcher feed beside Play, with pictures and a cache. It asks once at each start, when it first connects; no timer.
- None
The newer launcher (saved servers, site news) is not tested on Windows; the Windows player used the package of 2026-11-08.
- None
News hosts rerouted (live on Linux); region ping rerouted (live on Linux); shop services rerouted (live on Linux); privacy settings service answered as retail (tests only).
- None
Windows not live-checked.
- Code
Other server ports (public_https_port, public_ping_port) built, tests only.
Gateway and registration (M3)
1/1
Live
- Live
DTLS and registration with the real client.
Many sims and handoff (M5)
3/7
Bots
- Bots
1,000 bots cross cell borders.
- Bots
With 1,100 bots on 4 sims (2026-11-01), the busiest sim (about 365 players, 5,500 to 6,800 awake mobs) went from about 33 to 36 ms a tick (the limit is 33) to 20.5 to 23 ms, with 8 tick threads (
LIVE_STACK_TICK_THREADS=8; the default is 4), a kept mob reach answer and a fast hash for the mob store. - Bots
The metric
sim_tick_part_seconds{part}times each part of a tick. - None
Real clients crossing cell borders: Unknown.
- None
In the last run 9.6 % of the busiest sim's ticks were still over 33 ms (1 late tick in 120 s).
- None
The mob card part runs on one thread (about 6 ms at 6,000 awake mobs).
- None
A build or a screen recorder on the same PC slows the sims.
Database saves
0/10
Tests
- Tests
Accounts, characters, items, progression, quests, notifications, recipe cooldowns, faction.
- Tests
Food and potion buffs stay over a log out and a sim border (migration 0026; on retail a food buff still had 303.5 s left after a login). Their timer pauses while the player is away unless the data says it keeps running (Inferred), and their heals go on.
- Tests
Added 2026-11-01: a placed camp's rotation and blueprint (0027), the mount summon cooldown (0028), potion and food cooldowns (0029, Inferred: no retail login shows one), and a trading post, trade or shop job now saves its players right away instead of in the next 10 s save. Each save is round-trip tested on a real database; no real client has logged out and back in to check them.
- Tests
Added 2026-11-04: the servers stop cleanly on SIGTERM (before, a restart skipped the last save round), a resumed player keeps its achievements, and the new sim of a handoff saves the items and quests it took over.
- Tests
Added 2026-11-10 (world migration 0034): health, mana and stamina at the save, so a player comes back as hurt as it left and a player saved dead comes back dead and respawns (retail: a recorded run that ended at health 0 started its next part at health 0 and respawned 32 s later); running ability cooldowns; the PvP flag wish (on, or on its way on: it comes back as on its way on); puzzle-stone turns; the bait on the fishing pole; and the depleted gather nodes of each level (world state: a sim restart no longer grows every node back early).
- Tests
All are saved with the progression in one transaction, and the nodes in their own table.
- None
Not seen with a real client yet: log out hurt, log back in, and check health, cooldowns and nodes.
- None
Not saved, with the reason: loot bags (world objects that live at most 5 minutes; whether retail keeps them over a restart is Unknown), short effects from hits and abilities (their source is gone after a log out; retail rule Unknown), war sign-ups (no war is scheduled, so none is ever kept).
- None
Mana and stamina are kept as health is (Inferred: the same vitals state).
- Tests
The world clock is saved (world migration 0035): day and night go on over a restart, and all sims share it.
Admin tools
0/8
Tests
- Tests
Live panel, studio, GM commands, drop simulator, script editor; a new look (2026-11-04, local only).
- Tests
GM chat commands in the game (
!help). - Tests
nw-testclient chatsays a GM line and checks the answer. - Tests
The site can run behind a relay on another machine (tests only).
- None
Pages for systems that are not done.
- Code
Relay: public, Discord login works live; live page stream not checked.
- None
GM chat commands: not checked live.
- None
In the 2026-10-30 camp test the client sent no chat line at all (cause: likely the chat probation flag, sent since c3c84794).
Server status page
5/9
Bots
- Bots
New
status-reporter(config/status-reporter.toml, 2026-11-08): one per world, on the game machine. - Bots
Every 15 s it reads the metrics pages of login, gateway, director, sims and social and sends the world status (parts up or down, players online, the slowest gateway worker's p99 round trip) to the website; every 5 minutes it sends the 422 boards of the game data with their top 100 rows (values from the global database, character and company names from the world database). Each report is signed (HMAC-SHA256 of the time and the body, with the world's secret).
- Bots
Data only goes out: the website never reads a database or a metrics page.
- Bots
content-tool leaderboardswrites the board table (English names and groups). - Bots
Seen with a local copy of the website and the live servers: Online, then Players online 3 with 3 test bots.
- Tests
Since 2026-11-09 (tests only): each board also has its sub-group, value kind, order, reset time and what it ranks; ranks are shared like in the game; group rows name their members; edge-http pulls the message of the day from the site and names the launcher's news feed (docs/website-integration.md).
- None
Not on the game VM or the public website yet.
- None
Not seen with the real game client: the p99 round trip stayed 0 ms with the test bots, which send no ping echo.
- None
No board had values yet, so no leaderboard row was seen on the website.
Player in the world
6 of 13
Create, select, enter world
1/3
Live
- Live
New character goes in game.
- Tests
The select screen shows the saved level (not live-checked).
- None
Small login burst gaps.
Own movement
2/4
Live
- Live
No more rubber banding (6d508fc).
- Live
Every movement packet and note reviewed (findings/2026-11-01-movement-review.md); the replay guard passes (retail run: body 0.32 m median, 0.25 m open world; 0 pulls of the patched client).
- Code
Attack windows: 1.27 m median after 1 s (attack root motion is built but not wired: it made the camera follow worse).
- None
Ship fights 0.94 m (to-do t1).
See other players
1/2
Live
- Live
Look, gear, health, facing, attacks.
- None
Full live test with many players: not done.
Swim, water, falls
1/2
Live
- Live
Swim strokes, water hold, fall damage.
- None
Some swim states not checked.
Ship deck
1/2
Live
- Live
Bodies stay on the deck, also in fights.
- None
Fight camera does not fit the model.
Combat
4 of 44
Melee hits
1/3
Live
- Live
Homing, lag help, retail damage messages.
- None
Boar hits miss sometimes (not seen in the 3 live logs of 2026-10-30: every swing with a mob within 2 m hit). Cause: Unknown.
- Tests
A melee hit from behind a mob is a crit (retail: 510 of 560 such hits), unless its row says
NoBackstab.
Target lock
1/2
Live
- Live
Lock, release and wheel cycling work live (110ccc0).
- None
Retail check of the nearest-in-circle pick; lock after a reconnect.
Dodge and stamina
0/4
Tests
- Tests
Match retail (review 2026-10-01).
- Tests
A dodge in an attack waits for its CanDodgeCancel window while the key is held (all 9 retail dodges fit).
- None
Live check.
- None
The buffer rule (key still held at the window) is Inferred.
Block
0/8
Tests
- Tests
Guard break, no regen while held, 2218 only in the tutorial, cross-sim hits.
- Tests
The block stays down in an attack's BlockDisabled window (data).
- Tests
From the data (2026-11-01): the 150 unblockable attacks (
Unblockable,CanBeBlocked: boss wipes, howls, spells) pass a block and take no stamina; mob empower buffs raise what a block takes (StaminaDamageModifier); a stun keeps the block down and the dodge back, a root only the dodge. - None
Live check.
- None
The rest of the retail 1 s rise delay, facing arc.
- None
Ranged block from the data only.
- None
Perk triggers on a block (
OnBlockedHitTaken,OnBlockBreak) run since 2026-11-09 (tests only). - None
Mobs do not block: the wire form of a hit a mob blocks and the mob stamina rule are Unknown.
Ranged and magic
0/8
Tests
- Tests
Staffs, gauntlets, bows, muskets cast along the aim.
- Tests
Weapon abilities (keys 1 to 3) run the game's ability lists: cooldowns as retail, mana spend and regen, flying spells, lasting areas, second spells, upgrades (unit tests and one test on the real table).
- None
No live check of abilities yet.
- Code
Every weapon ability a key starts, but 6, starts in a test on the real lists (all 15 weapons); fixed: a sim crash with two-list weapons, the tag-in-slot and client-setting tests, the mana compare, the transition clips, and (2026-11-04) each key press test's own
BackTicksand the real start and end of tag activities (Shooter's Stance and Stopping Power start now). - None
Open: the bow's Penetrating, Poison and Rain of Arrows shots, Meteor Shower and Ice Storm (their shot actions are reached by no parsed fragment transition; fragment options by tag: Unknown) and the Ice Pylon (needs its placed pylon).
- None
Part of the retail cooldown cut: Unknown.
- Tests
A shot that meets the top of a body is a head shot: crit damage and the
Headshotflag, neverCrit(retail: 346 head shots). - None
Where the head starts on each creature is Inferred (the top 15 % of its body).
Status effects
0/7
Tests
- Tests
Effects from game data.
- Tests
Checked against retail: the out-of-combat regen ends at full health, food heals 3 times as much while it runs, no heal number (4298) for the player's own heals.
- Tests
From the data (2026-11-01): weakness by damage type, stamina regen rate, food attributes (Constitution raises the max health), crit mods, heal mods (disease lowers heals, potions too), armor rend by damage category (and true damage takes no armor), health regen rate and no regen, stun, root and silence, the effects that end at death's door, effects added at death, first stacks.
- Code
Mob effects now go to the client in the mob's remote map (tests only; the full map, not retail's deltas).
- None
Live check of most effects.
- None
Not read: movement speed, tradeskill XP and luck columns.
- None
Passive ability triggers apply and remove effects since 2026-11-09 (tests only).
Death, respawn, revive
2/7
Live
- Live
Death screen, 38 respawn points, revive at 1 health.
- Live
A drunk potion sends no heal number (retail).
- Tests
Death's door from the data (120 s, 1 s delay, off in the PvP modes and to a killer 10 levels above), retail vitals blocks (tests only).
- Tests
The incapacitated state (670) is on at death's door and off at its end, as retail (2026-11-05, tests only).
- None
Live check of death's door.
- None
Status effects that skip it.
- None
Some respawn points.
PvP
0/5
Tests
- Tests
PvP hits roll like retail.
- Tests
Faction join and change (3161), saved, sent as retail; quests check RequiredFaction.
- Tests
Since 2026-11-05 the PvP flag waits while you are in a settlement, then counts down 30 s, as on retail.
- None
Flag rules, PvP zones, rewards: not checked.
- None
Faction boards, forts.
Mobs
3 of 32
Spawns and health
0/7
Tests
- Tests
99.3% of creature records explained.
- Tests
The open map leaves out the invasion and breach encounter spawns (no encounter runner there); each kept spawn keeps its own AI profile and patrol path (fixed 2026-10-31: they had shifted to other spawns).
- Code
Since 2026-11-05 the mob copies keep every retail state of the captures (align to terrain on 782 creatures, status effects on 755, boss phase, timelines) and the sim reads all of them (it dropped 258 before).
- Code
Respawn is now the retail 62 s (the data's 360 s rule is Unknown).
- None
A mob left alone plays its spawn again when a player comes back (radius = our wake radius; retail radius Unknown).
- None
Breaches and invasions need an encounter runner.
- None
A few odd records.
Mob AI
3/18
Live
- Live
1,075 behavior trees from Server.pak.
- Live
Thorpe fight fixed.
- Live
Mob paths stop at walls and climb at most 0.6 m a step.
- Tests
New 2026-11-10 (tests only): a mob moves and turns in its attack by the attack's
Homingclips (radius, angle, turn rate, move to distance and time), so it strikes from near the player and not from 3 to 4.5 m; a mob blocked by solids searches a way over the floors and walks it (also around two walls that no single turn passes); it does not walk into solids, deep water or a level designer's no-floor mark (each town gate has one); on its way home with no way found it walks its trail back; a world event comes back after its spawner's respawn time from the data (for example 300 s, 600 s, 1 to 3 hours). - Tests
Since 2026-11-10 (tests only): world events start and track players by the encounter's own detection volume (box, sphere, cylinder or capsule; 559 encounters have one), a stage that waits for a start object spawns it and ends when a player gathers it (44 start object slices from retail captures), and players near an event get its root entity with the event's status and each stage's status history, as retail sends them (240 of the 329 open world encounters; the other 89 slices are in no retail capture).
- Code
Janszoon tree is built from held trees; he attacks, throws his anchor at 6 to 10 m (Inferred; the anchor is now a real projectile), his charge follows the slope and he leashes home (live check needed).
- None
He also slams his anchor up close (a second retail fight, 2026-11-02), and a mob's weighted attack pick is drawn again after each attack, as the client does, so his heavy attacks come back (before: one light swing for minutes).
- None
His spin (
Attack_Mid_2H_Axe_02) is only in the hard attack tree; with it he got stuck in a walk-home loop in one test, so it is not on yet. - Code
Terrain cookies now in our ground; mobs walk around rocks and crates.
- Code
Boss summons (ExecuteSpawn) built: 10 of 46 summon slices have a retail card (the others cannot show).
- None
Not run: beams, boss-to-helper triggers, orders, tree projectiles (no capture).
- None
Not seen in the game yet: the homing in attacks, the way search, the town gate marks, the event respawn times (2026-11-10).
- None
Not seen in the game yet: event states, start objects and detection volumes.
- None
89 encounter slices have no root (no retail capture shows them) and 8 start object slices are in no capture, so their events cannot go past that stage.
- Tests
Mobs cast their spells (
CAGE-CastSpell, 744 of 765 spell names have a row): ground areas hit the players in them by the mob's damage row, and self heals and buffs hold on the mob. - Tests
A hit plays the reaction of its side: front, back, left or right (retail: 160 captures).
- Tests
A knockback perk pushes the mob back; a wall on the way stops it.
- None
Not seen with a real client: mob spells, side reactions, knockback.
Mob animations
0/2
Tests
- Tests
736 of 747 creature assets.
- None
11 assets.
Patrols and waypoints
0/2
Tests
- Tests
12,858 spawns get waypoint paths.
- None
Live check.
Corpses
0/3
Tests
- Tests
Retail times per creature.
- Tests
Skinned corpses go after 5.5 s.
- None
Boar times vary in retail.
New player: tutorial and starting beach
4 of 8
Tutorial flow (ftue_v2 level)
1/2
Live
- Live
Ship, quick time event, sailors, legionnaires, corruption, Thorpe, journal.
- None
Temple door and growth explode (level not yet checked).
Starting beach (open world)
2/3
Live
- Live
Beach quests 12-1 to 12-9 played live up to the Demon Storm turn-in; lock, skinning, crafting, crates, cutscenes, journal auto pin.
- Live
Play test 2 (2026-10-29) reached Janszoon.
- None
Play test 2 fixes need a live check; hits from behind; the terrain cookie fix at La Roussette and the Satisfaction wreck needs a live check.
Journal auto pin
1/1
Live
- Live
You confirmed it live (c21828b).
Tutorial skip and class gear
0/2
Tests
- Tests
Skip completes Soul Survivor, gives class bag.
- None
Live check.
Quests and progression
0 of 37
Quest engine
0/18
Tests
- Tests
Task types from task sheets, turn-in, rewards.
- Tests
Many quests at once, with the client's journal limit per quest type.
- Tests
Interact, game mode, give item, patrol, level, talk, gather, cyclic object, temporary unlock, craft, objective, use item, territory, fishing, salvage, item family, refine, song and dungeon steps.
- Tests
Town board missions.
- Tests
Drop a quest (3836, 2026-11-05: it leaves the journal and can be taken again).
- Tests
772 quest trigger volumes from the level data.
- Tests
Done StayActive steps show as retail.
- Tests
Quest objects that are loot containers give their quest items; kills count by spawner category and category group.
- Tests
Have-and-return items of quests drop as retail (2026-11-09, side quest captures): into the kill's loot bag, from containers at the task's chance, from quest objects, and go back at the turn-in.
- Tests
A quest object with a detection sphere (238 kinds, the mount quest's torches) sets off its event when a player on its quest walks in, as retail.
- Tests
Food status effects, quest success events and recipes fire their game events; achievement steps read expressions; POI steps read tag lists; faction rank steps count.
- None
Live check of the new steps (Truffle Fever failed live before the fix); pin limit Unknown.
- None
Open (audit 2026-11-03): encounter result events (45 tasks), encounter-spawned gatherables (9), PvP kill and fort events (7), volumes in deferred slices (12), kill-contribution mobs with no spawn (51); the mount food's daily experience limit is not checked.
- None
Live check of the races and the faction join.
- None
Puzzle scripts, the emote step, PvP faction mission steps (TaskDie, control points), trigger areas of instance levels (20).
- Tests
Game events give faction reputation and tokens to the player's faction (581 events: faction missions and rank quests).
- Tests
A first lore read keeps the page and gives its game event's experience; a second read gives nothing.
- None
Emote tasks and puzzle (slayer script) tasks: the client message is Unknown, no retail capture.
Beach and wreck quests
0/2
Tests
- Tests
Start beach chain and wreck quests 4 to 7.
- None
Full live run.
Main story and side quests
0/4
Tests
- Tests
The engine runs them from game data.
- Tests
Side quests with only supported steps: 526 of 528; main story: 354 of 358 (2 steps have no target in the data, 2 are puzzle scripts).
- None
Nobody played them live.
- Code
The faction join works; the faction boards offer no missions yet.
XP, levels, attribute points
0/5
Tests
- Tests
Kill XP, level up, attribute and weapon points.
- Tests
Max health grows with the level and Constitution as retail (856 + 1.75 x level squared + the Constitution health: 9 retail points fit), and the client gets the new max after a level up or a spend.
- None
Live check after the tutorial.
- None
Attribute damage scaling and the attribute threshold effects (evidence conflicts).
- None
Gear health bonuses.
Weapon mastery
0/4
Tests
- Tests
Mastery XP and saves.
- None
Live check.
- Tests
Tree nodes without a trigger that change hits (crit, damage, damage taken) work on every hit while their weapon is held.
- Tests
Perks and nodes on head shots and hits from behind (
OnHeadShot,OnHitBehind, their damage shares) fire.
Area charting, territory standing
0/2
Tests
- Tests
Charting XP, standing rank 1.
- None
Higher ranks and their rewards.
Achievements
0/2
Code
- Code
Achievement and meta achievement states.
- None
Live check.
Items and economy
16 of 45
Inventory, gear, paperdoll
1/2
Live
- Live
Inventory, slots, gear versions.
- None
Gear score rules, some item calls.
Loot drops
0/2
Tests
- Tests
Retail loot tables, drop chance, one bag per kill.
- None
Live check outside the tutorial.
Gathering and skinning
9/11
Live
- Live
Skinning, nodules and gatherables work live.
- Live
The sickle is the harvesting tool (slot 34).
- Live
Held effects add their gather speed (food, music buffs).
- Live
Worn perks hold their status effects, scaled by the item's gear score (tool, armour, amulet and bag perks).
- Live
Gather bots (
nw-testclient gather, 2026-11-01) wear start tools (NW_SIM_START_TOOLS; the data has no T1 logging axe, so2hAxeT2is the lowest) and gather trees, herbs, crops, ore and stone (82 kinds in the 30 min run). - Live
In the last run all 100 bots gathered.
- Live
A water gather targets the player and ends with the own done state, as retail
Hive_Dye(before: the gather animation never ended); a second press on the same interaction id runs again. - Live
Since 2026-11-05 a gather needs a level node of its kind in reach.
- Live
Since 2026-11-10 the server sends a node's state only for a kind whose bundle slots are known (Harvesting, Logging and Mining kinds, and 11 measured kinds of no tradeskill); doors, locks, banners and cannons keep the client's own state, so a used Fire Cannon no longer crashes the game.
- None
Tool levels and node respawn, live.
- None
Gathering luck: how ROL values change a gather roll is Unknown (the roll is server only).
Crafting
6/9
Live
- Live
Campfire, recipes (the skinning knife crafts live with no error message), craft answers after the item change, and the bag reasons of a craft (2 used, 3 made, 2 on a used-up slot) as retail.
- Live
Required, hiding and one-time recipe achievements.
- Live
Held effects (crafting food) raise the gear score range.
- Live
A salvaged schematic teaches its recipe.
- Live
Daily and weekly recipe cooldowns, saved, sent as retail.
- Live
Checked against 6 retail crafting and refining captures: one storage note per item made, with the last storage search.
- None
Live check of more recipes; higher stations and refining.
- None
Crafts take from storage in retail (which storage: Unknown); bonus items of another kind (their table: Unknown).
- None
The reset of the 79200 s cooldown and the colour gypsum orbs: Unknown.
Fishing
0/3
Tests
- Tests
Fishing code, one live run.
- Tests
Fishing quest steps and quest fish.
- None
Result of the live run: Unknown.
Repair, salvage, transmog, dyes
0/4
Tests
- Tests
Checked against retail salvage (4 captures) and dye captures: the salvaged slot goes out with reason 24, its items with 26 (containers) or 33 (gear); dye items and their emptied slots with 2.
- None
No retail repair capture.
- None
The storage note count of a salvage and a dye: Unknown.
- None
No live test.
Shops and coins
0/2
Code
- Code
Coins state, shop code.
- None
Not checked live.
Storage
0/4
Tests
- Tests
Storage search code.
- Tests
Checked against the retail storage capture: new ids on a move, the view from afar, 2 storage notes per move.
- None
No live test.
- None
Weight limit, transfer fee and the notes after a view from afar are Unknown.
Trading post
0/8
Tests
- Tests
Part buys show the units left to both players (search, own lists, notices): a stack of 10 bought 1 then 9 ends with the buyer holding 10 and the seller paid (world test on the database). Retail event counts, ends, notice versions, completion times, sync reasons 19/10/0, the completer's own tax.
- Tests
Orders carry the retail settlement id (nearest settlement or outpost capital: 22 of 22 retail ids from data, 5 of 5 captures); a filled buy order's units go to that settlement's storage (retail 2 of 2).
- Tests
Search throttle (1 s).
- Tests
A part-filled bag no longer gives a delivery twice.
- Tests
Since 2026-11-05 the buyer gets the sold stack with its perks, gear score, durability and look, and the post opens only at a settlement.
- None
No live test (the bot client has no trading post).
- None
Posting fees (no formula fits the 9 retail fees).
- None
Buys at another settlement and expired sell orders go to the bag (Unknown).
World systems
6 of 45
Fast travel, inns, recall
0/7
Tests
- Tests
Travel rules and saves.
- Tests
Inn check in is answered (its open and check in share one interaction id, retail inn tutorial).
- Tests
A shrine is charted at its first entry (its
ChartedAchievement, as retailPlaythrough_Part_013210.7 s), a discoverable one at an entry after its discovery. - Tests
The phasing updates name all 10 phasing areas, so the client reports entries into the areas inside them (Brysedd Overlook Shrine lies in Monarch's Bluffs settlement's area 30155).
- None
Live check of the inn recall (no used point named since 2026-11-08), the unstuck stand, the inn check in and a shrine in a settlement's area.
- None
The fast travel kneel plays live since 2026-11-08. Retail names only the phasing areas near the player; all of them go here (Inferred).
- None
Shrine travel needs no chart on the server.
Player camps
0/3
Tests
- Tests
Place a camp for its costs, the retail camp entity group, respawn at its SpawnPoint, Camp crafting station, BindCamp event, the camp stands again at login.
- None
Live check.
- None
PvP destruction, how a new character earns the Camping rank (Unknown), guild and faction.
Mounts
3/9
Live
- Live
Summon, ride, dash, stamina, dismounts, cooldowns, mount screens and saves.
- Live
The mount quest (My Kingdom for a Horse) ran live to its end (2026-11-03): the cave torches light within their 9 m sphere, the box gives Moonshadow, the summon and the ride work.
- Live
A jump on the mount sets the 1 s stamina regen delay.
- Tests
Mount food from quick slots 1 to 4 while riding: riding experience, the quest step and the daily limit of 3 (tests only).
- Tests
The change mount screen gets its
isChangingMountecho (retail slot 1 child 16; before: it spun). - Tests
Quick courses (races, rallies, tours, time trials): start on a mount with the course task, node hits, timer, finish; the race task counts each section, 1/8 to 8/8, as retail (before: 0/8 until the finish).
- Tests
A rider's server body keeps the floor (its saddle camera is 3.91 m up, a walker's 1.685 m), steps at its mount's speed (the walking 0.36 m a record held it at 7.2 m/s) and its camera trails 0.45 s (Inferred fit): retail Hermit's Rally replay 1.11 m off (median), before 2.95 m and 2.0 m up.
- None
Live check of the change mount screen (store answer) and of mount food from a quick slot. Unknown: a dismount on a hit while idle (no retail capture shows one), town exclusion areas and forced walk, the trample message (6731), charm multipliers, the quest's required level (1 or 20).
- None
A failed course's result: Unknown.
Social: chat, friends, groups, voice
3/5
Live
- Live
Chat, friends, groups, raids, voice option.
- Live
Account probation (72 h, staff never).
- Live
Own voice service: sign-in, map cell rooms, push-to-talk audio relay; one player heard itself live (2026-11-08).
- None
Live test with many players; voice between two players.
- None
Play time part of probation (180 min) not counted.
Companies and territories
0/2
Code
- Code
Company code, standing.
- None
Ownership, taxes, upkeep.
Expeditions and instances
0/5
Code
- Code
Instances, dungeon scripts, mutations.
- None
No live run of a dungeon.
- Tests
Story instances on the open world map (Medea and the other story fights): their scripts are found (the capital names the script without its slices folder), and their doors (
Entrance_Quest*, trial and raid entrances) name their mode. - Tests
The director starts instance sims from its config (
[instances.launch]). - None
Not seen with a real client: entering a story instance.
Game modes (queues, arenas, Outpost Rush)
0/4
Code
- Code
Queues and matches.
- Code
Leave a queue (1066, and 2385 for all queues) with the retail 4970 answer, and leave a game mode (3309) back to the open world (2026-11-05, tests only).
- Code
Since 2026-11-05 a queue join is refused at once (no fake local match).
- None
Mode rules, the game mode world states (2343, 363, 3105), live test.
Wars, sieges, invasions
0/3
Code
- Code
Codecs and sign-ups only.
- Code
Since 2026-11-05 sign-ups get the retail closed-war answer.
- None
No capture shows the war flow.
Seasons and season pass
0/2
Code
- Code
Only the state the journal needs.
- None
Season pass rewards and progress.
Leaderboards and analytics
0/2
Tests
- Tests
Stats service with the retail reply shapes, boards counted by the sims, client analytics events stored (Kinesis and STS answered).
- None
Live check of the leaderboard screen. Only HercyneRaid_Reward boards count so far (docs/re/2026-09-18-leaderboards-and-analytics.md).
Music instruments
0/3
Code
- Code
Music code exists.
- Code
Since 2026-11-05 the server judges notes against the game's note charts, and the picked reward pays out its event.
- None
Not checked live.
Not started
0 of 12
Housing
0/4
Tests
- Tests
Buy a house, enter and leave the plot, place, move and remove furniture, taxes, travel home (travel module).
- Tests
All 19 kinds of retail housing calls read and all 10 kinds of answers are built (capture survey 2026-11-05).
- None
The house data (3663) and plot (3055) world states.
- None
Live test.
Artifacts
0/1
None
- None
Not built.
Heartrunes
0/4
Tests
- Tests
Hits fill the heart rune charge by the damage row's rune charge points (attack, blocked attack, hit, blocked hit); the charge state goes to the client in whole percents.
- Tests
A worn rune (paperdoll slot 41) turns on the rune ability list; Detonate starts at a full charge and takes it.
- None
Not seen with a real client: the charge bar and the Detonate press.
- None
The other nine runes (Stone Form and the rest) are in the list but not checked one by one.
Town projects
0/2
Tests
- Tests
Town board missions: take, the mission's items, kills and place, turn-in.
- None
Project progress, upgrades and the board's offer rules.
Trophies
0/1
None
- None
Not built.
What we do next
Night order 2026-11-10: live check (all built, tests only).
See in the game: a story instance door (Medea), the heart rune charge and Detonate, day and night after a restart, mob spells (ground areas, self heals), reactions from behind and the sides, crits from behind, head shots, knockback stopped by a wall, faction reputation and tokens from a faction quest, lore XP on a first read. The PC and the game VM need world migration 0035 (
world_clock) and the new data files (dungeon scripts, player abilities) first.Mob movement and world events: live check (2026-11-10).
All parts are built, in tests only. See in the game: mobs strike from near (homing), walk around obstacles, stop at town gates; world events start when a player walks into their volume, show their status, wait for their start object and come back at their data time; trees and stones block as their own mesh.
Live check of the new saves (migration 0034).
Migration 0034 is applied on the PC and on the game VM (2026-11-10), and the game VM runs the new programs. Then: take damage, use an ability, log out during its cooldown, log back in; health and the cooldown must be as they were. Die, log out, log back in: the death screen must show and the respawn must work. Gather a node, restart the sim, and check that the node is still empty.
Attacks of staffs and gauntlets (other players see none; heavy attacks stop): cause found 2026-11-10, not built.
The server starts a tap's light attack and a hold's charge from a table of one sequence per weapon stance. The table has none for the life staff, the void and ice gauntlets, the flail, the dagger, the rapier, the bow and the musket. Measured on 1,082 retail ledgers the same day: one sequence per stance does not fit. After a tap retail sent nothing in 34 to 47 % of the taps, and the rest spread over many sequences (the most common one had 6 to 17 % per stance), some in the first slot and some in the upper slots. The client named its own attack in only 61 of 2,335 life staff presses. To do: key the sequence on the attack, not on the stance. The server knows each attack's damage row at the cast; mine the own-state sequence that goes with each damage row from retail, and send it at the cast to the owner and to the viewers.
Heavy attacks stop from time to time (reported live 2026-11-10, two players, cause not known).
Heavy attacks work for a while, then stop. Sometimes they come back, sometimes they do not. No pattern found yet. To do: find a stop in the sim log (the attack key held past the hold time with no charge state after it) and compare the records before it with a heavy attack that worked.
Bugs from the two-player test on the game VM (2026-11-09), not fixed yet.
Reported live by two players. (1) Other players' animations (first): their light and heavy attacks, casts and weapon swaps do not show; their walk glides (the server starts the move state again every 0.3 to 0.8 s); a life staff shows held like a musket; a player floats on the other's screen (others get the server's estimate of the body, not the client's place). (2) Ground-target abilities (life staff Sacred Ground) do nothing. (3) Assigning weapon points does nothing (respec now has the right table; check live). (4) Hits do not register as they should (hit box). (5) A Windows client crashed when it opened the keyboard and mouse settings. (6) Voice chat fails on the VM and works on the PC (port or something else: Unknown). (7) A spinner stays on in the inventory's currency bar, next to the coins, after Tab opens the inventory. (8) The admin web panel does not give flails by item id (several flail ids tried). (9) In the K window (attributes, weapon masteries) the attributes tab opens empty, for both players; when it started is Unknown. (10) Life staff heals do not appear to work. (11) Mana drain does not work. (13) Crouch and prone (the Z key) do not show to the other player: the server reads the two keys for its body estimate only and starts no slayer state for them, for the own client or for others. (12)
!tp <player>put the game master under the ground: the teleport goes to the other player's place as the server estimates it (the same estimate that makes players float), not its client's place. From the second player's report (2026-11-09): (14) the void blade turns off at the wrong times; (15) the buff and debuff bar does not show; (16) the button that moves all items into storage does not move dye (drag and drop does); (17) the quest step "Visit the Prydwen Trading Post" does not complete at the trading post. From the first player (2026-11-10, after the ability and heal fixes): (18) Orb of Protection gives its buffs, but their time shows as 10957 days (they end at the right time); (19) Sacred Ground and the other aimed heal still do nothing for the caster (they open 25 m ahead); (20) life staff light attacks often do not connect with a red crosshair on the target (hit box); (21) Boatswain Bridget does not act as on retail (captures exist); (22) quest "Amidst the Wreckage": the corrupted growths do not play their explosion when destroyed; (23) voice chat on the VM fails about every minute; (24) quest "Lessons of a Pirate Life": the pigs on the boat stand, on retail they lie asleep; (25) quest "Memories of Grace": some corrupted mariners walk with half of their legs in the ground. (26) quest "Demon Storm" (destroy the corruption nexus): the Tempest High Priest stands and does nothing, with no aggro range; he started to fight only about a minute after the first hit. (27) a boar stands in the air next to a stone pillar, on the way to Prydwen in the quest "Bearer of Bad Tidings" (screenshot 2026-11-10). (28) Torok the Beast (level 5 boar boss) does not use all its retail attacks; it does not charge a player who runs away (captures to check). (29) Towns and outposts feel empty. Measured on one retail trip into Prydwen (12a_msq_16_fasttravel): the retail server spawned 193 entities, 102 of them with a slice of their own: 13 settlement crafting stations and their 12 station buildings (tiered:settlement_station_*_tN,craftingstation_tN_*_complete), the trading post and its building, 16 lanterns and torches, a fireplace, 5 house plots and 5 houses, 37 trees, a camp. The level file holds many of these slices (71 settlement stations, 870 lanterns, 208 house plots), but retail sends each one a spawn card with its slice asset and place, and our server sends cards for the crafting stations only. The trading post has two retail entities at one place: the logic entity (built 2026-11-10) and the buildingcraftingstation_t5_tradingpost_complete(card and place only), which our server does not send yet, so no trading post shows (2026-11-10). (30) Fall damage from a wall jump is not right (2026-11-10; details to get). Checked 2026-11-10 for (22): in the retail capture12-5_survivorsno entity spawns when a growth is destroyed (thecorrupted_miner_bomb_poicards about every 5.6 s there are thrown bombs: a card, an ownership and a projectile state), so the explosion is in the states of the growth itself; not compared yet.Voice with two players.
Seen live on 2026-11-08 with one player: the rooms join and the player hears itself (
echo = truein the local voice server). Still to see: two games in one room hear each other, and the speaking icon (whether retail shows one for the own voice is Unknown). Turnechooff for that test.Live check of the town points on the map.
Built (2026-11-06). Seen live on 2026-11-07: walking into a town gave the "town visited" line, and the visit was still saved after a new login (
visited_towns). Still to see: which map icon changes, and a fast travel to that town (use!azoth 1000, or set[fast_travel] free = true). Then check one Brimstone shrine (its point moved by 0.4 m to the retail place). Towns from before this build count only after one new visit, because the server did not keep them before.Fix the quests the quest walk found broken.
Walk of 2026-11-09 after the item drop fix: 17,648 of 18,441 quests end (16,976 before), 495 do not. The fix (proven on retail side quest captures): a quest's have-and-return items drop into the kill's loot bag, from containers at the task's chance and from quest objects, and go back at the turn-in, as a mission's did. Next: 314 kill steps whose mob spawns nowhere on the level (where those mobs come from is Unknown), 83 game events and 62 achievements nothing gives, 42 faction control point steps, and 85 item steps (enemies that do not spawn, dungeon drops, season items). The list is in
local-data/reports/quest-walk-all-2026-11-09b.md; the causes are inlocal-data/findings/2026-11-09-quest-drops-and-passives.md.Windows test of the three reroutes, and a look at the empty shop screen.
The news reroute is live-checked on Linux (2026-11-02): the client's news polls reach our server. That run showed one more call to Amazon: the region ping,
GET /pingondynamodb.us-east-1.amazonaws.com, port 80. Now our server answers it onping_listen(port 80), and the launcher maps the name (tests only). For each server: add the ping host to[aws_mirror] hostsandping_listentoedge.toml, make the mirror certificate again, restart edge-http. On Windows, runpatch-client.py --aws-proxyagain (five caves). The region ping is live-checked on Linux too (2026-11-02). That run showed one call after login to Amazon's shop or entitlement service; now our remote config points the threeomni.fcs.endpoints.*keys atgame.<domain>, and the server answers an empty shop. Live on Linux: after a new start the game held no connection to an Amazon address for 40 s, and its entitlement sync reached our server. Still to see: the shop screen opens empty (not opened yet), and the same on Windows. Privacy settings service (2026-11-04, tests only): a retail capture holds its call (unlock_store_content, call 52: the client posts 5 setting names, retail answers each at its default,Everyone). Now the remote config pointsomni.privacy-settings.client-endpointatgame.<domain>(read byFUN_14160ad60), andgame.<domain>answers the retail request with the retail reply byte for byte. Still to see live: whether and when our client calls it. Notes:docs/re/2026-11-02-cms-news-hosts.md,docs/re/2026-11-02-region-ping.md,docs/re/2026-11-02-shop-services.md.Find why one mob stops walking home.
The hunt test passes all 11 checks (2026-10-31: 30 bots, 1,748 hits, 276 mob deaths). In 1 of 4 runs one mob (spawn
575fea06near 7171, 3147) stood 18.7 m from its spawn and reset every 2.8 s for minutes without moving; a mob that walks home takes no hit. Short steps from its place are free; why its tree does not walk home is Unknown. The sim now logsmob move to a pointandmob move failedat debug level. In that run, 98.9 % of ticks on busy sims fit in one tick (the test wants 99 %). Notes:local-data/findings/2026-10-31-beach-sim-speed.md. Janszoon with his hard attack tree (the tree with his spin) got stuck the same way in one test: idle, fidget, and hisReset_Movenever starts, about 4 m from his spawn (7059.5, 3134.5, height 43.3). Checked 2026-11-04 (tests): the mob isCorrupted_Sailor_1H_Sword_Named_00(575fea06is the crc of its vitals id). On the real ground with its level route, drawn 18.7 m out on 8 bearings, it walked home every time, both when the player left and when the player stayed beside it and hit it each second (16 of 16, testthe_beach_sword_sailor_walks_home_from_every_side). So the cause is still Unknown, and no fix is made. Next step: a hunt run withRUST_LOGdebug forsim::mob_ai(the local stack was running for the user, so this run was not made).Live check of the weapon abilities and mana.
Built, not yet checked with the game client: keys 1 to 3 run the game's own ability lists (19 lists, 278 actions), cooldowns go to the client as retail (byte-checked), mana is spent per spell and comes back, spells fly or open areas that last, upgrades count from skill points, perks and Focus. Check live: map a life staff ability, press it, watch the cooldown and the mana bar. Input names are solved (the client numbers its 596 input actions by the CRC of their names; keys 1/2/3 = 402/115/139 from the game files). Still Unknown: the rest of the retail cooldown cut (0.8847 life staff, 0.8575 flail; Focus gives 0.97). Fixed 2026-11-04 (tests): Shooter's Stance and Stopping Power now start (8 aimed abilities open before, 6 now). Two engine faults: a key press test without
BackTickscounts only the frame of the press (the client's maker of the test,FUN_142bec920, fills it with zeros), not 20 frames; and a tag activity now sets and unsets its tag on its start and end, inside its branch and named cases, so a tag that a branch sets only after a shot (ReloadRequired) is no longer on all the time. Still open: the bow's three ability shots, Meteor Shower and Ice Storm fire through actions that no parsed fragment transition leads to (the server reads one fragment option per name; Unknown: whether the client picks options by tags), and Ice Pylon needs the server to place its pylon. Notes:local-data/findings/2026-10-31-abilities-design.md.Live check of the mount fixes.
Seen live (2026-11-03): My Kingdom for a Horse to its end, the reward box, the summon and the ride; after the cooldown fix the summons after a new login work (01:34 and 01:42 UTC), and Hermit's Rally (
EF_Tour_0) ran to its finish. Then the vittles of Hungry as a Horse did nothing: the press of a quick slot key while riding sent no call (retail too), and the server read only quick slot 1 and only weapon-stance uses, which have noMountItem. Fixed, not yet seen live: quick slot keys 1 to 4 (Use_Quickslot_1to4, slots 14 to 17) use their item; a mount food takes effect 690 ms after the press while riding (retail9401_tutorialfoodcapture), gives itsRidingexperience (2,500 for T1), counts on the daily limit of 3 and sends its visual script (608). Live on 2026-11-05 the change mount screen still spins: the catalog reaches the client every time (its own report says 47 offers and 4 stores, valid), but the list never builds. The copy of the store script in the screen's context does not get the catalog, and why is Unknown (notes:local-data/findings/2026-11-04-mount-store-capture.md). Live again on 2026-11-06: still spins. Each open sends the 6066 change call, five store asks (all answered304) and gets two to four catalog-ready reports (47 items, 4 stores, valid). The screen's script (selectionpanel.luac) clears its spinner only in the catalog callback, and the static read of the store scripts finds no step that stops it. The next proof needs a trace inside the running client. Since 2026-11-04 (tests only) each store has one empty static slot (every one of the 1,029 retail store replies in the captures had one to six), an offer's alias is its mount's store product (retailMount_Wolf_1; the client leaves out an offer without a product, so 47 of the 52 store mounts are sold), a free offer shows 99 % off as retail, and the client'sx-amzn-if-none-matchheader gets the304. To check: feed the horse from a quick slot while riding, open the change mount screen.Live check of a server on other ports.
Built, tests only:
public_https_portandpublic_ping_portinconfig/edge.toml(default 443 and 80). Check live: sethttps_listenandpublic_https_portto 8443,ping_listenandpublic_ping_portto 8080, patch the client with--aws-proxy, typeexample.org:8443in the launcher, play to character select. Expected: the remote config, news, region ping and game routes reach the server. Unknown: the game client reads a link with a port (game.<domain>:8443/s/<session>). Steps: "Servers on other ports" indocs/client-patch.md.Live check of the GM chat commands.
Give your account the
game_masterrank, log in, and type!help,!level 60,!coins 1000and!wherein chat. The answer comes as a System chat line that only you see. If the client does not show it, move the answer to the whisper channel. The command list is in the README under "GM chat commands".Check the target lock pick on retail.
On our server the first lock takes the nearest mob inside a small circle around the crosshair, not the mob under the crosshair. The client code works that way (
FUN_142c8b350), so it is likely normal. To check on retail: stand near 2 mobs close together, aim at the farther one, lock. Also check: after a reconnect, does lock still work (flag 4, weapon swap range 0 were seen after gdb reconnects)? Notes:local-data/findings/2026-10-01-client-lock-and-actor-state-map.md.Work through the open world capture survey.
The open world captures already hold wars and sieges (about 26 captures), invasions (5), expeditions (35), Outpost Rush (12), trading post (10), housing (17) and companies (11). The survey of all 1,071 captures lists what the server still lacks, area by area, with a fix order:
local-data/findings/2026-11-05-open-world-capture-coverage.md. Systems with no capture must still be recorded before 2027-01-31.Live check of many quests at once.
A player can run many quests. Each quest type has the client's own journal limit (side quests 30, town board and faction missions 30, main story 20, community goals 50, and more; read from the client code). A quest the game starts by itself, such as the next step of a chain, has no limit. None of this is checked live. To check: accept Truffle Fever (Hapless Howe) while the main story quest runs, gather its 5 truffles, then its herbs and berries (they count only when gathered). Truffle Fever failed live before the loot-container fix of 2026-10-03, which touched 346 of the 381 item steps that drop from an object. Kill and drop steps that name a spawner's category (
Barbary_Lion_16BS12) or its group (Periville) also count now; 11 steps still have an unknown source (faction, season and event steps). Also check the stones of Bridge into the Past (Weaver's Fen) and the staff ritual of Arcana Aligned (Elysian Wilds). Notes:local-data/findings/2026-10-02-quest-journal-limits.md.Bring in the quests of the captures: quest step types.
The server runs most step types of the task sheets now (the full list is in the Quest engine row below). Quests whose steps are all supported: side quests 526 of 528, main story 354 of 358 (2026-10-31); housing quests 14 of 22 and town projects 12 of 12 (2026-10-03). Skipped task rows: 29, down from 146. That count is from tests on the game data; only a few of these quests were played live. Still open: the puzzle slayer scripts (5; where the scripts are is Unknown),
TaskPerformEmote(1, the summer event's13_Summer_08_Poet_DanceForPoet; blocked: no capture holds an emote, and the client type list has no emote request; a retail capture of/danceis needed before 2027-01-31), the PvP faction mission stepsTaskDie,TaskControlPointand the PvP patrol (they need the faction boards), and empty templates. List:local-data/findings/2026-10-02-quest-gaps.tsv; notes:local-data/findings/2026-10-02-task-interact.md.Live check of the beach play test 2 fixes (
ba675453).Confirmed live: the skinning knife crafts with no "Crafting attempt failed" message, and crafting no longer fails over and over. Fixed in code but not seen live yet: food from the quick slot gives its buff, the watchtower crate gives loot, growths get retail's break gather state (the explosion is still to see), and mobs no longer walk into walls or climb more than 0.6 m in a step. The level's terrain cookies (height stamps the client puts on its terrain) are now in our terrain; at La Roussette, 83 % of retail player feet samples now sit on our ground (62 % before). Not a bug: crewmate loot drops about 1 kill in 25, as on retail (
[combat] loot_drop_multiplierscales it; 1.0 is retail). Still open: hits from behind (our reach matches retail; what the client draws is Unknown), the road float on the way to Hapless Howe, the skip potions (no retail capture). Notes:local-data/findings/2026-10-03-beach-playtest-notes.md.Close the new player bugs (tutorial and starting beach).
Every new player goes through both. The tutorial is the
ftue_v2level (ship, quick time event, sailors, legionnaires, corruption, Damned Commander). The starting beach is open world. Found on the beach (play test 2026-10-01, 18 issues): player hits that miss (boars, Janszoon, mariners), bosses whose melee does no damage, mobs that swing from 3 to 4.5 m, mobs sunk in the ground or stuck in walls (Janszoon, the cave), a mob back to full health, debuffs shown as 10,957 days, no food buff, no fall damage, the watchtower crate gives nothing, growths with no break effect, deck boars not asleep. Fixed since, live check needed: the food buff, the watchtower crate, the growths' break state (ba675453), the ground at La Roussette (4c1a219f). The others: not checked again. Level not yet checked: temple door wall.Make own movement match retail (to-do
t1).The server body is still off from the client: median 0.156 m in the open world, 0.219 m in the tutorial. Small drifts cause missed hits and bad walls.
Close the collision gaps: attack motion, camera, physics.
The server already has the slayer state, its own movement checks, and a collision file of the whole open world from the client's paks (
collision-25810808-newworld_vitaeeterna.bin, floor and ray queries). Still open: (1) the client moves the body by an attack's root motion (AnimationDrivenMotion); our body stops it at walls (SetHaltMotionOnCollision), but not yet at an enemy's capsule, and the live server body does not use it yet (only the replay tool). Wired before the capsule halt and the camera boom, it made the camera-follow parts worse (2026-09-26). (2) Camera collision and the fight camera boom (0.9 to 5 m) are not built; ship fights are 0.94 m median off. (3) The server checks rules against the collision mesh; it runs no full physics engine. Whether the retail servers run one: Unknown. Notes:local-data/findings/2026-11-01-movement-review.md.Make the first open world hours work.
After the beach: main story quests, gathering, crafting, shops, fast travel. The code exists, but nobody played it live.
Finish combat: ranged, magic, block, status effects.
All of this is in tests only; none of it is checked with the game client. Block has the guard break, no stamina regen while held, 2218 only in the tutorial and cross-sim hits (2026-10-30). A mob projectile is blocked only by a weapon with
CanBlockRanged, with its ranged block health and stamina scales (from the data; no retail ranged block was captured). From the data (2026-11-01): unblockable attacks pass a block, empower buffs raise block stamina, and about 20 status effect columns now act (stun, root, silence, rend, weakness, heal mods, food attributes, stamina regen). Still open: the block rise delay of about 1 s (retail evidence conflicts), the facing arc (the yaw convention of the input view is Unknown), the passive ability triggers (OnBlockedHitTaken,OnBlockBreak,OnHit: no trigger engine yet;AbilityDatahas 288 columns and no code readsAbilityTrigger; not started on 2026-11-04), mobs that block (VitalsDatablock columns).Expeditions (dungeons) and instances.
The group content of the game. Instance code exists, but it is not tested live.
Companies, territories, wars, invasions.
These need many players and the captures from step 5.
Trading post and full economy.
Part buys, settlement ids and buy-order storage now match retail in tests on the database (2026-11-01). A live test with two players is next; posting fees are Unknown.
Check the live page through the relay.
Discord login on the public admin site works (2026-11-04). Not checked yet: the live page's stream (server-sent events) through NPMplus and the relay.
Put the status reporter beside the public website.
The website lives in its own repo (
blighted-emu-website).status-reporteris built and was seen with a local copy of the site (2026-11-08). Still to do: run it on the game VM with the public site's address and a secret shared with the site'sWORLDS, and see the real client's round trip and a leaderboard row on the site.Systems with no code: housing, artifacts, heartrunes, trophies.
Start these last. They are not on the path of a new player.
Done
Website shows the checks (2026-11-11): the home and progress pages count the proven checks of each feature (seen with the real client or with bots) and show no percent; the site reads the new
docs/progress.jsonfrom main.Game VM and PC stack updated (2026-11-11): the night order programs and data (not committed yet), world migration 0035 applied on the PC and on the game VM; the VM sims load 44 game modes, and the status reports are accepted.
Night order 2026-11-10 (tests only, not seen live): story instances on the open world map (15 more game modes scripted, entrance names), heart rune charge and Detonate, the world clock saved (world migration 0035), mob spells (744 of 765 spell names: ground areas, self heals and buffs), hit reactions by side (retail: 160 captures), weapon tree nodes without a trigger, crits from behind (retail: 510 of 560) and head shots (retail: 346), knockback stopped by walls, faction reputation and tokens from game events (581), lore read XP. The progress page now lists checks with their own proof; no percent.
Game VM updated (2026-11-10): new programs and data from
54e38670, world migration 0034 applied; the sims load 240 world event roots and 44 start objects, and the status reports are accepted.World events and tree variants (2026-11-10, tests only). The sim sends the encounter root entity of 240 open world events with the manager status and each stage's status history (bytes and stage order checked on retail captures); 44 start objects spawn and end their stage when gathered; 559 encounters use their own detection volume. The collision tool reads
region.slicedata: 361,192 tree, stone and plant rows now have their own mesh.Database saves, second part (2026-11-10, tests only). New world migration 0034: health (dead too), mana, stamina, running ability cooldowns, the PvP flag wish, puzzle-stone turns and the fishing bait are saved with the progression; the depleted gather nodes of each level are saved in their own table and loaded at a sim start. Proof for health: a recorded retail run that ended dead began its next part dead. Run
edge-http migratebefore the next start.Mob movement, first part (2026-11-10, tests only, not on the game VM yet). (1) Mob attacks move the mob: the server turns and moves a mob by the
Homingclips of its attack fragment, as the client does only for the player's own character. (2) More solids: each region's tree and stone file and the engine's static mesh and primitive colliders, by the mobs' own collision filterAI(it blocks the same solids as the player filter in this build), with closed meshes as solid blocks and water deeper than a swimming body closed to mobs. (3) A way search for mobs over the floors when the straight way is closed, which also gives the tree's reachable answer; a target with no way gives the way to the nearest place. (4) The level designers' navigation marks (7,185 in the open world, 69 in the tutorial): no mob stands in a town gate. (5) On the way home with no way found a mob walks its trail back (it was already immune on the way home and healed at home). (6) World event encounters come back after the respawn range of their spawn group's area spawner (329 of 329 open world encounters).Undead, dryad and inquisitor mobs used the wrong attack data: fixed in the data tool (2026-11-10, tests only, not on the game VM yet). The damned animation database keeps the fragments of those creatures in sub databases (
<SubADB Tags="Undead" File=...>), and the tool did not read them. Such a mob played the damned entry of each fragment, whose damage row its own damage table does not have (live:mob damage row missingandmob projectile flight missingfor the undead pistol mobs). The tool now adds the fragments of the sub databases with their tags; 107 creature rows changed (24 undead, 19 dryad, 2 inquisitor, 62 others).Aimed abilities cast once and then never again (Sacred Ground and every aimed ability): fixed (2026-11-10, tests only, not on the game VM yet). Three parts of the client's ability rules were missing. (1) A transition clip that names a fragment no action plays makes the running action go on with that fragment; the table dropped those clips, so the ready fragment never went on to its aim loop and a click later than 0.67 s cast nothing. (2) A fragment that starts on a Mannequin scope takes it from the fragment that played there; the table had no scopes, so the aim action ran on after the cast and blocked every later press (and its cast fired for another weapon's ability). (3) The cast action waits for the aim's raycast; the engine started it at the key press. The ability table now holds 78 fragment switches and the scopes of all 217 fragments, from
playermalecontrollerdefs.xml.Client crash at a Flail Slam cast: cause found and removed (2026-11-10, tests only, not on the game VM yet). Two clients crashed in the tick the server spawned the spell entity of
Spell_Flail_Slam_AOE_Upgrade. The spell entity table replayed every state of the most common retail card of a spell, and for this spell that held a position state of one retail cast (338 different values in 581 retail cards). The table now keeps a state only with the bytes that at least half of the spell's retail cards have; the position states are gone from all 1,036 spells, and 43 entries without bytes are gone too.Game crash after the Fire Cannon of
12A_MSQ_08_DestroyRune(2026-11-10, tests only, not on the game VM yet). Retail's card of that cannon has the gatherable controller in bundle slot 2 and the interact in slot 6; the server put them in slots 3 and 4, where the cannon has another class or nothing. The client crashed, and again at each login near the cannon, because the server kept the node. A scan of 2,265 retail ledgers found slots 3 and 4 on all 110 kinds of the Harvesting, Logging and Mining tradeskills and on 11 kinds of no tradeskill; 15 other kinds (doors, locks, banners, cannons) had other slots, some different per placement. The server now sends node states only for the kinds with known slots and still keeps the others depleted until they grow back.Buff and debuff timers of about 10957 days: cause found in retail (2026-11-10, tests only, not on the game VM yet). The client sets its wall clock from two values of the own player state,
sessionStartWallClockTimePoint(Unix ns) andsessionStartTimePoint(ns since 2000). Retail has both in the own card of all 3 login captures looked at; their difference is the time from 1970 to 2000 plus 1 to 3 ms. The server sent neither, so the client's wall clock ran 30 years behind and every end time on that clock showed about 10957 days. The server now sends the pair at the spawn. The inn and house cooldown ends go out as Unix times again, as retail's (the 2026-11-08 change had put them on the 2000 clock to hide the same fault).Voice on a server with other ports than 443: cause found with a trace of the running client (2026-11-10, tests only, not on the game VM yet). When the voice API address names a port, the voice SDK sends its first request (the prelogin) without TLS (
WinHttpOpenRequestflags 0). The HTTPS port answered with TLS bytes, WinHTTP gave error 12152 and the game showed voice error 10052. An address without a port gets a TLS request, which is why a server on port 443 signed in. The plain HTTP listener ofedge-httpnow answers the prelogin too, and the social service's[voice] api_urlnames that listener's public port on such a server. Network, certificate and Wine were ruled out first (a WinHTTP test program on the same path got status 200)."Take all" and "move all" in storage: fixed (2026-11-10, tests only, not on the game VM yet). The by-class item calls carry a class number. The table of those numbers was in the order of the client's name strings, which is not the order of the numbers for 75 to 89, so those sections moved nothing (live: the dye section sent 82, the cooking section 83). The numbers now come from the order of the client's registration functions, one every 1120 bytes; that order gives all 8 numbers seen in retail.
UI_Catacombshas no number yet. The sim logs how many stacks each call moved.Fall damage from a structure the level data lacks: fixed (2026-11-10, tests only, not on the game VM yet). A player on such a floor (a town building spawned by a card) who ran off it went to the ground in one step, on a floor the whole time, so the landing had no drop. The body now falls from there by the physics, and a jump on such a floor comes down on that floor. The sim logs each landing of 3 m or more with its drop.
Other players' attacks: one more fact (2026-11-10). In the two-player run the states one player got of the other during a life staff attack held no action state at all: the attacker's own slayer state did not change at the cast either. The cause is not known yet; the sim now logs why an ability press starts no action, for the ground-target abilities that did not cast in the same run.
Swarmer portals and script mob poses (2026-11-10, tests, on the game server, not seen live): one spawn of a spawner slice with more than one spawner makes each of its mobs (the storm priest's
worldevent_ai_cultist_chaplain_minionholdsSwarmer1andSwarmer2: two swarmers per portal, as retail12-9_demonstorm2). A mob that a script spawns takes the waypoints of its spawner slice (894 script slices; the storm priest'swp-nopathwithPOI_Ritual_Channeling_LOOP, as retail12-8_demonstorm).Corrupted growths, checked against retail
12-5_survivors(2026-11-10): at a break retail sends no state of the growth itself, only the hit (2071), an item change (7048), the break (2724) and the player's own states. The server sends the same hit, break, loot tracker entry (state 2, type 4, reset 33 s later, Unix ns) and gather state. No message is missing; the break effect needs a look in the game after the clock fix of 2026-11-10.Voice sign-in trace (2026-11-10): the client's own address check accepts the game server's voice address (
ClientConnectionImpl::Connect,server.IsValid(): anhttps://prefix and under 256 characters). A trace script for the client's voice SDK calls is set up and the social service logs each voice call; the next login shows where the sign-in stops.Windows login and play, seen live (2026-11-09): a second player on Windows used the Windows launcher and the patch script of the Windows test package (2026-11-08) with its how-to, logged in to the game server and played.
Open world encounters run (2026-11-10, tests, on the game server, not seen live): the dungeon script file now also holds the open world's 329 spawn group encounters (
WorldEvent_SpawnGroup_Single_Masterand the other world event and world boss groups; 1,384 mobs), and the open map sim runs them with the instance script runner. An encounter starts when a player comes within the wake radius, resets when every player left for its grace period, and starts again after the mob respawn time (Inferred) once it ended. The level file's encounter spawns of those groups (2,060) are left to the script. Storm priest: he now spawns at his own place (7349.18, 2917.83) and hisSub-Phase_01 - Spawn Swarmer Portalsstage spawns the swarmers at 0 s, 15 s and 25 s after he falls to half health, as retail12-9_demonstorm2shows (121 s, 136 s). Tests:an_open_world_encounter_runs_while_a_player_is_near_and_comes_back_after_its_end,a_spawn_of_a_nested_encounter_slice_makes_each_of_its_mobs,the_encounter_spawns_of_a_scripted_group_are_left_to_its_script. Open: each portal gives one swarmer (retail two, 1.3 s apart); the priest's ritual pose (his spawner'swp-nopathtask is not given to a script mob); the 596 other spawn group capitals whose slices hold no encounter manager.Dungeon script file builds again (2026-11-10):
content-tool dungeon-scriptsstopped at an Eden Grove objective without a target entity (dg_enc_edengrove_00_arboretum_02), so no script file existed and the sims loaded 0 game modes. Such an objective now loads (no entity event completes it; its time limit ends it). 28 instance levels, 274 instance encounters. The quest trials (QuestGawainand 11 more) still have no script: their game modes name no script slice.World files rebuilt with the waypoint reader fix (2026-11-10, tests, not seen live): 11 level files changed (the open world and 10 expeditions). Mobs on
PointSpawner_1wp_Standand the other missed spawner kinds now have their post and pose. Test:a_mob_plays_the_task_of_its_waypoint_at_its_spawn(a beach boar lies on its side, Boatswain Bridget looks around). Old files kept in a backup folder.Storm priest and his swarmers, OPEN (2026-11-10): the level file lists the priest and six swarmers at the centre of an encounter group (
WorldEvent_SpawnGroup_Single_Master). The group's own slice places the priest 5 m away on awp-nopathwaypoint with the taskPOI_Ritual_Channeling_LOOP; the swarmer entries are minion spawn points of the encounterDamned_Cultist_Chaplain_MinionSpawn. His tree (damnedchaplain_basebehavior) holds noExecuteSpawn, only encounter events. Retail12-9_demonstorm2spawns the swarmers two at a time. The server does not run open world encounter groups: it spawns all seven at the centre. About 3,400 open world encounter spawns are of this kind.Voice on the game server, OPEN (2026-11-10): ports, certificate chain and TLS 1.2/1.3 are good from the player's network, the voice API answers a prelogin with 200, and the realm, issuer and host names agree in all three config files. The game client never sends its first voice request (no prelogin in the edge log of a whole play session; it reports voice error 0 about once a minute). The one difference from the PC setup that worked is the port in the voice API address. Cause: Unknown.
Corrupted growths, checked (2026-11-10): retail
12-5_survivorssends at each break a 2071, an item change (7048), a 2724 and one own bundle; the server sends the same 2071, 2724, loot tracker entry, gather state and objectives. Not compared yet: the own bundle's classes 11, 2913 and 3183. Retail broke each growth with one hit there; the server asks for two.Ability binds and respec: FIXED (2026-11-09, seen live on the game VM: the ability goes on the bar). The client names an ability table by its position in its own order in the slot change (2701) and the respec (186); retail's ability state lists the 29 tables in that order (general-other-01, the sword at 27). Ours used the bundle's order, so the VM refused every 2701 (
UnknownTable) and the bar stayed empty.CLIENT_ABILITY_TABLE_ORDERincrates/nw-content/src/character_points.rsnow orders the tables.VM content files rebuilt (2026-11-09):
player-abilities-25810808.json(the ability rules now carrydelay_ms) andai-data-25810808.bin, for the new code; before, the sim loaded no ability table and no mob AI. Old files kept as.before-delaymsand.before-rebuild-20261109.Ability keys start no ability on the live server: FIXED in code (2026-11-09, on the game VM, not seen live). Cause: a start's test names the key press only in its own frame (
IfActiveAbilityMoveNamewithoutBackTicks). The server timed the press by its input message and tested it in the next tick, some ms later, so the press was never in its frame: 99 logged presses of Sacred Ground and Void Blade, 0 starts. The tests passed because they pressed and ticked at the same time. Now the press is of the frame of the first tick that reads it. Covers the reports of heals, ground spells, mana use and the void blade; each one still needs a look in game.Quest walk of the Monarch's Bluffs quests (2026-11-10,
local-data/reports/quest-walk-12a-20261110.md): 46 of 47 end, "Foreman's Fate" (12A_MSQ_06_ToMiclot) among them. The one marked broken,12A_MSQ_24_DefeatGawain, waits in a partial container on its game mode step (TaskGameModeQuestGawain, the soul trial); the walk cannot enter a game mode, and the game VM loads 0 dungeon scripts (dungeon scripts game_modes=0), so this trial is open. 10 talk steps of these quests name a topic that no NPC row holds; they end when the client sends the topic, which the walk does itself, so each one still needs a look in game.Mob charges hit nobody (Torok the Beast): FIXED (2026-11-10, tests only). Torok is
Boar_Named_00(sliceboar_aggressive, tree 788). The boar tree's charge (Attack_Charge_Start, the runAttack_Charge,Attack_Charge_End) comes for a target 3 to 7 m away when the attack cooldown and the charge cooldown (6 to 8 s from the alert, then 12 to 18 s) are over; a 50 % draw against run-then-gore. The run is aNavigationAction, and the server read damage windows only forCAGEActionnodes, so the run'sCAGE-Damageclip (DamageTableRowAttack_Charge, open from 0 s without an end) never struck. Now a move opens the windows of its action, and a window without an end strikes when the run gets to its target. Every mob attack that a move plays is covered. Test:a_boar_charge_strikes_the_player_it_runs_into. Not proven: that the hit lands in the world's reach check at the arrival distance (not seen live).Mobs that stand at a post wander (Boatswain Bridget): FIXED in the reader (2026-11-10), world files rebuilt (see the last commit line). Bridget is
Corrupted_Sailor_1H_Sword_Named_00. Retail12-4_crewmates: she playsPOI_LookAroundat her spawn, thenAttack_Close_1H_Sword_01and_04with strafes. The server's Bridget fights with the same attacks, but she wandered: her spawner slice (PointSpawner_1wp_Stand) names its waypointwp-nopathand the reader took only names likewp01. Also missed:WP1(lynx patrols),WP(blightfiend eat) and waypoints without a task (black wolf patrols). In the open world 11,984 spawns on a waypoint spawner had no path (6,631 of themPointSpawner_1wp_Stand). Tests:a_waypoint_is_known_by_each_way_the_slices_write_its_name.Ranged light attacks miss with the crosshair on the mob: FIXED (2026-11-10, tests, on the VM, not seen live). Live logs: 13 of 69 life staff casts met no mob (54 % the day before the aim fixes). Cause: the shot flew from the player's own place along the camera's yaw and pitch; the camera stands over the shoulder, so that line passes beside or under the mob under the crosshair. Now the shot (basic attack and projectile ability) flies to the aim point of the client's input when one came within 200 ms and no lock is set; else as before. Test:
a_shot_flies_to_the_point_under_the_crosshair. Heavy attack (life staff, hold): the server casts it (17LifeStaff_PrimaryAttackC2casts in the live log of 2026-11-10).Idle mobs never finished a walk: FIXED (2026-11-10, tests, on the VM, not seen live). Live log: the storm priest (
Damned_Cultist_Named_03) and the swarmers started a new wander walk about every 0.35 s. Retail12-5_survivors: an idle sailor'sMoveis followed by its nextMoveafter 3.98 s at the least (8.66 s in the middle). Cause: the brain made its plan again each think and cancelled the running plan on every difference; the weighted draw of the wander tree'sFidgetOrNothing(the step after the walk, not running yet) differed each think. Now only another choice at a selector that executes cancels the plan. Tests:the_draw_of_a_later_step_does_not_cut_the_running_step,an_idle_mob_walks_its_wander_steps_to_their_ends. Open: within 1 m of its spawn the wander tree'sCheckNearSpawnPosentry still cuts the first walks (retail rule Unknown).Sleeping pigs and other idle poses: FIXED (2026-11-10, tests, on the VM, not seen live). Retail
12-6_pillageship: three beach boars playPOI_Lay_Down_On_Side_LOOP. The level file holds the task at each boar's waypoint, but a route kept a task only when a behavior tree names it: 114 of the open world's 148 waypoint task names (11,500 of 18,264 waypoint tasks: look around, kneel, mine, pray, lie down, ...) were dropped. The AI data now takes every waypoint task name of the level at load. Test:a_beach_boar_lies_on_its_side_at_its_waypoint(real ground).Janszoon walk-home tests: FIXED (2026-11-10). He walked home to 0.5 m and then wandered up to 5.3 m from his home (his wander tree); the tests asked for under 2 m at the end. They now check the nearest point after the fight and that he stays near. All sim tests pass (968).
Storm priest (Demon Storm) checked, OPEN: in the test bench and on the real ground he aggroes and fights (knife attacks, Mark of Corruption, Corrupting Light). Live log 2026-11-10 02:00 to 02:02: he wandered (see the walk fault above) and took the player as target only when hit. Retail
12-8_demonstorm: he playsPOI_Ritual_Channeling_LOOPat (7349.18, 2917.83), 5 m from his level spawn, and retail12-9_demonstorm2spawns his swarmers two at a time (121 s, 136 s). The server spawns him and six swarmers at once at the level spawn with no waypoint: the encounter's own spawn script is not run (Unknown data source).Area spells show nothing (no heal circle): BUILT (2026-11-10, tests only, not seen live). Retail spawns a spell entity per cast: a card of the spell's slice, a spell state (class 2912: spell id, start place and turn, attachment, caster id, radius scale), the caster's ownership for some slices, and the slice's other states. Built: the typed spell state (round trip of the retail Sacred Ground bytes), a table of the slice and states of 1,036 spells (769 from the captures, the rest from
SpellDataSpellPrefabPathwith the states of the captured spell of the same slice; the captured slices match the game data in every spell, 0 differences), and the spawn at the moment an area opens, until it ends (at least 1 s). 52 of the 80 player ability spells have a slice; the other 28 are projectiles (another entity kind, not built). Open: when retail takes a one-pass spell's entity away is Unknown (1 s here).Empty towns, first part: BUILT (2026-11-10, tests only, not seen live). A scan of every retail capture (1,384 ledgers, 440,286 different spawn groups of 4,853 slices) shows what the retail server spawns by card. Our server now spawns the 834 settlement and fort props that retail sends with a card and a place only: the station buildings (one per folder and point, the tier seen most), lanterns, torches, fireplaces and house plots (
local-data/content/town-props-25810808.json, made bycardsurveyandtownprops.pyof the capture tools). The trading post building stays in code with the trading post. Open: event props (snow, ruin decals), house data, a settlement that no capture shows, and the tiers of our own world (the table has the tier the captures saw most). NPC in the trading post: the captures hold no server-spawned NPC at the trading post (22 NPC slices in all captures, none of a trader); what stands in the building is part of the client's own level data. Unknown why the user saw none.Two Sacred Grounds for one press: FIXED in code (2026-11-10, tests only). The action shows its aim with a targeting cast of the plain spell and then casts by raycast (the plain spell or the held upgrade). The server spawned both. Now an action that casts by raycast spawns nothing for its targeting cast.
Voice fails on the game VM: NOT FIXED, findings (2026-11-10). From the PC the public voice API answers (HTTP 405 to a GET of the prelogin route), TCP 5223 is open and its certificate holds the voice host name. The voice server on the VM saw 14 connections in all its logs, 7 ended in a TLS handshake EOF, and none from the game since the last restarts. The social service logs
client voice service error ... error=0about once a minute for the player. The client's own log on the PC is empty. So the client gives up before or at the first voice step; the cause is Unknown.Aimed area spells (Sacred Ground) open in the wrong place: FIXED in code (2026-11-10, on the game VM, not seen live). From the retail capture
general-other-01(thestrtposof the spell states, class 2912, of 11 area spells): the spell opens at the aim point the client's input carries (row 3; 0.1 to 0.5 m in 6 casts), else where the look from the camera meets the caster's floor (0.08 to 0.27 m in 3 casts). Retail's were 1.7 to 20 m from the caster; ours opened the whole 25 m reach ahead, so nobody stood in them. The earlier note "the client sends no point" was wrong. Still open: the server spawns no spell entity, so the circle does not show.Every buff and debuff timer shows about 10957 days: FIXED in code (2026-11-10, built, not seen live). Cause, from the retail captures:
SyncTimeChangecarries the world's start in ns since 2000 (retail 845485830908027957 in two captures 3 days apart). Ours sent the start in Unix ms, a time in 1970 on that clock. 10957 days is the time from 1970 to 2000.No trading post in the towns, so the quest step "Visit the Prydwen Trading Post" never ended: FIXED in code (2026-11-10, on the game VM, not seen live). Cause, from the retail captures: a settlement's trading post is not a level object. The retail server spawns it as an entity of its own (one slice asset for every town) and the client shows its interaction only with that spawn card. Our server sent no card, so the client had nothing to use (the VM log of a player's visit shows no trading post interaction). Built: the card and its 7 states for the 13 settlements whose trading post the captures show (932 retail cards), byte for byte as retail but the id and the order counts. Added the same day after a live check showed no trading post still: retail spawns a second entity on the same point, the building
craftingstation_t5_tradingpost_complete(a card and a place; 1,314 retail cards of the same 13 settlements). Our server now sends it too. Open: the order counts in the card are 0 (the sim keeps none), and a settlement that no capture shows has no trading post yet.Life staff heals give no health: FIXED in code (2026-11-10, on the game VM, not seen live). The ability key fix was seen live first: Sacred Ground, Light's Embrace and Orb of Protection cast and open their areas (VM log). Cause of no heal: the heal effects change health by a share of their spell's hit (
HealthModifierDamageBased: Sacred Ground 0.16, Light's Embrace 0.8, Divine Embrace 1.2) and a spell's effects came without a hit, so the share was of 0. Now the hit is the caster's weapon damage times the coefficient of the spell's damage row (Inferred from the data and the tooltips;UseHealScalingValueis not read). Corrected the same day (built, not on the VM yet): the heal base is the weapon damage alone. The first form multiplied it by the spell's damage row, and the heal rows hold a coefficient of 0, so Sacred Ground and Light's Embrace still gave 0 (VM log:hit_amount=0.0). Still open: an aimed heal opens itsCastDistanceahead of the caster (Sacred Ground and Light's Embrace 25 m), not where the client aims or on the caster; the server spawns no spell entity, so the circle does not show (retail spawnsspell_aoe_heal_foe; its place is not in its card). The sim now logs each item call (client item call) for the dye report.Other players' animations: PARTLY (2026-11-09, on the game VM). Each viewer now gets another player's sequence time (
slayerSeqTimeRel, retail 1,750 of 1,751 states) and its slayer state in the first 3 states after a start only (retail runs of 1 to 8). Review of the whole path against retail and the client decompile (same day): the clock of another player's states (ours 1 ms behind the server time, retail 20 to 40 ms), its facing (retail's body faces within 15 degrees of the look in 91 % of the moving own states) and the children of the states match retail, so those were not the cause. The client plays another player from a time-ordered ring of full states (BuildTargetStateRemoteEntity,FUN_144871ad0): it blends the two states around its render time, the server time less a delay. Built from retail after it (on the game VM, not seen live): a weapon key starts the new weapon's draw in the second slot at every swap, not only from no weapon (retail16=2c 18=<draw>after 351 weapon keys); a sheathe sends16=2c 18=9b2c; the first card carries the movement state the player has then, not the stand of a spawn; another player's sequence time takes a new absolute part only when it leaves the byte's reach (retail: none with a start); the sim logs every state of another player (player state). The limit that stays: the client does not name its movement sequences (97 % of retail's own movement starts have no client row), the retail server picks among 79 moving, 136 turn and stop and 127 stand sequences, and ours has one of each per weapon stance, the most common in the captures; crouch and prone have no sequence in our table. Not working yet: attacks and weapon swaps others see, the walk (the server restarts the move state every 0.3 to 0.8 s), the staff pose, and the place (others see the server's estimate, so a player can float). The sim logsplayer actionstates as hex for the comparison with retail.Players see each other: FIXED (2026-11-09, seen live on the game VM: two players see each other). The cause was the high flag byte of the first position of another player (ALC child 42, the high byte of the client actor flag word at
+0x450): our card copied the own player's53, and retail sends03on 16 of 18 first cards of another player in the own captures. With53the other player was there (targetable, could cast and hit, its weapon showed) but its body was not drawn. The history of the earlier changes follows. The change below is on the game VM, and the two players still did not see each other after it. In the first test with two real clients, two players 2 m apart could chat but did not see each other. The server sent another player's spawn card again every 30 bundles (about once a second) and filled it with every state of the own player (58 classes, the coins and bags among them). Retail sends that card once, when the player comes into view, and then only its states (general-other-01: one card in a slot, then up to 7,368 groups without one), and the card holds 13 player classes (look, gear, vitals, mount, faction and a few more). A card again starts the client's load of the slice over, as it did for mobs. The server now sends another player's card once, with those 13 classes only. Second change (2026-11-09, on the game VM, not seen live yet): the card also gave the other client the own client's private slots. In all 40 first cards of another player in the own retail captures, the position state (11) and the vitals (15) carry slot 0 only (slot byte01) and the faction (3152) slot 2 only (04); our card sent03,03and06, as on the own card (slot 1:distGroundand the rest, the mana and afflictions, the pending PvP flag). Now another player's card and any other entity's first position carry the public slots only. The client log of the live test shows that the client did make the other players'slices/remoteplayer.dynamicslice(the same 26 slice warnings per player as retail logs), so the card came through; the client decompile picks local or remote by the 3935characterIdonly, and ours passes. Live test of the second change: still no body, but each player saw the other's blade, so the entity, its place and its paperdoll arrive and only the body is not drawn. Third change (2026-11-09, on the game VM, not seen live yet): the card now carries what retail's carries of who the player is. On the own card and on every other player's first card retail sends the 3935characterNameandhomeWorldId(slot 2 children 1 and 2; the layout is04 9f <id> <name> <world> 01 00on another player's card, withlookingThroughLoadout0), the vitals'vitalsDatalife block withhealthChangeFlags0, and on another player's card its level alone (89901 01 <level>). Ours sent the id and the connected flag only, no life block and no level. Not sent yet, as this server does not have them: the 3935 platform children 7 and 8 (platformAccountId, the Steam id, andplatformType), the remote stat multiplier table (1525), the slayer script lists (6234), the status effect list (4236), and the social title (4176). The sim now logs each other player's card as hex at debug level (player card), so a live run can be set beside the retail bytes. To check: two real players near each other on the VM.Quest item drops (2026-11-09, tests and the quest walk). The walk stopped 698 quests at a "have and return items" step with no source: a quest's step was built with no drop and no container chance, a mission's with both. Retail side quest captures show the rule: the item of a kill drops into its loot bag (Lost, white wolves, boars, a grizzly: the task counted 30 to 50 ms after each bag use), the item of a container comes at the task's chance on top of the container's own loot (the tutorial chest's table gives 1 potion, retail's bag got 2), quest objects and the cactus list drop at the gather, and the items go back at the turn-in (Earth Will Provide: the bag slot of the 2 items held the reward after it). The server now does the same for quests and missions, and gather steps with a container chance too. Walk: 17,648 of 18,441 quests end (16,976 before). Not seen live.
Passive ability triggers (2026-11-09, tests only). The
AbilityDatarows of mastery points, worn perks, attribute thresholds and their helpers now fire on a player's hit (OnHit,OnCrit,OnKill), on a mob's hit on a player (OnHitTaken), on a block (OnBlockedHitTaken) and on a guard break (OnBlockBreak): about 900 of 1,202 combat rows. They check the weapon, attack type, damage row, health, stamina and mana shares, status effects on either side, distance, activation cooldown and required abilities, and they apply and remove status effects, change the hit's damage and crit, heal a share of the hit, give mana and stamina, and cut cooldowns. A row with a condition the server does not read yet never fires (action windows, hit counters, grit, markers). Not seen live.Website link, part 2 (2026-11-09, tests only). The leaderboard report now gives each board its sub-group, value kind (Time, Ratio, Days ...), order (lowest first for clear times), whether it holds every world, what it ranks (character, company or group), the current rotation and its reset time (the season end comes from the client's remote config). Rows keep the game's shared ranks (1, 1, 3), keep decimals (clear times in seconds), and group rows name every member this world knows. With
[website] site_urlin the edge config,edge-httpgets the message of the day for character select from the site once a minute (ETag, last good copy kept), and the newGET /launcher/news-sourcetells the launcher where the site's news feed is. The client shows the message of the day as plain text (markup is off in its screen files). How a site connects:docs/website-integration.md.Status reporter for the website (2026-11-08, seen with test bots and a local copy of the website). New
status-reporter(config/status-reporter.toml): one per world, on the game machine, sending out only. Every 15 s it reads the metrics pages of each part (login, gateway, director, sims, social; a part is up when each of its pages answers with a Prometheus text page, also an empty one: a server that just started has counted nothing yet) and posts the status to/api/ingest/status: the part states, the players of the sims (sim_players) and the largest gateway worker p99 round trip. Every 5 minutes it posts all 422 boards of the game data to/api/ingest/leaderboards, with the top 100 named rows of each board's current rotation; a row whose entity is no character or company of the world is left out. Each report carries the world id, the time and a lowercase hex HMAC-SHA256 oftime.bodywith the world's secret (the website's test vector passes).content-tool leaderboardswrites the board tableleaderboards-<build>.jsonwith the English names and groups. The rotation keys of[leaderboards]are now one shared type for the sim and the reporter. Live check: the local site went from "No signal" to Online, and showed Players online 3 while 3 test bots were in the world.Discord role access (2026-11-08, tests only). With the allow list on, the holders of a role in
[discord] allowed_role_ids(in theguild_idserver) may log in too, so a whole group of testers needs no per-person list. The roles come from the member record the login already reads; each Discord login stores them (global migration 0008,discord_login.guild_role_ids), and each Play checks the stored ones, since Discord cannot be asked then. A role given or taken in Discord counts from the player's next login. To check: a role holder logs in and plays on the VM.Fast travel kneel (2026-11-08, seen live). Live, inn recall and shrine travel still did not kneel, while unstuck did. The server's own pose log showed our kneel matched retail's usual form byte for byte: the kneel sequence alone (
15=05), from standing still, with the channel flag and interaction off before it in the same bundle. Unstuck sends a full state with its sequence, and it plays. Retail also sends the fast travel kneel as a full state (13=1f 15=05) in 21 of 487 starts. Live, the full form did not kneel either (log:13=1f 15=05sent at 20:05:53). The server now sends the unstuck kneel (13=19 15=b247), which plays live, for every fast travel and inn recall too (the user's call: it is the same animation). Live, still no kneel with the same pose. A client trace then showed the game does get the channel flag (its fast travel teleporting flag turned on at the start and off at the cancel), and the unstuck kneel plays from the unstuck accept message (3980) alone. So a fast travel now also sends the unstuck accept at its start (with the channel's wait) and the unstuck done message (2190) at its end or cancel. Seen live (2026-11-08 20:40 UTC): the fast travel kneels. The inn cooldown stays 15 minutes: right after 9 retail recalls, at most 884 s were left, never more than 900 s.Inn recall timer and landing (2026-11-08, tests only). Live, after a recall the Game Menu showed a 10,956 day countdown, and the recall put the player behind the innkeeper. The timer: the inn point's cooldown end went out as a Unix time, and the client counts from 2000-01-01 (10,957 days later). It now goes out on the client's clock. Retail's cooldown is 15 minutes (900 s in all 449 retail inn points), not one hour. The landing: the inn's level point is the innkeeper; retail lands 3.00 m in front of the innkeeper, at the same height (9 of 10 innkeepers with retail recalls; one lands 1.00 m in front, why is Unknown). The server now does the same. The server also logs each own pose change at debug level, for the fast travel kneel, which still does not play.
Inn recall and the Game Menu store box (2026-11-08, tests only). Live, "Recall to Inn" stayed grey and the store box on the Game Menu spun. One cause: the home point state named the bound inn as the point the player had just used. At each such state the client starts that point's 900 s cooldown from its own clock (a client trace: the inn's cooldown end was the login time plus 900 s). The Game Menu then checks the cooldown every second and redraws, and each redraw asks for the store again. Retail names a used point in 16 of 1,573 login states and never an inn (0 of 4,347 states). The server now names no point. To check: log in bound to an inn, open the Game Menu.
Unstuck kneels and stands up as retail (2026-11-08, tests only). Live, after an unstuck the character kept a stiff pose with arms out and the weapon pose until a jump. Retail sends a kneel pose (
13=19 15=b247) and turns interaction off when it accepts the unstuck, and a stand-still pose (13=1f 15=b910) with interaction on at the move. The server sent neither; it now sends both, and it also stands the player up when the move fails (Inferred). To check: use unstuck, then walk.Our own voice service (2026-11-08, seen live with one player). New
voice-server(config/voice-server.toml) and the voice prelogin in edge-http ([voice]ofconfig/edge.toml). The game signs in, joins its map cell rooms within 0.2 s ("channel joined" inGame.log), sends speech while push-to-talk is held, and the player heard its own voice through the relay. Three fixes found with a trace of the voice SDK: the status answer carries the request id, the room presence names the occupant jid, and the bound jid keeps the SDK's+Baccount name (without it the game never saw itself in a room and showed "join failed" after 60 s).Quest walk and play bot (2026-11-06).
sim quest-walkplays every quest of the level with a test character and writes which end and where the others stop: 16,976 of 18,441 end. The GM lines!queststate,!questplanand!stateshow a quest's place, its next steps and the player's state.nw-testclient playruns a bot on the live servers through the client's calls: it leaves the tutorial, plays quests in the order their requirements allow, and plays activities. Seen working over the wire: level up, PvP flag, crafting, shrine fast travel, an expedition's remote entry and a town board take. Not played yet: groups (needs two bots at once), mounts (the summon key input), music (equipping an instrument) and inns (which id a check in names is Unknown). The bots log in through a second edge in password mode on port 8444, because the live edge uses Discord.Test bots at level 65 in good gear (2026-11-06, tests only). New GM line
!gearup: for each worn item it wears the best item of its kind (the same item classes, no fixed gear score, the highestMaxGearScore) at that gear score; the old item goes into the bag. A player's hit scales with its weapon's gear score, so a Soldier bot now hits with a gear score 800 tier 5 longsword in place of the gear score 60 kit sword. The bot's setup is!god on,!heal,!level 65,!gearup. Seen live on 2026-11-06: the setup lines ran, and a new Ranger bot finished 18 of 20 starting quests (the other 2: no hit landed on a Withered Grunt, and a mandolin step the bot does not play).A town fast travel lands on the town's ground (2026-11-07, tests only). Live, a travel to area 30155 put the player at height 104, under the terrain at 111.4; the refused falling moves then put the player back at the shrine it had left, under that shrine's platform. Retail town and outpost travels arrive at the retail home point of their area (Monarch's Bluffs 19 of 19, area 30253 10 of 10, outpost 40325 12 of 12). The server now uses that point, and a teleport makes the new place the one a move back goes to.
Voice chat rooms follow retail (2026-11-07, tests only). From 7,404 retail room lists (405) of 556 captures: the list holds the 512 m squares that a 512 m box around the player overlaps (2 to 4, own square first; it held retail's list in 5,697 of 6,270 cases, the exact rule is Unknown), was the own square only before (retail's list in 496); the layer is
0in the open world and a 16-digit id per instance (113 captures switched layers when entering an instance), was always0; every 405 and every group room (4200, 312 of 312) answered a request within 1 s, so the server pushes neither. The test bot has avoicecheck (service, login ticket, rooms, join ticket). Real voice still needs a Vivox-compatible voice server; none exists for this client's SDK.The inn home point carries its retail name (2026-11-07, tests only). Live, inn recall stayed unusable with its timer at 0. Our inn entry matched retail's in place (the innkeeper on the inn's
InnInteractlandmark), cooldown, use time and id ([17680737194352937251]0is the Prydwen inn element's own id; correction 2026-11-08: retail never names it as the used point), but its name was empty; retail names it, for example@12_InnName(23 retail inn points, now a table). Whether the name is what the client needs to allow the recall is Inferred.The shield comes out with the sword (2026-11-07, tests only). Live, the shield sometimes stayed on the back in combat. Our paperdoll maps always kept slot 27 sheathed, so the client's own draw could be undone. In 1,085 retail ledgers the shield of slot 27 is drawn and attached with a longsword or a flail from option 24 or 25, and stays sheathed with other weapons. The server now draws and attaches it with those weapons, and other players see it too.
Mobs stand on the floor at spawn (2026-11-07, tests only). Live, timber wolves near Prydwen walked 3 to 6 m in the air. Their spawn was 3.32 m over the floor, and the spawn landing only moved a mob down 3 m. Retail wolves of the same spawn stand 0.10 m over the floor. A spawn now lands on the floor at any height. 5,088 of 115,965 open world spawns were more than 3 m up. All 10 retail tutorial mobs are within 1 m of our floor, the ship deck too.
A login starts on the floor (2026-11-07, tests only). Live, a login sometimes dropped the player a few feet. The saved spot is the last client position, which can be in a jump; the server only fixed spots more than 150 m up. Retail's first login position is 0.00 to 0.08 m over the floor. The arrival now lands on the floor under it (ground or a building), or at swim height in water.
The fast travel kneel plays (2026-11-07, tests only). Live, the countdown ran but the character stood still. Retail starts the kneel itself: 40 to 80 ms after the travel call, the player's animation state gets sequence 5 (461 of the retail 3713 calls and 30 of 30 home travels). Our server sent nothing. It now sends that sequence. A rider first gets off the mount with 5937 reason 0, as in all 23 retail rider travels, and then kneels standing still. Live test 1 (2026-11-07): still no kneel, and after the arrival the sword and shield showed in the hands while the server held them sheathed. Retail stands the player still after the arrival (
13=1f 15=b910 16=2d 18=00, 65 of about 100 arrivals) and turns the player's interactor off for the channel (all retail travels checked); the server now does both. Why the client did not kneel is still Unknown.Fast travel to a shrine works again (2026-11-07, seen live: two shrines reached). Live, every shrine travel failed with "fast travel failed". The server found the place by the position the client sends, inside the place's radius. A shrine's radius in the level is 0 m, and the client sends a position up to 3.4 m away, so no shrine matched. In 751 retail fast travels (406 shrines, 122 settlements, 60 of type 22, 163 inn recalls), the type and the area id the client sends name exactly one level place every time. The server now finds the place by its type and area id. The test bot sent the place's exact position, so it hid this fault.
Free fast travel switch and a GM line for azoth (2026-11-07, tests only). New
[fast_travel] freesetting inconfig/edge.toml, next to[experience]:truemakes every fast travel to a settlement or a shrine cost no azoth. The server writes it into the remote config asjavelin.playtest-disable-fast-travel-costs(the client's own switch), and the sims read the same value, so the map and the server agree. Left out, it isfalse: the retail cost. No config file may set that key by hand. New GM line!azoth <amount> [player]sets the azoth, at most the azoth cap.Town and outpost points on the map, and exact shrine points (2026-11-06, tests only). A scan of every home point list in 816 retail captures found 22 town and outpost points, 131 shrine points and 3 crow's nests. Each one has the same position for every character, so it is fixed game data. A town's point is added when the player first comes into the town's territory, and a new character has none. The server now keeps the towns each character has been in (world migration 0033) and sends their points with the retail position, name and cooldown. The shrine points now use the retail positions too: the old rule (2 m beside the teleporter) was wrong for 27 shrines of other teleporter models. Crow's nests are listed once charted. Not seen live yet.
Charted shrines and landmarks on the map (2026-11-06, seen live). A trace inside the client showed that the map counts a shrine charted only when the player's home point list holds a shrine point in its territory. The server now lists each charted shrine. A landmark is now charted at an entry after its discovery, as in 66 retail cases. Live: learned shrines show as discovered, and two landmarks changed from "?" to their icon.
The change mount screen opens (2026-11-06, seen live). A trace inside the client showed the cause: the screen asks for the store catalog while its script still loads, and the client skips a loading script when the "catalog ready" signal comes. The server answered in 12 to 18 ms; the screen finished loading about 30 ms after it asked. Retail answers over the internet and is slower. The login server now waits 1 second before the catalog and store answers.
Shrine and town names on the map (2026-11-06, seen live). A trace inside the client showed the map's hover script stop on every shrine and town icon: it asks for the territory's governance (taxes, upkeep) and got nothing, because the server never sent the land claim manager state. Retail sends it at login on a world entity it first creates with a spawn card (the same card in four retail captures): 13 claims, their positions and one tax set for all. The server now sends that card, its position and the same claims, positions and taxes once per client, with no company owner. The first try sent the claims without the card and changed nothing.
Character select shows the worn armor (2026-11-06, seen live). The screen draws the look the login server sends; it was always the character creation look, with the starter preview armor. Retail's look holds, per armor slot, the checksum of the appearance the character wears (skins too; 427 slots of retail login data checked). The game server now saves that look at every item save and leave (world migration 0032), and the login server writes it into the character select look.
Spirit shrines are sanctuaries (2026-11-06, tests only). Retail puts its
Sanctuaryeffect on a player at a shrine: a scan of 1,080 retail captures found every fast travel to a shrine arriving with it on, and 878 walks across the edge (off at a median of 7.6 m, on at 5.4 m). The server's sanctuary rule (it holds back or takes off the PvP flag) now covers 6.5 m around each of the 133 shrine landmarks, as well as the towns. Still open: the server never sends theSanctuaryeffect itself (not at towns either); retail sends it in the lightweight map, and which of its two data rows sets that is Unknown.Play bot plays steps as a player (2026-11-06). It gathers a quest object or a gatherable for a step's item with a client's gather interaction (it named every node with an empty id before, so the server tied that id to one node: "Depleted", then "out of reach"). It fights the placed mobs when a step counts one spawn group (a GM mob is in no group), heals after
!god on(a mob killed it at its landing place, and a dead player wakes no mob), and fights on while its hits land (a level 34 bear has 8,776 health; a starter weapon hits for 42). A kill step whose fights saw no mob or killed none is "not played", not "broken". Live:04A_Side02_01_ObeliskNotes,04A_Side09_01_LostAlchemy,1111_0201_deluge,02A_Side06_01_Bearsand1104_0201_waterfallsturned in, and the harvest activity completed. The sim logsmob hurtandmob healed at the end of its resetat debug level.Audit of the whole code and its fixes (2026-11-05, tests only). The audit looked for stubs, fake success answers, demo data and half-done features. The findings and the state of each one are in
local-data/findings/2026-11-05-honesty-audit.md. Items now keep everything they had (perks, gear score, durability, dye) when they move in a trade, a trading post sale (world migration 0030), a drop or a loot bag, and a full bag no longer loses anything. The server checks what the client claims. A gather or a lore read needs a node or note of that kind nearby in the level data, and the trading post opens only at a settlement. Craft fees, standing points, camp skins and voice channels are checked as well, and music notes are judged against the game's 655 note charts (content-tool music-charts). A quest step the server cannot run now waits instead of finishing at once; a step with nothing in its data still finishes, as on retail. A ban ends a live session. Social saves retry instead of being dropped, company coins can no longer vanish (world migration 0031), and privacy settings are stored and followed (global migrations 0006 and 0007). Mobs react to stuns and to their own tree's buffs. The PvP flag waits and counts down as on retail. Worn armor and weapon gear score set damage, and each start rolls a new dice seed. Queues and war sign-ups are refused until the PvP modes and wars exist. Still open: attributes in damage (the formula the data suggests does not match retail hits), dungeon doors, four quest step kinds, and projectiles and beams fired by behavior trees.Open world capture survey and the first fixes from it (2026-11-05, tests only). All 1,071 open world captures were read. 238 of 265 kinds of client calls reach a sim reader, 168 of 194 kinds of server messages are built, and 70 of 118 kinds of world states are filled. The charm slot call (6983) read 8 bytes too many and failed on all 17 retail calls; it is fixed. Leaving a queue (1066, 2385) and leaving a game mode (3309) now work. Dropping a quest (3836) takes it out of the journal without marking it done, in 6 bundles as on retail. Creature triggers (3135) now come from the mobs' behavior trees and action lists (971 slice trigger components, 1,141 trigger activities). The incapacitated state (670) is set at death's door. The mob copies were built again with every retail state, and the sim now reads a state that has no reader of its own by its layout.
Held-aim abilities and Mannequin tags (2026-11-04, tests only). A key press test (
IfActiveAbilityMoveName) now counts back its ownBackTicksframes; without the attribute it sees only the frame of the press (Observed:FUN_142bec920fills the new test with zeros). Before, every test saw a press for 680 ms, so Shooter's Stance left its aim at once. Each action'sSetMannequinTagactivities now start and end with theirIfThenElsebranch, pick their first named case that holds, and set or unset their tag onOnEnterandOnExit; a tag stays on until something unsets it. Before, every named tag counted as set while the action ran. Result: Shooter's Stance readies, aims, shoots on a click and starts its 18 s cooldown, then reloads; Stopping Power starts. The spear's Javelin throws on a click from 433 to 600 ms after the key, as its list says (it clears the press when its ready step starts). The ability table is made again (content-tool player-abilities). Checked against the retail musket capture: a key is a tap of about 130 ms (ability3,ability3_hold,ability3_release). Tests:shooters_stance_aims_and_a_click_shoots_and_starts_its_cooldown,every_weapon_ability_starts_from_its_key,an_ability_move_test_counts_back_its_own_frames,tag_activities_keep_their_changes_branches_and_cases.Privacy settings service (2026-11-04, tests only):
game.<domain>answersPOST /players/<persona>/games/new-world/privacy-settingswith the retail default of each known setting asked for, in the retail order (the retail request gets the retail reply byte for byte); the remote config fillsomni.privacy-settings.client-endpoint. A change of a setting has no capture and no route. Notes:docs/re/2026-11-02-shop-services.mdsection 2.2.Transmog token counter (2026-11-05, tests only): the inventory's token counter spun forever because the entitlement list had no
Transmog_Token. The list now holds it with 0 tokens (Inferred: this server grants and charges none), and its last page carries"paginationToken": nullas on retail.Store answer for the change mount screen (2026-11-04, tests only): one empty static slot per hidden store, offers named by their mount's store product (47 of 52 store mounts have one), 99 % off on a free offer,
304to the client'sx-amzn-if-none-match. Live check still needed.Lost progress after restarts (2026-11-04; tests, and the new build is on the local stack). The database held every place the server had seen you find: all 17 discoveries and charts in the logs are in Tium's saved bits. The places from the morning of 2026-11-03 (Brysedd Overlook Shrine, Withered Farm, Withered Mines, a camp) never reached the server. The client only sends "entered" for a place it does not have, and our phasing bug (fixed in
2beb44eethat afternoon) kept it from sending one there, so visit them again. Four save gaps are fixed. First, every server program now stops cleanly on SIGTERM as well as Ctrl-C. Before,kill, systemd and Docker ended them at once and the sim skipped its last save round (live check: the sim exits with code 0 on SIGTERM). Second, a player moved to another sim after its sim was lost now keeps its achievement bits, so new finds are set and saved. Third, after a handoff the new sim saves the items and quests it took over, which the old sim never saved. Fourth, a handoff keeps the PvP flag and the quest auto-pin setting. Notes: findings/2026-11-04-lost-progress-audit.md.Admin site redesign (2026-11-04, local build only, not on the VMs yet): every page now looks like the game's map screen. A dark tab bar on top; maps on parchment with dark edges; slate panels with a gold top edge and serif capital titles; square buttons. Live keeps the map full size, with a tool column on the left (Selected, Events, Players, GM tools, Server, Key) and the server standings at the top right. Home, GM, Studio, Records, Scripts, To-do, Captures, Map, Live 3D and the login page use the same panels. Night and day themes, system fonts only. How to use each page is in
docs/admin-site.md.Admin site fixes (2026-11-04, local build only, not on the VMs yet). Map: the Mob spawns, Gatherables and Landmarks boxes showed nothing until you zoomed in very close; now a zoomed-out map shows a square per 256 m cell where those points are (
/api/world/spawn-cells), and zoomed in shows each point as before. GM page: it now lists the players online on every sim and gives the picked player the same controls as the Live page (teleport, heal, god mode, kill, kick, items, quests, level, mastery, coins), with a line on what each admin rank may do. Studio: a "How Studio works" panel. Live 3D: a low-poly wire world (ground from the height grid, rocks, buildings and props from the level collision file through/api/world/shapes, the biggest shapes first up to 200,000 triangles), "Go to x, y" so the page shows the world with no one online, and a switch for the map colours. Trees and bushes: the tree and bush gatherables of the world file, as low-poly cones sized by the size word of their name (our choice of heights). Theregion.vegetationfiles were decoded (note in the research repo) and hold only ground cover (grass, brambles, small rocks, ferns, ivy), no trees; trees that cannot be chopped are not shown.Admin home page server figures (2026-11-04, local build only): a Server panel shows the memory used of the total, the memory use, the processor cores and the processor use of the machine the admin runs on (
/api/host, read from/procevery 3 seconds), each with a bar.Admin Live 3D look (2026-11-05, local build only, not on the VMs yet): the ground is now flat low-poly faces coloured by height and slope (seabed, shore, grass, highland, bare peaks, cliffs), with a soft wire on top and a small light/dark change per face. A coarse ground (32 m faces, 8 km square) goes out to the horizon around the fine one (6 m faces, 1 km square), with a sky that fades to a hazy horizon and fog. Rocks and buildings are lighter than the ground, trees have two tiers of leaves, and the Go to camera is lower so the horizon shows.
Admin site through a relay (2026-11-04, live: the user logged in with Discord at the public admin name):
blighted-admin relayruns on another machine and takes the browsers;blighted-admin servewith[access.relay]runs on the game machine, connects out to it over TLS where each side checks the other's certificate (blighted-admin relay-keys), and serves every admin page and the live stream through it. No port opens into the game machine; a site behind a relay serves no capture data. Set up 2026-11-04: relay on VM 600 (port 9190 for browsers, 9191 for the agent), agent on VM 601; public at the admin name through NPMplus on OVH with a Let's Encrypt certificate; the login page, Discord login start, host check and login check answer from outside. A site with Discord login now offers only Discord: the name and password form is gone and its route answers "password login is off". The login page layout is fixed (it sat in the narrow menu column).Store mounts and a Marks of Fortune wallet (2026-11-04, tests only). The in-game store lists the 52 store mounts from the game data.
[shop] enabledturns the store on or off. With[shop] freeon, every mount costs 0, as in retail's last weeks (the capturemount-menu-buying-all-store-horsesshows 35 mounts bought that way). With it off, a mount costsmount_price, or its own price when one is set, paid from the account's Marks of Fortune.blighted-admin give-marksgives an account Marks. When the game buys a mount (898), the sim answers 5936 right away. It then pays and saves the unlock to the account in one transaction (account_entitlementandaccount_wallet, global migration 0005) and answers 1285. A wallet that is too low gets no answer. A bought mount works on every sim and after every login, and the store's entitlement list shows it.content-tool storewrites the store table thatedge-httpreads ([shop] store_table). Each store call is logged with its header names, to find out what the change mount screen waits for. What retail sends for a refused purchase is Unknown.Experience settings (2026-11-04, tests). Every experience multiplier is 1.0 by default, which is retail without an event. Every retail capture had the shutdown event running (character, trade skills and weapon masteries at 2, territory standing at 3), which is why a new character reached Riding 39 where the mount quests give Riding 20. The
[experience]section ofedge.tomlsets each multiplier on its own, with a comment above each one:character,umbral_crystals, 19 trade skills, 16 weapon masteries and the standing of 14 territories. The server writes them into the remote config the game reads (javelin.xp-multipliers), and the sims read them from there. No settings file may set them itself. The local test server runs the live event values.Saved servers in the launcher (2026-11-04, tests; the window was checked on Linux in the Night and Day themes). The Server section lists each saved server with its name and address, and the selected one is raised. A click connects. A new address is saved once it connects, under the server's own name. Each server keeps its own launcher login, so switching servers logs you out of nothing. "Saved as" renames the selected server, and Remove forgets it along with its login. An older
settings.jsonwith one server and token becomes the first saved server. Windows and Linux share one code path with no system-specific part, but the Windows build was not compiled on this PC (it has no MinGW C compiler forring).Admin tools for Discord accounts (2026-11-04, tests only):
blighted-admin grant-rankandrevoke-rank, and the ban and rank forms of the GM page, find an account by its login name, Discord user id or Discord username; the rank list shows the Discord username. A server-mode admin site with[access.discord]has Log in with Discord: only a Discord user with a game account and an admin rank gets in, and the login writes an audit row.OpenSSL built into the programs (2026-11-04, tests only): edge-http, rep-gateway and nw-testclient no longer need the OpenSSL of the host, so one build runs on this PC (OpenSSL 4) and on an Ubuntu 26.04 game host (OpenSSL 3.5). The DTLS, edge and gateway tests pass.
Mount food from a quick slot (2026-11-03, tests only). Pressing quick slot key 1 to 4 (
Use_Quickslot_1to4) uses the item in slot 14 to 17. Before, the server read only key 1, and through a different input. Mount food (IsMountConsumable) works only while riding and is used 690 ms after the press, as in retail (9401_tutorialfood-Hungry-as-a-horse: pressed at 67.12 s, used at 67.81 s). It ends any mount food already active (RemoveStatusEffectCategories), fires its game event (the quest step9401_TutorialFood, andRiding2,500 forMountConsum_GruelT1) and plays its effect's visual script (608, as retail does; the rule that this follows the effect'sShowTextInDamageNumbersis Inferred). A game event with aLootLimitIDcounts toward that limit, and once the limit is reached it fires its limit-reached event instead. A consumable with aRequiredInactiveLootLimitIDis refused at that limit, so mount food gives riding experience 3 times a day (Mount_FoodDailyXP_Limit).Mount screen, rally checkpoints and riding (2026-11-03, tests only): the change mount screen gets the
isChangingMountecho it waits for; a race task counts each checkpoint; a rider's server body stays on the floor, keeps its mount's speed and follows a rider's camera (retail ride replay: 1.11 m off instead of 2.95 m).Mount summon after a login and quest gaps (2026-11-03, tests only): an ended summon cooldown is sent as 0; each store answer holds one hidden store, so the client's catalog finishes and the change mount screen can stop spinning. Quest steps that could never finish: food status effects fire their game event (the mount food step
9401_TutorialFood, and its riding experience), a region gatherable's gather has its variant's interact tag (the Gawain crown of12A_MSQ_24_DefeatGawain), achievement steps readA || Band!Aexpressions (90 tasks), POI steps read a tag list (4), quest success events (2) and recipe game events (2) reach the quests, faction rank steps read the faction's progression (24). Still open from the audit: encounter result events (45 tasks), encounter-spawned gatherables (9), PvP kill and fort events (7), volumes in deferred slices (12), kill-contribution mobs with no spawn (51).Discord allow list (2026-11-03, live for a listed user: Discord login with the list and the server check on, game start, characters there; a refused user is tests only):
[discord] allow_list(off by default) withallowed_user_ids; while it is on, only those Discord users can log in and make accounts, and a user taken off the list is refused at Play even with an older launcher login. New Discord accounts have no staff rank (test). The[auth]and[discord]options ofconfig/edge.tomlnow say how to turn each one on and off.Password account to Discord (2026-11-03, live: a linked password account opened by Discord login with its characters; contact details saved):
edge-http link-discord --username <name> --discord-user-id <id>points a Discord user at a password account, so Discord login opens its characters, ranks and account items; nothing is copied and the password login stays for the admin site. A Discord login whose new account has no characters moves over; one with characters is refused.Discord login keeps contact details (2026-11-03, tests only): the login asks for
identify emailand saves the Discord username, email and email-verified flag of each Discord login, written again at every login, so staff can help a player get an account back (global migration 0004). A new[discord] guild_idlets in only the members of one Discord server: the login then also asks forguilds.members.readand refuses users outside it. Runedge-http migrateafter this update.Four live bugs (2026-11-03, tests only): the inn check in is answered (it uses the open's interaction id); the mount quest's torches light when the player walks within 9 m (the detection sphere of 238 quest objects); a water gather ends with the own done state, so its animation stops; shrines are charted, and every phasing area has a phasing entry so the client reports entering the areas inside them.
Server ports set in the config (2026-11-03, tests only):
public_https_portandpublic_ping_portinconfig/edge.toml(default 443 and 80); the links tologin.<domain>andgame.<domain>name the HTTPS port when it is not 443; the launcher takesexample.org:8443; the launcher's loopback proxy sends tunnels to that port and the region ping to the server's ping port, and now runs on Linux too for a client patched with--aws-proxy.Mounts from the quest (2026-11-02, tests only): the mount quest runs to its end on the game data; a quest's success event now gives its categorical progression (Riding 500) and achievement; a game event's
AchievementIdis earned when it fires, so the reward box gives the horse; a jump on the mount sets the 1 s regen delay. A player taken from another sim keeps its achievements, so achievements set after a sim border reach the client (before: they were lost).Janszoon and mob attack picks (2026-11-02, tests only): Janszoon slams his anchor up close (retail playthrough 819480 ms); a UtilitySelector keeps its last pick only while it is in the running plan (client
FUN_1426355b0), so mobs mix their attacks again.Shop services rerouted (2026-11-02, live-checked on Linux): remote config fills
omni.fcs.endpoints.catalog-service,entitlement-serviceandtransaction-servicewithgame.<domain>(the same fill as the leaderboard endpoint); the game host serves an empty catalog, no stores, no entitlements and202for a sync, with retail ETags and304.Region ping rerouted (2026-11-02, live-checked on Linux):
dynamodb.<region>.amazonaws.comis a mirror host; edge-http answersGET /pingwith the retail body on its plain HTTP listener; the Windows proxy passes the plain ping to the server's port 80;--aws-proxypatches the pinger's client too (fifth cave, found on ourNewWorld.exe).News hosts rerouted (2026-11-02, live-checked on Linux): the news host and its image host are mirror hosts; edge-http serves our own message of the day, news stories and menu tiles from
config/cms/as S3 objects with ETags (shared with the remote config sets); the server refuses to start without both hosts in[aws_mirror];--aws-proxypatches the news client too (fourth cave, found on ourNewWorld.exe). The tracked files have no news.Sim tick speed (2026-11-01, bots only): with 1,100 bots, the busiest sim went from about 33 to 36 ms a tick and 237 to 375 late ticks in 90 s down to 20.5 to 23 ms and 0 to 1 late ticks in 120 s. It is not fully fixed: in the last run, 9.6 % of its ticks still took longer than 33 ms. The test runs used 8 tick threads (
LIVE_STACK_TICK_THREADS=8; the script default is still 4). A mob now keeps its reach answer until it or its target moves 0.5 m; an A/B run and a profile showed that check took half the mob time. Tick part times are in the metrics.Gather bots (2026-11-01):
nw-testclient gatherlogs in bots with an archetype and start tools, walks them to the level's trees, plants and ore, and gathers as the client does. In the last run (100 bots, 7 min, next to 1,000 walkers) every bot gathered, 1,917 times in all. Two of its checks still fail: tick time on the busiest sim, and moves the server refuses from the walker bots. The 30 min run before the tick fixes gathered 2,697 times, but 7 bots never gathered.Blocks and status effects from the data (2026-11-01, tests only): unblockable attacks pass a block; empower buffs raise block stamina; weakness, stamina regen, food attributes, crits, heal mods, armor rend by damage category, health regen, stun, root and silence, death's door removals, death effects, first stacks.
More database saves (2026-11-01, tests on the database): camp rotation and blueprint, mount summon cooldown, potion and food cooldowns (migrations 0027 to 0029); trading post, trade and shop jobs save their players at once.
Overnight 2026-11-01 (tests only, not live-checked): food and potion buffs saved over a log out and a sim border; a first try at the status and dev sites (deleted 2026-11-02) and the player round trip time; the trading post's part buys, settlement ids and buy-order storage; all 15 weapons' abilities checked on the real lists (83 of 91 start; a crash with two-list weapons fixed); boss summons; the movement review.
Dodge, mobs and death's door (2026-11-01, not live-checked): a dodge in an attack waits for the attack's dodge cancel window while the key is held (retail sword: dodges at 17, 566, 1182 ms taken, at 252 to 414 ms refused; all fit); mobs respawn after 62 s (retail; the data says 360 s), play their spawn animation again when a player comes back to a mob that was left alone, and notice a player within 3.8 m from any side; a lethal hit puts the player at death's door for 120 s (1 s delay, a hit after it kills, a revive brings it back), not in outpost rush, capture the flag, 3v3 or battle royale, nor to a killer 10 levels above, with the retail vitals blocks.
Weapon abilities and mana (not live-checked): the server runs each weapon's ability list from the game files; a key press starts the mapped ability, its follow-up actions, cooldown (sent as the retail 2932 bytes) and mana spend; spells fly to the first target on their line, open areas that last their
Durationand clear on exit or end, and open their second spell where they land; upgrades count from spent skill points, worn perks and Focus thresholds (Focus 100: mana max 110, as retail; Focus 25: cooldowns 3 % shorter). Fixed on the way: sword abilities took a knife tool's animations; Sacred Ground cast twice and started no cooldown (2026-10-31).Hunt test passes all 11 checks with 30 bots (1,748 hits, 276 mob deaths; before: 0 hits). Fixed in the sim: every kept spawn keeps its own AI (the encounter filter had shifted profiles and patrol paths to other spawns, so mobs reset their fight all the time). Fixed in the test client: own hunt accounts, the start nearest where a bot appears, mobs kept until their slot stops, the bot's own place, aim at the mob, only real mobs (not rocks or nodes), mobs on the bot's ground, a mob left after 5 swings without a hit; new checks for the start and for messages that do not decode (2026-10-31).
Busy sim speed: the open map leaves out the encounter spawns of the encounters it does not run (the forts' invasion rosters, up to 2,226 mobs on one point, and the breaches' seven tier copies of each mob; 59,214 of 115,965 spawns), mob minds use all their threads from 128 awake mobs, and the collision rays lost a hash set per ray. With 28 bots: late ticks 500+ to about 4, every bot logs in and stays (2026-10-31).
Player max health grows with the level and Constitution as retail: 856 + 1.75 x level squared + the Constitution health (9 retail points of two characters fit); the client gets the new max after a level up or a spend (2026-10-31).
Storage and trading post: an item gets a new id on each move, the storage seen from afar and the storage notes match retail, and a trading post search less than 1 s after the last one is refused as retail (2026-10-31).
Fast travel costs azoth as retail (20, or 10 within the player's territory; inn and home travel free); a mount summon is refused in combat and cancelled in the air as retail (2026-10-31).
Crafting, dyes and salvage: the item notes carry the last storage search, a craft sends one note per item made, and the bag sync reasons match retail (2026-10-31).
Status effects: the out-of-combat regen stops at full health, a player gets no heal number for its own heals and potions, and food heals scale with the held effects as retail (2026-10-31).
Test client:
nw-testclient chatsays a line in area chat and checks the answer (a GM command's system lines, or the line itself); a test race in the view tests is fixed (2026-10-31).Recipes: a salvaged schematic sets the achievement its recipe asks for; daily and weekly recipe cooldowns count crafts, refuse past the quantity, are saved and go to the client in the crafting state as retail (2026-10-30).
Gear perks: a worn item's perks hold their status effects (
PerkData.AffixtoAffixStatData.StatusEffect), potency 1 plus the scale per gear score from 100 (fits the retail bag perk 2.508 at gear score 430) (2026-10-30).Factions: the faction pick (3161) joins or changes the faction, saved; the faction state change goes as retail; the join quest step ends; quests and missions check
RequiredFaction(2026-10-30).Quick courses: 86 course paths from the game paks (
content-tool quick-courses); a course starts on a mount with its quest step, counts node hits, runs its timer and ends with 6065 as retail Hermit's Rally; the house quest step (2026-10-30).Ranged block: a mob projectile passes a block without
CanBlockRanged; a shield or weapon that can block it uses its ranged block scales (2026-10-30).Quest steps: fishing (equip, cast, hook, reel, catch rules, quest fish), salvage, weapon and item family, refine, song and dungeon steps; go-to by location, give by interact; mission go-to, territory, patrol, timer and transport values. Skipped task rows: 146 to 85 (2026-10-30).
Gathering and crafting: the sickle slot for harvesting; held effects add gather speed (
EFF_*) and craft gear score (MGS_*,MaxGS_*); recipes check their required, hiding and blocking achievements and set their unlock and first-craft achievements (2026-10-30).Mob projectiles: a mob's
CAGE-RangedAttackclip fires its weapon profile's ranged attack (range, radius) with its projectile slice's flight, led at a moving target; it hits where it lands. Janszoon's anchor now hits for hisAnchor_Tossrow (retail: 40 health, 1.53 s after the throw); 323 ranged attacks and 135 mob projectiles in the AI data (2026-10-30).Chat probation: the world server sends
accountInProbationafter the spawn, as retail; an account younger than 72 hours is in probation unless it has a CSR, GM or head admin rank. Before, no account could use global chat (2026-10-30).Player camps: a placed camp takes 5 wood and 1 flint, stands in the world as the retail capture shows, is a Camp crafting station and is the respawn point (its slice SpawnPoint, within 0.01 m of retail); placement fires
BindCamp;!mastery Camping 2sets the rank for tests (5e8240ad, 2026-10-30).Block stops mob hits: the hit that takes the last stamina breaks the guard (half damage, down until the key is released); no stamina regen while held; 2218 only in the tutorial; mob hits from another sim take the block (
7eae997a, 2026-10-30).Janszoon throws his anchor: his missing tree is built from the great axeman's tree and the undead officer's toss (6 to 10 m, 6 to 9 s cooldown; Inferred from the retail throw at 8.7 m); the toss hits with his table's
Anchor_Toss_Winduprow (4ea518d8, 2026-10-30).Janszoon aggro and leash tests on the real beach ground: he aggroes on a player in his face and keeps a player 10 m away; the sim logs each mob target change (
7e2193e1, 2026-10-30).Mobs walk home after a lost fight on slopes: a distance check beyond its height limit now counts as far (Janszoon stood 37 m out, 2.3 m below his spawn) (
972b150a, 2026-10-29).Mob lunges follow the ground; mobs far from home stay awake and their trees leash them home (DoesLeash) (
3f6696dd, 2026-10-29).Janszoon fights: his tree gets its difficulty tier from his slice, and mob attacks take their hits from the weapon's animation database when the body's has none (450 creatures carry one) (
d33f65d1,6f76390f, 2026-10-29).Crafting: no "Crafting attempt failed" message; verified live on the skinning knife (
ba675453, 2026-10-29).Mobs walk around a rock or crate that blocks their straight way (Janszoon, Bridget); a target behind one solid counts as reachable (
6f76390f, 2026-10-29).Terrain cookies: the 5,244 height stamps of the open world's capitals are put into our terrain; retail player feet on our ground 586,786 to 615,209 samples in 34 captures (
4c1a219f, 2026-10-29).Admin live 3D map: /live3d orbits a selected player, shows terrain and every player and mob inside the 150 m render radius with name, HP and target lines (
01bc7e5b, 2026-10-29).Admin live 3D map rework: the map is no longer mirrored (north was drawn south), the in-game map picture lies on the ground, the sea shows at its level, mobs stand at their real height (the sim snapshot now sends mob z), markers glide between updates, the camera follows the player and a click follows another player; the Live map takes a click with up to 6 px of hand movement (was 2 px) (
282a0c74,a7ddae72, 2026-10-29).Records page lists all entries on load and reloads when you change kind (
8ff0e1da, 2026-10-29).M0 Project setup, licences, checks, Docker infrastructure.
M1 Game data pipeline: all 2,250 datasheets and 285,031 rows load back.
M1b World data: 41 checked world files.
M2 Login server and launcher: the real client reaches character select.
M3 Gateway: the client completes DTLS and registration (exit test 2026-09-02).
M4 Sim: two clients see each other move (exit test 2026-09-04).
M5 World director: 1,000 bots cross cell borders with handoff (exit test 2026-09-04).
M6-A Combat engine: 8 sims with every mob, 5,000 bots (exit test 2026-09-04).
M6-B Combat on the wire: 0 codec differences on 695 ledgers, 90 bots (exit test 2026-09-04).
Rubber banding root cause fixed: own state numbers run 128 ahead (
6d508fc, 2026-09-26).Thorpe fight: arena teleport, grab pull, collision scale fix (2026-09-26).
Capture decoders read 99.993% of 25.3 million bundles (2026-09-26).
Corpses go at retail times (
20200c8, 2026-09-26).Tutorial chest marked looted (
04dd5d4, 2026-09-29).Journal auto pin works, you confirmed it live (
c21828b, 2026-10-01).Target lock works on mobs: lock, release, wheel cycling, you confirmed it live (
110ccc0, 2026-10-01).Demon Storm turn-in works live: the watchtower area ends in its point of interest (
d1ea27a, 2026-10-02).Select screen shows the saved level (
1073a00, 2026-10-02).Many quests at once, with the client's journal limit per quest type (
4e91ac7, 2026-10-02).Interact steps: quest objects and town buildings (
4e91ac7, 2026-10-02).Town board missions: take, the mission's items, kills and place, turn-in (
90340f6, 2026-10-02).Game mode, give item and carried item steps (
5d9afe6, 2026-10-02); patrol steps (d8a2b1f).Quest trigger volumes from the level data: 772 in the open world (
c0f5e5b, 2026-10-02).Level steps and talk steps (
bd33ce66, 2026-10-02).Gather steps that count only real gathers (
33cd74e2, 2026-10-03).Cyclic object steps: turned stones, staff rituals (
14a6125d, 2026-10-03).Temporary unlock steps (
0dbe1ac7, 2026-10-03).Multiple recipe craft steps (
7e4e45e3, 2026-10-03).Fix: map pin steps no longer skip the real step (
93fa629e, 2026-10-03).Objective, use item and territory steps (
d7886c1c,c26fde84,70f2533c, 2026-10-03).Fix: quest items from loot-container objects (Truffle Fever) and kills by spawner category (
ed5044db,956d6a8b, 2026-10-03).