{"source":"/home/exedev/hwanse/Hwanse2.exe","mainUpdate":{"functionVaHex":"0x00411476","frameCountArgumentHex":"arg+0x08","frameCountClamp":3,"pausedFallbackFrameCount":1,"perFrameCalls":[{"label":"input/action mask update","callVaHex":"0x004114e2","targetVaHex":"0x00422d74"},{"label":"active object callback update","callVaHex":"0x004114e7","targetVaHex":"0x00435c04"},{"label":"object script/timer update","callVaHex":"0x004114ec","targetVaHex":"0x00432ff0"}],"drawPrepCall":{"label":"active draw-list tile projection","callVaHex":"0x0041150d","targetVaHex":"0x00424a2a"},"activeDrawListHex":"0x0055a1c0"},"inputPolling":{"functionVaHex":"0x00422d74","actionPackerCall":{"label":"primary input table action packer","callVaHex":"0x00422d91","targetVaHex":"0x0042f6d2"},"keyboardStateVaHex":"0x0055b868","primaryKeyTableVaHex":"0x00526d58","currentInputMaskVaHex":"0x0059e310","pressedEdgeMaskVaHex":"0x0059e312","previousInputMaskVaHex":"0x0055b2ac","directionBits":{"left":"0x0001","right":"0x0002","up":"0x0004","down":"0x0008"},"continuousMaskEvidence":"current mask is stored at 0x0059e310 every update; pressed-edge mask is computed separately at 0x0059e312"},"tileProjection":{"functionVaHex":"0x00424a2a","objectTileXFieldHex":"+0xe8","objectTileYFieldHex":"+0xea","cameraTileXGlobalHex":"0x004576dc","cameraTileYGlobalHex":"0x004576de","tileShiftBits":4,"tileSizePixels":16,"screenBiasX":24,"screenBiasY":8,"fixedPointShiftBits":16,"drawXFieldHex":"+0x1c","drawYFieldHex":"+0x20","projectionFormula":"drawX = ((object[+0xe8] - word[0x004576dc]) << 4) + 0x18; drawY = ((object[+0xea] - word[0x004576de]) << 4) + 0x08; both are then shifted left by 16 before storing","drawProjectionDetails":{"drawRectHelperCall":{"label":"projected object dirty-rect helper","callVaHex":"0x00424b45","targetVaHex":"0x00424cd6"},"drawRectBoundsCall":{"label":"projected object bounds helper","callVaHex":"0x00424d06","targetVaHex":"0x00416ce2"},"drawPrepModes":{"directTileProjectionMode":"low bits == 1","existingProjectedCoordModes":["low bits == 2","low bits == 4"]},"projectedCoordFieldsHex":{"drawX":"+0x1c","drawY":"+0x20","drawOrder":"+0x24","frameSelector":"+0x28"},"classification":"draw prep either writes fixed-point draw coordinates directly from tile/camera fields or reuses existing projected coordinates for alternate object modes; the dirty-rect helper consumes +0x1c/+0x20 as projected coordinates","verification":{"drawPrepPrologueMatchesExpected":true,"drawPrepDirectTileProjectionMatchesExpected":true,"drawPrepModeDispatchMatchesExpected":true,"drawRectHelperCallMatchesExpected":true,"drawRectBoundsCallMatchesExpected":true,"drawRectBoundsReadsProjectedCoordsMatchesExpected":true}}},"webMapping":{"webTileSizePixels":16,"tileSizeMatchesRuntimeProjection":true,"movementStepClass":"tile-grid movement with per-frame object/update callbacks and 16px tile projection","tileGridAndCameraConsumerGrounded":true,"originalDrawPrepProjectionGrounded":true,"partyActorDrawProjectionGrounded":true,"partyActorAnimationStateValuesGrounded":true,"originalSpriteFrameSelectorGrounded":true,"originalFrameSelectorToSourceRectGrounded":true,"originalSpriteFrameScriptTimerGrounded":true,"actorAnimationStateDirectFrameMappingEliminated":true,"actorAnimationStateToFrameSelectorPartyDescriptorsGrounded":true,"objectDescriptorTableClassified":true,"objectDescriptorTableRowCount":12,"objectDescriptorPartyStateTableRows":[0,1,2],"nonPartyDescriptorAnimationStateTablesAbsent":true,"nonPartyDescriptorFieldMapRefsAbsent":true,"descriptorActivationOrderPathGrounded":true,"descriptorActivationOrderCountRuntimeVa":"0x004576e8","descriptorActivationOrderBytesVa":"0x004576e9","descriptorActivationSlotBaseVa":"0x00457750","descriptorActivationLoadRebuildGrounded":true,"descriptorActivationOpcode20SelfMutationEliminated":true,"descriptorActivationCurrentSelectorActiveOrderStillUnproven":true,"actorAnimationStateToFrameSelectorStillUnresolved":true,"actorAnimationStateToFrameSelectorRemainingGap":"the 12-row descriptor table is classified: rows 0..2 ground +0x68 -> +0x64 state-table frame scripts for Ataho/Rinshan/Smashu, while rows 3..11 are battle/effect/object resource descriptors without +0x68 state-table selectors or field-map refs; save-load active-order materialization is grounded, but current selector 2:0 active order and scripted behavior for non-player descriptors remain inferred","webDefaultTileStepMs":48,"webFrameQuantizedTileStepGrounded":true,"webSourceRectSelectorMappingGrounded":true,"webSourceRectSelectorCadenceGrounded":true,"webSourceRectPhaseStillInferred":false,"webCollisionFallbackStillInferred":true,"exactActorWalkInterpolationStillInferred":true,"webPositionInterpolationStillVisualApproximation":true,"originalActorPositionModel":"tile-field-snap-plus-fixed-point-draw-projection","originalActorSubTileInterpolationEvidenceFound":false,"originalActorSubTileInterpolationEvidenceScope":"identified actor controller tile mutations +0xe8/+0xea and draw projection writes +0x1c/+0x20","originalActorTileMutationVas":["0x00430b5b","0x00430b74","0x00430b8d","0x00430ba6"],"originalActorDrawProjectionVas":["0x0043111d","0x00431142","0x004311ec","0x0043121d"],"browserInterpolationClassification":"browser-visual-overlay-not-original-proof","browserInterpolationOffsetField":"interpolationOffset","browserInterpolationOverlayDetected":true,"browserInterpolationFixedPointPreserved":true,"browserInterpolationOverlayNotPromotingOriginal":true,"exactActorSpriteFramePhaseStillInferred":false,"inputDrivenTileMutationGrounded":true,"originalPartyTrailRingGrounded":true,"originalCollisionFlagTestsGrounded":true,"originalCollisionFlagTableNotMappedToCnsTiles":false,"originalCollisionFlagGridMappedToCnsLayer1":true,"webOriginalLayer1FlagCollisionModePresent":false,"webDefaultCollisionModeUsesOriginalLayer1Flags":true,"webActorOverlapCollisionModePresent":true,"webActorOverlapCollisionDefaultEnabled":false,"webActorOverlapCollisionModeQuery":"actorCollision=1 enables review-only party blocking","webActorOverlapCollisionStillOptIn":true,"webPartyTrailHistoryPresent":true,"webPartyTrailRingSlotCount":7,"webPartyTrailRingMatchesOriginalSlotCount":true,"webPartyTrailActorSlotCount":3,"webPartyTrailInitialCursors":[0,4,1],"webPartyTrailCursorModelPresent":true,"webPartyTrailInitialCursorsMatchOriginal":true,"webPartyTrailRecordsAcceptedMoveTarget":true,"webPartyTrailCallTimingMatchesOriginalTileMutation":true,"webPartyTrailStillApproximate":false,"webDefaultCollisionModeStillFallback":false},"actorMotion":{"actorController":{"functionVaHex":"0x0043022d","activeActorCountGlobalHex":"0x004576e8","activeActorSlotTableHex":"0x00574538","activeActorPointerTableHex":"0x0059dd70","historyIndexTableHex":"0x00574540","seedTileXTableHex":"0x00574550","seedTileYTableHex":"0x00574552","historyDirectionTableHex":"0x00574554","partyTrailHistory":{"indexTableHex":"0x00574540","slotCount":7,"actorSlotCount":3,"initialCursors":[0,4,1],"slotStrideWords":3,"tileXTableHex":"0x00574550","tileYTableHex":"0x00574552","directionTableHex":"0x00574554","initializationVas":{"leaderCursorZero":"0x0043019f","cursorFormula":"0x004301bf..0x004301cf","historyTableZeroLoop":"0x004301da..0x00430223"},"callTiming":{"classification":"leader tile mutation precedes cursor advance/history write; follower reads happen after the leader write in the same actor controller pass","tileMutationVas":{"downYIncrement":"0x00430b5b","upYDecrement":"0x00430b74","leftXDecrement":"0x00430b8d","rightXIncrement":"0x00430ba6"},"leaderWriteAfterMutationVas":{"cursorAdvance":"0x00431042","tileXStore":"0x00431083","tileYStore":"0x004310a0","directionStore":"0x004310bb"},"followerReadAfterLeaderWriteVas":{"loopStart":"0x00431173","indexRead":"0x004311be","tileXApply":"0x00431258","tileYApply":"0x00431278"}},"leaderHistoryWriteVas":{"indexIncrement":"0x00431042","indexReset":"0x0043105f","tileXStore":"0x00431083","tileYStore":"0x004310a0","directionStore":"0x004310bb"},"followerHistoryReadVas":{"indexRead":"0x004311be","tileXRead":"0x004311ce","tileYRead":"0x004311ff","tileXApply":"0x00431258","tileYApply":"0x00431278","directionRead":"0x0043128f"},"classification":"7-slot tile/direction trail ring for companion actor following"},"directionLatchGlobalHex":"0x00574533","directionLatchValues":{"down":"0x05","up":"0x06","left":"0x07","right":"0x08"},"partyActorScreenProjection":{"leaderTileProjectionVas":{"tileXRead":"0x00431100","drawXStore":"0x0043111d","tileYRead":"0x00431125","drawYStore":"0x00431142"},"followerTrailProjectionVas":{"cursorRead":"0x004311be","trailXRead":"0x004311ce","drawXStore":"0x004311ec","trailYRead":"0x004311ff","drawYStore":"0x0043121d","tileXApply":"0x00431258","tileYApply":"0x00431278"},"animationStateFieldHex":"+0x68","movingStateValues":{"down":"0x05","up":"0x06","left":"0x07","right":"0x08"},"idleStateValues":{"down":"0x01","up":"0x02","left":"0x03","right":"0x04"},"classification":"party actor draw coordinates are recomputed from tile/trail entries; +0x68 stores direction/animation state; party frame scripts provide the selector phase outside the actor controller"},"collisionHelperCall":{"label":"input-driven direction/collision helper","callVaHex":"0x0043047b","targetVaHex":"0x004319f8"},"counts":{"currentInputMaskRefCount":24,"objectTileXFieldRefCount":21,"objectTileYFieldRefCount":20,"objectTileXSeedWriteCount":2,"objectTileYSeedWriteCount":2,"objectTileXIncrementCount":2,"objectTileXDecrementCount":2,"objectTileYIncrementCount":2,"objectTileYDecrementCount":2,"historyIndexIncrementCount":1,"historyIndexResetCount":1,"historyTileXStoreCount":1,"historyTileYStoreCount":1,"historyDirectionStoreCount":1}},"collisionHelper":{"functionVaHex":"0x004319f8","mapWidthGlobalHex":"0x00595ada","mapHeightGlobalHex":"0x00595adc","collisionFlagTableHex":"0x0058d7d0","collisionEdgeFlagTableHex":"0x0058d7ce","objectFootprintFieldsHex":["+0xe6","+0xe7"],"directionBlockFlagBits":{"down":"0x02","up":"0x01","left":"0x04","right":"0x08"},"blockedDirectionFallbackValues":{"down":"0x01","up":"0x02","left":"0x03","right":"0x04"},"directionCases":[{"direction":"down","inputLatchHex":"0x05","caseVaHex":"0x00431a20","blockedFallbackLatchHex":"0x01","edgeCheckVaHex":"0x00431a48","flagTestVaHex":"0x00431aba","flagBitHex":"0x02","flagGridHex":"0x0058d7d0","scanShape":"horizontal footprint width at bottom edge row","boundaryRule":"mapHeight - footprintHeight == tileY"},{"direction":"up","inputLatchHex":"0x06","caseVaHex":"0x00431ad3","blockedFallbackLatchHex":"0x02","edgeCheckVaHex":"0x00431ae6","flagTestVaHex":"0x00431b58","flagBitHex":"0x01","flagGridHex":"0x0058d7d0","scanShape":"horizontal footprint width at top/block row","boundaryRule":"tileY == 0"},{"direction":"left","inputLatchHex":"0x07","caseVaHex":"0x00431b71","blockedFallbackLatchHex":"0x03","edgeCheckVaHex":"0x00431b84","flagTestVaHex":"0x00431bd0","flagBitHex":"0x04","flagGridHex":"0x0058d7d0","scanShape":"left footprint edge sample at bottom row","boundaryRule":"tileX == 0"},{"direction":"right","inputLatchHex":"0x08","caseVaHex":"0x00431be4","blockedFallbackLatchHex":"0x04","edgeCheckVaHex":"0x00431c0c","flagTestVaHex":"0x00431c65","flagBitHex":"0x08","flagGridHex":"0x0058d7ce","scanShape":"right footprint edge sample through edge-shifted collision table","boundaryRule":"mapWidth - footprintWidth == tileX"}],"objectOverlapResponse":{"listHeadGlobalHex":"0x00574100","sentinelHex":"0x005741ec","loopStartVaHex":"0x00431ca6","activeMaskTestHex":"0x0101","collisionPayloadFieldHex":"+0xec","responseFieldHex":"+0x68","clearsDirectionLatchOnOverlap":true,"classification":"actor-overlap collision response after tile-flag checks"},"counts":{"collisionFlagTableReadCount":4,"mapWidthRefCount":5,"mapHeightRefCount":1,"objectTileXFieldRefCount":6,"objectTileYFieldRefCount":6}},"scriptTileStepHandler":{"functionVaHex":"0x00409658","classification":"script-command tile-field mutator","counts":{"objectTileXIncrementCount":1,"objectTileXDecrementCount":1,"objectTileYIncrementCount":1,"objectTileYDecrementCount":1,"objectTileXFieldRefCount":2,"objectTileYFieldRefCount":2}},"verification":{"actorControllerPrologueMatchesExpected":true,"activeActorGateReadMatchesExpected":true,"activeActorPointerLoadMatchesExpected":true,"actorTileSeedWritesMatchExpected":true,"inputMaskConflictFilterMatchesExpected":true,"directionLatchStoresMatchExpected":true,"collisionHelperCallMatchesExpected":true,"collisionHelperPrologueMatchesExpected":true,"collisionFlagTestsMatchExpected":true,"collisionDirectionCasesMatchExpected":true,"collisionObjectListWalkMatchesExpected":true,"scriptTileStepMutationsPresent":true,"partyTrailHistoryRingMatchesExpected":true,"partyTrailCallTimingMatchesExpected":true,"partyTrailInitialCursorsMatchExpected":true,"partyTrailHistoryTablesZeroed":true,"partyActorProjectionMatchesExpected":true,"partyActorAnimationStateStoresMatchExpected":true},"promotionStatus":"actor-tile-mutation-and-collision-flags-grounded"},"spriteFrameSelector":{"boundsFunctionHex":"0x00416ce2","scriptFrameSelectorFunctionHex":"0x004044bd","selectorFieldHex":"+0x28","animationStateFieldHex":"+0x68","surfaceTableHex":"0x0055abd8","selectorPacking":{"frameIndex":"low 16 bits","surfaceTableIndex":"bits 16..23, indexed through 0x0055abd8"},"surfaceMetadataFieldsHex":{"layoutMode":"+0x19","frameWidth":"+0x2e","frameHeight":"+0x30","framesPerRow":"+0x32","rectOrOffsetTable":"+0x34"},"objectOffsetFieldsHex":["+0x30","+0x34"],"scriptFrameSelectorWriter":{"functionVaHex":"0x004044bd","fullSelectorStoreVaHex":"0x004044f6","lowFrameIndexStoreVas":["0x00404523","0x00404539"],"surfaceIndexStoreVaHex":"0x00404564","classification":"object script commands write +0x28 either as a full selector, low frame index, or high surface-table index"},"scriptFrameTimer":{"functionVaHex":"0x00432ff0","bucketCount":5,"activeObjectListTableHex":"0x00573b40/0x00573b48","inactiveSkipFlag":"+0x03 bit 0x20","timerEnabledFlag":"+0x03 bit 0x04","frameTimerFieldHex":"+0x62","activeScriptPointerFieldHex":"+0x40","frameScriptPointerFieldHex":"+0x64","generalScriptRunnerHex":"0x00402321","handlerTableHex":"0x00440538","stopFlagHex":"0x0055a1b8","frameSelectorOpcodeHex":"0x21","frameSelectorHandlerEntryHex":"0x004405bc","frameSelectorHandlerVaHex":"0x004044bd","modeCases":[{"mode":0,"timerSource":"word [stream+0x02]","selectorWrite":"dword [stream+0x04] -> object+0x28","advanceBytes":8,"storeVaHex":"0x004044f6"},{"mode":1,"timerSource":"word [stream+0x02]","selectorWrite":"word [stream+0x06] -> low object+0x28, preserving surface index","advanceBytes":8,"storeVaHex":"0x00404523/0x00404539"},{"mode":2,"timerSource":null,"selectorWrite":"word [stream+0x02] << 16 -> object+0x28 surface index","advanceBytes":4,"storeVaHex":"0x00404564"}],"classification":"object script/timer update decrements +0x62 and, when it reaches zero, runs the +0x64 frame script through the generic 0x00440538 handler table; opcode 0x21 writes +0x28 and reloads/advances the frame script"},"partyActorFrameScripts":{"descriptorTableHex":"0x00442d95","descriptorTableRowCount":12,"actorAnimationStateFieldHex":"+0x68","frameScriptPointerFieldHex":"+0x64","frameSelectorFieldHex":"+0x28","framePointerInitializer":{"opcodeHex":"0x20","handlerEntryHex":"0x004405b8","handlerVaHex":"0x0040448a","functionVaHex":"0x0040448a","classification":"opcode 0x20 stores dword [stream+4] into object+0x64, enables the script timer flag, reloads object+0x62 to 1, and advances object+0x40 by 8"},"animationStatePointerTableCommand":{"opcodeHex":"0x18","handlerEntryHex":"0x00440598","handlerVaHex":"0x0040408f","functionVaHex":"0x0040408f","commandBytes":"18 a0 64 68 <state-table-va>","classification":"opcode 0x18 command bytes 18 a0 64 68 assign object+0x64 from a dword pointer table indexed by byte object+0x68"},"characters":[{"index":0,"name":"Ataho","resource":"cara_at1.cns","descriptorTableEntryHex":"0x00442d95","descriptorVaHex":"0x004f867c","expectedDescriptorVaHex":"0x004f867c","descriptorScriptsHex":["0x004f8dd8","0x004f8df8","0x004f8e0c"],"baseSurfaceIndexHex":"0x11","baseFrameScriptVaHex":"0x004f8ef8","animationStatePointerTableHex":"0x004f8e68","frameScriptPointerInitializerSites":[{"commandVaHex":"0x004f8e24","bytes":"20 00 00 00 f8 8e 4f 00","frameScriptPointerVaHex":"0x004f8ef8","descriptorScriptIndex":1,"descriptorScriptVaHex":"0x004f8df8"},{"commandVaHex":"0x004f8e24","bytes":"20 00 00 00 f8 8e 4f 00","frameScriptPointerVaHex":"0x004f8ef8","descriptorScriptIndex":2,"descriptorScriptVaHex":"0x004f8e0c"}],"animationStatePointerTableCommandSites":[{"commandVaHex":"0x004f8e2c","bytes":"18 a0 64 68 68 8e 4f 00","stateTableVaHex":"0x004f8e68","semantics":"object+0x64 = dword[stateTable + byte(object+0x68) * 4]","descriptorScriptIndex":1,"descriptorScriptVaHex":"0x004f8df8"},{"commandVaHex":"0x004f8e2c","bytes":"18 a0 64 68 68 8e 4f 00","stateTableVaHex":"0x004f8e68","semantics":"object+0x64 = dword[stateTable + byte(object+0x68) * 4]","descriptorScriptIndex":2,"descriptorScriptVaHex":"0x004f8e0c"}],"stateEntries":[{"scriptVaHex":"0x004f8ef8","commandCount":1,"selectorSequenceHex":["0x00110000"],"frameIndices":[0],"timerSequence":[1],"surfaceIndicesHex":["0x11"],"commands":[{"order":0,"commandVaHex":"0x004f8ef8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110000","surfaceIndexHex":"0x11","frameIndex":0}],"tail":{"commandVaHex":"0x004f8f00","opcodeHex":"0x03","targetVaHex":"0x004f8ef8","loopsToSequenceStart":true},"state":0,"actorControllerMeaning":"state0/bootstrap duplicate"},{"scriptVaHex":"0x004f8ef8","commandCount":1,"selectorSequenceHex":["0x00110000"],"frameIndices":[0],"timerSequence":[1],"surfaceIndicesHex":["0x11"],"commands":[{"order":0,"commandVaHex":"0x004f8ef8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110000","surfaceIndexHex":"0x11","frameIndex":0}],"tail":{"commandVaHex":"0x004f8f00","opcodeHex":"0x03","targetVaHex":"0x004f8ef8","loopsToSequenceStart":true},"state":1,"actorControllerMeaning":"idle down"},{"scriptVaHex":"0x004f8f08","commandCount":1,"selectorSequenceHex":["0x00110001"],"frameIndices":[1],"timerSequence":[1],"surfaceIndicesHex":["0x11"],"commands":[{"order":0,"commandVaHex":"0x004f8f08","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110001","surfaceIndexHex":"0x11","frameIndex":1}],"tail":{"commandVaHex":"0x004f8f10","opcodeHex":"0x03","targetVaHex":"0x004f8f08","loopsToSequenceStart":true},"state":2,"actorControllerMeaning":"idle up"},{"scriptVaHex":"0x004f8f18","commandCount":1,"selectorSequenceHex":["0x00110002"],"frameIndices":[2],"timerSequence":[1],"surfaceIndicesHex":["0x11"],"commands":[{"order":0,"commandVaHex":"0x004f8f18","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110002","surfaceIndexHex":"0x11","frameIndex":2}],"tail":{"commandVaHex":"0x004f8f20","opcodeHex":"0x03","targetVaHex":"0x004f8f18","loopsToSequenceStart":true},"state":3,"actorControllerMeaning":"idle left"},{"scriptVaHex":"0x004f8f28","commandCount":1,"selectorSequenceHex":["0x00110003"],"frameIndices":[3],"timerSequence":[1],"surfaceIndicesHex":["0x11"],"commands":[{"order":0,"commandVaHex":"0x004f8f28","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110003","surfaceIndexHex":"0x11","frameIndex":3}],"tail":{"commandVaHex":"0x004f8f30","opcodeHex":"0x03","targetVaHex":"0x004f8f28","loopsToSequenceStart":true},"state":4,"actorControllerMeaning":"idle right"},{"scriptVaHex":"0x004f8f38","commandCount":8,"selectorSequenceHex":["0x00110004","0x00110005","0x00110004","0x00110000","0x00110006","0x00110007","0x00110006","0x00110000"],"frameIndices":[4,5,4,0,6,7,6,0],"timerSequence":[1,1,1,1,1,1,1,1],"surfaceIndicesHex":["0x11"],"commands":[{"order":0,"commandVaHex":"0x004f8f38","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110004","surfaceIndexHex":"0x11","frameIndex":4},{"order":1,"commandVaHex":"0x004f8f40","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110005","surfaceIndexHex":"0x11","frameIndex":5},{"order":2,"commandVaHex":"0x004f8f48","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110004","surfaceIndexHex":"0x11","frameIndex":4},{"order":3,"commandVaHex":"0x004f8f50","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110000","surfaceIndexHex":"0x11","frameIndex":0},{"order":4,"commandVaHex":"0x004f8f58","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110006","surfaceIndexHex":"0x11","frameIndex":6},{"order":5,"commandVaHex":"0x004f8f60","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110007","surfaceIndexHex":"0x11","frameIndex":7},{"order":6,"commandVaHex":"0x004f8f68","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110006","surfaceIndexHex":"0x11","frameIndex":6},{"order":7,"commandVaHex":"0x004f8f70","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110000","surfaceIndexHex":"0x11","frameIndex":0}],"tail":{"commandVaHex":"0x004f8f78","opcodeHex":"0x03","targetVaHex":"0x004f8f38","loopsToSequenceStart":true},"state":5,"actorControllerMeaning":"moving down"},{"scriptVaHex":"0x004f8f80","commandCount":8,"selectorSequenceHex":["0x00110008","0x00110009","0x00110008","0x00110001","0x0011000a","0x0011000b","0x0011000a","0x00110001"],"frameIndices":[8,9,8,1,10,11,10,1],"timerSequence":[1,1,1,1,1,1,1,1],"surfaceIndicesHex":["0x11"],"commands":[{"order":0,"commandVaHex":"0x004f8f80","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110008","surfaceIndexHex":"0x11","frameIndex":8},{"order":1,"commandVaHex":"0x004f8f88","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110009","surfaceIndexHex":"0x11","frameIndex":9},{"order":2,"commandVaHex":"0x004f8f90","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110008","surfaceIndexHex":"0x11","frameIndex":8},{"order":3,"commandVaHex":"0x004f8f98","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110001","surfaceIndexHex":"0x11","frameIndex":1},{"order":4,"commandVaHex":"0x004f8fa0","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0011000a","surfaceIndexHex":"0x11","frameIndex":10},{"order":5,"commandVaHex":"0x004f8fa8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0011000b","surfaceIndexHex":"0x11","frameIndex":11},{"order":6,"commandVaHex":"0x004f8fb0","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0011000a","surfaceIndexHex":"0x11","frameIndex":10},{"order":7,"commandVaHex":"0x004f8fb8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110001","surfaceIndexHex":"0x11","frameIndex":1}],"tail":{"commandVaHex":"0x004f8fc0","opcodeHex":"0x03","targetVaHex":"0x004f8f80","loopsToSequenceStart":true},"state":6,"actorControllerMeaning":"moving up"},{"scriptVaHex":"0x004f8fc8","commandCount":8,"selectorSequenceHex":["0x0011000c","0x0011000d","0x0011000c","0x00110002","0x0011000e","0x0011000f","0x0011000e","0x00110002"],"frameIndices":[12,13,12,2,14,15,14,2],"timerSequence":[1,1,1,1,1,1,1,1],"surfaceIndicesHex":["0x11"],"commands":[{"order":0,"commandVaHex":"0x004f8fc8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0011000c","surfaceIndexHex":"0x11","frameIndex":12},{"order":1,"commandVaHex":"0x004f8fd0","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0011000d","surfaceIndexHex":"0x11","frameIndex":13},{"order":2,"commandVaHex":"0x004f8fd8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0011000c","surfaceIndexHex":"0x11","frameIndex":12},{"order":3,"commandVaHex":"0x004f8fe0","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110002","surfaceIndexHex":"0x11","frameIndex":2},{"order":4,"commandVaHex":"0x004f8fe8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0011000e","surfaceIndexHex":"0x11","frameIndex":14},{"order":5,"commandVaHex":"0x004f8ff0","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0011000f","surfaceIndexHex":"0x11","frameIndex":15},{"order":6,"commandVaHex":"0x004f8ff8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0011000e","surfaceIndexHex":"0x11","frameIndex":14},{"order":7,"commandVaHex":"0x004f9000","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110002","surfaceIndexHex":"0x11","frameIndex":2}],"tail":{"commandVaHex":"0x004f9008","opcodeHex":"0x03","targetVaHex":"0x004f8fc8","loopsToSequenceStart":true},"state":7,"actorControllerMeaning":"moving left"},{"scriptVaHex":"0x004f9010","commandCount":8,"selectorSequenceHex":["0x00110010","0x00110011","0x00110010","0x00110003","0x00110012","0x00110013","0x00110012","0x00110003"],"frameIndices":[16,17,16,3,18,19,18,3],"timerSequence":[1,1,1,1,1,1,1,1],"surfaceIndicesHex":["0x11"],"commands":[{"order":0,"commandVaHex":"0x004f9010","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110010","surfaceIndexHex":"0x11","frameIndex":16},{"order":1,"commandVaHex":"0x004f9018","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110011","surfaceIndexHex":"0x11","frameIndex":17},{"order":2,"commandVaHex":"0x004f9020","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110010","surfaceIndexHex":"0x11","frameIndex":16},{"order":3,"commandVaHex":"0x004f9028","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110003","surfaceIndexHex":"0x11","frameIndex":3},{"order":4,"commandVaHex":"0x004f9030","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110012","surfaceIndexHex":"0x11","frameIndex":18},{"order":5,"commandVaHex":"0x004f9038","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110013","surfaceIndexHex":"0x11","frameIndex":19},{"order":6,"commandVaHex":"0x004f9040","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110012","surfaceIndexHex":"0x11","frameIndex":18},{"order":7,"commandVaHex":"0x004f9048","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00110003","surfaceIndexHex":"0x11","frameIndex":3}],"tail":{"commandVaHex":"0x004f9050","opcodeHex":"0x03","targetVaHex":"0x004f9010","loopsToSequenceStart":true},"state":8,"actorControllerMeaning":"moving right"}]},{"index":1,"name":"Rinshan","resource":"cara_rs1.cns","descriptorTableEntryHex":"0x00442d99","descriptorVaHex":"0x004e75a0","expectedDescriptorVaHex":"0x004e75a0","descriptorScriptsHex":["0x004e785c","0x004e787c","0x004e7890"],"baseSurfaceIndexHex":"0x14","baseFrameScriptVaHex":"0x004e7978","animationStatePointerTableHex":"0x004e78ec","frameScriptPointerInitializerSites":[{"commandVaHex":"0x004e78a8","bytes":"20 00 00 00 78 79 4e 00","frameScriptPointerVaHex":"0x004e7978","descriptorScriptIndex":1,"descriptorScriptVaHex":"0x004e787c"},{"commandVaHex":"0x004e78a8","bytes":"20 00 00 00 78 79 4e 00","frameScriptPointerVaHex":"0x004e7978","descriptorScriptIndex":2,"descriptorScriptVaHex":"0x004e7890"}],"animationStatePointerTableCommandSites":[{"commandVaHex":"0x004e78b0","bytes":"18 a0 64 68 ec 78 4e 00","stateTableVaHex":"0x004e78ec","semantics":"object+0x64 = dword[stateTable + byte(object+0x68) * 4]","descriptorScriptIndex":1,"descriptorScriptVaHex":"0x004e787c"},{"commandVaHex":"0x004e78b0","bytes":"18 a0 64 68 ec 78 4e 00","stateTableVaHex":"0x004e78ec","semantics":"object+0x64 = dword[stateTable + byte(object+0x68) * 4]","descriptorScriptIndex":2,"descriptorScriptVaHex":"0x004e7890"}],"stateEntries":[{"scriptVaHex":"0x004e7978","commandCount":1,"selectorSequenceHex":["0x00140000"],"frameIndices":[0],"timerSequence":[1],"surfaceIndicesHex":["0x14"],"commands":[{"order":0,"commandVaHex":"0x004e7978","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140000","surfaceIndexHex":"0x14","frameIndex":0}],"tail":{"commandVaHex":"0x004e7980","opcodeHex":"0x03","targetVaHex":"0x004e7978","loopsToSequenceStart":true},"state":0,"actorControllerMeaning":"state0/bootstrap duplicate"},{"scriptVaHex":"0x004e7978","commandCount":1,"selectorSequenceHex":["0x00140000"],"frameIndices":[0],"timerSequence":[1],"surfaceIndicesHex":["0x14"],"commands":[{"order":0,"commandVaHex":"0x004e7978","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140000","surfaceIndexHex":"0x14","frameIndex":0}],"tail":{"commandVaHex":"0x004e7980","opcodeHex":"0x03","targetVaHex":"0x004e7978","loopsToSequenceStart":true},"state":1,"actorControllerMeaning":"idle down"},{"scriptVaHex":"0x004e7988","commandCount":1,"selectorSequenceHex":["0x00140001"],"frameIndices":[1],"timerSequence":[1],"surfaceIndicesHex":["0x14"],"commands":[{"order":0,"commandVaHex":"0x004e7988","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140001","surfaceIndexHex":"0x14","frameIndex":1}],"tail":{"commandVaHex":"0x004e7990","opcodeHex":"0x03","targetVaHex":"0x004e7988","loopsToSequenceStart":true},"state":2,"actorControllerMeaning":"idle up"},{"scriptVaHex":"0x004e7998","commandCount":1,"selectorSequenceHex":["0x00140002"],"frameIndices":[2],"timerSequence":[1],"surfaceIndicesHex":["0x14"],"commands":[{"order":0,"commandVaHex":"0x004e7998","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140002","surfaceIndexHex":"0x14","frameIndex":2}],"tail":{"commandVaHex":"0x004e79a0","opcodeHex":"0x03","targetVaHex":"0x004e7998","loopsToSequenceStart":true},"state":3,"actorControllerMeaning":"idle left"},{"scriptVaHex":"0x004e79a8","commandCount":1,"selectorSequenceHex":["0x00140003"],"frameIndices":[3],"timerSequence":[1],"surfaceIndicesHex":["0x14"],"commands":[{"order":0,"commandVaHex":"0x004e79a8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140003","surfaceIndexHex":"0x14","frameIndex":3}],"tail":{"commandVaHex":"0x004e79b0","opcodeHex":"0x03","targetVaHex":"0x004e79a8","loopsToSequenceStart":true},"state":4,"actorControllerMeaning":"idle right"},{"scriptVaHex":"0x004e79b8","commandCount":8,"selectorSequenceHex":["0x00140004","0x00140005","0x00140004","0x00140000","0x00140006","0x00140007","0x00140006","0x00140000"],"frameIndices":[4,5,4,0,6,7,6,0],"timerSequence":[1,1,1,1,1,1,1,1],"surfaceIndicesHex":["0x14"],"commands":[{"order":0,"commandVaHex":"0x004e79b8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140004","surfaceIndexHex":"0x14","frameIndex":4},{"order":1,"commandVaHex":"0x004e79c0","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140005","surfaceIndexHex":"0x14","frameIndex":5},{"order":2,"commandVaHex":"0x004e79c8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140004","surfaceIndexHex":"0x14","frameIndex":4},{"order":3,"commandVaHex":"0x004e79d0","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140000","surfaceIndexHex":"0x14","frameIndex":0},{"order":4,"commandVaHex":"0x004e79d8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140006","surfaceIndexHex":"0x14","frameIndex":6},{"order":5,"commandVaHex":"0x004e79e0","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140007","surfaceIndexHex":"0x14","frameIndex":7},{"order":6,"commandVaHex":"0x004e79e8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140006","surfaceIndexHex":"0x14","frameIndex":6},{"order":7,"commandVaHex":"0x004e79f0","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140000","surfaceIndexHex":"0x14","frameIndex":0}],"tail":{"commandVaHex":"0x004e79f8","opcodeHex":"0x03","targetVaHex":"0x004e79b8","loopsToSequenceStart":true},"state":5,"actorControllerMeaning":"moving down"},{"scriptVaHex":"0x004e7a00","commandCount":8,"selectorSequenceHex":["0x00140008","0x00140009","0x00140008","0x00140001","0x0014000a","0x0014000b","0x0014000a","0x00140001"],"frameIndices":[8,9,8,1,10,11,10,1],"timerSequence":[1,1,1,1,1,1,1,1],"surfaceIndicesHex":["0x14"],"commands":[{"order":0,"commandVaHex":"0x004e7a00","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140008","surfaceIndexHex":"0x14","frameIndex":8},{"order":1,"commandVaHex":"0x004e7a08","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140009","surfaceIndexHex":"0x14","frameIndex":9},{"order":2,"commandVaHex":"0x004e7a10","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140008","surfaceIndexHex":"0x14","frameIndex":8},{"order":3,"commandVaHex":"0x004e7a18","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140001","surfaceIndexHex":"0x14","frameIndex":1},{"order":4,"commandVaHex":"0x004e7a20","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0014000a","surfaceIndexHex":"0x14","frameIndex":10},{"order":5,"commandVaHex":"0x004e7a28","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0014000b","surfaceIndexHex":"0x14","frameIndex":11},{"order":6,"commandVaHex":"0x004e7a30","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0014000a","surfaceIndexHex":"0x14","frameIndex":10},{"order":7,"commandVaHex":"0x004e7a38","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140001","surfaceIndexHex":"0x14","frameIndex":1}],"tail":{"commandVaHex":"0x004e7a40","opcodeHex":"0x03","targetVaHex":"0x004e7a00","loopsToSequenceStart":true},"state":6,"actorControllerMeaning":"moving up"},{"scriptVaHex":"0x004e7a48","commandCount":8,"selectorSequenceHex":["0x0014000c","0x0014000d","0x0014000c","0x00140002","0x0014000e","0x0014000f","0x0014000e","0x00140002"],"frameIndices":[12,13,12,2,14,15,14,2],"timerSequence":[1,1,1,1,1,1,1,1],"surfaceIndicesHex":["0x14"],"commands":[{"order":0,"commandVaHex":"0x004e7a48","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0014000c","surfaceIndexHex":"0x14","frameIndex":12},{"order":1,"commandVaHex":"0x004e7a50","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0014000d","surfaceIndexHex":"0x14","frameIndex":13},{"order":2,"commandVaHex":"0x004e7a58","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0014000c","surfaceIndexHex":"0x14","frameIndex":12},{"order":3,"commandVaHex":"0x004e7a60","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140002","surfaceIndexHex":"0x14","frameIndex":2},{"order":4,"commandVaHex":"0x004e7a68","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0014000e","surfaceIndexHex":"0x14","frameIndex":14},{"order":5,"commandVaHex":"0x004e7a70","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0014000f","surfaceIndexHex":"0x14","frameIndex":15},{"order":6,"commandVaHex":"0x004e7a78","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0014000e","surfaceIndexHex":"0x14","frameIndex":14},{"order":7,"commandVaHex":"0x004e7a80","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140002","surfaceIndexHex":"0x14","frameIndex":2}],"tail":{"commandVaHex":"0x004e7a88","opcodeHex":"0x03","targetVaHex":"0x004e7a48","loopsToSequenceStart":true},"state":7,"actorControllerMeaning":"moving left"},{"scriptVaHex":"0x004e7a90","commandCount":8,"selectorSequenceHex":["0x00140010","0x00140011","0x00140010","0x00140003","0x00140012","0x00140013","0x00140012","0x00140003"],"frameIndices":[16,17,16,3,18,19,18,3],"timerSequence":[1,1,1,1,1,1,1,1],"surfaceIndicesHex":["0x14"],"commands":[{"order":0,"commandVaHex":"0x004e7a90","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140010","surfaceIndexHex":"0x14","frameIndex":16},{"order":1,"commandVaHex":"0x004e7a98","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140011","surfaceIndexHex":"0x14","frameIndex":17},{"order":2,"commandVaHex":"0x004e7aa0","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140010","surfaceIndexHex":"0x14","frameIndex":16},{"order":3,"commandVaHex":"0x004e7aa8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140003","surfaceIndexHex":"0x14","frameIndex":3},{"order":4,"commandVaHex":"0x004e7ab0","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140012","surfaceIndexHex":"0x14","frameIndex":18},{"order":5,"commandVaHex":"0x004e7ab8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140013","surfaceIndexHex":"0x14","frameIndex":19},{"order":6,"commandVaHex":"0x004e7ac0","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140012","surfaceIndexHex":"0x14","frameIndex":18},{"order":7,"commandVaHex":"0x004e7ac8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00140003","surfaceIndexHex":"0x14","frameIndex":3}],"tail":{"commandVaHex":"0x004e7ad0","opcodeHex":"0x03","targetVaHex":"0x004e7a90","loopsToSequenceStart":true},"state":8,"actorControllerMeaning":"moving right"}]},{"index":2,"name":"Smashu","resource":"cara_sm1.cns","descriptorTableEntryHex":"0x00442d9d","descriptorVaHex":"0x00546004","expectedDescriptorVaHex":"0x00546004","descriptorScriptsHex":["0x005462fc","0x0054631c","0x00546330"],"baseSurfaceIndexHex":"0x17","baseFrameScriptVaHex":"0x00546418","animationStatePointerTableHex":"0x0054638c","frameScriptPointerInitializerSites":[{"commandVaHex":"0x00546348","bytes":"20 00 00 00 18 64 54 00","frameScriptPointerVaHex":"0x00546418","descriptorScriptIndex":1,"descriptorScriptVaHex":"0x0054631c"},{"commandVaHex":"0x00546348","bytes":"20 00 00 00 18 64 54 00","frameScriptPointerVaHex":"0x00546418","descriptorScriptIndex":2,"descriptorScriptVaHex":"0x00546330"}],"animationStatePointerTableCommandSites":[{"commandVaHex":"0x00546350","bytes":"18 a0 64 68 8c 63 54 00","stateTableVaHex":"0x0054638c","semantics":"object+0x64 = dword[stateTable + byte(object+0x68) * 4]","descriptorScriptIndex":1,"descriptorScriptVaHex":"0x0054631c"},{"commandVaHex":"0x00546350","bytes":"18 a0 64 68 8c 63 54 00","stateTableVaHex":"0x0054638c","semantics":"object+0x64 = dword[stateTable + byte(object+0x68) * 4]","descriptorScriptIndex":2,"descriptorScriptVaHex":"0x00546330"}],"stateEntries":[{"scriptVaHex":"0x00546418","commandCount":1,"selectorSequenceHex":["0x00170000"],"frameIndices":[0],"timerSequence":[1],"surfaceIndicesHex":["0x17"],"commands":[{"order":0,"commandVaHex":"0x00546418","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170000","surfaceIndexHex":"0x17","frameIndex":0}],"tail":{"commandVaHex":"0x00546420","opcodeHex":"0x03","targetVaHex":"0x00546418","loopsToSequenceStart":true},"state":0,"actorControllerMeaning":"state0/bootstrap duplicate"},{"scriptVaHex":"0x00546418","commandCount":1,"selectorSequenceHex":["0x00170000"],"frameIndices":[0],"timerSequence":[1],"surfaceIndicesHex":["0x17"],"commands":[{"order":0,"commandVaHex":"0x00546418","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170000","surfaceIndexHex":"0x17","frameIndex":0}],"tail":{"commandVaHex":"0x00546420","opcodeHex":"0x03","targetVaHex":"0x00546418","loopsToSequenceStart":true},"state":1,"actorControllerMeaning":"idle down"},{"scriptVaHex":"0x00546428","commandCount":1,"selectorSequenceHex":["0x00170001"],"frameIndices":[1],"timerSequence":[1],"surfaceIndicesHex":["0x17"],"commands":[{"order":0,"commandVaHex":"0x00546428","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170001","surfaceIndexHex":"0x17","frameIndex":1}],"tail":{"commandVaHex":"0x00546430","opcodeHex":"0x03","targetVaHex":"0x00546428","loopsToSequenceStart":true},"state":2,"actorControllerMeaning":"idle up"},{"scriptVaHex":"0x00546438","commandCount":1,"selectorSequenceHex":["0x00170002"],"frameIndices":[2],"timerSequence":[1],"surfaceIndicesHex":["0x17"],"commands":[{"order":0,"commandVaHex":"0x00546438","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170002","surfaceIndexHex":"0x17","frameIndex":2}],"tail":{"commandVaHex":"0x00546440","opcodeHex":"0x03","targetVaHex":"0x00546438","loopsToSequenceStart":true},"state":3,"actorControllerMeaning":"idle left"},{"scriptVaHex":"0x00546448","commandCount":1,"selectorSequenceHex":["0x00170003"],"frameIndices":[3],"timerSequence":[1],"surfaceIndicesHex":["0x17"],"commands":[{"order":0,"commandVaHex":"0x00546448","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170003","surfaceIndexHex":"0x17","frameIndex":3}],"tail":{"commandVaHex":"0x00546450","opcodeHex":"0x03","targetVaHex":"0x00546448","loopsToSequenceStart":true},"state":4,"actorControllerMeaning":"idle right"},{"scriptVaHex":"0x00546458","commandCount":8,"selectorSequenceHex":["0x00170004","0x00170005","0x00170004","0x00170000","0x00170006","0x00170007","0x00170006","0x00170000"],"frameIndices":[4,5,4,0,6,7,6,0],"timerSequence":[1,1,1,1,1,1,1,1],"surfaceIndicesHex":["0x17"],"commands":[{"order":0,"commandVaHex":"0x00546458","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170004","surfaceIndexHex":"0x17","frameIndex":4},{"order":1,"commandVaHex":"0x00546460","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170005","surfaceIndexHex":"0x17","frameIndex":5},{"order":2,"commandVaHex":"0x00546468","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170004","surfaceIndexHex":"0x17","frameIndex":4},{"order":3,"commandVaHex":"0x00546470","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170000","surfaceIndexHex":"0x17","frameIndex":0},{"order":4,"commandVaHex":"0x00546478","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170006","surfaceIndexHex":"0x17","frameIndex":6},{"order":5,"commandVaHex":"0x00546480","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170007","surfaceIndexHex":"0x17","frameIndex":7},{"order":6,"commandVaHex":"0x00546488","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170006","surfaceIndexHex":"0x17","frameIndex":6},{"order":7,"commandVaHex":"0x00546490","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170000","surfaceIndexHex":"0x17","frameIndex":0}],"tail":{"commandVaHex":"0x00546498","opcodeHex":"0x03","targetVaHex":"0x00546458","loopsToSequenceStart":true},"state":5,"actorControllerMeaning":"moving down"},{"scriptVaHex":"0x005464a0","commandCount":8,"selectorSequenceHex":["0x00170008","0x00170009","0x00170008","0x00170001","0x0017000a","0x0017000b","0x0017000a","0x00170001"],"frameIndices":[8,9,8,1,10,11,10,1],"timerSequence":[1,1,1,1,1,1,1,1],"surfaceIndicesHex":["0x17"],"commands":[{"order":0,"commandVaHex":"0x005464a0","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170008","surfaceIndexHex":"0x17","frameIndex":8},{"order":1,"commandVaHex":"0x005464a8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170009","surfaceIndexHex":"0x17","frameIndex":9},{"order":2,"commandVaHex":"0x005464b0","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170008","surfaceIndexHex":"0x17","frameIndex":8},{"order":3,"commandVaHex":"0x005464b8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170001","surfaceIndexHex":"0x17","frameIndex":1},{"order":4,"commandVaHex":"0x005464c0","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0017000a","surfaceIndexHex":"0x17","frameIndex":10},{"order":5,"commandVaHex":"0x005464c8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0017000b","surfaceIndexHex":"0x17","frameIndex":11},{"order":6,"commandVaHex":"0x005464d0","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0017000a","surfaceIndexHex":"0x17","frameIndex":10},{"order":7,"commandVaHex":"0x005464d8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170001","surfaceIndexHex":"0x17","frameIndex":1}],"tail":{"commandVaHex":"0x005464e0","opcodeHex":"0x03","targetVaHex":"0x005464a0","loopsToSequenceStart":true},"state":6,"actorControllerMeaning":"moving up"},{"scriptVaHex":"0x005464e8","commandCount":8,"selectorSequenceHex":["0x0017000c","0x0017000d","0x0017000c","0x00170002","0x0017000e","0x0017000f","0x0017000e","0x00170002"],"frameIndices":[12,13,12,2,14,15,14,2],"timerSequence":[1,1,1,1,1,1,1,1],"surfaceIndicesHex":["0x17"],"commands":[{"order":0,"commandVaHex":"0x005464e8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0017000c","surfaceIndexHex":"0x17","frameIndex":12},{"order":1,"commandVaHex":"0x005464f0","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0017000d","surfaceIndexHex":"0x17","frameIndex":13},{"order":2,"commandVaHex":"0x005464f8","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0017000c","surfaceIndexHex":"0x17","frameIndex":12},{"order":3,"commandVaHex":"0x00546500","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170002","surfaceIndexHex":"0x17","frameIndex":2},{"order":4,"commandVaHex":"0x00546508","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0017000e","surfaceIndexHex":"0x17","frameIndex":14},{"order":5,"commandVaHex":"0x00546510","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0017000f","surfaceIndexHex":"0x17","frameIndex":15},{"order":6,"commandVaHex":"0x00546518","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x0017000e","surfaceIndexHex":"0x17","frameIndex":14},{"order":7,"commandVaHex":"0x00546520","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170002","surfaceIndexHex":"0x17","frameIndex":2}],"tail":{"commandVaHex":"0x00546528","opcodeHex":"0x03","targetVaHex":"0x005464e8","loopsToSequenceStart":true},"state":7,"actorControllerMeaning":"moving left"},{"scriptVaHex":"0x00546530","commandCount":8,"selectorSequenceHex":["0x00170010","0x00170011","0x00170010","0x00170003","0x00170012","0x00170013","0x00170012","0x00170003"],"frameIndices":[16,17,16,3,18,19,18,3],"timerSequence":[1,1,1,1,1,1,1,1],"surfaceIndicesHex":["0x17"],"commands":[{"order":0,"commandVaHex":"0x00546530","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170010","surfaceIndexHex":"0x17","frameIndex":16},{"order":1,"commandVaHex":"0x00546538","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170011","surfaceIndexHex":"0x17","frameIndex":17},{"order":2,"commandVaHex":"0x00546540","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170010","surfaceIndexHex":"0x17","frameIndex":16},{"order":3,"commandVaHex":"0x00546548","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170003","surfaceIndexHex":"0x17","frameIndex":3},{"order":4,"commandVaHex":"0x00546550","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170012","surfaceIndexHex":"0x17","frameIndex":18},{"order":5,"commandVaHex":"0x00546558","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170013","surfaceIndexHex":"0x17","frameIndex":19},{"order":6,"commandVaHex":"0x00546560","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170012","surfaceIndexHex":"0x17","frameIndex":18},{"order":7,"commandVaHex":"0x00546568","opcodeHex":"0x21","mode":0,"timer":1,"selectorHex":"0x00170003","surfaceIndexHex":"0x17","frameIndex":3}],"tail":{"commandVaHex":"0x00546570","opcodeHex":"0x03","targetVaHex":"0x00546530","loopsToSequenceStart":true},"state":8,"actorControllerMeaning":"moving right"}]}],"objectDescriptorTable":{"descriptorTableHex":"0x00442d95","rowCount":12,"partyStateTableRowIndices":[0,1,2],"nonPartyDescriptorRowCount":9,"nonPartyAnimationStateTableRowCount":0,"nonPartyFieldMapCnsRefCount":0,"resourceClassCounts":{"party-walking-state-table":3,"battle/effect-resource":4,"object-resource":5},"rows":[{"index":0,"entryVaHex":"0x00442d95","descriptorVaHex":"0x004f867c","descriptorScriptsHex":["0x004f8dd8","0x004f8df8","0x004f8e0c"],"linkedCns":["cara_at1.cns"],"resourceClass":"party-walking-state-table","validFramePointerInitializerCount":1,"validFramePointerInitializerSites":[{"commandVaHex":"0x004f8e24","bytes":"20 00 00 00 f8 8e 4f 00","frameScriptPointerVaHex":"0x004f8ef8","descriptorScriptIndex":0,"descriptorScriptVaHex":"0x004f8dd8"}],"animationStateTableCommandCount":2,"animationStateTableTargetsHex":["0x004f8e68"],"usesActorAnimationStateTable":true,"stateEntries":[{"state":0,"scriptVaHex":"0x004f8ef8","commandCount":1,"surfaceIndicesHex":["0x11"],"frameIndices":[0],"loopsToSelf":true},{"state":1,"scriptVaHex":"0x004f8ef8","commandCount":1,"surfaceIndicesHex":["0x11"],"frameIndices":[0],"loopsToSelf":true},{"state":2,"scriptVaHex":"0x004f8f08","commandCount":1,"surfaceIndicesHex":["0x11"],"frameIndices":[1],"loopsToSelf":true},{"state":3,"scriptVaHex":"0x004f8f18","commandCount":1,"surfaceIndicesHex":["0x11"],"frameIndices":[2],"loopsToSelf":true},{"state":4,"scriptVaHex":"0x004f8f28","commandCount":1,"surfaceIndicesHex":["0x11"],"frameIndices":[3],"loopsToSelf":true},{"state":5,"scriptVaHex":"0x004f8f38","commandCount":8,"surfaceIndicesHex":["0x11"],"frameIndices":[4,5,4,0,6,7,6,0],"loopsToSelf":true},{"state":6,"scriptVaHex":"0x004f8f80","commandCount":8,"surfaceIndicesHex":["0x11"],"frameIndices":[8,9,8,1,10,11,10,1],"loopsToSelf":true},{"state":7,"scriptVaHex":"0x004f8fc8","commandCount":8,"surfaceIndicesHex":["0x11"],"frameIndices":[12,13,12,2,14,15,14,2],"loopsToSelf":true},{"state":8,"scriptVaHex":"0x004f9010","commandCount":8,"surfaceIndicesHex":["0x11"],"frameIndices":[16,17,16,3,18,19,18,3],"loopsToSelf":true}],"fieldMapCnsRefCount":0},{"index":1,"entryVaHex":"0x00442d99","descriptorVaHex":"0x004e75a0","descriptorScriptsHex":["0x004e785c","0x004e787c","0x004e7890"],"linkedCns":["cara_rs1.cns"],"resourceClass":"party-walking-state-table","validFramePointerInitializerCount":1,"validFramePointerInitializerSites":[{"commandVaHex":"0x004e78a8","bytes":"20 00 00 00 78 79 4e 00","frameScriptPointerVaHex":"0x004e7978","descriptorScriptIndex":0,"descriptorScriptVaHex":"0x004e785c"}],"animationStateTableCommandCount":2,"animationStateTableTargetsHex":["0x004e78ec"],"usesActorAnimationStateTable":true,"stateEntries":[{"state":0,"scriptVaHex":"0x004e7978","commandCount":1,"surfaceIndicesHex":["0x14"],"frameIndices":[0],"loopsToSelf":true},{"state":1,"scriptVaHex":"0x004e7978","commandCount":1,"surfaceIndicesHex":["0x14"],"frameIndices":[0],"loopsToSelf":true},{"state":2,"scriptVaHex":"0x004e7988","commandCount":1,"surfaceIndicesHex":["0x14"],"frameIndices":[1],"loopsToSelf":true},{"state":3,"scriptVaHex":"0x004e7998","commandCount":1,"surfaceIndicesHex":["0x14"],"frameIndices":[2],"loopsToSelf":true},{"state":4,"scriptVaHex":"0x004e79a8","commandCount":1,"surfaceIndicesHex":["0x14"],"frameIndices":[3],"loopsToSelf":true},{"state":5,"scriptVaHex":"0x004e79b8","commandCount":8,"surfaceIndicesHex":["0x14"],"frameIndices":[4,5,4,0,6,7,6,0],"loopsToSelf":true},{"state":6,"scriptVaHex":"0x004e7a00","commandCount":8,"surfaceIndicesHex":["0x14"],"frameIndices":[8,9,8,1,10,11,10,1],"loopsToSelf":true},{"state":7,"scriptVaHex":"0x004e7a48","commandCount":8,"surfaceIndicesHex":["0x14"],"frameIndices":[12,13,12,2,14,15,14,2],"loopsToSelf":true},{"state":8,"scriptVaHex":"0x004e7a90","commandCount":8,"surfaceIndicesHex":["0x14"],"frameIndices":[16,17,16,3,18,19,18,3],"loopsToSelf":true}],"fieldMapCnsRefCount":0},{"index":2,"entryVaHex":"0x00442d9d","descriptorVaHex":"0x00546004","descriptorScriptsHex":["0x005462fc","0x0054631c","0x00546330"],"linkedCns":["cara_sm1.cns"],"resourceClass":"party-walking-state-table","validFramePointerInitializerCount":1,"validFramePointerInitializerSites":[{"commandVaHex":"0x00546348","bytes":"20 00 00 00 18 64 54 00","frameScriptPointerVaHex":"0x00546418","descriptorScriptIndex":0,"descriptorScriptVaHex":"0x005462fc"}],"animationStateTableCommandCount":2,"animationStateTableTargetsHex":["0x0054638c"],"usesActorAnimationStateTable":true,"stateEntries":[{"state":0,"scriptVaHex":"0x00546418","commandCount":1,"surfaceIndicesHex":["0x17"],"frameIndices":[0],"loopsToSelf":true},{"state":1,"scriptVaHex":"0x00546418","commandCount":1,"surfaceIndicesHex":["0x17"],"frameIndices":[0],"loopsToSelf":true},{"state":2,"scriptVaHex":"0x00546428","commandCount":1,"surfaceIndicesHex":["0x17"],"frameIndices":[1],"loopsToSelf":true},{"state":3,"scriptVaHex":"0x00546438","commandCount":1,"surfaceIndicesHex":["0x17"],"frameIndices":[2],"loopsToSelf":true},{"state":4,"scriptVaHex":"0x00546448","commandCount":1,"surfaceIndicesHex":["0x17"],"frameIndices":[3],"loopsToSelf":true},{"state":5,"scriptVaHex":"0x00546458","commandCount":8,"surfaceIndicesHex":["0x17"],"frameIndices":[4,5,4,0,6,7,6,0],"loopsToSelf":true},{"state":6,"scriptVaHex":"0x005464a0","commandCount":8,"surfaceIndicesHex":["0x17"],"frameIndices":[8,9,8,1,10,11,10,1],"loopsToSelf":true},{"state":7,"scriptVaHex":"0x005464e8","commandCount":8,"surfaceIndicesHex":["0x17"],"frameIndices":[12,13,12,2,14,15,14,2],"loopsToSelf":true},{"state":8,"scriptVaHex":"0x00546530","commandCount":8,"surfaceIndicesHex":["0x17"],"frameIndices":[16,17,16,3,18,19,18,3],"loopsToSelf":true}],"fieldMapCnsRefCount":0},{"index":3,"entryVaHex":"0x00442da1","descriptorVaHex":"0x004b218c","descriptorScriptsHex":["0x004b35d4","0x004b3604","0x004b3620"],"linkedCns":["btl_etc.cns","btl_efc.cns"],"resourceClass":"battle/effect-resource","validFramePointerInitializerCount":0,"validFramePointerInitializerSites":[],"animationStateTableCommandCount":0,"animationStateTableTargetsHex":[],"usesActorAnimationStateTable":false,"stateEntries":[],"fieldMapCnsRefCount":0},{"index":4,"entryVaHex":"0x00442da5","descriptorVaHex":"0x004d5868","descriptorScriptsHex":["0x004d5ca8","0x004d5cc8","0x004d5d6c"],"linkedCns":["btl_at.cns"],"resourceClass":"battle/effect-resource","validFramePointerInitializerCount":1,"validFramePointerInitializerSites":[{"commandVaHex":"0x004d5d98","bytes":"20 00 00 00 ec 60 4d 00","frameScriptPointerVaHex":"0x004d60ec","descriptorScriptIndex":2,"descriptorScriptVaHex":"0x004d5d6c"}],"animationStateTableCommandCount":0,"animationStateTableTargetsHex":[],"usesActorAnimationStateTable":false,"stateEntries":[],"fieldMapCnsRefCount":0},{"index":5,"entryVaHex":"0x00442da9","descriptorVaHex":"0x004da88c","descriptorScriptsHex":["0x004dac1c","0x004dac3c","0x004dace0"],"linkedCns":["btl_rs.cns"],"resourceClass":"battle/effect-resource","validFramePointerInitializerCount":1,"validFramePointerInitializerSites":[{"commandVaHex":"0x004dad0c","bytes":"20 00 00 00 54 ae 4d 00","frameScriptPointerVaHex":"0x004dae54","descriptorScriptIndex":2,"descriptorScriptVaHex":"0x004dace0"}],"animationStateTableCommandCount":0,"animationStateTableTargetsHex":[],"usesActorAnimationStateTable":false,"stateEntries":[],"fieldMapCnsRefCount":0},{"index":6,"entryVaHex":"0x00442dad","descriptorVaHex":"0x00524060","descriptorScriptsHex":["0x00524350","0x00524370","0x00524414"],"linkedCns":["btl_sm.cns"],"resourceClass":"battle/effect-resource","validFramePointerInitializerCount":1,"validFramePointerInitializerSites":[{"commandVaHex":"0x00524440","bytes":"20 00 00 00 54 45 52 00","frameScriptPointerVaHex":"0x00524554","descriptorScriptIndex":2,"descriptorScriptVaHex":"0x00524414"}],"animationStateTableCommandCount":0,"animationStateTableTargetsHex":[],"usesActorAnimationStateTable":false,"stateEntries":[],"fieldMapCnsRefCount":0},{"index":7,"entryVaHex":"0x00442db1","descriptorVaHex":"0x004d21c0","descriptorScriptsHex":["0x004d222c","0x004d224c","0x004d22bc"],"linkedCns":["zsa_saru.cns"],"resourceClass":"object-resource","validFramePointerInitializerCount":1,"validFramePointerInitializerSites":[{"commandVaHex":"0x004d22e0","bytes":"20 00 00 00 54 23 4d 00","frameScriptPointerVaHex":"0x004d2354","descriptorScriptIndex":2,"descriptorScriptVaHex":"0x004d22bc"}],"animationStateTableCommandCount":0,"animationStateTableTargetsHex":[],"usesActorAnimationStateTable":false,"stateEntries":[],"fieldMapCnsRefCount":0},{"index":8,"entryVaHex":"0x00442db5","descriptorVaHex":"0x0048c094","descriptorScriptsHex":["0x0048c144","0x0048c164","0x0048c1e0"],"linkedCns":["zsl_yoi.cns"],"resourceClass":"object-resource","validFramePointerInitializerCount":1,"validFramePointerInitializerSites":[{"commandVaHex":"0x0048c204","bytes":"20 00 00 00 78 c2 48 00","frameScriptPointerVaHex":"0x0048c278","descriptorScriptIndex":2,"descriptorScriptVaHex":"0x0048c1e0"}],"animationStateTableCommandCount":0,"animationStateTableTargetsHex":[],"usesActorAnimationStateTable":false,"stateEntries":[],"fieldMapCnsRefCount":0},{"index":9,"entryVaHex":"0x00442db9","descriptorVaHex":"0x0055734c","descriptorScriptsHex":["0x005573cc","0x005573ec","0x00557468"],"linkedCns":["zsa_mi.cns"],"resourceClass":"object-resource","validFramePointerInitializerCount":1,"validFramePointerInitializerSites":[{"commandVaHex":"0x0055748c","bytes":"20 00 00 00 00 75 55 00","frameScriptPointerVaHex":"0x00557500","descriptorScriptIndex":2,"descriptorScriptVaHex":"0x00557468"}],"animationStateTableCommandCount":0,"animationStateTableTargetsHex":[],"usesActorAnimationStateTable":false,"stateEntries":[],"fieldMapCnsRefCount":0},{"index":10,"entryVaHex":"0x00442dbd","descriptorVaHex":"0x0052dad8","descriptorScriptsHex":["0x0052db58","0x0052db7c","0x0052dbf8"],"linkedCns":["zsa_iwa.cns"],"resourceClass":"object-resource","validFramePointerInitializerCount":1,"validFramePointerInitializerSites":[{"commandVaHex":"0x0052dc1c","bytes":"20 00 00 00 90 dc 52 00","frameScriptPointerVaHex":"0x0052dc90","descriptorScriptIndex":2,"descriptorScriptVaHex":"0x0052dbf8"}],"animationStateTableCommandCount":0,"animationStateTableTargetsHex":[],"usesActorAnimationStateTable":false,"stateEntries":[],"fieldMapCnsRefCount":0},{"index":11,"entryVaHex":"0x00442dc1","descriptorVaHex":"0x004aab00","descriptorScriptsHex":["0x004aab84","0x004aaba4","0x004aac54"],"linkedCns":["zsa_kika.cns"],"resourceClass":"object-resource","validFramePointerInitializerCount":1,"validFramePointerInitializerSites":[{"commandVaHex":"0x004aac78","bytes":"20 00 00 00 ec ac 4a 00","frameScriptPointerVaHex":"0x004aacec","descriptorScriptIndex":2,"descriptorScriptVaHex":"0x004aac54"}],"animationStateTableCommandCount":0,"animationStateTableTargetsHex":[],"usesActorAnimationStateTable":false,"stateEntries":[],"fieldMapCnsRefCount":0}],"verification":{"descriptorTableRowCountMatchesExpected":true,"stateTableRowsMatchPartyDescriptors":true,"nonPartyDescriptorRowsHaveNoAnimationStateTables":true,"nonPartyDescriptorRowsHaveNoFieldMapCnsRefs":true,"partyStateTablesHaveLoopingFrameSelectors":true},"classification":"the 12-row descriptor table has +0x68 animation state-table selectors only in rows 0..2 for the party walking descriptors; rows 3..11 are battle/effect/object resource descriptors with no +0x68 state-table selector and no field-map CNS refs"},"verification":{"framePointerOpcodeTableEntryMatchesExpected":true,"stateTableOpcodeTableEntryMatchesExpected":true,"framePointerInitializerHandlerMatchesExpected":true,"stateTableCommandHandlerReadsObjectStateAndTableMatchesExpected":true,"partyDescriptorTableEntriesMatchExpected":true,"descriptorScriptsContainFramePointerInitializers":true,"descriptorScriptsContainAnimationStatePointerTables":true,"statePointerTablesCoverActorStates1To8":true,"statePointerTableSelectorsMatchCharacterSurfaces":true,"statePointerTableBranchesLoopToSelf":true,"descriptorTableRowCountMatchesExpected":true,"stateTableRowsMatchPartyDescriptors":true,"nonPartyDescriptorRowsHaveNoAnimationStateTables":true,"nonPartyDescriptorRowsHaveNoFieldMapCnsRefs":true,"partyStateTablesHaveLoopingFrameSelectors":true},"classification":"party actor descriptors initialize +0x64 with opcode 0x20, then use opcode 0x18 command bytes 18 a0 64 68 to select +0x64 = stateTable[object+0x68]; states 1..8 decode to opcode 0x21 +0x28 selector sequences that loop through opcode 0x03; the full 12-row descriptor table is classified so rows 3..11 stay separate as battle/effect/object resource descriptors"},"counts":{"actorControllerFrameSelectorWriteCount":0,"boundsHelperAnimationStateReadCount":0},"classification":"+0x28 is the draw frame selector consumed by the bounds/source-rect helper; its low 16 bits select the frame and bits 16..23 select the 0x0055abd8 surface table. The helper also applies per-object +0x30/+0x34 sprite offsets when the object flags request it. The object script/timer path drives +0x28 through opcode 0x21 frame-script commands, while the actor controller writes +0x68 direction/animation state but does not write +0x28 in the identified controller range. Party actor descriptors ground the +0x68-to-+0x64 frame-script table and opcode 0x21 +0x28 selector sequences for Ataho/Rinshan/Smashu; the remaining descriptor rows are classified as battle/effect/object resources without +0x68 state-table selectors.","verification":{"boundsHelperFrameSelectorReadsMatchExpected":true,"boundsHelperGridFrameMathMatchesExpected":true,"boundsHelperObjectOffsetAdjustmentMatchesExpected":true,"scriptFrameSelectorWritesMatchExpected":true,"actorControllerFrameSelectorWritesAbsent":true,"boundsHelperAnimationStateReadsAbsent":true,"scriptTimerLoopMatchesExpected":true,"scriptTimerPointerSwapMatchesExpected":true,"generalScriptRunnerDispatchMatchesExpected":true,"frameSelectorOpcodeTableEntryMatchesExpected":true,"frameSelectorModeDispatchMatchesExpected":true,"framePointerOpcodeTableEntryMatchesExpected":true,"stateTableOpcodeTableEntryMatchesExpected":true,"framePointerInitializerHandlerMatchesExpected":true,"stateTableCommandHandlerReadsObjectStateAndTableMatchesExpected":true,"partyDescriptorTableEntriesMatchExpected":true,"descriptorScriptsContainFramePointerInitializers":true,"descriptorScriptsContainAnimationStatePointerTables":true,"statePointerTablesCoverActorStates1To8":true,"statePointerTableSelectorsMatchCharacterSurfaces":true,"statePointerTableBranchesLoopToSelf":true,"descriptorTableRowCountMatchesExpected":true,"stateTableRowsMatchPartyDescriptors":true,"nonPartyDescriptorRowsHaveNoAnimationStateTables":true,"nonPartyDescriptorRowsHaveNoFieldMapCnsRefs":true,"partyStateTablesHaveLoopingFrameSelectors":true}},"descriptorActivationOrder":{"source":"/home/exedev/hwanse/out/save_selector_opcode20_runtime_materializers.json","materializerReportPresent":true,"countRuntimeVaHex":"0x004576e8","orderBytesVaHex":"0x004576e9","slotBaseHex":"0x00457750","loadRebuildCallVaHex":"0x0042349c","loadRebuildFunctionVaHex":"0x00432323","rebuildAfterSaveReadBlocks":true,"rebuildBeforeSelectorPointerSelection":true,"materializerNames":["add active save/object slot","rebuild active slot descriptors","remove/rebuild active slot descriptors"],"generalMutationHandlers":[{"opcode":98,"opcodeHex":"0x62","entryVaHex":"0x004406c0","handlerVaHex":"0x00407cc1","handlerSection":".text","mutationRole":"add active slot"},{"opcode":99,"opcodeHex":"0x63","entryVaHex":"0x004406c4","handlerVaHex":"0x00407ce5","handlerSection":".text","mutationRole":"remove active slot"}],"saveSelectorSameLowByteHandlers":[{"opcode":98,"opcodeHex":"0x62","entryVaHex":"0x004408a8","handlerVaHex":"0x0040239f","handlerSection":".text","mutationRole":"not an active-order materializer in the save-selector table"},{"opcode":99,"opcodeHex":"0x63","entryVaHex":"0x004408ac","handlerVaHex":"0x0041004f","handlerSection":".text","mutationRole":"not an active-order materializer in the save-selector table"}],"currentRouteSameLowByteRowCount":11,"currentRouteGeneralMutationEvidenceCount":0,"descriptorScriptMutationRowCount":0,"opcode20SelfMutationPathEliminated":true,"sampleActiveDescriptorSets":[],"currentFrontierSelector":"2:0","currentFrontierActiveOrderProven":false,"currentFrontierSampleCovered":false,"verification":{"runtimeMaterializerReportLoaded":true,"loadRebuildAfterSaveReadBlocks":true,"loadRebuildBeforeSelectorPointerSelection":true,"generalMutationHandlersIdentified":true,"saveSelectorSameLowBytesSeparated":true,"opcode20SelfMutationPathEliminated":true,"currentFrontierActiveOrderStillUnproven":true},"classification":"save load calls 0x00432323 after count/order and slot blocks are read and before selector pointer selection; later add/remove active descriptor mutations are general-table opcode 0x62/0x63 paths, while the current selector 2:0 active order remains unproven because public samples do not cover it"},"mapCollisionLoader":{"functionVaHex":"0x0042449c","payloadLoadCall":{"label":"map CNS payload loader","callVaHex":"0x004244cf","targetVaHex":"0x00422f7c"},"widthGlobalHex":"0x00595ada","heightGlobalHex":"0x00595adc","tileWordGridHex":"0x00595af0","collisionFlagGridHex":"0x0058d7d0","layerWordSizeBytes":2,"layer0CopyCall":{"label":"CNS layer0 word grid copy","callVaHex":"0x00424547","targetVaHex":"0x00436e60"},"layer1CollisionCopyCall":{"label":"CNS layer1 collision flag grid copy","callVaHex":"0x004245a4","targetVaHex":"0x00436e60"},"copyFunctionHex":"0x00436e60","copyOrder":["width/height words","CNS layer0 word grid -> 0x00595af0","CNS layer1 word grid -> 0x0058d7d0"],"collisionDirectionBits":{"down":"0x02","up":"0x01","left":"0x04","right":"0x08"},"verification":{"mapLoaderPrologueMatchesExpected":true,"mapPayloadLoadCallMatchesExpected":true,"mapWidthHeightWritesMatchExpected":true,"mapLayer0CopyDestinationMatchesExpected":true,"mapLayer1CollisionCopyDestinationMatchesExpected":true,"mapLayerCopyCallsMatchExpected":true},"promotionStatus":"collision-flag-grid-mapped-to-cns-layer1"},"webImplementation":{"source":"/home/exedev/hwanse/web/game.html","originalFrameMs":48,"defaultTileStepMsExpression":"ORIGINAL_FRAME_MS","defaultTileStepMs":48,"moveMsClamp":{"min":48,"max":300},"walkFramesPerDirection":5,"idleFrame":0,"firstWalkFrame":1,"walkCadenceCommandCount":8,"frameWidth":48,"frameHeight":64,"frameQuantizedInterpolation":true,"sourceRectSelectorMapping":true,"sourceRectSelectorCadence":true,"sourceRectSelectorMappingModel":"web character source rects use original party actor +0x28 frame selector indices for idle states and the full 8-command timer=1 walking selector cadence","heldInputTileChaining":true,"wallSlideFallbackPresent":true,"wallSlideActualDirection":true,"wallSlideDiagonalFollowup":true,"cameraDeadzonePresent":true,"cameraDeadzoneTiles":{"x":6,"y":5},"deferredMapQuerySync":true,"originalLayer1FlagCollisionModePresent":false,"actorOverlapCollisionModePresent":true,"actorOverlapCollisionDefaultEnabled":false,"actorOverlapCollisionModeQuery":"actorCollision=1 enables review-only party blocking","partyTrailHistoryPresent":true,"partyTrailHistoryModel":"7-slot move-start tile/direction cursor ring plus per-follower segment interpolation","partyTrailRingSlotCount":7,"partyTrailActorSlotCount":3,"partyTrailInitialCursors":[0,4,1],"partyTrailCursorModelPresent":true,"partyTrailInitialCursorsMatchOriginal":true,"partyTrailRecordsAcceptedMoveTarget":true,"partyTrailRingBounded":true,"browserInterpolationOverlayDetected":true,"browserInterpolationFixedPointPreserved":true,"transitionChecksBeforeMovement":false,"defaultCollisionMode":"originalLayer1Flags","defaultCollisionModeSource":"DEFAULT_COLLISION_MODE","collisionFallbackClass":"local tile class + layer0 fallback"},"verification":{"updateFunctionMatchesExpected":true,"perFrameCallsMatchExpected":true,"drawPrepCallMatchesExpected":true,"actionPackerCallMatchesExpected":true,"inputMaskStoresMatchExpected":true,"cameraGlobalsMatchExpected":true,"tileProjectionShiftMatchesExpected":true,"tileProjectionBiasMatchesExpected":true,"fixedPointShiftMatchesExpected":true,"webTileSizeMatchesRuntimeProjection":true,"webOriginalFrameMsMatchesRuntimeTiming":true,"webDefaultTileStepMatchesOriginalFrame":true,"webWalkFrameConstantsMatchSpriteSheet":true,"webFrameQuantizedInterpolationPresent":true,"webSourceRectSelectorMappingPresent":true,"webSourceRectSelectorCadencePresent":true,"webHeldInputTileChainingPresent":true,"webWallSlideFallbackPresent":true,"webDefaultCollisionModeIsOriginalLayer1Flags":true,"webOriginalLayer1FlagCollisionModePresent":false,"webActorOverlapCollisionModePresent":true,"webActorOverlapCollisionDefaultDisabled":true,"webPartyTrailHistoryPresent":true,"webPartyTrailRingMatchesOriginalSlotCount":true,"webPartyTrailCursorModelPresent":true,"webPartyTrailInitialCursorsMatchOriginal":true,"webPartyTrailRecordsAcceptedMoveTarget":true,"webPartyTrailCallTimingMatchesOriginalTileMutation":true,"actorControllerMatchesExpected":true,"drawProjectionDetailsMatchExpected":true,"spriteFrameSelectorDetailsMatchExpected":true,"descriptorActivationOrderPathMatchesExpected":true,"inputDrivenTileMutationGrounded":true,"originalPartyTrailRingGrounded":true,"originalCollisionFlagTestsGrounded":true,"collisionFlagGridMappedToCnsLayer1":true},"promotionStatus":"movement-consumer-partially-grounded","conclusion":"The original per-frame update at 0x00411476 calls the input/action-mask step, active-object callback step, and object script/timer step once for each capped frame. The input step stores a continuous action mask separately from the new-press edge mask, which matches the browser's held-key walking behavior. The draw preparation path maps object tile fields +0xe8/+0xea against save/camera tile globals 0x004576dc/0x004576de, multiplies by 16 pixels, applies small screen biases, and stores fixed-point draw coordinates; the draw dirty-rect helper then consumes those projected +0x1c/+0x20 coordinates. The web runtime uses that actor-controller tile mutation evidence as a 48ms tile step, keeps the original party actor +0x28 idle source rects and full 8-command walking selector cadence for each facing direction, and keeps frame-quantized tile interpolation as a browser visual overlay rather than original sub-tile interpolation proof. The input-driven actor controller at 0x0043022d reads the continuous input mask, writes object tile fields +0xe8/+0xea, and calls the collision helper at 0x004319f8, which checks map collision flag bits from 0x0058d7d0/0x0058d7ce against object footprint fields +0xe6/+0xe7. The map loader at 0x0042449c copies the CNS layer0 word grid to 0x00595af0 and the CNS layer1 word grid directly to 0x0058d7d0, so the original collision flag grid is now mapped back to CNS layer1. The actor controller also maintains a 7-slot tile/direction history ring at 0x00574540/0x00574550/0x00574552/0x00574554 for companion actor following, seeded with per-actor cursors 0,4,1; in the same actor-controller pass it writes the mutated leader tile before follower reads. The browser has a partyTrail cursor-ring model for the same surface and records the accepted movement target into the ring. The actor controller also recomputes party actor draw coordinates from the leader tile or follower trail entry and uses object +0x68 for direction/animation state values 1-8. The object script/timer update at 0x00432ff0 drives +0x28 through +0x62/+0x64 and opcode 0x21 handler 0x004044bd. Party actor descriptors at 0x00442d95 initialize +0x64 through opcode 0x20 handler 0x0040448a, then use opcode 0x18 command bytes 18 a0 64 68 to select state-table frame scripts from object +0x68 for cara_at1/cara_rs1/cara_sm1. Those selected scripts contain opcode 0x21 selector sequences that loop via opcode 0x03. The same 12-row descriptor table is now classified: rows 0..2 are party walking descriptors, while rows 3..11 are battle/effect/object resource descriptors with no +0x68 state-table selector and no field-map CNS refs. Save-load active descriptor materialization is also separated: 0x00432323 rebuilds slot descriptor pointers from count/order after save blocks are read and before selector pointer selection, and later add/remove paths are general-table opcode 0x62/0x63 mutations. The draw helper's +0x28 frame selector, 0x0055abd8 surface-table lookup, source-rect math, and optional +0x30/+0x34 sprite offset path are identified, and the identified actor-controller range does not directly write +0x28, and no original sub-tile interpolation writer has been identified in the actor tile/projection path; current selector 2:0 active order and scripted behavior for non-player descriptors remain unresolved. The browser now keeps the same 8-command timer=1 selector cadence for party actor source rects while a held move chains from one original-frame tile step into the next. The browser uses originalLayer1Flags as the default collision mode for that grid, lets party actors overlap/pass through each other by default, and keeps actorCollision=1 only as a review switch for the old overlap-blocking behavior; tileClassLayer0 remains available as a local-review fallback. Full non-player descriptor behavior still requires more reconstruction."}