Skip to content

ntre_threadplate_ctg: navmesh rework - #161

Merged
sunzenshen merged 3 commits into
NeotokyoRebuild:masterfrom
sunzenshen:navmesh-threadplate-release
Oct 14, 2026
Merged

sunzenshen merged 3 commits into
NeotokyoRebuild:masterfrom
sunzenshen:navmesh-threadplate-release

Conversation

@sunzenshen

@sunzenshen sunzenshen commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

ntre_threadplate_ctg: navmesh rework

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

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 annotation penalizes bot path costs neo#2170 ("NAV_MESH_AVOID annotation penalizes bot path costs", merged): AVOID path cost. The mesh marks the 9 areas of the crouch-duct pocket NAV_MESH_AVOID (below). No spawn reaches the pocket now (the vent duct's mouth is cut, below), so the marks act only on a bot that is already inside.
  • More tweaks to bot ladder approaches, climbs and dismounts neo#2176 ("Fix bot ladder approaches, climbs and dismounts", merged): ladder climbing. The mesh has 6 nav ladders. On neo master, up climbs a match: ladder 1 1.28, 2 0.26, 5 0.74, 7 0.83, and 4 stuck events at their tops, none in a ladder behavior (45 on master's mesh). Ladder 3, newly linked at its top, stands past the vent duct and is not reached.

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

At a glance

master this PR
nav areas 1159 906
file size 483,471 bytes 321,217 bytes
nav ladders 7 (two with no top) 6, linked up and down
areas no spawn reaches over any link 60 in 15 pockets 55 in 12
the same by each class's climb limit: Recon / Assault / Support 67 / 73 / 111 61 / 67 / 78
areas entered with no way back, any class 7 0
objectives a team cannot reach capture zone 2, both teams none
bot stuck events a match on neo master (A/B below) 24.9 5.8
stuck episodes a match on neo master 5.2 1.0

What changed

  • Capture zone 2 is reachable. On master its marker at (-204, -5046, 136) resolves to a 2-area island on a prop
    tabletop 21 u above the floor, which no link enters, so neither team can reach it. The island is removed and the marker
    resolves to the floor.
  • The basement pit is removed. Seven areas at z -80 under the z 24 walkway are entered by 99-104 u drops and have no
    way out for a walking player; on master every class can fall in and not leave.
  • 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.
  • Hand edits where test bots got stuck:
    • the stair landing by the east ramp near (1629, -1454): the landing's underside is 210 u up and the floor rises into
      the ramp, so a standing bot's head met it before the crouch strip began. The floor before it and the ramp's first
      20 u are split off and marked CROUCH, so bots duck before the landing. Stuck events at the landing went 13.6 -> 0.4
      a match (27 matches a mesh, against the mesh before the edit).
    • the pillar at x 2008..2056, y -1224..-1176: the floor areas north and south of it now end a half hull off its faces,
      so paths go around its corner instead of pressing into it (about 25 events over 5 matches there before the edit)
    • the stair at (437, -2275) up to the raised strip: master's two 50 u slivers along the strip's edge above it (3384 /
      3385) stay split at x 475; merged into one, they put the next waypoint 50 u further east, and bots leaving the 25 u
      wide stair's top stepped off its side and jumped at the strip's face (0.69 stuck events a match with the
      merge, 0.16 with the split, 108 matches each)
    • the drop from area 3198 to 325 is cut: its landing point is on another floor at the top height, with no clear column
      down, and every class stood at the drop's goal on every try in a scripted walk of the link
  • The crouch-duct pocket (9 areas near (2012, -3100, 350), behind a 25 u wide, 64 u high duct): ladder 3, from z 201
    to the duct mouth at z 305, gets the top master's ladder lacks, the pocket's missing return link is added, and the
    15 u second ladder on the same brush, whose two areas already walk-connect, is dropped. The 9 areas are AVOID, so paths
    route around them. Connecting the pocket without the mark was tested earlier and raised stuck
    events by 10-20 % (216 matches). The only walking way to ladder 3's foot is the vent duct below, whose west mouth is
    cut (next item), so no spawn reaches the pocket; the edits keep it consistent for a bot that is already inside.
  • The vent duct's west mouth near (1135, -3568): the 28 u climb 3530 -> 3529 into the duct (3522..3529, z 204, 25 u
    gap, CROUCH) and its drop back are cut. No class enters there: a scripted walk of the link failed it both ways for
    every class, and in the A/Bs no bot reached 3529 on either mesh. With the return link above, the duct led on to
    ladder 3, and Recon escorts jumped at the mouth: 0.50 stuck events a match on the file without the cut, 0 with it.
    The duct, its east mouth, ladder 3 and the pocket (21 areas) are now drop-only floor.
  • Links cut:
    • the 144 u climb from 14 onto the 25 u strip 769 near (588, -1225), which no class makes, and its drop back;
      no link joins the two now
    • the one-way gap link from 521 to 223 (master's too), 50 u past a pallet near (588, -1800), clear on 1 of 6 lanes
      when read in game with a player hull; 521 still reaches 223 through 1628 and 778
    • 2 / 3442 near (1632, -225), a 13 u wide crossing against a vehicle barrier post, blocked on every lane both ways
      when read in game with a player hull
    • one-way links onto two staircases from the side, across the stairs' handrails: 33 -> 2444 and 634 -> 2444 near
      (1700, -3012), and 195 -> 2505 near (1350, -1888); both stairs are still entered at their ends
    • the 88 u drops from 1117, a strip on top of a fuel silo prop near (1250, -2112, 216), to 239 and 374, which pass
      over the silo's rounded edge; 1117 keeps its drop to 845 on the west side
    • 91 / 1343 near (88, -5188), a 31 u step between the floor and the top of a truck, whose 19 u bed over open
      floor stops a player's body like a rail; 1343 still joins the rest of the truck top
    • the three groups above are cut by the railing rule: a player box walked over the map's collision crosses a thin
      barrier on every lane, and a way round exists
    • 438 / 2534 near (1640, -1362, 216): the engine blocked 2534 at round start (a brush 36 u above its floor), so it
      is trimmed 7 u to clear it, which leaves a gap to 438; both still join through 303
    • 459 / 104 and 459 / 458 near (1675, -1490), and 2803 / 3468 near (1750, -1438): the stair-landing split above
      puts a new area between each pair (3533 on 459's west side, 3534 at the ramp's foot), and each pair still joins
      through it. Events at 459 on neo master: 2.11 a match on master, 0.41 on this mesh (A/B below).
  • Areas inside props removed, each 92-100 % blocked for a standing player hull: a strip inside a hose near
    (1137, -1258) (1895), a door frame strip near (1238, -1458), strips inside
    two forklifts near (1312, -3212) and (688, -288), strips centered on two vehicle barrier posts near (1438, -238) and
    (2012, -238), and a strip inside a monitor near (2284, -2412).
  • Marks: AVOID 0 -> 9, NO_MERGE 81 -> 27, OBSTACLE_TOP 43 -> 2, CROUCH 36 -> 30.
  • Ids follow master's. 903 of the 906 areas keep a master id; 781 of them have master's corners. 3 areas are new (3532, 3533, 3534).
  • Re-analyzed in game after the last edit, so the visibility lists bots use are current.

How it was tested

  • Reachability of the final file:
    • every spawn reaches every objective for both teams (13 of 13)
    • no dead end, no area a class can enter and not leave, no one-way climb of 60 u or more
    • routes within 10 % of master's but two, both short: ghost spawn 5 for defenders, 389 -> 571 u, and capture zone 1 for
      attackers, 171 -> 239 u
    • by each class's climb limit, Recon (72 u) does not reach 61 areas, Assault (53 u) 67, Support (47 u) 78; the 55 no
      link reaches are drop-only floor, 21 of them the vent duct region above
  • Falls. The map has no trigger_hurt.
  • Engine hull audit of the final file (every level link swept with a player hull in game):
    BLOCKED_LINKS level_pairs=1290 oneway=0 keep=1 cut=0 area=0 check=0 dynamic=0 entity=2 one_way_drops=201 sinks(any/recon/assault/support)=0/0/0/0. The two entity pairs cross func_breakables (one where master's second pocket
    ladder stood). The kept pair, 3514 / 3520 near (1840, -3475), is the mouth of the 64 u duct behind a breakable vent grate, the
    same as on master, and kept: it joins the vent duct to ladder 3's foot, inside the region no spawn reaches.
  • A/B on neo master 092203f36 (Release dedicated server, harness logging only). Byte-identical copies of the map,
    one carrying each .nav, matches interleaved: CTG, the ghost pinned 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 XP rank tier, rotated across
    the spawns, 8 matches at a time. Stuck events are OnStuck plus FAIL_STUCK, without the spawn crush at round start
    and weapon scavenging; an episode is one bot's events less than 10 s apart.
a match, neo master master this mesh paired
all movement events [95 % interval] 27.5 [22.4, 33.1] 8.5 [4.9, 13.9] x0.23 [0.17, 0.32], 48 of 54 pairs down
stuck events 24.9 5.8 x0.15 [0.11, 0.21], 50 down
stuck episodes 5.2 1.0 x0.30 [0.26, 0.36], 51 down
no path / fell off the path 2.07 / 0.61 2.22 / 0.46
fall deaths 0 0
kills 25.4 25.6
matches at match end with 0 asserts 54 of 54 54 of 54

Master's leading spots, events a match on master and on this mesh: the floor beside the stair landing near
(1601, -1491), 10.5 -> 0.91; a wall near (54, -3900) (area 13), 4.50 -> 0.09; the stairs near (1445, -1520, 305), 3.29 -> 0.25;
the large crate near (-343, -4011), 1.28 -> 0.20. This mesh's two leading spots are one bot each, one match each: a Recon
in a fight near (384, -3275), 67 events in one episode, and a ghost carrier near (612, -1142, 297), 59; the next is the
floor beside the stair landing above, 0.91 (12 episodes in 54 matches). Both meshes read higher on neo master than on the
research build (below).

  • The two edits after the first A/B (the vent duct's mouth, the stair split) were each measured against the file
    before them on the same setup, 54 matches a file for the first and 108 for the second: stuck episodes x0.96 [0.77, 1.17] and x1.03 [0.90, 1.17], and the spot each
    targets went to 0 and 0.16 events a match.
Earlier A/B, on the harness's research build (10-08)

The same design on the harness's research build (neo master plus the open bot PRs, among them #2170 and #2176, and
further research bot changes), against the file before the two edits above:

a match master this mesh
all movement events [95 % interval] 13.0 [9.5, 17.1] 2.8 [2.0, 3.5]
stuck events 10.7 1.7
stuck episodes 2.6 0.7
no path / fell off the path 1.63 / 0.67 0.46 / 0.59
fall deaths 0 0
kills 24.9 25.4
matches at match end with 0 asserts 54 of 54 54 of 54

Master's leading spots, events a match on master and on this mesh: the floor beside the stair landing near
(1602, -1487), 5.87 -> 0 (its areas are removed); the stairs near (1440, -1520, 305), 1.11 -> 0; no path in the basement
pit near (343, -3075, -80), 1.02 -> 0 (removed); a large crate near (-297, -3603), 0.81 -> 0.17. This mesh's leading spot
is the hose near (1124, -1210), 0.74 (master 0.59 there, both mostly Support against the hose); no spot on this mesh
reaches 1 event a match.

Known, not changed

  • The crouch-duct pocket is not reached from a spawn: its ways in are the duct and ladder 3, both past the vent duct's
    cut mouth (above). In 135 earlier matches on the research build, 81 of them with the pocket
    connected but not marked, no bot entered it. In the A/B on neo master, 0 position samples and 0 events in its 9 areas on either mesh.
  • The ramp corner near (344, -4804, 128). Bots heading for the ramp's top walk the low floor beside the ramp and
    stop against its face: 4 holds over 3 s and 6 stuck events at the corner in 8 matches with the ghost pinned at 4
    spawns. Splitting the ramp's foot did not change it; moving the waypoint needs a different area layout. In the A/B on
    neo master: 0.25 events a match there (master 0.30). Over all four 54-match A/Bs it varied 0.24-0.98, and with twice
    master's traffic past it in the first, the rate per bot passing was the same as master's (0.57 v 0.65).
  • The hose near (1124, -1210): 0.11 events a match in the A/B on neo master (master 0.74 at the same areas); 0.44 v 0.54 in the first A/B.
    Mostly Support against the hose. Removing the strip inside the hose did not change it.
  • A drop from 2742 to 2806 whose 33 u climb back is cut. No event at either area on this mesh in the A/B on neo master (1 on master).
  • Drop-only floor: 12 pockets (55 areas) no link from a spawn reaches, and 7 one-area tops reached only over
    69-144 u climbs; all on master too, except the 8 areas of the vent duct, which master reaches over the mouth no class enters.
  • Four floor regions a spawn reached on master are removed: the basement pit above; four areas beside the stair landing
    near (1550..1625, -1525..-1425, z 128) (three removed, one cut back), master's leading stuck spot (10.5 events a
    match there in the A/B on neo master); two on the vehicle barrier row near (1675..1775, -250, z 128), whose posts stand at
    x 1640, 1712 and 1784; and two forklift strips near (688, -288).

One file. Against master: 1159 -> 905 areas, 483,471 -> 320,362
bytes; areas no spawn reaches over any link 60 -> 34; areas a class
can enter and not leave 7 -> 0; capture zone 2 now reachable by both
teams (on master its marker resolves to a prop-top island).

- Removed the basement pit no walking player leaves, the prop-top
  island under capture zone 2, and the floor under the stair landing
  near (1600, -1490), master's largest stuck spot.
- Areas the engine blocks at round start are cut around the obstacle;
  hand edits where test bots got stuck (the stair landing crouch
  strip, the pillar near (2030, -1200), the drop 3198 -> 325).
- Ladder 3 gets the top master's lacks; the redundant 15 u ladder 4
  is dropped. The 9 areas of the crouch-duct pocket are AVOID.
- Six links a railing pass left one way get their missing direction
  back. Cut: the 144 u climb 14 -> 769, the gap link 521 -> 223 past
  a pallet, and 2 / 3442 against a barrier post.
- Deleted strips inside props the hull audit reads 92-100 % blocked:
  1777, 1895, 1923, 1998, 2381, 2606, 3025.
- Re-analyzed in game after the edits.

Engine hull audit of this file: oneway 0, cut 0, area 0, check 0,
keep 1 (3514 / 3520, the duct mouth behind a breakable grate, as on
master), entity 2, 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 13.0 -> 2.8, stuck episodes 2.6 -> 0.7, no path
1.63 -> 0.46; all 108 matches ended clean.
Cut 3530 <-> 3529, the 28 u rise from the floor at (1135, -3568)
into the vent duct (3522..3529, z 204). No class enters the duct
there: a scripted walk of the link failed both ways for every class,
and in 108 matches on neo master no bot reached 3529. The return
link 3522 -> 3520 made the duct the only walking route to the duct's
east mouth and ladder 3, so escorts heading there jumped at the
mouth: 0.50 stuck events a match on the previous file, 0 with the
cut (54 matches each, ghost pinned at the 9 spawns).

The duct, its east mouth, ladder 3 and the crouch-duct pocket (21
areas) are now unreached from spawns: 55 in 12 against master's 60
in 15. Re-analyzed in game; navconnect gate PASS; hull audit as
before (keep=1 entity=2, sinks 0).
Split 3384, the 25 u sliver along the raised strip's north edge above
the stair 1593 at (437, -2275), at x 475 as master has it. The east
piece keeps master's id 3385. As one 100 u area it put the waypoint
after the stair's top at x 525, so bots leaving the 25 u wide stair
headed for it diagonally, stepped off the stair's east side onto
floor 51 and jumped at the strip's face: 0.69 stuck events a match
there on the previous file, 0.16 with the split (108 matches each,
ghost pinned at the 9 spawns; master's mesh 0.07). Over the whole
map: stuck x1.17 [0.92, 1.49], episodes x1.03 [0.90, 1.17].

Re-analyzed in game; navconnect gate PASS; hull audit level_pairs
1290 (+ the split's pair), keep=1 entity=2, sinks 0.
@sunzenshen
sunzenshen requested a review from sunmachine October 13, 2026 01:20
@sunzenshen
sunzenshen marked this pull request as ready for review October 13, 2026 01:20
@sunzenshen
sunzenshen merged commit 3d94f0b 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