Repository navigation
ntre_rise_ctg: navmesh rework - #160
Merged
sunzenshen merged 5 commits intoOct 14, 2026
Merged
Conversation
One file. Against master: 1330 -> 1075 areas, 648,467 -> 434,425 bytes; nav ladders 3 -> 6; areas no spawn reaches over any link 24 -> 8. Master's file was built for an older BSP and reads stale. - Capture zones 1 and 4 get areas over their prop staircases, so every class reaches them; ghost spawn 1 is reachable too. - Ladders 3 -> 6, linked up and down. - The basement fountain gets a way out (curb strip, handrail top); the pool is AVOID so no path uses it as a shortcut, as is the foot room of ladder 1. - Drops through breakable floor panels (3569, 3570) and into the walled 415 pit are cut; a vent-duct pocket no link reaches is removed; the strip under the slanted beam near (-386,-274) is split with a CROUCH middle (3588). - Links an engine hull audit reads blocked both ways are cut; ones it reads clear get their missing direction back. - Area and ladder ids follow master's where an area is the same place. Re-analyzed in game.
The engine hull audit of the previous file listed 23 unresolved level pairs. Each is now cut, removed or kept with a stated reason: - Cut both ways where no lane is clear either way and both areas keep other links: 238/1050 (water cooler), 465/3040 (stair handrail), 671/1385, 544/1989 (under a table top). - Removed: floor strips inside a copier, file boxes, a forklift, a stair handrail and the balcony wall (2583, 1378, 2263, 3075, 1318-1320), and 2190 under a three-seat sofa. - Removed the raised bamboo bed near (1025, -100): its only way in was a climb from a strip inside the bench (2954), and three of its areas sit in bamboo clumps. No link reaches it without that strip. - Kept: the four stair flight feet to capture zones 1 and 4 (the audit stands inside the slope; every class walks them), the narrow west ledge 3550/3551, and the one-way 485 -> 255 past an AC unit that every class walks this way only. 1075 -> 1052 areas. Audit of this file: oneway 0, cut 0, area 0, check 0, keep 6, entity 14 (breakables and a fence door), sinks 0 for every class. 96-match survey against master, same bot code (30 bots, 4 ghost pins, 1 round): events a match 8.9 -> 6.5, stuck episodes 1.3 -> 0.5, no path 0.62 -> 0.15; all matches ended clean.
This was referenced Oct 9, 2026
On upstream neo master's bot code the previous file sent NSF bots down master's drop 3548 -> 3542, 158 u onto a 24 u ledge over the void west of x -961: 0.87 trigger_hurt deaths a match (90 in 104 matches, master's mesh 0), and their round-start rush crowded areas 7 / 3387 / 314 on the way. Ladder 3 up and ladder 4 up drew bots that pressed the walls at their feet (1.10 and 0.43 events a match, master 0). - Cut 3548 -> 3542 and the drop 3305 -> 642 into 642 / 3301 / 3548, whose only way out was that drop (it would be a sink). - Ladders 3 and 4 down only: removed from their bottom areas' up lists (797, 2181). The -336 / -374 floor between them (40 areas, no objective) is again reached by no link a class plans, as on master. - Restored master's ledge areas 190, 778, 1902, 1907 near (600, -790, -424), with a one-way drop 1907 -> 604, so a bot that gets up there off the ramp has a path down. 1052 -> 1056 areas, ids master's. nav_analyze FRESH; hull audit oneway 0, cut 0, keep 6, entity 15, sinks 0 for every class; navconnect gate PASS. Master's mesh against this file, neo master 092203f36, 36 matches each (ri46-fin, ri46-f2): events a match 29.6 -> 8.0 (x0.35), stuck episodes 3.39 -> 2.14 (x0.70), falls 0, 0 asserts.
Ladder 4 (355, 376) rises 30 u above the top floor over a 16 u wall cap (x 336-352) under a header at z -296: its top is a 48 u hatch. The mesh put the top on 771, behind the cap, where a hull never touches the ladder, so bots going down pressed the cap until a stuck jump took them over it. Add a CROUCH area on the cap (3589, z -344), link it to 771 (a 30 u climb), move the ladder's top onto it at the brush top (-344), and pull 771's east edge to x 316 so the climb's launch point is off the wall (research 4fd91bc, re-applied to this file). On neo master 092203f36, Jinrai spawned at the top and the ghost at the foot, 8 runs a file (ri46-l4s): reached the foot 14 -> 19, stuck events at the top 1839 -> 4, ghost picked up at 21.8 -> 15.9 s. Only Recon fits the hatch. nav_analyze FRESH; hull audit oneway 0, keep 6, entity 15, sinks 0; navconnect gate PASS.
Link ladders 3 and 4 up again from their bottom areas (797, 2181), as on the PR head. Down only, the -336 / -374 floor between them was reached by no link a class plans (60 areas unreached over any link); with the up links it is 21, the 8 of the PR head plus the west-wall ledges below the cut drop and master's ledge areas near (600, -790). On neo master's bot code the up climbs do not work yet: bots plan the climb, stand at the foot and press the wall. The feet ship as known, a research item for the ladder code. The drop cut and the ladder 4 cap stay. nav_analyze FRESH; hull audit oneway 0, keep 6, entity 15, sinks 0; navconnect gate PASS. Master's mesh against this file, neo master 092203f36, 48 matches each (ri46-up, ri46-up2): events a match 27.7 -> 10.1 (x0.48), stuck episodes 3.69 -> 2.12 (x0.71), falls 0, 0 asserts; ladder 3 foot 0.69 a match, ladder 4 foot 0.04.
sunmachine
approved these changes
Oct 14, 2026
This was referenced Oct 15, 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_rise_ctg: navmesh rework
One file,
neo/maps/nav/ntre_rise_ctg.nav.Dependencies and status
Needs: none. Measured on neo master
092203f36with no open PR (A/B below). The bot changes this mesh carries data for arein master now:
NAV_MESH_AVOID: the basement pool (87) and the balcony rail top above it, so no path drops into the pool as ashortcut, and the foot room of ladder 1, whose first rung is 54 u up and where ghost carriers piled up, so paths avoid
the room unless the ladder saves a long way round. On stock neo master, areas 2720 and 2777 load without
AVOID(theyalso carry
NAV_MESH_STAIRS, and loading clears the other marks on aSTAIRSarea); Keep nav area attributes when marking stairs neo#2225 (draft) keeps them.The A/B below ran without it: within 100 u of either area, 0.02 and 0.04 events a match on this mesh (one match
each), 0 on master's; pool areas 0 events a match (master's mesh 0.15).
Helped by (measured better with it; the mesh does not wait on it):
near (-225, -492), 18 stuck events in its survey, 1 with it. On neo master without it, this mesh: 2.69 events a match
there, master's mesh 8.33.
At a glance
trigger_hurta matchWhat changed
with one 66-76 u jump link (zone 1) or not at all (zone 4). Each flight gets a sloped area over its steps, linked both
ways to its landing and to the floor or deck. Ghost spawn 1 is reachable too: bots picked up the ghost in 48 of 48
matches here, 36 of 48 on master's mesh.
pocket with no link to the rest of the mesh; its ladder is removed, the ledge kept (below).
only a crouching Recon fits. A
CROUCHarea on the cap (3589, z -344) carries the ladder's top, linked to the floorbehind it by a 30 u climb. With Jinrai spawned at the top and the ghost at the foot, 8 matches each: bots reached the
foot 19 times with it and 14 without, stuck events at the top 4 against 1,839, ghost picked up at 15.9 s against
21.8 s; every descent was a Recon.
x -961; bots overshot it and fell to the
trigger_hurt(0.87 deaths a match with the drop, NSF bots chasing the ghostcarrier). It is cut, with the drop 3305 -> 642 above it, whose areas had no other way out.
(190, 778, 1902, 1907) are kept, now with a one-way drop to the floor below (1907 -> 604), so a bot that gets up has a
path down.
top and the step outside give the 43 u climb out the fence allows; the pool is
AVOIDso no path uses it as a shortcut.func_breakablefloorpanels, where bots walked to the panel rim and pressed into the wall, and into the walled pit 415 / 3570, whose only
floor exit is a Recon climb. The climb out stays, for a Recon who falls in.
areas there are laid out differently); on an earlier revision, bots walking under it pressed the beam. The strip is
now split, its middle (3588)
CROUCH. No test match had an event there.path"), slivers merged into their neighbors, and islands no spawn reaches. Also the raised bamboo bed near
(1025, -100, -1047), 14 areas on a displacement planter 72 u above the floor: its only way in was a Recon climb from
a strip inside the bench beside it (removed too), and three of its areas sit in bamboo clumps.
blocked both ways (sofas, a copier, a crate, a water cooler, a stair handrail, a table top) are cut; floor strips
inside a prop or wall (a copier, file boxes, a forklift, a handrail, the balcony wall, under a sofa) are removed.
free ids. Ladders 1 and 2 keep their ids; ladder 3 is new and reuses the id of master's ladder 3, which was removed
with its pocket.
How it was tested
leave, no one-way climb of 60 u or more except a 200 u walk link up ladder 3's shaft, which no class
takes. Two deliberate one-way edges: the pit climb above, and a level crossing past an AC unit near (762, 475, -80)
that every class walks one way only (Support stuck on the unit the other way). Two markers sit off the mesh as on
master (capture zone 3 by 9 u, ghost spawn 2 by 46 u). Routes are within 5 % of master's but one: capture zone 3 for
defenders, 3,593 -> 3,975 u.
BLOCKED_LINKS map=ntre_rise_ctg level_pairs=1562 oneway=0 keep=6 cut=0 area=0 check=0 dynamic=0 entity=15 one_way_drops=43 sinks(any/recon/assault/support)=0/0/0/0 audit_links=3397 mesh_walk_links=3397.The 15 entity rows are breakable panels, a breakable on the ledge above and a fence door, runtime state. The 6 kept:
the AC unit crossing above, the feet of the four stair flights to capture zones 1 and 4 (the audit's stand test
starts inside the slope; every class walks each flight), and a 16-24 u ledge on the west wall at z -864, where a
player stands with its center over the drop.
092203f36, no open PR, Release). Byte-identical copies of themap, one carrying each
.nav, matches interleaved: CTG, the ghost pinned at each of the 4 ghost spawns in turn, 30bots, default weapon damage, 1 round, all players at one XP rank (rotated over the four ranks across the spawns), 8
matches at a time, 48 matches a mesh. Every match reached match end with 0 asserts. Events are stuck events
(
OnStuckplusFAIL_STUCK, without the spawn crush at round start and weapon scavenging), "fell off the path" and"no path". A stuck bot logs about one stuck event a second; a stuck episode is one bot's stuck events less than 10 s
apart, counted once. Ratios are paired by spawn and pass, with 95 % intervals.
trigger_hurtEvery ghost spawn is lower (x0.32-0.74), and every XP rank (stuck a match 17-38 on master, 6-12 here).
-424): 1.08 on master, 0.02 here.
Earlier batches, the harness's research build
These ran the harness's research build (neo master plus the open bot PRs and further research bot changes), not
master's bot code. 48 matches a mesh against master, on the previous revision of this file (1052 areas, before the
west-wall drop cut and the ladder 4 cap): events a match 8.9 [5.5, 13.1] (master) -> 6.5 [1.3, 15.8],
stuck episodes 1.3 -> 0.5. An older revision, 72 matches a mesh (1079 areas): 13.3 -> 5.7, stuck episodes 1.28 -> 1.04.
On neo master's own code the previous revision was not better than master's mesh (104 matches a mesh: events x0.84
[0.68, 1.05], stuck episodes x1.22 [1.07, 1.40], 0.87
trigger_hurtdeaths a match), which the west-wall drop cutfixes.
Known, not changed
in play: 1 bot at its top in 64 matches, none rode it down.
0.69 events a match at ladder 3's foot near (-237, -899) in 9 of 48 matches (Recons on the 56 u block beside the foot),
0.04 at ladder 4's foot in 1 of 48 (0.43 a match over 104 matches on the previous revision, bots on area 145 pressing
the shaft's south side); master has no ladder at either. The ladders are the only way onto the -336 / -374 floor
between them, so both stay linked up; the climbs are bot code, which no mesh edit reaches. Ladder 3's 200 u walk link
up the shaft stays, which no class takes.
The first rung is 54 u above the floor, and the bot ladder code does not reliably mount a ladder that high; a bot
that planned up the ladder can stand under it to the round's end. That is bot code, which no mesh edit reaches. The
ladder is master's, and the foot is master's two floor areas merged into one.
above (4, reached off the mesh), the walled pit above, and five pockets of one or two areas with a link out and none
in. Support also misses 52 more, behind 47-65 u climbs and the ladders. No objective in any of them.