Skip to content

ntre_tarmac_ctg: navmesh rework - #149

Merged
sunzenshen merged 7 commits into
NeotokyoRebuild:masterfrom
sunzenshen:navmesh-tarmac-release
Oct 14, 2026
Merged

sunzenshen merged 7 commits into
NeotokyoRebuild:masterfrom
sunzenshen:navmesh-tarmac-release

Conversation

@sunzenshen

@sunzenshen sunzenshen commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

ntre_tarmac_ctg: navmesh rework

One file, neo/maps/nav/ntre_tarmac_ctg.nav. The NAV_MESH_PRECISE + NAV_MESH_CLIFF marks use the movement rules of NeotokyoRebuild/neo#2168 (merged). Most of it was measured on upstream master plus NeotokyoRebuild/neo#2176's unwanted-ladder release half and NeotokyoRebuild/neo#2186 ("Bots skip weapons they cannot reach", merged since), with harness logging added, and again with #2176's descent half on top.

Dependencies and status

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

  • More tweaks to bot ladder approaches, climbs and dismounts neo#2176 ("Fix bot ladder approaches, climbs and dismounts", draft), for ladder 1's descent (see "Ladder 1"): on upstream ladder code, bots going down that ladder stall at a rail about every second round, as they do on master. In the ladder PR's own ladder tests on this mesh (12 bots, a team sent down ladder 1, three runs), its bots took another way down every time (no mount; master 3 mounts, 1 finished), with 0, 18 and 0 stuck events within 300 u of the ladder a run against master's 9, 24 and 43; up ladder 1, the ladder PR finished 20 of 24 climbs (master 18 of 25).
  • NAV_MESH_AVOID annotation penalizes bot path costs neo#2170 ("NAV_MESH_AVOID annotation penalizes bot path costs", ready for review), for the NAV_MESH_AVOID marks on the parapet top (areas 3489, 3496) and ladder 2's foot (885): without it they do nothing, and Recons take the parapet to ghost spawn 7 as well (see "Ghost spawn 7").

"#2176's unwanted-ladder release half" below is its changes 1 and 7; "its descent half" is its changes 3, 10 and 15.

The rest of the mesh needs no code change.

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 1197 925
file size 911,889 bytes 565,787 bytes (-38 %)
areas the engine blocks at every round start 14 0
areas no spawn can reach 22 19 (see below)
the same, counting no walk link that climbs 68 u or more (the most a Recon bot plans to jump) 30 19
nav ladders 2 2, both connected both ways, as master
bot stuck events a match (see below) 157.1 24.4
the same with #2176's descent half 174.7 11.9

