Skip to content

ntre_sentinel_jgr: navmesh rework - #165

Merged
sunzenshen merged 1 commit into
NeotokyoRebuild:masterfrom
sunzenshen:navmesh-sentinel-jgr-release
Oct 14, 2026
Merged

sunzenshen merged 1 commit into
NeotokyoRebuild:masterfrom
sunzenshen:navmesh-sentinel-jgr-release

Conversation

@sunzenshen

@sunzenshen sunzenshen commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

ntre_sentinel_jgr: navmesh rework

One file, neo/maps/nav/ntre_sentinel_jgr.nav.

On master this map and ntre_sentinel_ctg load the same mesh, byte for byte, made for an older BSP. The two maps share
their layout and props, but here the upper doorways carry team doors (func_door with func_nav_blocker), where the CTG
map has open frames, so each map gets its own mesh; the CTG one is #162.

Dependencies and status

Needs: none. Measured on neo master 092203f36 with no open PR (A/B below). The bot changes this mesh carries data for are
in master now:

NAV_MESH_AVOID and NAV_MESH_PRECISE are stock Source nav attributes.

Helped by (measured better with it; the mesh does not wait on it):

  • Bots skip crouch gaps their hull cannot fit neo#2199 ("Bots skip crouch gaps their hull cannot fit", draft): the Juggernaut's stuck went 1.00 -> 0.56 a match on this map (16 pairs, the harness's research build: neo master plus open bot PRs and research changes); the north culvert pipe under "Known, not changed" is its case.

At a glance

master this PR
nav areas 1326 1181
file size 1,457,821 bytes 1,112,060 bytes (-24 %)
nav ladders 8 8; ladders 3 and 6 not offered going down from the shaft roofs
areas no spawn reaches 2 2, the same (by the links each class plans, Support 5)
areas entered with no way back, any class or the Juggernaut 0 0
juggernaut spawns a team cannot reach none none (9 of 9, both teams)
bot stuck events a match, neo master (A/B below) 179.8 20.0
bot stuck episodes a match (one bot, < 10 s apart) 35.8 5.7

What changed

