.logopen C:\Users\erikn\source\repos\acdream\.claude\worktrees\vigorous-joliot-f0c3ad\retail-crowd-jump3.log .sympath C:\Users\erikn\source\repos\acdream\refs .symopt+ 0x40 .reload /f acclient.exe r $t9 = 0 r $t0 = 0 r $t1 = 0 r $t2 = 0 r $t4 = 0 r $t5 = 0 .echo === ARMED v3 (PLAYER-ATTRIBUTED): capture player ptr from set_local_velocity; filter validate + land_on_sphere to it; auto-detach after 40000 validate === * Capture the LOCAL player's CPhysicsObj* from the first input-driven local-velocity set. * Creatures are dead-reckoned (interpolated), not set via set_local_velocity, so the first * hit after you start moving is the player. Printed so we can sanity-check it's one pointer. bp acclient!CPhysicsObj::set_local_velocity "r $t8 = @ecx; .if (@$t9 == 0) { r $t9 = @$t8; .printf \"[PLAYER-PTR] %p\\n\", @$t9 }; gc" * land_on_sphere: mover = arg2->object = poi(poi(esp+4)) (OBJECTINFO.object at offset 0). * Log ONLY when the mover is the player. If this stays 0 while you jump onto monsters, the * local client is NOT computing your creature landing (server places you). bp acclient!CSphere::land_on_sphere "r $t7 = poi(poi(@esp+4)); .if (@$t7 == @$t9) { r $t0 = @$t0 + 1; .printf \"[PLAYER-LAND] #%d vt=%d\\n\", @$t0, @$t1 }; gc" * validate_transition: mover = poi(ecx) (CTransition.object_info.object at offset 0). For the * PLAYER only, tally the transition result arg2 (poi esp+4): 2=COLLIDED, 4=SLID, else OK/ADJ. * pCOL/pSLID near 0 during the crowd jump = the player is NOT locally colliding with creatures. * $t1 (ALL validates) is the unambiguous detach anchor -> break at 40000 -> qd. bp acclient!CTransition::validate_transition "r $t1 = @$t1 + 1; .if (@$t1 >= 0n40000) { .printf \"[DETACH] pPtr=%p pValidate=%d pCOLLIDED=%d pSLID=%d pLand=%d\\n\", @$t9, @$t2, @$t4, @$t5, @$t0 } .else { .if (poi(@ecx) == @$t9) { r $t2 = @$t2 + 1; r $t3 = poi(@esp+4); .if (@$t3 == 2) { r $t4 = @$t4 + 1 } .else { .if (@$t3 == 4) { r $t5 = @$t5 + 1 } } }; gc }" g .echo === DETACHING === qd .logclose