Yesterday's NPC-gravity fix had a bad trade-off baked in. The outdoor bears stopped floating, but every indoor NPC sank into the floor — Kyrios Cultists in Marianople mansions were visible only as name tags hovering over checkerboard tile, with body parts clipping through. Today's patch fixes that without reintroducing the floaters.
What was wrong with v1.0.5
The terrain heightmap the server uses to position NPCs is exactly that: terrain only. It has no concept of building floors. So when v1.0.5 made the snap-to-ground unconditional, every NPC standing on an upper floor got pulled straight down to whatever dirt was under the building. The Marianople townhall, the Two Crowns mansion, basically every interior — every NPC inside became a floor-clipped nameplate.
What v1.0.6 does
NPCs are now classified at spawn time:
- Outdoor NPC — JSON spawn Z is within 3m of the heightmap. Treat as standing on terrain; snap Z to the ground every movement tick. (This is the bear-doesn't-float behavior from v1.0.5, preserved.)
- Indoor NPC — JSON spawn Z is more than 3m above the heightmap. Treat as standing on a building floor; never snap Z. Whatever Z the spawn data authored is correct, because the server can't see the floor it's standing on.
The classification is stored on the NPC for its lifetime. So a Kyrios Cultist authored on the second floor stays on the second floor, and a Lupin authored in a field still drops to the dirt when it drifts.
And the chasing-through-floors thing got better
The chase code also got a real fix. Before, when an NPC aggro'd a player, every tick of the chase lerped the NPC's X, Y, and Z toward the player's exact position. That's why running upstairs caused the NPC to rise vertically through the floor to match your Z — the chase code was literally telling it to. Now the chase only lerps X and Y; Z is determined by environment (terrain for outdoor, floor Z for indoor).
What you'll see now if you run upstairs with a mob on your tail:
- The mob keeps walking at your X/Y coordinates, but stays on its current floor.
- It bumps against the wall under your feet (no navmesh, can't help that).
- Within ~50 metres it gives up and walks back to its spawn point.
You can finally use stairs as escape, basically.
Still on the known-issues list
- Walking through walls in XY — no building collision in chase pathing. The mob will path at you in a straight line and bonk against geometry. Fixing this is a navmesh / waypoint-graph project for main_world that's measured in days of authoring, not hours of coding.
- NPCs using stairs voluntarily — same root cause. They won't go up to find you; they'll only stay on their floor.
- **Teleport-hop toward you** (separate from the leash hop, which is fixed) — different code path, still unconfirmed reproduction. If you see one, note the zone and mob and ping the dev channel.
Behind the scenes
Three patches in this build (Npc.cs — new IsIndoor property + Z-preservation in MoveTowards; NpcSpawnerNpc.cs — three-way regime: outdoor / indoor / no-heightmap). Memory inventory entry #15 supersedes the 2026-05-23 entry of the same number with the corrected logic. No client patch — the launcher will see the same .pak and skip the download.
Apologies for the v1.0.5 → v1.0.6 churn. The bear-doesn't-float behavior and the indoor-NPCs-visible behavior were in tension and v1.0.5 hadn't accounted for it.