What changed

  • Sliver areas merged into their neighbors on the same floor, and areas the engine blocks at round start (a brush or prop over their center) cut away. On master the engine blocks 14 areas at every round start; here none.
  • Walk links a player hull cannot cross are cut. Two are drops through concrete walls: 1348 -> 3420 near (384,-480), where bots pressed into the wall toward the area behind it (master's largest stuck spot: 123 stuck events a match, 4.5 bot episodes a round), and 317 -> 35 west of ladder 1. The others run through crates, seats, bench lockers and a flight-suit prop, and one joins two areas that touch only at a corner.
  • One-way links. Seven links between areas at the same height ran one way only, left by cutting hull-blocked links one direction at a time. Each pair was swept in both directions with the engine's hull audit (a player hull moved along the link in the server, recording the props and brushes it hits). Five are blocked both ways and are cut both ways: three through a row of seats near (300, 890), one through bench lockers near (-540, 50) and one through a handrail and wall near (255, 1260). Two are clear on every lane and get their missing direction back: 79 -> 1215 near (-1000, 820) and 70 -> 3498 near (-330, -330).
  • Climbs no class can make are removed. 3498 -> 3496, a 69 u climb onto a ledge near (-290, -350, -75), had no drop back, and 69 u is over every class's limit (the Recon's is 68 u). The ledge keeps its other way in.
  • Vehicle roofs. Three police van roofs and a stack of crates, about 80 u up, were reached only by climbs no class can make (78-80 u). Those climbs are removed. Two of the van roofs, near (1125, 210) and (1600, 740), have no way up for a player either: a flood fill over the map's geometry from the roof, walking and jumping 40 u, never reaches the mesh. They are deleted (5 areas), as are other tops nothing reaches. The van roof near (-1790, -400) and the crate stack near (2090, 1610) can be reached by chained jumps over the hood or a lower crate, so they stay as areas bots can drop off.
  • Areas and links no hull fits through. The engine hull audit also lists links between areas at the same height that are blocked on every lane in both directions: 28 pairs. Each was checked against the areas' stand samples (a hull placed every 4 u over the area), whether bots crossed it in the test matches below, and the stuck events near it. Where the blocker is static and bots do not cross:
    • Four areas no hull fits in anywhere (every stand sample blocked), each with every link blocked, are deleted: under the rabbitfrog vehicle near (3437, -137) (a static prop on this map; it does not move), the bench lockers near (-662, 62), the robocart near (362, 537) and a pilot seat near (-312, 162). 2 hiding spots go with them.
    • 2421, an 18 u sliver on the line of the low chainlink fence near (1234, -462) (24 of 30 samples blocked, both level links blocked), is deleted. The opening beside it (907, 18 of 19 lanes clear both ways) stays the crossing.
    • Two links are cut both ways: 1362 <-> 1364 across a 25 u gap with a machine module and a wall in it near (-688, -488), and 3323 <-> 3504 through a fridge near (50, 630) that is a physics prop with motion disabled, so it never moves. Each area keeps its other links.
    • 744 <-> 3456 across the large vent near (255, -475, -78) is cut, and 3456, a 5 u strip that link was the only way onto, is deleted.
    • Kept: 16 pairs. 14 are blocked by props that move during a round (an air-conditioner unit near (50, 1860), 2x4 boards, a flight helmet on the lockers near (-540, 60)); those are left to the bots at run time rather than baked into the mesh. The other 2 pass a chainlink fence door near (-790, 890) that bots walked through 126 times in 180 test matches.
  • Drop backs. A connectivity check run on every open navmesh PR (one-way links, climbs no class plans, traps, per class) found two drops cut while their climbs were kept. Both are linked: 972 -> 128 off the crate step near (2262, -375), and 3489 -> 277 off the parapet top near (-75, -352). The four climbs out of the basin (below) are the deliberate one-way links.
  • The basin under the deck near (1480,1320), a floor 33 u below the floor around it with the deck 100 u above it: routes no longer drop into it, its floor edges stand a half hull off its walls, and the six areas along its rim are PRECISE + CLIFF. Bots that fall in are routed to the exits a player can climb (below).
  • A 44 u climb into the crouch duct behind the tech door near (256,1034) is cut one way. The duct keeps its drop out.
  • The washroom areas stop short of the stall partitions.
  • Ladder 1 (1093,1239): its top lands on the platform 317, connected both ways as on master (below).
  • Removed: the desk top under the rack rail at ghost spawn 2 and an alcove behind the end of a handrail, which the engine blocks at every round start (bots take the ghost from the floor beside the desk), and two drop-only pockets nothing can reach (a shelf 142 u up, a box top 118-131 u up).
  • Re-analyzed in game after each edit, so the per-area visibility lists bots use for what they can see are current.

Id alignment

922 of the 925 areas carry the id of the master area they match (the trench area split off for the basin's exits takes master's 3076 back), so an id-keyed diff against master reads sensibly. Both ladders keep ids 1 and 2. Areas are matched only within 64 u of height. The alignment changes ids only: geometry, connections, attributes and the analysis data are unchanged by it (verified topology-identical).

Ladder 1

Ladder 1 is a 34 u ladder on the south face of a pillar, from the floor area 35 up to the platform 317 east of its top. It is connected both ways, as on master.

  • On upstream ladder code a bot starting down from 317 presses into the rail and the pillar and stalls: 0.51 stuck episodes a round at 317, against master's 0.43 at the same spot (20 matches each; with #2176's release switched off, 0.34 against 0.50).
  • With #2176's descent half the bot walks out over the ladder and gets down to 35 in about a second: 0.05 episodes a round (master 0.14).

The basin's exits

