{"source":"/home/exedev/hwanse/Hwanse2.exe","timingApi":{"dll":"KERNEL32.dll","name":"GetTickCount","iatVaHex":"0x005a0464","directTextCallRefs":["0x00401946","0x0040197c","0x00401a18"],"allCallTargetsMatchIat":true},"loop":{"setupFunctionVaHex":"0x00401850","timingStartVaHex":"0x00401946","waitLoopVaHex":"0x00401965","frameIntervalWriteVaHex":"0x0040195b","frameIntervalGlobalHex":"0x0059e37c","frameIntervalMs":48,"lastTickGlobalHex":"0x0059e38c","elapsedGlobalHex":"0x0059e384","frameCountGlobalHex":"0x0059e380","frameCap":3,"frameCapCompareVas":["0x004019d9","0x00401a37"],"updateCallVaHex":"0x004019f2","updateTargetVaHex":"0x00411476","nominalFps":20.833,"catchUpWindowMs":144},"webMapping":{"playerWalkFrames":5,"playerMovingFrames":4,"historicalFourMovingFrameStepMs":192,"playerTileStepCommands":1,"currentWebDefaultTileStepMs":48,"currentWebDefaultTileStepSeconds":0.048,"mappingClass":"actor-controller-tile-mutation-derived","exactActorConsumerStillInferred":false},"verification":{"frameIntervalMatchesExpected":true,"frameIntervalGlobalMatchesExpected":true,"frameCapMatchesExpected":true,"getTickIatMatchesExpected":true},"promotionStatus":"movement-timing-grounded","conclusion":"The original executable uses KERNEL32!GetTickCount around the main update loop and stores a 0x30 ms frame interval at 0x0059e37c. The loop waits until elapsed time covers the current frame count, computes a catch-up count, caps it at 3, and calls 0x00411476 with that count. The browser runtime therefore uses 48 ms as the original timing tick and, with the actor-controller tile mutation evidence from runtime_movement, maps one actor-controller pass to one tile step. The old four-moving-frame 192 ms browser default is retained only as historical context."}