What happens
A co-op companion on e1m6 never gets going. It parks and jumps on the spot for the whole session.
Three tapes, 175 s each, one bot, +coop 1 +deathmatch 0 +skill 1.
| build |
cells |
busiest cell |
stalls |
goals |
routefails |
| binary d88ba69 |
13 |
63.4% |
220 |
3 |
9 |
| main a7d49cf |
14 |
60.2% |
213 |
3 |
17 |
| main a7d49cf, repeat |
14 |
59.7% |
200 |
3 |
14 |
The behaviour is the same on both builds, so this is not the recent water work.
Telemetry from the main tape: mode 0 on 310 of 327 samples, 91 per cent of samples under 20 u/s, and spd 0.0 with z bouncing between 24 and 62. That is a stall recovery jump cycle in place. The tape holds 213 stall events and 215 jump events. The bot sits at 368 576 50 for the first minute, then at -176 496 47 for the rest. It never dies.
The graph is not the problem
Directed reach is 85 per cent of 198 nodes from all four spawns and from both pin cells. Both keys have a node close by. The gold key at 224 120 56 has n127 at 209 113 56, 17 units away. The silver key at -696 1280 -232 has n16 29 units away.
The companion does commit to the key. The tape holds ARGEVT Carmack goal key and routes of four to six hops to goal 209 113 56.
Root cause
Every stall names the same steering target.
ARGEVT Carmack stallnode '-207.0 305.0 24.0'
That is n93, src/argus_nav_e1m6.qc:297.
A fine floor probe at y 305 puts the ledge lip at about x -193. World floor is -2 at x -191 and east of it, and -306 at x -195 and west of it. n93 sits at x -207, so it is 14 units past the lip.
The column under n93 is solid to -304, lava from -304 to -128, then empty. n93 floats 152 units above the lava surface.
The node is not arbitrary. It sits inside the footprint of brush model *51, a func_door with angle -1 so it rises, and wait -1 so it stays open. Its closed bounds are mins -415 241 -495 and maxs -193 463 -233. Its size_z is 262, so with the default lip of 8 it travels 254 and its top lands near z 21. That matches a waypoint at z 24. The door is fired by targetname t52, which a trigger_once reaches on a 3 second delay.
So n93 is a seat on a rising platform. It is only real once that platform is up.
navgen does not model this. func_plat gets lift links at tools/argus_navgen.py:616. func_door is only read for door AABB typing at tools/argus_navgen.py:1038. A func_door used as a platform is not modelled at all, so the hop into n93 is minted as an ordinary walk link.
The bot routes onto that walk link, walks to the lip, and the hazard guard correctly refuses to step into lava. It stalls, jumps, re-plans, and repeats for the whole match. Nothing is wrong with the guard. The link is a lie.
A second defect on the same link
n94 -207 529 24 to n93 is minted twice. It appears in links as a walk link and in jlinks as a jump link, in both directions.
The pair is 224 units apart on the same z. JUMPREACH is 190 at tools/argus_navgen.py:88 and is applied at line 284, so a 224 unit jump link should not exist. There is also a 64 unit step between the two nodes at y 449 to 465, and then the pit.
Suggested work
- Refuse to seat a waypoint past a ledge lip when there is no world floor within a step, unless the sample stands on a mover navgen actually models. That alone removes n93.
- Model vertically travelling func_door movers the way func_plat is modelled, so the hop is typed and the runtime waits and rides. e1m6 needs this to be playable at all, and other id maps use the same trick.
- Enforce JUMPREACH on jump links, and stop a pair being minted as both a walk link and a jump link.
Short term, e1m6 is not co-op ready. Stripping n93 and its links would stop the stall loop, but the level still cannot be finished until the rising door is modelled, because that platform is the way across.
Also seen
The tape prints this once at spawn, before the first goal is pushed.
ARGUS coop key fail: NO_RIPPLE / KEY_UNCLAIMED
The bot commits to the key later in the match, so this looks transient. Noting it here in case it is separate.
Repro
cd C:\argus\engine
.\quakespasm.exe -dedicated 8 -basedir C:\argus\engine -game argus -condebug +developer 1 +coop 1 +deathmatch 0 +skill 1 +map e1m6
What happens
A co-op companion on e1m6 never gets going. It parks and jumps on the spot for the whole session.
Three tapes, 175 s each, one bot,
+coop 1 +deathmatch 0 +skill 1.The behaviour is the same on both builds, so this is not the recent water work.
Telemetry from the main tape: mode 0 on 310 of 327 samples, 91 per cent of samples under 20 u/s, and
spd 0.0with z bouncing between 24 and 62. That is a stall recovery jump cycle in place. The tape holds 213 stall events and 215 jump events. The bot sits at368 576 50for the first minute, then at-176 496 47for the rest. It never dies.The graph is not the problem
Directed reach is 85 per cent of 198 nodes from all four spawns and from both pin cells. Both keys have a node close by. The gold key at
224 120 56has n127 at209 113 56, 17 units away. The silver key at-696 1280 -232has n16 29 units away.The companion does commit to the key. The tape holds
ARGEVT Carmack goal keyand routes of four to six hops to goal209 113 56.Root cause
Every stall names the same steering target.
That is n93,
src/argus_nav_e1m6.qc:297.A fine floor probe at y 305 puts the ledge lip at about x -193. World floor is -2 at x -191 and east of it, and -306 at x -195 and west of it. n93 sits at x -207, so it is 14 units past the lip.
The column under n93 is solid to -304, lava from -304 to -128, then empty. n93 floats 152 units above the lava surface.
The node is not arbitrary. It sits inside the footprint of brush model
*51, a func_door withangle -1so it rises, andwait -1so it stays open. Its closed bounds are mins-415 241 -495and maxs-193 463 -233. Its size_z is 262, so with the default lip of 8 it travels 254 and its top lands near z 21. That matches a waypoint at z 24. The door is fired by targetname t52, which a trigger_once reaches on a 3 second delay.So n93 is a seat on a rising platform. It is only real once that platform is up.
navgen does not model this. func_plat gets lift links at
tools/argus_navgen.py:616. func_door is only read for door AABB typing attools/argus_navgen.py:1038. A func_door used as a platform is not modelled at all, so the hop into n93 is minted as an ordinary walk link.The bot routes onto that walk link, walks to the lip, and the hazard guard correctly refuses to step into lava. It stalls, jumps, re-plans, and repeats for the whole match. Nothing is wrong with the guard. The link is a lie.
A second defect on the same link
n94
-207 529 24to n93 is minted twice. It appears inlinksas a walk link and injlinksas a jump link, in both directions.The pair is 224 units apart on the same z. JUMPREACH is 190 at
tools/argus_navgen.py:88and is applied at line 284, so a 224 unit jump link should not exist. There is also a 64 unit step between the two nodes at y 449 to 465, and then the pit.Suggested work
Short term, e1m6 is not co-op ready. Stripping n93 and its links would stop the stall loop, but the level still cannot be finished until the rising door is modelled, because that platform is the way across.
Also seen
The tape prints this once at spawn, before the first goal is pushed.
The bot commits to the key later in the match, so this looks transient. Noting it here in case it is separate.
Repro