Bots still fall into the basin now and then, off the deck's south edge or the narrow rim strip on its east side. Its rim is 33-34 u up. Under the deck, between the rim and the deck's underside there are 48 u, less than any standing player hull (64-70 u) and than a crouching Support (59 u), so a climb out under the deck fails. The exits a player can climb are the south trench, which is open above, and a 12 u strip past the deck's east edge. Without the edits below, 13 of 16 bots that fell in (30 matches) pathed to exits under the deck and stayed until they died. With them 23 of 26 left again (60 matches), most through the trench within 15 s.

  • 3077 is split at y 1225 as on master: the trench piece (3076) keeps the west exit to 3232, the piece under the deck loses it.
  • 3232 reaches 14 u further south, so that exit crosses in the open trench.
  • The exits under the deck are cut: from 54 west to 64 and 3232, and north to 7, 39 and 595.
  • The east exits (54, 597 and 912 to 3237) stay.

Basin stuck events: master 9.0 a match, without these edits 14.4, with them 0.9. Against the mesh without them, whole map x0.71 [0.37, 1.32].

Ghost spawn 7 and the parapet

  • Ghost spawn 7 (68, 61, -110) lies on a mezzanine at z -144. Without the parapet drop, only Recon plans a way onto it: a 57 u climb from the crate stack. On master every class gets in by the parapet: 277 -> parapet top (37 u climb) -> 3496 -> 3498, a 69 u drop that a hull-audit reading had cut. Bots make that drop (Assault and Support entered the mezzanine 65 times in 146 matches on master's mesh, and a link walker that sends one bot of each class across a single nav link makes it for all three), so it is linked, one way; the climb back stays cut.
  • The parapet top (3489, 3496) is marked NAV_MESH_AVOID. It is a 5 u strip bots fall off (16 of 28 bots leaving it in 530 matches went off its north side into the pit, 111-212 u down; none died). Marked, Recons keep the crate stack (28 of 28 rounds, median 17 s), and Assault and Support take the parapet, the only way in for them.
  • Ladder 2's foot (885) is marked NAV_MESH_AVOID. Bots approaching ladder 2 in the trench catch on a brush beside it, and the parapet routes sent more of them there. With the mark, bots use the ladder less (bot visits to 885 9.3 -> 2.5 a match) and the jams there stop (below).

How it was tested

  • Reachability:
    • every spawn can reach every other spawn
    • every objective is reachable
    • 19 areas no spawn can reach, all of which lead back into the mesh: the basin's 10 (no links in, on purpose: bots only get there by falling), the deck north of it (6, as on master, walled off from the rest of the deck by a diagonal prop), a crate top (as on master), and a police van roof and a crate stack (one area each, see "Vehicle roofs")
    • counting no walk link that climbs 68 u or more (the most a Recon bot plans to jump), the same 19 and no more: no area is reached only by a climb no class can make (master 30 areas)
    • every walk link between two areas at the same height runs both ways, and no climb leads into an area without a way back: no dead end and no trap for any class (master has one, 3459 / 3460 near (325, -522))
    • the engine hull audit of this mesh (a player hull swept across every link and stood on every area, in the server): of 1563 pairs of areas at the same height, none is blocked both ways by a wall or a static prop; 16 are blocked by props that move (see "Areas and links no hull fits through")
    • no area is blocked at round start: offline, and in the engine in a test match (master: 14 at every round start)
  • Falls. The map has no trigger_hurt and no other hurt volume, and no drop that kills a bot at full health (the deepest is 242 u, 2 damage). No bot died from a fall on this mesh in any match below.
  • Master against this mesh, same bot code. Byte-identical copies of the map, one carrying each .nav, run back to back. CTG, 2 rounds of 3 minutes with the ghost pinned at each of the 10 ghost spawns in turn, 2 runs each, 30 bots, default weapon damage, 8 matches at a time. Every match reached match end with 0 asserts and no crash (292 matches in all, probes and earlier revisions included). The stuck count is OnStuck plus FAIL_STUCK move failures, excluding the spawn crush at round start and the weapon-scavenging behavior. This comparison ran on the mesh without the one-way-link, climb, roof, hull-audit, drop-back, parapet and AVOID edits (936 areas, 933 with master's ids); those were measured against the mesh without them, below.
    • stuck events 157.1 -> 24.4 a match (paired x0.13, 95 % interval [0.07, 0.22], 19 of 20 pairs down, 1 up)
    • with #2176's descent half, the same design: 174.7 -> 11.9 (x0.08 [0.05, 0.13], 20 of 20 pairs down)
    • without #2176's release (switched off in both arms, so upstream ladder code): 194.6 -> 24.1 (x0.12 [0.06, 0.22], 18 of 20 pairs down, 2 up); ladder 1's top 0.34 stuck episodes a round against master's 0.50
    • FAIL_NO_PATH_EXISTS move failures 5.7 -> 8.0 a match, paired x0.78 [0.43, 1.47] (a heavy-tailed count; with the descent half 11.2 -> 10.5, x0.45 [0.19, 1.13]). "Fell off the path" failures 0.20 -> 0.00
    • kills 49.3 -> 49.6 a match (x1.01 [0.97, 1.05]); ghost captures 5 of 54 rounds -> 4 of 53; team kill ratio (Jinrai / NSF enemy kills) 1.05 -> 1.05
    • bots still see and shoot across the mesh: 87 % of kills are between bots in different nav areas (master 88 %). Kills are closer on this mesh (median 230 u against 268 u), but not because bots see less: of master's 171 kills over 600 u, this mesh's visibility lists mark 161 as visible (master's own 167). On master four or five bots a round are held at the dead drop near (384,-480); here they are not, and the fights happen in other places.
    • at the spots: the dead drop near (384,-480) 122.7 stuck events a match -> 0; the basin 9.0 -> 0.9; ladder 1's top (317) 10.4 -> 10.1 (0.2 with the descent half); ladder 2's foot (885) 2.2 -> 1.9
  • The one-way-link, climb, roof and hull-audit edits, against the mesh without them, on upstream master + #2176 + #2186 with logging, the same design (each of the 10 ghost spawns pinned, 30 bots, default weapon damage, 8 matches at a time). Every match reached match end with 0 asserts and no crash (330 matches).
    • The one-way-link, climb and roof edits, 120 pairs: stuck events 15.1 -> 17.1 a match (paired x1.13, 95 % interval [0.91, 1.40], 57 pairs down, 59 up); without the spots listed under "Known, not changed" (the raised strip 483, ladder 1's top, the basin and its rim) x1.02 [0.85, 1.25]. Within 64 u of a changed link: 46 -> 39 stuck events. FAIL_NO_PATH_EXISTS 9.4 -> 9.6 a match; kills 50.8 -> 50.2; ghost captures 28 -> 22 of 240 rounds; no fall deaths; 86 % of kills between bots in different nav areas on both.
    • Adding the hull-audit edits, 30 pairs: x0.69 [0.45, 1.05] (19 down, 11 up); without the known spots x0.71 [0.48, 1.04]. At the changed areas and links: 4 -> 2 stuck events.
    • All of them against none, 30 pairs: stuck events 20.1 -> 23.8 a match (x1.02 [0.66, 1.53], 12 down, 17 up); without the known spots 11.7 -> 11.0 (x0.90 [0.61, 1.31]); the rise is the basin (79 -> 177 stuck events, up to 52 in one match). Within 64 u of a changed link 37 -> 23. FAIL_NO_PATH_EXISTS 11.3 -> 13.0; kills 50.8 -> 51.6; ghost captures 5 -> 5 of 60 rounds; no fall deaths; 87 % / 86 % of kills between bots in different nav areas.
  • The drop backs, the parapet drop and the two AVOID marks, against the mesh without them, on the harness research build (neo bot-navmesh-generation-research with logging; it carries #2170's AVOID cost, its research switches at their defaults), the same design (each of the 10 ghost spawns pinned, 2 runs each, 30 bots, default weapon damage, 8 matches at a time), 20 pairs, every match to match end with 0 asserts:
    • stuck events 27.6 -> 15.7 a match (paired x0.94, 95 % interval [0.46, 1.71], 9 pairs down, 11 up); at ladder 2's foot 19.6 -> 2.5 (stuck bot episodes 1.40 -> 0.10 a match); in the basin 0.95 -> 0.10
    • FAIL_NO_PATH_EXISTS 0.3 -> 1.2 a match; kills 51.2 -> 49.5; no fall deaths
    • ghost spawn 7, over this and three more batches with the ghost pinned there: see "Ghost spawn 7" (first pickups) and "Approaches tried and dropped"
    • every class plans a way to every objective (without these edits: ghost spawn 7 for Recon only); the connectivity check finds no new defect against master (without them: 2)

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. To test one spot in game, the ghost is placed on it and bots are sent to get it.

  • The ghost is placed on the spot 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", which replaces the position of the round's ghost spawn. The map file is not edited.
  • A spot counts as reached when a bot stands within 40 u of it, or picks the ghost up there rather than on the floor below, where a ghost that rolls off a narrow landing ends up. A wider radius would count a bot on a level above or below.
  • Master's mesh runs beside this one on a byte-identical copy of the .bsp under a second name that loads its own .nav, so the same pin runs on both meshes in one batch.

On this map

Both ends of both ladders were probed, 3 matches each, 12 bots, at a tenth of weapon damage, on the same build. Every probe was reached in 3 of 3 matches on both meshes (first pickup at 23-28 s): ladder 1's top (317) and foot (35), ladder 2's top (318) and foot (885).

Known, not changed

  • Ladder 1's descent on upstream code stalls at the rail about every second round, at master's rate; #2176's descent half fixes it (see "Ladder 1").
  • Climbing out of the basin under the deck. Only a crouching Recon or Assault fits between the rim and the deck (46 and 48 u against 48 u), and bots do not make that climb. Bots that fall in now leave by the trench or the east side; the climbs under the deck are left for bot crouch-clearance work.
  • Off-path bots at 483 near (290,1200): a few bots a match stray onto the raised strip 483 while heading for 3507 south of it and press against the world geometry between them. About as often as on master (0.08-0.09 episodes a round against master's 0.04-0.13 in three batches), but they stay there longer: 2.0 stuck events a match against 0.2. In the A/B of the one-way-link, climb and roof edits: 1.5 a match without them, 2.2 with them, in 9 and 14 of 60 matches.
Earlier measurements (without the basin's exits)

These ran on the mesh without the basin's exits and the edits the master comparison above lacks. Master against it, the same comparison: x0.18 [0.09, 0.35]. Without ladder 1's descent as well, on upstream plus #2176's release only, 16 matches at a time, 30 pairs: x0.12 [0.08, 0.19].

Approaches tried and dropped

  • Ladder 1's top detached (a climb exit only), because bots going down from 317 stalled at the platform's rail. Fix: the descent connected as on master, with #2176's descent half for the stall (see "Ladder 1").
  • The parapet drop linked without the AVOID mark. It drew the Recons off the crate stack too, and they reached the ghost later: a first pickup in 8 of 16 rounds, median 28.5 s, against 20 of 20 at 17.3 s without the drop. Fix: the mark on the parapet top.
  • The parapet marks without the mark at ladder 2's foot. Stuck events rose x1.93 (95 % interval [1.08, 3.40], 20 pairs), nearly all at that foot. Fix: the mark at 885.

One file. Against master: 1197 -> 935 areas, 911,889 -> 582,989
bytes; areas the engine blocks at every round start 14 -> 0.

- Sliver areas merged into their neighbors on the same floor, and
  areas the engine blocks at round start (a brush or prop over their
  center) cut away.
- Walk links a player hull cannot cross are cut: two drops through
  concrete walls (1348 -> 3420 near (384,-480); 317 -> 35 west of
  ladder 1), links through crates, seats, bench lockers and a
  flight-suit prop, and a link between areas that touch only at a
  corner.
- The basin under the deck near (1480,1320), 33 u below the floor
  around it: routes no longer drop into it (from the deck and the
  east rim strip), its floor edges stand a half hull off the walls,
  and the six areas along its rim are PRECISE + CLIFF.
- A 44 u climb into the crouch duct behind the tech door near
  (256,1034) is cut one way; the duct keeps its drop out.
- The washroom areas stop short of the stall partitions.
- Ladder 1 (1093,1239): its top was connected to nothing; it lands on
  the platform 317 again, for now as a climb exit only.
- Removed: the desk top under the rack rail at ghost spawn 2 and an
  alcove behind a handrail end (blocked at every round start), and
  two drop-only pockets nothing can reach (a shelf 142 u up, a box
  top 118-131 u up).
- Re-analyzed in game after the edits.
Renumbers area and ladder ids only, so an id-keyed diff against
master reads sensibly: 932 of the 935 areas and both ladders carry
the id of the master area they match. Areas are matched only within
64 u of height. Geometry, connections, attributes and the analyzed
visibility data are unchanged (verified topology-identical).
The platform 317 lists ladder 1 down again, as on master, so the
ladder is connected both ways. On upstream ladder code a bot going
down from 317 stalls at the rail about every second round, as on
master; with the ladder-descent fix in bot code it gets down in about
a second. Re-analyzed in game.
Bots still fall into the basin under the deck now and then. Its rim
is 33-34 u up, and under the deck slab there are 48 u between the
rim and the slab, less than any standing hull and the Support's
crouched one, so a climb out under the deck fails and bots stayed
until they died. Open sky is only over the south trench and a strip
past the slab's east edge.

- 3077 is split at y 1225 as on master: the trench piece (3076) keeps
  the west exit to 3232, the piece under the slab loses it.
- 3232 reaches south to y 1186, so that exit crosses in the open.
- The exits under the slab are cut: from 54 west to 64 / 3232 and
  north to 7 / 39 / 595.
- The east exits (54 / 597 / 912 -> 3237) stay.
- Re-analyzed in game.
An outside review of this mesh found a 69 u climb kept after its drop
back was cut, walk links that run one way only, and areas reached
only by climbs no class makes.

- Remove 3498 -> 3496 (69 u, over every class's limit). The ledge
  3496 keeps its way in from 3489.
- One-way links, each swept with a player hull in both directions by
  the engine's hull audit: cut both ways the five pairs blocked both
  ways (seats, a bench locker, a handrail); restore the missing
  direction of the two pairs clear both ways.
- Remove the 78-80 u climbs onto three police van roofs and a crate
  stack. The two van roofs near (1125, 210) and (1600, 740) have no
  way up for a player either and are deleted. The van roof at
  (-1790, -400) and the crate stack at (2090, 1610) can be reached by
  chained jumps; they stay as drop-only areas.

Existing areas keep their ids. Re-analyzed in game (same graph,
fresh visibility).
The engine hull audit run for the review fixes also lists level
links blocked on every lane in both directions. Where the blocker is
static and bots do not cross:

- Delete four areas no player hull fits in anywhere, each with every
  link blocked: under the rabbitfrog vehicle near (3437, -137), the
  bench lockers near (-662, 62), the robocart near (362, 537) and a
  pilot seat near (-312, 162).
- Delete 2421, a sliver on the line of the low fence near
  (1234, -462). The opening beside it (907) stays the crossing.
- Cut 1362 <-> 1364, a link across a 25 u gap holding a machine
  module and a wall near (-688, -488), and 3323 <-> 3504 through a
  fridge near (50, 630) that cannot move or break.
- Cut 744 <-> 3456 across the large vent near (255, -475) and delete
  3456, a 5 u strip that link was the only way onto.

Links blocked by movable physics props are kept. Existing areas keep
their ids. Re-analyzed in game (same graph, fresh visibility).
A connectivity check of the open navmesh PRs failed this mesh on two
half cuts. Restore the drops whose climbs were kept: 972 -> 128 off
the crate step near (2262, -375) and 3489 -> 277 off the parapet top
near (-75, -352).

Ghost spawn 7's mezzanine (z -144) was planned only by Recon, up the
crate stack. Restore master's way in for every class, the 69 u drop
3496 -> 3498 off the parapet, one way (the climb back stays cut).

Mark the parapet top (3489, 3496) NAV_MESH_AVOID: it is a 5 u strip
bots fall off, and unmarked it drew Recons off the crate stack, so
they reached the ghost later. Mark ladder 2's foot (885) AVOID: bots
approaching the ladder there catch on a brush, and the restored
routes sent more of them to it. The marks act through a path cost
that honors AVOID (NeotokyoRebuild/neo#2170).

Existing areas keep their ids; both ladders are unchanged.
Re-analyzed in game (same graph, fresh visibility).
sunzenshen added a commit to sunzenshen/neoAssets that referenced this pull request Oct 4, 2026
As navmesh-tarmac-release a4ad372 (NeotokyoRebuild#149): restore 972 -> 128,
3489 -> 277 and 3496 -> 3498 (ghost spawn 7 for every class); AVOID
on the parapet top 3489 / 3496 and on ladder 2's foot 885.
@sunzenshen
sunzenshen requested a review from sunmachine October 9, 2026 05:07
@sunzenshen
sunzenshen marked this pull request as ready for review October 9, 2026 05:08
@sunzenshen
sunzenshen merged commit 0aba111 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