The measurements in this section ran on the harness's research build, except where they say neo master.

  • Areas the engine blocks at round start, where a brush or prop stands over an area's center, are cut around the
    obstacle or split, and standing room is carved around props where test bots stuck on them.
  • Links over railings are cut where a way around exists. At the two stairways near (-860, -800) and (-860, 800),
    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).
  • The upper team doors. The three upper doorways at (-520, 400), (-520, -400) and (1544, 400) each only ever let
    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.
  • The freight-elevator hatches. Each elevator is a shaft whose roof slab has a hatch, a short ladder on its inner edge
    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.
  • The spider tank near (513, 1), a prop_dynamic that never moves: its six legs stand inside floor areas and its body
    underside (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.
  • The culvert pipes. The north tunnel near (33, 953) is CROUCH end to end, with a 45 u CROUCH lead-in at each
    mouth, 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.
  • The balcony walkways. The four slivers that join the walkways at ladders 1 / 2 and 4 / 5 to their platforms have
    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.
  • The cement bags near (-1440, -440) and (-1500, 210): bots skipped ahead into the bags' face. Areas 175, 550 and 549
    are PRECISE, so paths turn at their entry; marking 549 took stuck events at the bags beside it from 2.15 to 0.00 a
    match (27 matches a mesh, against the mesh before the mark: 15 pairs down, 0 up).
  • The cover under crate 737 near (1400, -40): the two cover areas are fitted to their standing room, and the area
    before them is split so paths turn below the crate's corner.
  • A gap link and a sliver: master's one-way link 1058 -> 2418 (a 50 u gap past the corner of a large crate near
    (-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.
  • Walk links restored: two level links at the walkways that ran one way after an earlier railing pass get their
    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.
  • Marks: AVOID 0 -> 6, PRECISE 0 -> 3, CROUCH 18 -> 22, NO_MERGE 42 -> 15, OBSTACLE_TOP 26 -> 3.
  • Ids follow master's. 1134 of the 1181 areas keep a master id; 1005 of them have master's corners. 47 areas are new.
  • Re-analyzed in game after the edits, so the visibility lists bots use are current.

Deliberate one-way links

  • The crate stack by crate 737 near (1400, 10): master links 97 <-> 3081 <-> 3744 both ways; this PR keeps the climbs
    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.
  • Ladders 3 and 6 are not offered going down from the shaft roofs; the hatch drop is the way down there (above). The
    CTG map's mesh has no hatch strips and keeps both descents.

How it was tested

  • Reachability (offline, the final file):
    • every spawn reaches every juggernaut spawn for both teams (9 of 9), by every class and by the Juggernaut
    • no dead end, no area a class or the Juggernaut can enter and not leave, no one-way climb of 60 u or more
    • the two areas no spawn reaches, near (112, 950, 107), are the same as master's
    • with the door links cut, routes to seven juggernaut spawns are longer than on master: spawn 1 for attackers
      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.
  • Falls. The map has no trigger_hurt.
  • Engine hull audit of the final file (every level link swept with a player hull in game):
    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.
  • Master against this mesh on neo master (092203f36, no open PR; Release build with the harness's logging). Byte-identical
    copies of the map, one carrying each .nav, matches interleaved: 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, every player at one XP rank, rotated across the spawns. Stuck events are OnStuck plus FAIL_STUCK, without
    the spawn crush at round start and weapon scavenging; episodes are one bot's stuck events less than 10 s apart.
a match (54 each) master this mesh paired ratio [95 %], matches down / up
all events (stuck, fell off the path, no path, fall deaths) 205.8 [188.1, 225.9] 36.0 [28.9, 45.1] x0.16 [0.14, 0.19], 53 / 0
stuck events 179.8 20.0 x0.10 [0.09, 0.12], 54 / 0
stuck episodes 35.8 5.7 x0.17 [0.15, 0.19], 54 / 0
fell off the path / no path 16.4 / 9.2 3.4 / 12.6 x0.22 [0.18, 0.27] / x1.09 [0.85, 1.39]
fall deaths 0.44 0.02
kills 99.7 107.4 x1.06 [0.96, 1.16]
matches the juggernaut was taken in 16 of 54 14 of 54
matches at match end with 0 asserts 54 of 54 54 of 54

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, matches
interleaved: 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 OnStuck plus
FAIL_STUCK, without the spawn crush at round start and weapon scavenging.

a match master this mesh
all events (stuck, fell off the path, no path, fall deaths) 98.1 [89.3, 109.2] 21.8 [15.5, 33.4]
stuck events 80.9 16.5
stuck episodes 17.0 4.0
no path / fell off the path 2.50 / 14.2 2.81 / 2.37
fall deaths 0.41 0.04
kills 103.4 112.1
matches the juggernaut was taken in 16 of 54 12 of 54
matches at match end with 0 asserts 54 of 54 54 of 54

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.

  • The cover by crate 737 (areas 1220 / 3089 / 3094 / 3791), near (1469, -7): bots retreating to cover go back and forth
    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); PRECISE on the cover areas made it worse (research build).
  • The north culvert pipe near (33, 953): 0.94 (0.50). More bots go through the pipe now that it is open end to end
    (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.
  • The pipe's south approach near (60, 650), areas 2452 / 635 / 3695 (each joins two or three of master's): 1.15
    (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.
  • The corner of area 371 near (73, -320): 0.69 (0), 13 matches, bots on the way east press into the obstacle at the
    area's corner. The areas and links there are master's; bots pass 2.5 times as often.
  • The east balcony near (1963, -7, 148): bots fall from the walkways 3749 / 3746 themselves, 2.13 (9.20). PRECISE
    there broke the ladder 1 / 5 descents, and AVOID on the slivers did not move these falls.
  • The drop / climb at areas 3777 / 3778 near (-865, 0, 148): 1.22 (16.39).
  • Ladder 6's pit near (-749, 10, 32), where juggernaut spawn 8 lies (-856, 0, 32): 0.56 (2.54), all at spawn 8, bots
    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.
  • The spawn rooms 530 / 42 and 406 / 531 / 313: respawned bots skip ahead into the room's wall, 2.65 (2.09); same
    areas and links as master.

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.
@sunmachine
sunmachine requested a review from a team October 14, 2026 03:18
@sunzenshen
sunzenshen merged commit 7433f99 into NeotokyoRebuild:master Oct 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants