Skip to content

ntre_ridgeline_ctg: navmesh rework and hillside ladder - #143

Merged
sunzenshen merged 8 commits into
NeotokyoRebuild:masterfrom
sunzenshen:navmesh-ridgeline-release
Oct 14, 2026
Merged

sunzenshen merged 8 commits into
NeotokyoRebuild:masterfrom
sunzenshen:navmesh-ridgeline-release

Conversation

@sunzenshen

@sunzenshen sunzenshen commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

ntre_ridgeline_ctg: navmesh rework

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

Dependencies and status

Needs (worse than master, or broken, without it):

  • NAV_MESH_AVOID annotation penalizes bot path costs neo#2170 ("NAV_MESH_AVOID annotation penalizes bot path costs", ready for review): bots route around NAV_MESH_AVOID areas. This mesh marks the tower-base strip (area 16274) AVOID.
  • Bots hold an exact move direction on PRECISE areas neo#2175 ("Bots hold an exact move direction on PRECISE areas", ready for review): bots hold an exact move direction on NAV_MESH_PRECISE areas, and steer their velocity in the air over them. This mesh marks the two areas of the rail hop onto the east plateau (17368, the handrail's 3 u top bar, and 17369, a crossbeam with 7-11 u of footing) PRECISE.
  • More tweaks to bot ladder approaches, climbs and dismounts neo#2176 ("Fix bot ladder approaches, climbs and dismounts", draft), how bots approach, climb and leave ladders. This mesh adds the map's one nav ladder (below), on a brush turned off the map's axes; on master's ladder code bots are held in that brush at the ladder's foot (see "The ladder, a climbing rig").

Without them the mesh still loads and works, and the marks are ignored.

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

  • None measured.

Pending before review:

At a glance

master this PR
nav areas 3473 2962
file size 9,497,958 bytes 7,315,495 bytes (-23 %)
areas no spawn reaches by links a Recon bot plans (68 u) 126 40 (9 pockets), see "Review fixes" and "East plateau"
one-way walk links between level floor 1 0
areas the engine blocks at every round start 31 0
bot stuck episodes a match, master code + the three PRs (see below) 6.33 2.17
nav ladders 0 1 (the east hillside ladder)

What changed

  • Areas the engine blocks at round start. CNavArea::UpdateBlocked finds a solid (mostly a prop) at the center of 31 of master's areas on every restart. The path cost then refuses them for the whole round, so bots plan routes they cannot take. They are cut around the obstacle or dropped.
  • Props and thin obstacles:
    • standing room is carved around props
    • three walk links a player hull cannot cross, past handrails, are cut
  • Hand edits where test bots got stuck:
    • the twin ramps and the stair rail between them
    • a stairway between handrails
    • catwalk railings too low for a ducked Support
    • a sliver area
  • Stranded floor is reconnected, not deleted:
    • 17 areas bots walk out of within step height had no link back in; they get the return links
    • three places a Recon can climb onto (+50, +51 and +65 u) get a one-way climb link
    • the rest (+70 to +99 u, and a 4-area island with no clean link) are removed
  • NAV_MESH_AVOID on the tower-base strip (area 16274), a 25 u strip between handrails and the power-line tower where most bot visits stalled. The mesh keeps it connected; the mark asks bots to route around it.
  • Ids follow master's. Every area that matches a master area keeps its id; new areas take the next free ids. Against master, an id-keyed diff shows 515 areas removed and 4 added (17366, 17367, 17368, 17369).
  • A nav ladder on the hillside climb near (1086, 3077), by the catwalk. The map's one climbable brush (func_ladder, brush 765) had no nav ladder. The brush is an 18 u slab whose climbing face points at yaw 60, 30 degrees off the map's y axis, with no tilt (measured from the BSP's brush planes). The ladder line lies on that face, centered across its 31 u width, where the editor's nav_build_ladder would put it. The bottom is on the hillside ground (area 5058, z -35), not at the brush's bottom 70 u under it; the top is the slab's own top area (17362), which walks onto the catwalk (507), and 17362 and 507 both list the ladder for the way down.
  • The strip past the tree trunk near (1111, 1648): the link 16523 <-> 16519 is cut. A bot on the 25 u strip pressed into the trunk (6 of 8 watch runs); with the cut it detours west of the tree by 5056, 1972 and 1987 (0 of 8).
  • Paths kept off the low wall's tip near (1145, -2202). Bots crossing into area 1983 aimed 2 u from the low sloped wall beside the pocket at 17268 (inherited from master), met its tip end-on, slid to its west side and walked into the pocket. 1983's west edge moves 16 u east, so the crossings sit a hull half-width off the wall, and 15155, the 25 u connector at the tip, is removed.
  • Re-analyzed in game after the edits, so the per-area visibility lists bots use for what they can see are current.

Review fixes

An outside review of the mesh listed walk links that run one way only, three pits Assault and Support bots can enter and not leave, and floor that only climbs no bot plans lead to. Every one-way pair was swept with a player hull both ways by an engine hull audit (a harness-only test build: a hull is stood every 4 u on every area and swept every 4 u across every link), and the mesh's level links were checked the same way.

  • One-way level links. Eight pairs blocked both ways are cut both ways (low walls, large pipes, a sloped wall, a stair handrail, a tall air conditioner, a tree); the missing direction of eight pairs a hull can cross is restored, one of them (near (-38, -3275)) one-way on master too. Three more ran through a strip inside the power-line tower near (458, -262), which is removed. One pair the audit reads clear is cut instead: the way north into the crouch alley near (550, -950). The audit sweeps a crouched hull into a crouch area; restored, the link sent bots up the alley, where they stuck against its far wall (200 stuck events in 24 test matches, none without it).
  • The pipe trenches near (1625, 2280), (1012, 438) and (1762, 638) (4 areas, as on master) are 48 u deep, and every way out is a 48 u climb: Assault and Support bots do not plan it (their measured jump is 45 u) but could drop in, for the hiding spot in each. The drops into them are cut and the climbs out kept, so no path leads in and a Recon that lands there climbs out. The longer trench by the pipe cap near (1000, 1050) keeps its 48 u climb out the same way (when it was cut in a trial, bots that fell into the trench's north end stuck there with no planned way out). These eight exit-only links are the mesh's only deliberate one-way links that are not drops.
  • Floor reached only by climbs no bot plans (56 areas in 9 pockets). With the restored links above, one pocket (14 areas near (88, -616)) is reachable by walking. For the others a flood fill of the map's collision was run from each, with jumps of up to 40 and 62 u:
    • nothing gets on: two pockets are removed, the tops near (355, -3715) (5 areas, 1 hiding spot) and (762, -3762) (1 area)
    • a player gets on only with chained or full-height jumps: the climbs of 68 u or more into them are cut, and they stay as floor bots can drop off but plan no path onto, like vehicle roofs on other maps: the roof near (127, 199) (21 areas, 5 hiding spots), the roof near (-585, -734) (10 areas), and four tops of 1-2 areas near (-756, 2425), (825, 2850), (-412, 938), (-100, -3662)
  • Thirteen more areas no player hull fits in, each with 96-100 % of the audit's stand samples blocked and no more than one bot position sample in 32 matches, are removed: inside stair handrails, low and sloped walls, a tree, a radio tower, a radar cone and a cooling unit. Two pairs blocked both ways are cut: past the plow near (500, 1500) and the turret near (775, -3350), each crossed at most once.
  • Kept: a low-wall link near (500, 838) bots cross (25 times); a link past the plow near (500, 1450) (4 crossings); the area inside the bunker door near (-882, -794), the only nav way into the nook behind it, which a player reaches round the door; five window ledges behind breakable glass, intact at round start; slope and stair links the audit cannot judge.

East plateau

The plateau (87 areas, 26 hiding spots) is the pipe rack that runs east from the radar deck and the hillside at its far end, 100-290 u above the floor around it. On master, nav reached it only through areas inside the tree near (1408, -1588) and beside the radar cone near (650, -637), where a player hull does not fit, so bots never got there; every other link leaves it by a drop. Those areas are removed (above). A player gets on from the deck: the deck is fenced by handrails whose top bar is 39 u above it, under every class's jump (Support and Assault 45 u, Recon 62 u; Support bots plan climbs up to 43 u), and a hop over the north rail's east end lands on the crossbeam that runs to the rack.

  • Two areas are added: 17368 on the rail's top bar by its east end, and 17369 on the crossbeam behind it, linked deck (1720) <-> 17368 <-> 17369 <-> rack (13942): a 39 u climb and a 39 u drop each way. Both are NAV_MESH_PRECISE (#2175).
  • The rack's first area (13942) is extended 8 u north so the crossbeam strip meets it at its center line.
  • From the valley a player does not get on: the plateau's west edge is a cliff, 47-163 u, or a lower face topped by a 50-degree ramp. The one exception is a 57 u Recon climb near (1270, -540); a link there was tried and bots hardly used it, so it is not added.

How it was tested

Offline checks of the final mesh (no game run):

  • every spawn reaches every other spawn, and every objective (6 ghost spawns, 4 retrieval points) is reachable from a spawn by every class; no objective or spawn reachable on master is lost
  • by each class's climb limit (Recon 68 u, Assault 48 u, Support 43 u), Recon reaches every area but 40: the drop-only roofs and tops above (36) and the pipe trenches (4); Assault and Support do not reach 137 and 177, the rest being raised floor behind 44-61 u climbs
  • no area a class can enter and not leave; no one-way link between level floor; the only one-way climbs are the trenches' eight exits
  • no fall on the map is fatal (the deepest drop link is 292 u, 6 damage; a fatal fall is about 3470 u for a Recon) and no area touches a hurt volume, so no area needs a CLIFF mark
  • the analysis data is current for every area
  • engine hull audit: no linked area a player hull cannot stand in but the bunker door's (kept above). BLOCKED_LINKS map=ntre_ridgeline_ctg level_pairs=6219 oneway=0 keep=0 cut=1 area=1 check=11 entity=5 (the low-wall link and the bunker door above; the entities are the window glass; the 11 check pairs are blocked both ways past props and displacement edges and account for 1 stuck event in 18 matches on this mesh). The audit ran before the ladder and the edits after it; those add no walk link (they remove 8) and only move one area's edge away from a wall.

The shipping states, one batch. Byte-identical copies of the map, one carrying each .nav, so the arms interleave. CTG with the ghost pinned at each of the 6 ghost spawns, 3 matches each, 30 bots, default weapon damage (1.485), 1 round, 8 matches at a time. All 54 matches reached match end with 0 asserts. Arm C ran the mesh before the low-wall edit (af2c7df); that edit is measured on its own below. Stuck counts exclude the spawn crush at round start and the weapon-scavenging behavior; an episode is one bot's stuck events less than 10 s apart. Arms B and C ran the ladder PR (#2176) as it was before its latest fixes; the ladder's own tests below run its current code.

A: master code, master mesh B: + #2170 + #2175 + #2176, master mesh C: + #2170 + #2175 + #2176, this mesh
stuck episodes a match 6.72 6.33 2.17
stuck events a match 30.3 30.2 11.2
fall deaths 0 0 0
kills a match 26.6 23.8 24.8
  • B is A's behavior: master's mesh has no ladder and no PRECISE, CLIFF or AVOID mark, and the three code PRs act only on those.
  • The places that lead A and B are gone on this mesh, and each is one of the edits above: beside the radar cone (areas 698 / 11013), the stair handrail near (573, -943), the corner near (959, -2124), the area near (-1424, -1484) and the tower base near (-368, 2568).
  • Fell off the path a match: A 0.61, C 1.06, non-lethal, spread over three spots of 2-3 events. Fall deaths 0 in every arm.

The low-wall edit (af2c7df), on its own. Same build and settings as arm C, the mesh before and after the edit. With the ghost pinned at the 4 spawns whose routes pass the wall, 4 matches each: bots in the pocket in 4 of 16 matches before, 1 of 16 after. All 6 pins, 3 matches each (18 a mesh): the spot 0.56 -> 0.22 stuck events a match, no new spot near the edited areas.

The ladder, a climbing rig. Jinrai spawned at the ladder's foot with the ghost on the catwalk (climbs up), or on the catwalk with the ghost at the foot (climbs down), 12 bots, one 3-minute round, a tenth of weapon damage, a 2 s pre-round freeze, 8 runs at a time.

Where the ladder line goes was settled first, on test builds of the bot code from before the ladder PR's latest fixes, 32 runs a placement. With the line on the face, against a first placement a few units in front of it: climbs stuck on the ladder 39 -> 9, up approaches that timed out 115 -> 79, stuck events within 300 u of the ladder 211 -> 97. In ordinary matches with the same settings as the survey above (18 a mesh), the stuck spot at the ladder's foot went 0.61 -> 0.11 events a match, with no new spot. An earlier probe (ghost on the catwalk, 30 bots, 8 matches a mesh) had bots climbing it about 6 times a match, 0 without the ladder. Two earlier fits were dropped too: the line at the brush's center put a climbing bot's hull inside the slab (754 stuck events near it in 8 matches), and landing on the catwalk's center made some bots overshoot onto a light pole beside it.

Master's ladder code against the ladder PR, on this mesh, 32 runs up and 32 down each, plus 16 down runs on a test-only copy of this mesh with the 140 u drop link beside the ladder (17362 -> 11894) cut, so that descents must use the ladder:

master the ladder PR
runs with a bot held at the ladder for 10 s or more (32 up, 32 down, 16 down on the copy without the drop) 80 of 80 0 of 80
runs in which the team reached the ghost (32 up, 32 down) 64 of 64 64 of 64
climbs up finished on the catwalk, 32 up runs 18 of 135 167 of 173
climbs up that ended back at the ladder's foot, 32 up runs 14 of 135 (10 %) 1 of 173
descent approaches that mounted over the level top, copy without the drop 0 of 171 97 of 98
first descents from the catwalk by the ladder rather than the drop, 32 down runs 35 of 247 (14 %) 113 of 190 (59 %)
descents finished at the foot, 32 down runs 23 of 43 99 of 120
fall deaths within 3 s of leaving the ladder 5 0
stuck events within 300 u of the ladder in a run median 445-476, max 634 max 19, none over 30

On master, 3-6 bots a run stand wedged in the brush at the foot for most of the round. With the ladder PR, a climb starts at the ladder line and the bot runs on across the catwalk; a descent steps out over the top and climbs down. With the drop link kept, about 4 in 10 bots still take the drop, which costs no health.

The ladder's foot in ordinary matches, on the ladder PR's current code: 30 bots, default weapon damage, the ghost pinned at each of the 6 spawns twice, 12 matches a build, master and the ladder PR in one batch. Stuck events within 300 u of the ladder: master 684 (57 a match; bots wedged at the foot in 3 of the 12 matches), the ladder PR 0 in 12 matches (the placement screen above had 0.11 a match). Climbs up finished 14 of 25 on master, 31 of 32 on the ladder PR; runs with a bot held at the ladder 9 and 0. No new stuck spot within 300 u of the ladder; the map's stuck events 849 -> 119, kills 296 against 306, no fall death near the ladder in either build.

The east plateau, pinned-ghost probes. The ghost is placed on the rack by a harness-only server cvar (see "How the pinned-ghost probes work"), at the rack's first area (700, -600) and further along it (900, -588), with the deck (600, -750) as a control. Each match runs 12 bots of one class or the even roster, 3 matches a spot, at default damage, on upstream master with #2170 and #2175. Every class gets on and takes the ghost. With #2175 as it stands, bots took the ghost at the rack spots in 24 of 48 matches (Support in 3 of 12) and at the control in 11 of 12, and 10 % of hop traversals ended off the hop (17 of 165). Without its airborne steering, 24 % did (45 of 191).

Known items

  • Rail-hop overshoot. About 1 in 10 bots that take the hop still goes off its north side, onto a post top or girder below the crossbeam, and walks back round; none of these falls is fatal (0 deaths in 87 probe matches). It is momentum from the climb, not teammates shoving: 8 of 62 had another player within 48 u. In normal play bots hardly use the hop: no bot stood on 17368 or 17369 in 18 matches of arm C.
  • Descents that let go early. About 1 in 6 descents by the ladder (20 of 120 in the 32 down runs above) let go 70-110 u above the foot and drop the rest of the way. In a 32-run check of these falls none cost health (master: 2 of 34 descents fell, both with damage). The ladder PR makes far more descents here than master (120 against 43 in the runs above), since fewer bots walk off the slab.
  • The drop beside the ladder is kept. The link 17362 -> 11894 drops 140 u off the slab's top with no damage, the way a player goes down too; with it about 4 in 10 bots skip the ladder (above). Without it, on the test copy, 95 of 96 first descents used the ladder.
  • A hop beside the foot near (1028, 3020), area 16766: a bot that has fallen off the ladder can hop in place there for up to 20 s while its approach to the foot times out, in 3 of 80 rig runs on the ladder PR. The spot shows up in master's runs too.
  • The low-wall pocket near (1125, -2016) (area 17268, inherited): reduced, not gone. A bot sprinting past the wall's tip can still slide to its far side: 1 of 16 pinned matches, 0.22 stuck events a match.
  • Inherited low-rate spots, also present on master's mesh and below once a round:
    • the corner near (455, 2452), areas 468 / 17189: 0.4-0.6 stuck events a match
    • the drop / climb link near (944, -135), areas 15498 / 515 / 17310, the same geometry as master: 0-0.9 stuck events a match between batches
  • The busiest spot of earlier test rounds, a crouch passage near (162, -412), showed up again in a later 36-match screen at 1.8 stuck events a match in one arm and 0 in the other, so it comes and goes between batches.

Tried and dropped

  • Restoring the crouch alley near (550, -950), which the audit reads clear: 24 test pairs, stuck events x1.56 [1.06, 2.33], bots stuck against the alley's far wall.
  • Cutting the pipe-cap trench's climb out near (1000, 1050): bots that fell in stuck there; the climb out is kept.
  • A Recon link onto the plateau from the valley near (1270, -540): bots hardly used it.
  • No sprinting on or toward PRECISE areas, as a fix for the rail-hop overshoot: no bot sprinted on the hop any more, but the off-hop rate stayed at 24 % (16 of 67). The falls are climb momentum, which #2175's airborne steering addresses instead.

How the pinned-ghost probes work

The offline checks show that the mesh links an area to a spawn. They do not show that a bot will walk there: a link can cross a gap the player hull cannot fit through, or lead along a route path planning never picks. To test one area in game, the area is made the objective and bots are sent to get it.

  • The ghost is placed on the area by a server cvar. A harness-only neo patch, used on test builds and not part of this PR or any neo PR, adds sv_neo_ghost_spawn_pos "x y z". It replaces the position the round's chosen ghost spawn would have used, so any point becomes the CTG objective. The ghost is dropped a little above the area and settles onto it as it would from a real spawn. The map file is not edited.
  • A pickup at the spot means bots can reach the area. Bots run their normal CTG errand to the ghost. A pickup is the clear signal; a bot coming within 160 u is a weaker one. The position of the first pickup is checked, because a ghost on a low raised top can be taken from the floor below, and a ghost on a narrow ledge can fall off it.
  • A miss only counts with a control. A spot bots miss is re-run beside a control spot on the same map that bots are known to reach, in the same batch. Without the control, "not reachable" and "the probe did not work" look the same.
  • Master's mesh can run beside this one. The game loads a .nav by map name, so the harness copies the .bsp byte for byte under a second name that loads its own .nav. The same pin then runs on both meshes in one batch.

One file. Against master: 3473 -> 2981 areas, 9,497,958 -> 7,418,183
bytes; 91 areas no spawn or objective reaches (24 pockets) -> 0; 31
areas the engine blocks at every round start -> 0.

- Areas CNavArea::UpdateBlocked finds solid at their center at round
  start are cut around the obstacle or dropped.
- 3 walk links a player hull cannot cross (handrails) are cut.
- Hand edits where test bots got stuck: twin ramps and the stair rail
  between them, a stairway between handrails, catwalk railings too low
  for a ducked Support, and a sliver.
- Stranded floor is reconnected: return links where bots walk out
  within step height, and one-way Recon climbs (+50, +51, +65 u); the
  rest, above every class's crouch jump or unlinkable, is removed.
- NAV_MESH_AVOID on the tower-base strip where bots stall.
- Re-analyzed in game after the edits.
Renumbers area ids only, so an id-keyed diff against master reads
sensibly: 2979 of the 2981 areas carry the id of the master area they
match, kept ids that moved more than 64 u from their master location
drop from 43 to 14, and the diff shows 2 added / 494 removed areas.
Geometry, connections, attributes and the analyzed visibility data are
unchanged (verified topology-identical).

@sunzenshen sunzenshen left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Another map where a lot of the OnStuck reductions come from deleting rail jump connections:

Image

@sunzenshen
sunzenshen marked this pull request as ready for review September 28, 2026 08:03
@sunzenshen
sunzenshen marked this pull request as draft September 28, 2026 08:36
@sunzenshen

Copy link
Copy Markdown
Contributor Author

Draft: Going to take a second look at an alleged stray ladder that everyone so far missed.

An outside review of this mesh found walk links that run one way
only, three pits Assault and Support bots can enter and not leave,
and floor reached only by climbs no bot plans. Each one-way pair was
swept with a player hull in both directions by the engine's hull
audit:

- Cut both ways the nine pairs blocked both ways (low walls, pipes,
  a sloped wall, a stair handrail, an air conditioner, a tree, and
  the crouch alley near (550, -950), which the audit swept with a
  crouched hull and bots failed); restore the missing direction of
  the eight pairs that are clear.
  Delete the strip inside the power-line tower near (458, -262) that
  three more ran through.
- The pipe trenches near (1625, 2280), (1012, 438) and (1762, 638)
  are left only by 48 u climbs, which Assault and Support bots do
  not plan: cut the drops into them and keep the climbs out, so no
  path leads in and a Recon that lands there climbs out. The climb
  out of the trench near (1000, 1050), whose drop was already cut,
  stays as that trench's exit the same way.
- Climb-only tops: delete the two pockets nothing can get onto; cut
  the climbs of 68 u or more into the six a player reaches only by
  chained or full-height jumps, and keep them as drop-only floor.

Beyond the review, from the same audit: delete thirteen more areas
no player hull fits in (handrails, low walls, a tree, a radio
tower, a radar cone, a cooling unit), and cut two pairs blocked both
ways by a plow and a turret. The east plateau near (1400, -900),
which nav reached only through the areas inside the tree and the
radar cone (as on master), is left with no way in.

Existing areas keep their ids. Re-analyzed in game (same graph,
fresh visibility).
The east plateau (87 areas, 26 hiding spots: the pipe rack east of
the radar deck and the hillside it leads to) had no way in. The radar
deck is fenced by handrails 39 u tall, under every class's jump, and
a hop over the north rail's east end lands on the crossbeam that runs
to the rack.

- Add 17368 on the rail's top bar by its east end and 17369 on the
  crossbeam behind it, linked 1720 <-> 17368 <-> 17369 <-> 13942
  (a 39 u climb and drop each way). Both are PRECISE: the bar is 3 u
  wide and the crossbeam leaves a hull 7-11 u of footing.
- Extend 13942 north by 8 u so the crossbeam strip meets it.

The old way in ran through areas inside the radar cone and a tree,
deleted in the previous commit. Pinned-ghost probes: bots of every
class picked up a ghost placed on the rack, none on the previous
mesh. In 24 paired matches no bot went there unprompted, and stuck
events did not rise (x0.81, 95 % interval [0.59, 1.15]).

Existing areas keep their ids; the new ones take the next free ids.
Re-analyzed in game (same graph, fresh visibility).
The map's one ladder, by the catwalk near (1080, 3070), had no nav
ladder, so bots never planned a climb there. Add ladder 1: bottom on
the hillside (5058), top on the ladder's own top (17362), which walks
onto the catwalk (507); 507 and 17362 both list it for the way down.

The ladder brush is a slab turned 60 degrees and 32 u deep in y. The
ladder line sits on its south face, where a climbing hull clears it;
at the brush's center, climbing bots were placed inside the slab and
hung there. The bottom is at the ground (z -35), not at the brush's
bottom 70 u under it. Landing on 17362 rather than the catwalk's
center keeps bots from overshooting onto the light pole beside it.

Pinned-ghost probes on the catwalk (30 bots, 8 matches): the team
that spawns south climbs it about 6 times a match, 38 of 41 top exits
land on the slab or catwalk, and the ghost is taken in every match.

Existing areas keep their ids. Re-analyzed in game (same graph).
@sunzenshen

sunzenshen commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor Author

Added a nav ladder, though the alignment was a bit odd programmatically:

(One hypothesis I could look into later is that the navmesh might only be able to connect other nodes in a compass cardinal directions orientation, so the ladder connection cannot be at a 45 degrees rotation.)

Screenshot 2026-10-05 010059

Bots seem to climb it alright, though tend to struggle a bit going down it:

image

Move nav ladder 1 from 3.5 units in front of func_ladder brush 765's
turned face onto the face, centered across its width, where the
editor's nav_build_ladder would place it. Same areas, links and ids.

Measured on the 60-degree brush with the A/D ladder rig (32 runs a
placement, two builds): climbs stuck on the ladder 39 -> 9, up
approach timeouts 115 -> 79, OnStuck within 300 u of the ladder
211 -> 97. In ordinary 30-bot matches with #2170 + #2175 + #2176
(36 matches) the ladder-foot spot drops 0.61 -> 0.11 events a match
and stuck episodes 2.00 -> 1.83 a match, no new spot. It also lets
review tools pair the ladder with its brush.
Area 16523's 25 unit strip runs between tree02's trunk and the hillside
at (1111, 1648), a gap narrower than a player, so bots walking it to
16519 pressed into the trunk until the stuck monitor fired. Cut the
16523 <-> 16519 link; routes go round west of the tree by 5056, 1972
and 1987. Same areas and ids.

Watched with Jinrai spawned north of the tree and the ghost south of
it (8 matches a mesh): stalls at the trunk in 6 of 8 matches before,
none after. In ordinary 30-bot matches with #2170 + #2175 + #2176
(36 matches) the spot drops 0.61 -> 0 events a match, stuck episodes
2.44 -> 2.22 a match, no new spot.
Bots crossing into area 1983 aimed at x 1150, 2 u from the low wall
(concrete_slopedwall_rough) beside the 17268 pocket. The hull met the
wall's north tip end-on, slid to its west side and walked into the
pocket, pressing there 4-10 s. Move 1983's west edge to x 1166 so the
crossings sit a hull half-width off the wall, and delete 15155, the
25 u connector at the tip. Re-analyzed.

Package build, 30 bots: spot runs 4/16 -> 1/16; same-size screen (6
pins x3) spot 0.56 -> 0.22 events a match, no new spot nearby. ntnav
review: -1 area, -6 links, no reachability change.
@sunzenshen
sunzenshen force-pushed the navmesh-ridgeline-release branch from b905a1b to af2c7df Compare October 8, 2026 01:10
@sunzenshen sunzenshen changed the title ntre_ridgeline_ctg: navmesh rework ntre_ridgeline_ctg: navmesh rework and hillside ladder Oct 8, 2026
@sunzenshen

Copy link
Copy Markdown
Contributor Author

I'm opening this one up for review as the complementing PR with NeotokyoRebuild/neo#2176 , as there's only one single ladder to test on this map.

@sunzenshen
sunzenshen marked this pull request as ready for review October 9, 2026 04:43
@sunmachine
sunmachine requested a review from a team October 14, 2026 03:19
@sunzenshen
sunzenshen merged commit 96f0252 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