Repository navigation
ntre_sentinel_jgr: navmesh rework - #165
Merged
sunzenshen merged 1 commit intoOct 14, 2026
Merged
Conversation
One file; on master this map loads a byte copy of ntre_sentinel_ctg's mesh, made for an older BSP. Against master: 1326 -> 1181 areas, 1,457,821 -> 1,112,060 bytes; stored BSP size now matches the map. - Areas the engine blocks at round start are cut around the obstacle, and standing room is carved round props where test bots stuck. - The walk links across three of the four upper team doors are cut both ways: each door opens for one team only, and the other team's bots pathed through and pressed on the closed leaves. - The freight-elevator roofs are split so only the strip in line with each hatch drops into the shaft; ladders 3 and 6 are not offered going down from the roofs, the pits under them are AVOID. - The floor under the spider tank is cut round each piece of its collision at hull height, grown by half a hull. - The culvert pipes are CROUCH end to end, with a lead-in at each mouth. - The four slivers joining the balcony walkways to their platforms are AVOID; drops every class fell past are cut. - PRECISE at the cement bags; the cover under crate 737 is fitted to its standing room; master's gap link 1058 -> 2418 past a crate corner is cut; a hull-blocked handrail sliver (1861) is removed. - The climbs 97 -> 3081 -> 3744 onto crate 737 stay one way. - Re-analyzed in game after the edits. Engine hull audit of this file: oneway 0, cut 0, area 0, check 0, dynamic 0, keep 7 (ladder 8's foot 3392 / 3733, the six links of the walkway slivers), entity 10 (the door leaves), sinks 0 for every class. Door probe, juggernaut pinned at spawns 1, 2 and 4 x 6 (18 matches an arm): with the door links back, stuck events at the leaves went 0 -> 7.1 a match and map events 17.3 -> 34.4; the cut stays. 108-match A/B against master, same bot code (30 bots, 9 juggernaut pins x 6, 1 round, 8 wide): events a match 98.1 -> 21.8, stuck events 80.9 -> 16.5, stuck episodes 17.0 -> 4.0, fell off the path 14.2 -> 2.4; kills 103 / 112; juggernaut taken 16 / 54 -> 12 / 54, median 65 -> 43 s when taken; all 108 matches ended clean.
This was referenced Oct 9, 2026
sunzenshen
marked this pull request as ready for review
October 13, 2026 01:21
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_sentinel_jgr: navmesh rework
One file,
neo/maps/nav/ntre_sentinel_jgr.nav.On master this map and
ntre_sentinel_ctgload the same mesh, byte for byte, made for an older BSP. The two maps sharetheir layout and props, but here the upper doorways carry team doors (
func_doorwithfunc_nav_blocker), where the CTGmap has open frames, so each map gets its own mesh; the CTG one is #162.
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 two freight-elevator pits underladders 3 and 6, and the four slivers that join the balcony walkways to their platforms (below).
NAV_MESH_PRECISE.NAV_MESH_AVOIDandNAV_MESH_PRECISEare stock Source nav attributes.Helped by (measured better with it; the mesh does not wait on it):
At a glance
What changed
The measurements in this section ran on the harness's research build, except where they say neo master.
obstacle or split, and standing room is carved around props where test bots stuck on them.
master links each stair's side over its handrail to the floor beside it (340 -> 31, 330 -> 30); bots now leave the
stairs at their ends. These links are the only mesh change within 128 u of master's two leading spots, which went
29.7 -> 0 and 25.3 -> 0.06 events a match (A/B below).
one team through (in one batch, 291 crossings by one team against 2 by the other at one door, 367 against 4 at the
other two). The other team's bots pathed through and pressed on the closed leaves (551 stuck events). A mesh cannot
say "one team only", so the walk links across those doorways are cut both ways: events at the doors 26 -> 0 a match,
kills unchanged (12 bots; the whole map x0.58, measured together with an edit at the shaft pits). The fourth
doorway, at (1544, -400), keeps its links. Rechecked on this file with the juggernaut pinned at spawns 1, 2 and 4,
18 matches a mesh (the A/B's settings below): with the 12 links back, the doors passed one team each again (33, 27
and 59 crossings a match by the owning team, under 1 by the other), stuck events within 48 u of the leaves went 0 ->
7.1 a match (both teams: the owners also reach a door before their trigger opens it), and map events 17.3 -> 34.4.
The cut stays, and it has a likely cost: fewer juggernaut pickups at the upper spawns. It was taken in 1 of 18
matches with the cut, 4 of 18 with the links; with the A/B below added (the four upper spawns, this mesh against
master, whose doorways are linked), 3 of 42 against 9 of 42 (Fisher's exact test, p 0.12). In the one such match
traced, a bot reached the juggernaut and held use for 4 s, then left: the capture was interrupted on the bot side,
not blocked by the mesh. On neo master (A/B below), 0 of 24 at the four upper spawns against master's 3 of 24 (Fisher
p 0.23); 14 of 54 against 16 of 54 at all nine.
and a dead-end alcove behind the ladder. Bots going down ended up in the alcove. The roof areas are split so only the
strip in line with each hatch keeps the drop into the shaft, and ladders 3 and 6 are not offered going down from the
roofs; the pits under them are
AVOID. The ledge at ladder 6's top is linked to the roof beside it. Against the mesh before(27 matches a mesh, default damage): stuck events at the hatches 40.8 -> 2.8 a match, map 105.7 -> 57.7 (paired x0.51,
21 down / 6 up), kills unchanged.
prop_dynamicthat never moves: its six legs stand inside floor areas and its bodyunderside (z 79-80) is below a standing hull. Each piece of its collision, cut at hull height and grown by half a hull,
is carved out of the floor. With the juggernaut pinned at 3 spawns, 4 matches each: stuck events touching the tank
20 -> 2, map 19.9 -> 13.8 a match, no new spot.
CROUCHend to end, with a 45 uCROUCHlead-in at eachmouth, so a Support ducks before its standing hull meets the pipe; in a scripted walk of the links Support gets through
it 5 of 5 (before: stuck 5 of 5), and against the mesh before, the culvert spot read x0.58 [0.38, 0.90] (27 matches a
mesh). The south tunnel near (945, -965) has no areas any more (3740, 2913, 2914): a box hull scrapes its curved walls,
and bots go around it. Against the mesh before, that spot went 6.7 -> 0 a match (the whole map x0.69 [0.51, 0.94],
18 pairs); in the A/B below, 1.15 -> 0.06 events a match within 128 u.
no room for a standing hull, and bots crossing them fell to the balcony; they are
AVOID: west balcony falls 1.07-> 0.26 a match (27 matches a mesh, x0.69 [0.55, 0.86]). The drops from the east walkway that every class fell past
are cut, and the west walkway gets the drops to the balcony the east side has.
are
PRECISE, so paths turn at their entry; marking 549 took stuck events at the bags beside it from 2.15 to 0.00 amatch (27 matches a mesh, against the mesh before the mark: 15 pairs down, 0 up).
before them is split so paths turn below the crate's corner.
(-12, -1250); no player hull fits) is cut, bots go round by 17 in the open; the handrail slivers near (59, 212, 320)
are removed: 1861, a dead end between a handrail and a signpost with no room for a hull, and three more along the same
rail (1860, 1862, 1863; two of them 10 u strips 46 u above the walkway). Events on 401 / 1861 read 1.41 a match on
master, 0 here.
missing direction back. In a scripted walk every class crosses the west one 5 of 5; the east one starts on a sliver
where no bot can be placed, so only its other direction was walked.
Deliberate one-way links
97 -> 3081 -> 3744 up the plywood sheet onto the crate and cuts the descents 3081 -> 97 and 3744 -> 3081. 3081 is the
sheet's top edge, 25 x 10 u, where no bot can be placed, so 3081 -> 97 cannot be walked; restored, the drop 3744 -> 3081
failed (Support fell 5 of 5, Assault stuck 4-5 of 5), and the crate top has its own drops to the floor (5 of 5, every
class). No bot stepped down either cut link on master's mesh in the A/B below.
CTG map's mesh has no hatch strips and keeps both descents.
How it was tested
3,305 -> 7,007 u (+112 %), spawn 2 +61 %, spawn 4 +36 % / +27 %, spawn 3 +33 %, spawn 9 +24 %, spawn 1 for defenders
+21 %, spawn 7 +17 %, spawn 5 +11 %. In the A/B below the juggernaut was taken in 12 of 54 matches (master 16, Fisher
p 0.51; research build), at a median 43 s after the round went live when it was (master 65 s; 8 of the 12 pickups
here were at spawns 7 and 8, against 5 of master's 16); at the four upper spawns, the ones behind the doors, 2 of 24
(master 5 of 24). On neo master: 14 of 54 (master 16), median 28 s (45 s), upper spawns 0 of 24 (3 of 24). The doors
bullet above pools the research-build counts with the door check.
trigger_hurt.oneway 0, cut 0, area 0, check 0, dynamic 0; keep 7: ladder 8's foot 3392 / 3733 (a slanted ladder whose bottom area meets
the ladder brush, as a ladder foot does) and the six links of the walkway slivers, the only walk route to each ladder top;
entity 10, the door leaves; no area any class can enter and not leave.
092203f36, no open PR; Release build with the harness's logging). Byte-identicalcopies of the map, one carrying each
.nav, matches interleaved: JGR, the juggernaut spawn pinned at each of the 9 spawnsin turn (
sv_neo_jgr_spawn_force), 6 matches each (54 a mesh), 30 bots, default weapon damage (1.485), 1 round, 8 matchesat a time, every player at one XP rank, rotated across the spawns. Stuck events are
OnStuckplusFAIL_STUCK, withoutthe spawn crush at round start and weapon scavenging; episodes are one bot's stuck events less than 10 s apart.
Every spawn pin and every XP rank went down (spawn 8 widest, x0.19 [0.09, 0.46]). Master's leading spots, events a match
within 128 u, master -> this mesh: the stair handrails at (-908, 875) 29.7 -> 0 and (-908, -878) 25.3 -> 0.06; the
drop / climb at 3777 / 3778 16.4 -> 1.2; the handrail by 401 / 751 9.8 -> 0.02; the east balcony 9.2 -> 2.1; the upper
doors 17.5 -> 0.15 (all four); the spider tank 3.4 -> 0.24; ladder 3's pit 2.9 -> 0.26; ladder 6's pit 2.5 -> 0.56; the
blockade near (983, -677, 320) 1.9 -> 0.02. The leading spots on this mesh: the east balcony 2.1, the cover by crate 737
1.9 (0.72), the drop / climb at 3777 / 3778 1.2, the north culvert's south approach 1.15 (0.41) and the pipe 0.94 (0.50).
The same A/B on the harness's research build (neo master plus open bot PRs and research changes, 10-08)
Byte-identical copies of the map, one carrying each
.nav, matchesinterleaved: JGR, the juggernaut spawn pinned at each of the 9 spawns in turn (
sv_neo_jgr_spawn_force), 6 matches each(54 a mesh), 30 bots, default weapon damage (1.485), 1 round, 8 matches at a time. Stuck events are
OnStuckplusFAIL_STUCK, without the spawn crush at round start and weapon scavenging.Master's leading spots, events a match within 128 u (stuck, fell off the path, no path), master -> this mesh: the stair handrails at (-908, 875) 19.6 -> 0
and (-908, -878) 18.0 -> 0; the handrail by 401 / 751 near (43, 225, 320) 6.2 -> 0; the upper doors (1562, 350) 5.5,
(-538, -423) 4.3, (-520, 391) 4.1, all four doors together 13.4 -> 0.07; ladder 3's pit (1778, -11) 3.8 -> 0.2; the blockade
near (983, -677, 320) 2.6 -> 0; the spider tank 2.8 -> 0.35. The leading spots on this mesh then: ladder 6's pit at juggernaut spawn 8
(-749, 10) 5.2 (master 0.5), of which 4.1 is one bot wedged at the ladder's foot for 235 s in one match; a rerun at that spawn,
8 matches a mesh, read 3.1 there against master's 7.5 and no repeat. Then the cover by crate 737 2.4 (master 2.1), the east
balcony 1.3 (1.2), the north culvert pipe near (33, 953) 1.1 (0.6), the drop / climb at 3777 / 3778 1.4 (2.1); the west
balcony 0.2 (1.9).
An earlier revision against master
The earlier revision lacked the culvert, walkway, cement-bag, crate and tank edits, the gap-link cut and the handrail
slivers. Research build, same design with 3 matches a pin (27 a mesh), one 5-minute round: stuck events 104.8 -> 23.7 a match (paired
x0.21, 95 % interval [0.16, 0.28], 26 pairs down, 1 up); fell off the path 13.2 -> 6.1; no path 1.4 -> 2.9; kills
104.3 -> 112.8. All 54 matches reached match end with 0 asserts. Against that revision, a revision carrying the culvert,
walkway and crate edits read x0.82 [0.59, 1.13] on the whole map (36.1 -> 24.4 a match), fell off the path 4.3 -> 3.1,
no fall deaths in either.
Known, not changed
The rates are events a match on this mesh in the neo master A/B above (stuck, fell off the path, no path), within 128 u
of the point or on the named areas, master's in brackets.
between the cover areas below the crate's corner, 1.85 (0.72), in 18 matches (21 bot episodes). Bots also come here more
often (time on the spot x1.7). Two edits made it worse in a 27-match screen each: no hiding spot on 3089 (2.00 -> 2.81),
and master's 1220 back without the split 3791 (0.96 -> 2.41);
PRECISEon the cover areas made it worse (research build).(time in it x1.9; stuck per time there 6.6 against master's 9.0 a thousand samples). The Juggernaut's ducked hull, 75 u,
fits no lane in the pipe; the open draft Bots skip crouch gaps their hull cannot fit neo#2199 closes such gaps to it.
(0.41) in 23 matches, short episodes of bots crossing the 25 u gutter at (25..85, 475..600, z 12) toward the pipe. Bots
pass here 1.7 times as often and cross into the gutter 1.9 times as often; stuck per time spent there is 7.5 against
master's 3.0 a thousand samples. In a scripted walk of the links there (12 on this mesh, 13 on master's), every class
crossed each 5 of 5 on both meshes. Split back into master's areas, the approach fell to master's rate but the pipe's
mouth rose (0.30 -> 1.15), approach and pipe together 1.41 -> 1.70 a match; over 81 matches, approach and pipe read 1.62
stuck a match here against master's 1.26, and 5.6 against 7.8 a thousand samples.
area's corner. The areas and links there are master's; bots pass 2.5 times as often.
PRECISEthere broke the ladder 1 / 5 descents, and
AVOIDon the slivers did not move these falls.pressing on each other and the juggernaut (blocker player 19 of 30, juggernaut 5); no bot over 8 events. The research build's wedged bot
(235 s at the ladder's foot in one match) did not recur.
areas and links as master.