Repository navigation
ntre_saitama_ctg: navmesh rework - #146
Merged
sunzenshen merged 4 commits intoOct 14, 2026
Merged
Conversation
One file. Against master: 1348 -> 1047 areas, 511,205 -> 326,226 bytes; areas no spawn can reach 25 -> 4; areas the engine blocks at every round start 31 -> 0; nav ladders 4 -> 7. - Regenerated, and sliver areas merged into their neighbors on the same floor. - Areas the engine blocks at round start are removed, and floor under props bots stood pressed against is cut out. - Ten walk links a player hull cannot cross are cut (a wall, a nodraw clip, pipes, a desk, a forklift ...), and the areas left with no way in are removed. - The slab at the top of ladder 2 (area 75) reaches half a hull from the wall, and ladder 2's two top landings link to that slab. - Three ladders master lacks: the short ladder at (-664, 3386); the ladder props on the rabbitfrog vehicle in the NSF spawn room, up to a CROUCH area on its roof (66 u under a beam); and the south face of the wall under area 720, from the closed alcove behind it. Master's links out of that alcove through its east wall are not kept. - Pockets no class can climb into are removed: the spawn room's ceiling beams and two ledges (68 u, 88 u). - The fire pit: its west grate rim (two strips, the only nav at the pit's edge) is marked PRECISE + CLIFF, and for now no path leads onto it (the entrance links are cut, the exits kept). No area or link crosses the pit, as on master. - Re-analyzed in game after the edits.
Renumbers area and ladder ids only, so an id-keyed diff against master reads sensibly: 1043 of the 1047 areas carry the id of the master area they match; master's four ladders keep ids 1-4. Areas are matched only within 64 u in height, so the new vehicle roof does not take the id of master's ceiling beam above it. Geometry, connections, attributes and the analyzed visibility data are unchanged (verified topology-identical).
Bots should neither cross the fire pit nor go near its edges. After the rim cut, the areas bots still stood on at the pit's lethal edges were 403 / 2660 on the west (32 u from the lip) and 128 on the east (24 u), found by harness/analysis/nav_death_areas.py. A 25 u strip along each lethal side gets the rim's treatment: 403 is split at x 1275 (its east half, 3859, and 2660 join the exit-only band with the rim) and 128 at x 1700 (its west strip, 3860); the strips are PRECISE + CLIFF and have no links in, their links out stay. Paths now stop 56 u from the lip. Ghost spawn 9 stays on 403, reachable. No area lies inside the pit's trigger_hurt. Re-analyzed in game; ids as the previous commit, the two strips are new.
This was referenced Oct 1, 2026
An outside review of this mesh found walk links that run one way only, climbs whose drop back was cut, and floor reached only by climbs no bot plans. Each one-way pair was swept with a player hull in both directions by the engine's hull audit: - Cut both ways the two pairs blocked both ways (box pallets, a large crate); restore the missing direction of the six pairs that are clear. Delete three areas the half cuts ended in that no player hull fits in: inside a wall, an office chair, and a desk. - Restore the drop back from seven wall-top strips and a car roof whose climb was kept. Cut the climb onto a desk top past an office chair (no lane clear). - Cut the 154 u climb from 16 to 3259 (from master) and delete the two areas it alone reached, the sloped top over the control room: nothing a player can jump onto reaches it. - Mesh both flights of the prop staircase near (300, -420): the foot, landing and top were joined only by 76 u links across each flight. The 76 u links are cut. The fire pit's edge bands keep their exit-only links (the rim and the two edge strips). Beyond the review, from the same audit: delete ten more areas inside props (forklift, file cabinet, gas pipes, monitors, a crate, a hand cart, the desk and chair, shelving) and the corner behind the file cabinet that only one of them reached; cut the link behind the sofa, blocked both ways. Existing areas keep their ids; the two flights are new. Re-analyzed in game (same graph, fresh visibility).
sunmachine
approved these changes
Oct 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ntre_saitama_ctg: navmesh rework
One file,
neo/maps/nav/ntre_saitama_ctg.nav. It was measured on upstream master plus the draft NeotokyoRebuild/neo#2176 (then only its unwanted-ladder release, now its changes 1 and 7).Dependencies and status
Needs (worse than master, or broken, without it):
NAV_MESH_PRECISE+NAV_MESH_CLIFFmarks use the movement rules of Bots follow their path on NAV_MESH_PRECISE areas neo#2168 (merged).Helped by (measured better with it; the mesh does not wait on it):
Pending before review:
At a glance
PRECISE+CLIFFFour commits:
1. What changed
CONTENTS_LADDERbrush on the map now has a nav ladder:CROUCHarea on the vehicle's roof (66 u under a beam, so only Supports must crouch);PRECISE+CLIFF, and for now no path leads onto it: the links into the rim are cut, the links out are kept, so a bot that lands there walks off it westward.2. Id alignment
1043 of the 1047 areas carry the id of the master area they match; master's four ladders keep ids 1-4. Areas are matched only within 64 u of height, so the new vehicle roof gets a new id instead of the id of master's ceiling beam above it. Geometry, connections, attributes and the analysis data are unchanged by this step (verified topology-identical).
3. Fire-pit edges
After the rim's entrance cut, the areas bots could still stand on at the pit's lethal edges were 403 / 2660 on the west side, 32 u from the lip, and 128 on the east side, 24 u from it (found with an offline check that lists every area with a side whose drop lands in a lethal hurt volume). Each lethal side gets the rim's treatment: a 25 u strip along it is split off (403 at x 1275, 128 at x 1700), marked
PRECISE+CLIFF, and has no links in; its links out stay. On the west the strip joins 2660 and the rim in one exit-only band. Paths now stop 56 u from the lip, and ghost spawn 9 stays on 403, reachable. The two strips are the only new ids (3859, 3860); 1043 of the 1049 areas keep their master id. Re-analyzed in game.4. Review fixes
An outside review of the mesh listed walk links that run one way only, climbs whose drop back was cut, and floor reached only by climbs no bot plans. Every one-way pair was swept with a player hull both ways by an engine hull audit (a harness-only test build: a hull is stood every 4 u on every area and swept every 4 u across every link), and the mesh's level links were checked the same way.
From the review:
Beyond the review, from the same audit (bot positions from 138 matches on this mesh):
Every kept area keeps its id; the two flights are new (3861, 3862). Re-analyzed in game.
How it was tested
BLOCKED_LINKS map=ntre_saitama_ctg level_pairs=1493 oneway=0 keep=5 cut=1 area=0 check=2 entity=0; the two checks are the new flights, too steep for the audit's stand test.nav, run back to back. Upstream master (at #2168) plus #2176, with harness logging added. CTG, 2 rounds of 3 minutes with the ghost pinned at each of the 17 ghost spawns in turn, 2 runs each, 30 bots, default weapon damage, 8 matches at a time; every match reached match end with 0 asserts. The stuck count isOnStuckplusFAIL_STUCKmove failures, excluding the spawn crush at round start and the weapon-scavenging behavior.FAIL_NO_PATH_EXISTSmove failures 4.2 -> 3.7 a match; "fell off the path" failures 0.6 -> 0.4How the pinned-ghost probes work
The offline checks show that the mesh links an area to a spawn. They do not show that a bot will walk there. To test one spot in game, the ghost is placed on it and bots are sent to get it.
sv_neo_ghost_spawn_pos "x y z", which replaces the position of the round's ghost spawn. The map file is not edited..bspunder a second name that loads its own.nav, so the same pin runs on both meshes in one batch.The fire pit
Every fall death on this map, on master and on this mesh alike, is a bot burning in the fire pit with the ghost on spawn 9, beside the pit (none at the other 16 spawns). On upstream code, spawn 9 only, 8 matches each: master 21 deaths, this mesh 13 (30 and 22 in an earlier batch of the same size).
PRECISE+CLIFF. This alone does not change the deaths above (the scavenging leg does not follow nav links); it keeps bots from being sent to the pit's edge.Known, not changed