Repository navigation
ntre_sentinel_ctg: navmesh rework - #162
Merged
sunzenshen merged 1 commit intoOct 14, 2026
Merged
Conversation
One file; on master this map and ntre_sentinel_jgr load the same mesh. Against master: 1326 -> 1177 areas, 1,457,821 -> 1,139,619 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. - Walk links a player hull cannot cross are cut: from the roofs into the freight elevators, past a plywood sheet and a blockade, master's gap link 1058 -> 2418 past a crate corner. - 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, the west walkway gets the drops to the balcony the east side has. - PRECISE at the cement bags; the cover under crate 737 is fitted to its standing room; the handrail sliver near (62, 90) is removed. - Ladders 3 and 6 are kept, the pits under them AVOID. - The floor under the spider tank is cut round each piece of its collision at hull height, grown by half a hull, as on the JGR map. - 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, entity 0, keep 7 (ladder 8's foot 3392 / 3733, and the six links of the walkway slivers, the only walk route to each ladder top), sinks 0 for every class. 108-match A/B against master, same bot code (30 bots, 9 ghost pins x 6, 1 round, 8 wide): events a match 24.8 -> 6.4, stuck events 20.1 -> 2.6, stuck episodes 4.1 -> 0.9; kills 24.4 / 23.6; all 108 matches ended clean.
This was referenced Oct 8, 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_ctg: navmesh rework
One file,
neo/maps/nav/ntre_sentinel_ctg.nav.On master this map and
ntre_sentinel_jgrload the same mesh, byte for byte. This PR gives the CTG map its own, because the two BSPs differat the upper doorways (open frames here, team doors with nav blockers on JGR). The JGR map's is
#165; either can merge first.
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.At a glance
What changed
obstacle or split, and standing room is carved around props where test bots stuck on them.
lanes) found no clear lane on five links bots got stuck on: from the roofs into the freight elevators, and past a
plywood sheet and a blockade. Against the mesh before the cuts, at weapon damage 0.1, one match at each of the 9
ghost spawns:
OnStuckevents 97.7 -> 54.6 a match; with a second such batch, x0.58 [0.41, 0.82] over the 18 pairs.Master's one-way link 1058 -> 2418 near (-12, -1250), which spans a 50 u gap past a crate's corner with no clear
lane, is cut too; 1058 still reaches 2418 through 17, on the open floor beside it.
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
5.81 -> 0 and 5.70 -> 0 events a match (A/B below).
CROUCHend to end, with a 40-45 uCROUCHlead-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 every mouth 5 of 5 (before: 0 of 5 at the first tunnel, 1, 2 and 4 of 5 at the second's).
no room for a standing hull, and bots crossing them fell to the balcony; they are
AVOID. The drops from the eastwalkway that every class fell past are cut, and the west walkway gets the drops to the balcony the east side has.
With the drop changes, west balcony falls ran 0.67 times the rate before (95 % interval [0.52, 0.86], 27 matches a
mesh).
are
PRECISE, so paths turn at their entry; marking 549 took stuck events at the bags beside it from 1.19 to 0.00 amatch (27 matches a mesh, against the mesh before the mark: 10 pairs down, 0 up).
before them is split so paths turn below the crate's corner.
half a hull short of the rail; the spot went 3.2 -> 0 events a match (27 matches a mesh, against the mesh before the
edit; the whole map x0.68 [0.50, 0.91]).
AVOID. The nookat ladder 6's top is linked to the roof beside it, and ladder 8's foot strip gets its missing link back.
at hull height, grown by half a hull, as on the JGR map, and a link at a leg where two areas touch only at a corner
(3769 / 3770) is cut (on the JGR map a batch of test matches logged 72 stuck events on 3769, all against the tank). This removes
73,084 sq u of floor that spawns reached on master, all under and beside the tank. Ghost spawn 9 is under the tank's body, with about 65 u of headroom (a Support must
crouch); the floor there is cut with the rest, so the spawn is 50 u from the nearest area. Bots still walk under the
body and take the ghost there (below), so no area is kept under it.
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 (every class crosses it).
(18 of them pieces of the floor around the tank).
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.
How it was tested
body covered it). On neo master, with the ghost pinned there, 13 matches a mesh (6 in the A/B below, 7 in separate
runs): the ghost was taken in 9 of 13 on master (median 62 s after the round went live) and 11 of 13 on this mesh
(median 68 s, first carries 23-83 s). Within 128 u of the tank, in the separate run's 6 matches: 1.33 events a match on master, 0 here.
trigger_hurt; fall deaths are fall damage. In the A/B below, 5 on master and 11 here in54 matches (paired x1.08 [0.99, 1.20]; two-sided binomial 11 of 16, p 0.21), spread: 2 and 5 by the culvert and area
423, 0 and 3 off the strip at z 363 near (75..850, -560) (under "Known, not changed"), 1 and 1 at the plywood drop,
2 and 2 elsewhere. The research build read 9 and 13.
BLOCKED_LINKS map=ntre_sentinel_ctg level_pairs=2075 oneway=0 keep=7 cut=0 area=0 check=0 dynamic=0 entity=0 one_way_drops=116 sinks(any/recon/assault/support)=0/0/0/0 audit_links=4450 mesh_walk_links=4450.The 7 kept pairs: ladder 8's foot (3392 / 3733: the ladder is slanted and its only bottom area stands against it), and
the six links of the walkway slivers 3747, 3750, 3759 and 3761, the only walk route between each ladder-top walkway and
its platform; two of them (3750 / 3751, 3761 / 3762) are the restored walkway links, which a scripted walk crosses.
092203f36with no open PR, Release build plus theharness's logging. Byte-identical copies of the map, one carrying each
.nav, matches interleaved: CTG, the ghostpinned at each of the 9 ghost spawns in turn, 6 matches each (54 a mesh), 30 bots, default weapon damage (1.485), 1
round, every player at one rank tier rotated across the pins, 8 matches at a time. Stuck events are
OnStuckplusFAIL_STUCK, without the spawn crush at round start and weapon scavenging. Paired ratio: geometric mean of(this mesh + 1) / (master + 1) over the 54 pairs, with a 95 % bootstrap interval.
Lower on this mesh at every one of the 9 pins and every rank tier (stuck, master / this mesh: Private 48.0 / 3.4,
Corporal 46.3 / 5.1, Sergeant 33.2 / 4.6, Lieutenant 50.1 / 4.7). Master's leading spots, events a match within 128 u,
master -> this mesh: the stair handrails at (-908, -877) 9.30 -> 0 and (-908, 869) 8.09 -> 0; the east balcony 2.26 ->
0.28 and the west 2.20 -> 0.35 (mostly bots falling off the walkways above); the platform handrail at (41, 219) 2.06 ->
0.04; the blockade by area 423 1.80 -> 0.80; the spider tank 0.78 -> 0; ladder 6's pit 0.48 -> 0 and ladder 3's 0.26 ->
0.02. No spot on this mesh reaches 1 event a match; the highest is area 423, 0.80, mostly bots in a fight.
The same comparison on the harness's research build (10-08)
Neo master of 10-08 plus the open bot PRs of the time (#2170, #2175, #2176 among them) and further research bot changes;
same design, without the rank-tier rotation.
Spots there, master -> this mesh: the stair handrails 5.81 -> 0 and 5.70 -> 0; ladder 6's pit 1.78 -> 0.07 and ladder 3's
0.61 -> 0.09; the platform handrail 1.22 -> 0; area 423 1.00 -> 0.31; the east balcony 0.98 -> 0.52 and the west 0.80 ->
0.43; the spider tank 0.31 -> 0.06. With #2176's last change (stand up below a ladder's hanging foot to mount it), stuck
events near ladders on this mesh went from 16.6 to 5.3 a match against the branch without it.
An earlier revision against master (research build)
The earlier revision lacked the culvert, walkway, cement-bag, crate and tank edits. Same design with 3 matches a pin
(27 a mesh), 2 rounds of 3 minutes: stuck events 59.3 -> 12.5 a match (paired x0.22, 95 % interval [0.16, 0.29], 26
pairs down, 0 up); fell off the path 10.8 -> 8.5; no path 0.9 -> 1.1; kills 48.9 and 48.9. All 54 matches reached match
end with 0 asserts. Intermediate revisions carrying the culvert, walkway, cement-bag and crate edits, compared with that
revision or with each other, read neutral on the whole map in four batches (x0.92 to x1.25, every interval spanning 1).
Known, not changed
match on neo master in the A/B above (master 0.93), 2.15 in one earlier 27-match batch.
PRECISEon the cover areas made it worse.3731: 0.41 events a match in the A/B above (master 0.31), 1.63 in one earlier 27-match batch. The engine audit reads
no lane clear; in a scripted walk Recons crossed it 6 of 10 times (Assault 2, Support 0-2), so it is not cut.
match in one); in the A/B above 0.80 events a match, mostly bots in a fight (master 1.80).
one match.
walking past ladder 3's top at the shaft floor were grabbed by it. They are kept so every ladder brush has its ladder,
with the pits under them
AVOID. In the A/B above, the pits read 0.02 events a match (master 0.74).piece of it has master's drop links to the floor, about 350 u down, on both sides. In the A/B above bots stepped off it
about as often on both meshes, and 3 fall deaths there on this mesh against 0 on master, which 54 matches cannot
separate.