Repository navigation
ntre_vtol_ctg: navmesh rework - #166
Merged
sunzenshen merged 2 commits intoOct 14, 2026
Merged
Conversation
One file. Against master: 7350 -> 6579 areas, 50,906,904 -> 41,338,998 bytes; stored BSP size now matches the map. - The rims of the two unmeshed trenches and of the pits beside them are PRECISE + CLIFF (34 areas), so bots keep to their path there instead of stepping onto the crossbeams and falling in. - Links over railings are cut where a way around exists; level links an earlier railing pass left one way get their missing direction back where the engine lanes are clear. - The floor by the robocart near (157, 295) is carved round the cart's hitch; area 8448 is split. - The berm near (-3613, 1601) is drawn flat at the top of its 25 u wall instead of as a ramp over it. - The wedge near (-2800, 2545): three areas drawn up to 39 u above the ground are split and set on the real surface. - CROUCH lead-ins in front of the four under-stair pockets. - Pairs blocked on every lane both ways are cut (fake doors, sloped concrete walls, a wood wall); six areas no hull stands on are removed (the mini radar base, a pole, a transformer, a sheetrock strip); a 46 u drop with no launch lane is cut, and two displacement pairs every class failed to cross in a scripted walk. - Re-analyzed in game after the edits. Engine hull audit of this file: oneway 0, cut 0, area 0, check 0, dynamic 0, entity 0, keep 62, sinks 0 for every class. The keeps are the inherited one-way 39787 -> 16064, 53 pairs on slopes or against frames that read blocked where the lane starts inside geometry and that every class crosses in scripted walks, 3 CROUCH lead-ins the standing-hull sweep meets by design, and 5 pairs kept with their reasons listed in the PR. 112-match A/B against master, same bot code (30 bots, 14 ghost pins x 4, 1 round, 8 wide): events a match 18.9 -> 9.6, stuck events 17.3 -> 7.4, stuck episodes 3.7 -> 2.4, fell off the path 1.3 / 1.7; kills 24.5 / 24.3; all 112 matches ended clean.
This was referenced Oct 10, 2026
The rework drew area 43701 by the berm near (-3600, 1500) flat at the top of its 25 u wall, and merged the berm-top strips 40583 / 40584 and 40585 / 40586. On neo master's bot code, bots coming down from 4301 then walked into the wall at (-3606, 1600) for 6-9 s at round start, aiming at the merged 40583's corner: about 1 event a match there against 0.05 on master's mesh (98 matches). Restore master's ramp (43701 / 43702) and the four strips, with master's ids and links, and re-analyze. In 42 matches a mesh (14 ghost pins x 3, 30 bots, 1 round): berm 0.12 events a match against master's 0.14; all events 35.1 -> 7.95 a match, stuck 23.6 -> 5.9, episodes 4.4 -> 2.0; 84 of 84 ended clean. Engine hull audit: oneway 0, cut 0, keep 64 (the two ramp pairs read blocked against the wall and are walked, as on master). 6582 areas, 41,364,038 bytes.
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_vtol_ctg: navmesh rework
One file,
neo/maps/nav/ntre_vtol_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_PRECISE+NAV_MESH_CLIFF: the rims of the twotrenches and the pits beside them. On neo master, events a match on these rims: 0.31 on master's mesh, 0.14 on this one.
On stock neo master, areas 149 and 39678 load without the two marks (they also carry
NAV_MESH_STAIRS, and loadingclears the other marks on a
STAIRSarea); Keep nav area attributes when marking stairs neo#2225 (draft) keeps them. The A/B below ran without it: no eventwithin 150 u of either area on either mesh.
Helped by (measured better with it; the mesh does not wait on it):
On neo master without either, no bot reached the pit or a trench bottom on this mesh in 42 matches (master's mesh: 4 bots
in 98 matches, 124 events).
At a glance
What changed
and the north rim strips; two crossbeams span each hole just under the rim, and bots stepped onto them and fell about
1100 u to a bottom with no mesh and no exit (6 bots in 42 matches on the research mesh before these edits, trapped for
the match). The areas with an edge on either hole, and those on the rims of the pits beside them, are
PRECISE+CLIFF(34 areas).(-2399, 361), went 6.9 -> 0 events a match, and the one by 703 near (620, 337) 1.4 -> 0 (A/B below). A railing check
walks a player box across each link on the map's collision; re-run on the mesh before the cuts, it reads every lane of
each of these a rail:
strip on the rail's top). The drops back are kept: the check then judged each direction on its own;
a rail. No class climbs that high, so no route changes; the drops back are kept;
tops, which the check reads as rail tops. It kept the one way up onto each bunker (2928 -> 44687 -> 825, 2777 ->
44689 -> 788) and cut the strips' links to the wall's other side, 2929 and 4491, both ways. The drops back along
the kept routes are restored (next item); the links to 2929 and 4491 stay cut, and bots go round the wall
(350-650 u).
the engine hull audit read the lanes clear (15 links, among them 29922 / 29923, 42299 / 43839, 1393 / 44256, and the
drops back off the bunker steps 44687 / 44689); three such pairs read blocked both ways and are cut both ways instead
(1132 / 21293, 5360 / 35270, 13041 / 16171). One-way level links 6 -> 1.
the cart is carved, grown by half a hull: 8448 is split (new 44706), and 4956 loses a strip (new 44705).
strips on its top (40583-40586). A version with 43701 flat at the wall's top and the strips merged was worse on neo
master: bots coming down from 4301 walked into the wall at (-3606, 1600) for 6-9 s at round start, about 1 event a
match against 0.05 on master's mesh (98 matches). Restoring the ramp alone halved it (0.40 a match); with the strips
too, 0.12 against master's 0.14 (42 matches each).
39 u above the real surface; each is split where the wedge meets the ground and set on it (new 44707-44709). Events
there 0.48 -> 0 a match.
CROUCHpockets under thestairs are
CROUCHtoo, since a standing hull meets the stair underside before it reaches the pocket.concrete walls by the mini radar, a wood wall); 6 areas no hull stands on (9261 and 44449 at the mini radar base, 21293,
a pole 23109, a transformer 34180, a leaning sheetrock 21953); a 46 u drop with no launch lane (1885 -> 27871, every
class stuck 5 of 5 in a scripted walk); and two displacement pairs, 2948 / 2950 near (-1225, -300) and 42585 / 44695
near (-750, -650): in a scripted walk every class was stuck in 3-5 of 5 trials from 2950 to 2948 and in 4-5 of 5 from
44695 to 42585. Each pair is cut both ways, since the two areas of each pair share neighbors (7861 and 16189; 7995 and
44696) that take bots around; 0.02 and 0 events a match there in the A/B below.
36,378 sq u (0.1 %) smaller than master's. Among them are 6
CROUCHareas (4 at the walkway platforms by the trenches)and 4
STAIRSareas, each merged into a neighbor with the same mark, so that floor keeps its mark.coverage-sweep bots stuck against the stair underside, is carved out. The four drops of about 100 u from the floor
above that landed on the strip (19 -> 890, and 241 / 8408 / 29927 -> 869) went with it.
solid 35.5-59 u over its center, and bots cannot plan a path through it. Six of master's
CROUCHareas at the endsof the walkway platforms by the trenches, near (-2200, 1525), (-150, 1525), (-2062, 1762) and (-12, 1762), lie under
static props about 60 u up and are deleted (12074, 13488, 23607, 23633, 29836, 29865; 5,000 sq u). Bots could not
path through them on master either. Four areas with displacement terrain in that box, 1651 near (-4862, -1812), 4798
near (-690, -660), 4895 near (540, -590) and 39848 near (-710, -525), are split around it (new 44692-44703), so
master's links 1651 <-> 2475 / 11056 / 40504, 4798 <-> 7995 / 39848 / 41333 and 4895 <-> 3192 / 31932 / 42703 /
42704 now run through the new pieces.
match there), and 40179 -> 28276 / 28277 near (-225, -575), drops across a displacement.
CROUCHneighbors, 6 deleted as blocked atround start, 4 lead-ins added), STAIRS 23 -> 19 (4 merged into
STAIRSneighbors), NO_MERGE 57 -> 25, OBSTACLE_TOP27 -> 6.
Deliberate one-way links
Every class walks it; 16064 has its own ways off, so no reverse is added.
How it was tested
trigger_hurt.oneway 0, cut 0, area 0, check 0, dynamic 0, entity 0; no area any class can enter and not leave. Keep 64, each with
its reason:
(an area's plane is rarely flush with a displacement). Every class crosses each both ways in scripted walks;
on the roof near (750..1275, 340), area 22045 and the stair 39635). Every class crosses each both ways;
bunker door, a transformer). Every class crosses each both ways;
CROUCHlead-ins at the under-stair doorways (869 / 44179, 869 / 44181, 890 / 44279): the audit sweeps astanding hull, which meets the stair underside there by design (see "Known, not changed");
displacement) and 9311 / 35265 (the mini radar's sloped wall), crossed in 3 of 5 trials one way, and 9307 / 35265
beside it, read blocked both ways and crossed by every class. 42585 / 44696, a displacement rim, crosses in some
trials one way. 13789 -> 44698 is a link no class plans (the planner reads it blocked), so bots do not use it;
(0.6-0.9 times a match), as on master.
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 14 ghost spawns in turn, 3 matches each (42 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 42 pairs, with a 95 % bootstrap interval.
By rank tier, stuck events master / this mesh: Private 27.1 / 4.4, Corporal 28.5 / 5.8, Sergeant 16.5 / 7.1, Lieutenant
22.6 / 6.1. Master's fell-off count is one bot at the bottom of a trench. Before the berm restore, the same comparison over
98 pairs gave 34.6 -> 9.7 all events (x0.39 [0.31, 0.49]); all 588 matches of the eight batches (test copies included) ended clean with 0 asserts.
Master's leading spots, events a match within 128 u, master -> this mesh (neo master): the handrail by 553 near
(-2399, 361) 9.2 -> 0; the bunker door by 8333 near (-970, 395) 1.38 -> 0; the robocart (157, 295) 1.12 -> 0.24; the
under-stair doorway near (1160, 1100) 0.83 -> 0.21; the handrail by 703 near (620, 337) 0.71 -> 0; the wall by 39934 near
(-1428, 1819) 0.50 -> 0.14; the wedge 0.50 -> 0.10; the trench and pit rims 0.31 -> 0.14; the berm 0.14 -> 0.12. No spot on
this mesh is at 1 a match or more.
Earlier measurement on the harness's research build (neo master plus the open bot PRs of the time and further research bot changes)
Same setup, 4 matches a pin (56 a mesh), players' XP from zero.
Master's leading spots, events a match within 128 u, master -> this mesh: the handrail by 553 near (-2399, 361) 6.9 -> 0;
the robocart (157, 295) 1.6 -> 1.3; the handrail by 703 near (620, 337) 1.4 -> 0; the wall by 39934 near (-1428, 1819)
0.6 -> 0.1; near (3250, -1319) 0.5 -> 0.1; the wedge 0.5 -> 0; the bunker door by 8333 near (-970, 395) 0.5 -> 0. The only
spot on this mesh at 1 a match or more is the robocart.
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, master's in brackets.
cart at 8448's east end, a few events at a time; bot code, not the mesh.
0.07, 0.07, 0.83). Bots retreating to cover head for the pockets and meet the door frame; in a scripted walk Recon and
Assault cross the lead-ins in 0-5 of 5 trials, and Support does not plan into a
CROUCHarea. Master has the samepockets.
of the version before the berm restore (master's mesh: 4 bots in 42, 4 in 98). One bot did in 56 matches of two test
copies of that version; on the research build, one bot in each of 2 of 56 matches (master 1 of 56).
fights on the walkway in 4 of 42 matches; area 42481 near (-1469, -509) 0.43 (0.17); the ledge by 9034 near
(1920, 544) 0.26 (0.12, falls off the path); 7903 near (-480, 2031) 0.17 (0.14).
4895 and its three pieces 44698-44700 near (540, -590), where the displacement still reaches into the box over each
piece, 5359 by the mini radar and 43703 near (-3390, 1888). Bots do not plan through them, as on master; the kept
link 13789 -> 44698 above leads into one of them.
ways); the drops off it, which no bot route uses, are left as they are.