Repository navigation
ntre_disengage_ctg: navmesh rework - #153
Conversation
One file. Against master: 1966 -> 1491 areas, 3,328,400 -> 2,047,151 bytes; areas the engine blocks at every round start 25 -> 1; areas no spawn can reach 115 -> 72. - Sliver areas merged into their neighbors on the same floor, props carved out of standing room, and areas the engine blocks at round start (a prop or brush over their center) cut away. Among them the areas under the leaning sheetrock near (-140,1580), master's largest stuck spot, and under the car near (1025,60). - The rooftop room of ghost spawn 2 (1467,214) had exits and no entry: the mesh stopped 25 u short of its doorway on both sides. A 24 u strip through the doorway gives it one. - Pockets no spawn can reach and nothing links into are removed, and so is a strip near (-400,638) with no way out. - Re-analyzed in game after the edits.
Renumbers area and ladder ids only, so an id-keyed diff against master reads sensibly: 1488 of the 1491 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).
An outside review of this mesh found the lower landing of the balcony staircase (2116 / 9587) to be a dead end. The map has four flights of stairs there, the same model in the same place as on ntre_engage_ctg, but the mesh had none of them: only 76 u links straight across each flight, which no class can climb. The review also found walk links that run one way only, and roof pockets entered only by climbs no bot plans. - Mesh the four flights as on ntre_engage_ctg: one sloped area per flight, a strip from the ground to the first flight, the middle landing split at x 1640 and the two west landings shaped so each U-turn is made clear of the stringer ends. The three 76 u links go. The engine marks the four flights STAIRS. - Cut the roof walkway's drop over its north parapet (12471 -> 1450), as on ntre_engage_ctg: with the stairs, bots reach the rooftop room on foot, and a bot following that drop walks into the parapet. - One-way links, each swept with a player hull in both directions by the engine's hull audit: cut both ways the eight pairs blocked both ways (interior stair handrails, a street lamp, the truck) and 1692 / 6207, which spans 50 u of floor at a forklift; restore the missing direction of nine pairs that are clear both ways. - Remove the nine climbs of 71-120 u that were the only way onto six vehicle roofs, a trash compactor and an awning (35 areas). No class plans a climb that high; the areas stay as drop-only pockets. - Delete 3177, a strip with no way out in the unreached east pocket. Existing areas keep their ids; the nine new ones are numbered above master's highest. Re-analyzed in game (same graph, fresh visibility).
The engine's hull audit (a player hull stood on every area and swept across every link, in the server) of the previous revision, and navconnect's link check against master: - Restore the drop back of eight climbs whose drop had been cut: the climb reads clear on some or all lanes. One of them (12793 -> 12790) was one-way on master too. - Delete 12492, a 29 x 6 u strip on the wall trim beside the walkway stairs at (1340, 372): no hull stands on it, and its only way in was a 26 u climb blocked on every lane. - Delete areas no player hull stands in, every stand sample blocked: the two squares inside the wrecked mech at (838, 1750) (bots heading into them stuck there; the mech top becomes a drop-only pocket like the vehicle roofs), two street-lamp squares, a scooter square, a car square, two corner squares behind a wall at (1850, 630). - Cut three pairs blocked both ways that bots never cross: a scaffold strip, a stair handrail, a double post. Kept: links the audit reads blocked on displacement slopes, which bots cross; the recycle bin near (2450, 812), a physics prop, left as at map load. Existing areas keep their ids. Re-analyzed in game (same graph, fresh visibility).
sunmachine
left a comment
There was a problem hiding this comment.
Well, my screenshot has the world's tiniest arrowheads because I messed with how this stuff scales on retina devices (😭), but the gist is that, at least for this section of railing, there's no link anymore that allows for jumping up on this railing. That may be fine, but I didn't see it detailed anywhere in the PR so I'll assume it's unintentional.
So why am I approving? Because bots can still hop up on other sides of the railing, and maybe it's actually desirable at this position to keep the bots from jumping up. It actually kinda' makes sense for this part of the map.
Good point that this trend of deleting railing nav areas is not documented, but because NT players have such low jumping clearance, railings tend to be a source of OnStuck events which causes them to get cleared out by the nav editing harness. Generally bots with the current behavior code will waste their time trying to jump the railing, while shooting at the enemy, and doing badly at both. So generally as a trend you will notice the nav area connections around railings getting deleted in the other PRs as well. As a general compromise, I would rather the bots waste time taking the long way around a railing and be too late, than the bots repeatedly failing to clear the railing and dying because their DPS towards the enemy is compromised by the jumping interruption against shooting |
ntre_disengage_ctg: navmesh rework
One file,
neo/maps/nav/ntre_disengage_ctg.nav. It was measured on upstream master plus the draft NeotokyoRebuild/neo#2176 (then only its unwanted-ladder release, now its changes 1 and 7) and NeotokyoRebuild/neo#2186 ("Bots skip weapons they cannot reach", merged since), with harness logging added.ntre_engage_ctgshares most of this layout and gets its own PR (#152).Dependencies and status
Needs (worse than master, or broken, without it):
Helped by (measured better with it; the mesh does not wait on it):
Pending before review:
At a glance
Four commits:
1. What changed
prop_dynamic): master's areas ran under it, and bots crouched into it. It was master's largest stuck spot, 5.7 stuck events a match in 17 of 24 matches. The areas under it are carved away. Here: 0.2. Id alignment
1488 of the 1491 areas carry the id of the master area they match. Both ladders keep their ids. Areas are matched only within 64 u of height. Geometry, connections, attributes and the analysis data are unchanged by this step (verified topology-identical).
3. Review fixes
ntre_engage_ctg. Master's mesh, and this PR's until now, had none of them: the landings were joined straight across each flight by 76 u walk links, which no class can climb, so the lowest landing (2116 / 9587) could be dropped onto and not left. The four flights are now meshed the wayntre_engage_ctg's PR (ntre_engage_ctg: navmesh rework #152) meshes them: one sloped area per flight from the lower landing's edge to the upper's, a strip from the street to the first flight, the middle landing split so bots turn clear of the stringer ends, and the two west landings shaped the same way. The 76 u links are gone. The engine marks the four flightsSTAIRSwhen it loads the mesh. The nine new areas are numbered above master's highest id; the landings keep their ids.ntre_engage_ctg's PR: with the stairs, bots reach the rooftop room on foot, and a bot following that drop walks into the parapet.How it was tested
BLOCKED_LINKS map=ntre_disengage_ctg level_pairs=2645 oneway=0 keep=0 cut=0 area=0 check=3 entity=1)trigger_hurt; itsenv_firedoes 1 damage a second. No drop kills a bot at full health (the deepest drop link is 221 u, 1 damage). No fall marks were needed..nav, run back to back. CTG, 2 rounds of 3 minutes with the ghost pinned at each of the 8 ghost spawns in turn, 3 runs each, 30 bots, default weapon damage, 8 matches at a time. Every match reached match end with 0 asserts and no crash (598 matches on engage and disengage in all, probes and the other revisions included). The stuck count isOnStuckplusFAIL_STUCKmove failures, excluding the spawn crush at round start and the weapon-scavenging behavior.FAIL_NO_PATH_EXISTSmove failures 17.3 -> 17.7 a match (x1.02 [0.71, 1.46]); about three quarters of them on both meshes are bots attacking toward an area the bot code marks hazardous, which the path cost refuses; no "fell off the path" failures on either mesh.nav, the ghost pinned at each of the 8 ghost spawns, 5 matches each, 30 bots, default weapon damage, 8 matches at a time, on the same bot code as above:FAIL_NO_PATH_EXISTSmove failures 17.9 -> 17.0 a match; kills 50.3 -> 50.0 a match; ghost captures 8 -> 3 of 105 rounds (6 of the 8 at one ghost spawn, (2456,1042); this mesh's earlier batches had 4 in 146 rounds); 99 % of kills between different nav areas and 94 % between non-adjacent ones on bothFAIL_NO_PATH_EXISTSmove failures 16.5 -> 18.0 a match; kills 50.4 -> 52.3 a match; ghost captures 1 -> 3 of 48 rounds; 99 / 98 % of kills between different nav areas and 94 % between non-adjacent ones on bothHow 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.
sv_neo_ghost_spawn_pos "x y z", which replaces the position of the round's ghost spawn. The map file is not edited..bspunder 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 (every landing at ladder 2's top), 3 matches each, 12 bots, at a tenth of weapon damage, on the same build.
No bot climbed either ladder in normal play on either mesh (40 matches each). Ghost spawn 6 (see "Known, not changed") was probed the same way, 9 matches each: picked up in 8 of 9 on master and 7 of 9 here, always on the floor under the deck, after 126-535 s on both.
Known, not changed