.logopen C:\Users\erikn\source\repos\acdream\.claude\worktrees\vigorous-joliot-f0c3ad\retail-crowd-jump2.log .sympath C:\Users\erikn\source\repos\acdream\refs .symopt+ 0x40 .reload /f acclient.exe r $t0 = 0 r $t1 = 0 r $t2 = 0 .echo === ARMED v2: land_on_sphere + validate(COLLIDED count); AUTO-DETACH after 6000 validate === * CSphere::land_on_sphere (0x005379a0) — an airborne mover's foot sphere hit another * sphere. RARE -> cheap, no meaningful lag. $t1 (validate count) timestamps each hit so we * can read the PATTERN: a brief burst per jump = the local client lands on the creature; * a long steady burst = it's stuck locally (arming every frame) and the SERVER lifts you. bp acclient!CSphere::land_on_sphere "r $t0 = @$t0 + 1; .printf \"[LAND] #%d vt=%d\\n\", @$t0, @$t1; gc" * CTransition::validate_transition (0x0050aa70, UNAMBIGUOUS) — the commit/revert, AND the * detach anchor. arg2 (poi esp+4) = the transitional_insert result: 1=OK 2=COLLIDED 4=SLID. * We count COLLIDED and log every 5th so a jump that reverts locally shows a COLLIDED spike. * On the 6000th hit (~15-20 s) it prints the summary and does NOT gc -> cdb breaks -> g * returns -> the top-level qd detaches cleanly. qd is NEVER inside a bp action. bp acclient!CTransition::validate_transition "r $t1 = @$t1 + 1; .if (@$t1 < 6000) { r $t3 = poi(@esp+4); .if (@$t3 == 2) { r $t2 = @$t2 + 1; .if (@$t2 % 5 == 0) { .printf \"[COLLIDED] #%d vt=%d\\n\", @$t2, @$t1 } }; gc } .else { .printf \"[DETACH] validate=%d land_on_sphere=%d collided=%d\\n\", @$t1, @$t0, @$t2 }" g .echo === DETACHING === qd .logclose