{"version":1,"kind":"hwanse-battle-effect-visual-assertion-review","source":"tools/build_battle_effect_visual_assertion_review.py","status":"visual-assertions-pass","inputs":["out/battle_skill_timeline_browser_smoke.json"],"summary":{"requirementRows":52,"representativeEffectRows":13,"requirementGroups":4,"effectClassGroups":3,"failedGroups":0,"requirementRowsWithColoredPreview":52,"requirementRowsWithColoredEffectStrip":52,"representativeRowsWithColoredPreview":13,"rowsWithEffectFrames":52,"rowsWithTransformDiagnostics":52,"rowsWithMotionDiagnostics":32,"rowsWithSpawnOverTime":52,"rowsWithLoopPreview":22,"rowsWithNestedVisual":12,"rowsWithSparkleMultiSprite":17,"rowsWithPaletteRequirement":1,"rowsWithHiddenCandidates":0,"motionModel_explicit_motion_delta":32,"motionModel_loop_counter_placement_stream":9,"motionModel_sparkle_stream":6,"motionModel_direct_placement_stream":4,"motionModel_palette_only_frameScript":1,"motionModelClassifiedRows":52,"pixelOracleStatus":"not-original-runtime-pixel-oracle"},"requirementAssertions":[{"requirement":"child motion loop present","rowCount":5,"status":"pass","assertions":[{"id":"motion-loop-diagnostics","description":"motion, loop preview, nested visual, multi-sprite, or transform span evidence is present","total":5,"passed":5,"failed":0,"status":"pass","failedRows":[]},{"id":"visible-effect-strip","description":"effect-strip canvases contain non-empty pixels","total":5,"passed":5,"failed":0,"status":"pass","failedRows":[]},{"id":"visible-combined-preview","description":"combined actor/effect preview has active effect and colored pixels","total":5,"passed":5,"failed":0,"status":"pass","failedRows":[]}],"samples":[{"ownerKey":"rinshan","skillIdHex":"0x17","levelOrFixed":3,"name":"암각·영상승룡파","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present","child motion loop present"]},{"ownerKey":"rinshan","skillIdHex":"0x18","levelOrFixed":4,"name":"암각·영상승룡파","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present","child motion loop present"]},{"ownerKey":"rinshan","skillIdHex":"0x1a","levelOrFixed":null,"name":"흑영권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present","child motion loop present"]},{"ownerKey":"rinshan","skillIdHex":"0x2d","levelOrFixed":null,"name":"환영각","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present","child motion loop present"]},{"ownerKey":"smashu","skillIdHex":"0x22","levelOrFixed":null,"name":"투신의 춤","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present","child motion loop present"]}]},{"requirement":"palette transform effect; no CNS frame stream","rowCount":1,"status":"pass","assertions":[{"id":"palette-requirement-diagnostics","description":"palette requirement is preserved in browser marker","total":1,"passed":1,"failed":0,"status":"pass","failedRows":[]},{"id":"visible-combined-preview","description":"combined actor/effect preview has active effect and colored pixels","total":1,"passed":1,"failed":0,"status":"pass","failedRows":[]}],"samples":[{"ownerKey":"smashu","skillIdHex":"0x20","levelOrFixed":null,"name":"열시섬","effectAnimationClass":"frameScript-effect","requirements":["palette transform effect; no CNS frame stream"]}]},{"requirement":"random placement/range present","rowCount":46,"status":"pass","assertions":[{"id":"transform-range-diagnostics","description":"effect frames expose transform scope or coordinate summary","total":46,"passed":46,"failed":0,"status":"pass","failedRows":[]},{"id":"visible-effect-strip","description":"effect-strip canvases contain non-empty pixels","total":46,"passed":46,"failed":0,"status":"pass","failedRows":[]},{"id":"visible-combined-preview","description":"combined actor/effect preview has active effect and colored pixels","total":46,"passed":46,"failed":0,"status":"pass","failedRows":[]}],"samples":[{"ownerKey":"ataho","skillIdHex":"0x1b","levelOrFixed":2,"name":"비기·맹호광파참","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x1d","levelOrFixed":4,"name":"비기·맹호광파참","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x21","levelOrFixed":null,"name":"염가열소","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x2c","levelOrFixed":2,"name":"호포권","effectAnimationClass":"frameScript-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x2e","levelOrFixed":4,"name":"호포권","effectAnimationClass":"frameScript-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x33","levelOrFixed":1,"name":"비기·맹호유성각","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x34","levelOrFixed":2,"name":"비기·맹호유성각","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x35","levelOrFixed":3,"name":"비기·맹호유성각","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x36","levelOrFixed":4,"name":"비기·맹호유성각","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x38","levelOrFixed":null,"name":"취호염무","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x39","levelOrFixed":null,"name":"노익장 대폭발","effectAnimationClass":"frameScript-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x3c","levelOrFixed":null,"name":"기합일발","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]}]},{"requirement":"runner must instantiate child objects over time","rowCount":28,"status":"pass","assertions":[{"id":"spawn-over-time","description":"effect frames span multiple ticks","total":28,"passed":28,"failed":0,"status":"pass","failedRows":[]},{"id":"visible-effect-strip","description":"effect-strip canvases contain non-empty pixels","total":28,"passed":28,"failed":0,"status":"pass","failedRows":[]},{"id":"visible-combined-preview","description":"combined actor/effect preview has active effect and colored pixels","total":28,"passed":28,"failed":0,"status":"pass","failedRows":[]}],"samples":[{"ownerKey":"ataho","skillIdHex":"0x21","levelOrFixed":null,"name":"염가열소","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x38","levelOrFixed":null,"name":"취호염무","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x11","levelOrFixed":1,"name":"열화폭염권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x12","levelOrFixed":2,"name":"열화폭염권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x13","levelOrFixed":3,"name":"열화폭염권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x14","levelOrFixed":4,"name":"열화폭염권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x15","levelOrFixed":1,"name":"암각·영상승룡파","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x16","levelOrFixed":2,"name":"암각·영상승룡파","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x17","levelOrFixed":3,"name":"암각·영상승룡파","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present","child motion loop present"]},{"ownerKey":"rinshan","skillIdHex":"0x18","levelOrFixed":4,"name":"암각·영상승룡파","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present","child motion loop present"]},{"ownerKey":"rinshan","skillIdHex":"0x19","levelOrFixed":null,"name":"빙조권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x1a","levelOrFixed":null,"name":"흑영권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present","child motion loop present"]}]}],"effectClassAssertions":[{"effectAnimationClass":"frameScript-effect","rowCount":7,"status":"pass","assertions":[{"id":"visible-effect-strip","description":"effect-strip canvases contain non-empty pixels","total":7,"passed":7,"failed":0,"status":"pass","failedRows":[]},{"id":"visible-combined-preview","description":"combined actor/effect preview has active effect and colored pixels","total":7,"passed":7,"failed":0,"status":"pass","failedRows":[]},{"id":"has-effect-frames","description":"frameScript effects produce visible frame rows","total":7,"passed":7,"failed":0,"status":"pass","failedRows":[]}],"samples":[{"ownerKey":"ataho","skillIdHex":"0x2c","levelOrFixed":2,"name":"호포권","effectAnimationClass":"frameScript-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x2e","levelOrFixed":4,"name":"호포권","effectAnimationClass":"frameScript-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x39","levelOrFixed":null,"name":"노익장 대폭발","effectAnimationClass":"frameScript-effect","requirements":["random placement/range present"]},{"ownerKey":"smashu","skillIdHex":"0x0a","levelOrFixed":2,"name":"쾌진격","effectAnimationClass":"frameScript-effect","requirements":["random placement/range present"]},{"ownerKey":"smashu","skillIdHex":"0x0b","levelOrFixed":3,"name":"쾌진격","effectAnimationClass":"frameScript-effect","requirements":["random placement/range present"]},{"ownerKey":"smashu","skillIdHex":"0x0c","levelOrFixed":4,"name":"쾌진격","effectAnimationClass":"frameScript-effect","requirements":["random placement/range present"]},{"ownerKey":"smashu","skillIdHex":"0x20","levelOrFixed":null,"name":"열시섬","effectAnimationClass":"frameScript-effect","requirements":["palette transform effect; no CNS frame stream"]}]},{"effectAnimationClass":"init-frame-effect","rowCount":17,"status":"pass","assertions":[{"id":"visible-effect-strip","description":"effect-strip canvases contain non-empty pixels","total":17,"passed":17,"failed":0,"status":"pass","failedRows":[]},{"id":"visible-combined-preview","description":"combined actor/effect preview has active effect and colored pixels","total":17,"passed":17,"failed":0,"status":"pass","failedRows":[]},{"id":"transform-range-diagnostics","description":"init effects carry placement transform/range diagnostics","total":17,"passed":17,"failed":0,"status":"pass","failedRows":[]}],"samples":[{"ownerKey":"ataho","skillIdHex":"0x1b","levelOrFixed":2,"name":"비기·맹호광파참","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x1d","levelOrFixed":4,"name":"비기·맹호광파참","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x33","levelOrFixed":1,"name":"비기·맹호유성각","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x34","levelOrFixed":2,"name":"비기·맹호유성각","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x35","levelOrFixed":3,"name":"비기·맹호유성각","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x36","levelOrFixed":4,"name":"비기·맹호유성각","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x3c","levelOrFixed":null,"name":"기합일발","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x3d","levelOrFixed":null,"name":"천조족","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x3e","levelOrFixed":null,"name":"천조족","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x3f","levelOrFixed":null,"name":"주 백약지장","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x40","levelOrFixed":null,"name":"천조족","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x41","levelOrFixed":null,"name":"천조족","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]}]},{"effectAnimationClass":"spawn-stream-effect","rowCount":28,"status":"pass","assertions":[{"id":"visible-effect-strip","description":"effect-strip canvases contain non-empty pixels","total":28,"passed":28,"failed":0,"status":"pass","failedRows":[]},{"id":"visible-combined-preview","description":"combined actor/effect preview has active effect and colored pixels","total":28,"passed":28,"failed":0,"status":"pass","failedRows":[]},{"id":"spawn-over-time","description":"spawn stream spans multiple ticks","total":28,"passed":28,"failed":0,"status":"pass","failedRows":[]}],"samples":[{"ownerKey":"ataho","skillIdHex":"0x21","levelOrFixed":null,"name":"염가열소","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x38","levelOrFixed":null,"name":"취호염무","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x11","levelOrFixed":1,"name":"열화폭염권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x12","levelOrFixed":2,"name":"열화폭염권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x13","levelOrFixed":3,"name":"열화폭염권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x14","levelOrFixed":4,"name":"열화폭염권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x15","levelOrFixed":1,"name":"암각·영상승룡파","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x16","levelOrFixed":2,"name":"암각·영상승룡파","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x17","levelOrFixed":3,"name":"암각·영상승룡파","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present","child motion loop present"]},{"ownerKey":"rinshan","skillIdHex":"0x18","levelOrFixed":4,"name":"암각·영상승룡파","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present","child motion loop present"]},{"ownerKey":"rinshan","skillIdHex":"0x19","levelOrFixed":null,"name":"빙조권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x1a","levelOrFixed":null,"name":"흑영권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present","child motion loop present"]}]}],"representativeAssertions":{"rowCount":13,"visibleEffectStrip":{"total":13,"passed":13,"failed":0,"status":"pass","failedRows":[]},"visibleCombinedPreview":{"total":13,"passed":13,"failed":0,"status":"pass","failedRows":[]},"samples":[{"ownerKey":"ataho","skillIdHex":"0x0d","levelOrFixed":4,"name":"호격권","effectAnimationClass":null,"requirements":[]},{"ownerKey":"ataho","skillIdHex":"0x11","levelOrFixed":4,"name":"맹호비상각","effectAnimationClass":null,"requirements":[]},{"ownerKey":"ataho","skillIdHex":"0x15","levelOrFixed":4,"name":"폭전축","effectAnimationClass":null,"requirements":[]},{"ownerKey":"ataho","skillIdHex":"0x19","levelOrFixed":4,"name":"맹호스페셜","effectAnimationClass":null,"requirements":[]},{"ownerKey":"rinshan","skillIdHex":"0x10","levelOrFixed":4,"name":"선렬각","effectAnimationClass":null,"requirements":[]},{"ownerKey":"rinshan","skillIdHex":"0x18","levelOrFixed":4,"name":"암각·영상승룡파","effectAnimationClass":null,"requirements":[]},{"ownerKey":"ataho","skillIdHex":"0x37","levelOrFixed":null,"name":"주구격","effectAnimationClass":null,"requirements":[]},{"ownerKey":"ataho","skillIdHex":"0x38","levelOrFixed":null,"name":"취호염무","effectAnimationClass":null,"requirements":[]},{"ownerKey":"rinshan","skillIdHex":"0x2b","levelOrFixed":4,"name":"암각·영상뢰화","effectAnimationClass":null,"requirements":[]},{"ownerKey":"smashu","skillIdHex":"0x17","levelOrFixed":4,"name":"백인일섬","effectAnimationClass":null,"requirements":[]},{"ownerKey":"smashu","skillIdHex":"0x1f","levelOrFixed":4,"name":"비검·시공단","effectAnimationClass":null,"requirements":[]},{"ownerKey":"smashu","skillIdHex":"0x20","levelOrFixed":null,"name":"열시섬","effectAnimationClass":null,"requirements":[]},{"ownerKey":"smashu","skillIdHex":"0x22","levelOrFixed":null,"name":"투신의 춤","effectAnimationClass":null,"requirements":[]}]},"diagnosticCoverage":{"rowCount":52,"metrics":[{"id":"rowsWithEffectFrames","description":"EXE-derived effect frame rows exist","count":52,"total":52},{"id":"rowsWithTransformDiagnostics","description":"transform scope or coordinate summary is exposed","count":52,"total":52},{"id":"rowsWithMotionDiagnostics","description":"effect frames carry explicit motion deltas","count":32,"total":52},{"id":"rowsWithSpawnOverTime","description":"effect frames span more than one active tick","count":52,"total":52},{"id":"rowsWithLoopPreview","description":"loop/counter preview diagnostics exist","count":22,"total":52},{"id":"rowsWithNestedVisual","description":"nested child visual frames are present","count":12,"total":52},{"id":"rowsWithSparkleMultiSprite","description":"sparkle/multi-sprite helper frames are present","count":17,"total":52},{"id":"rowsWithPaletteRequirement","description":"palette-only requirement is preserved","count":1,"total":52},{"id":"rowsWithHiddenCandidates","description":"hidden/visibility-off candidates remain","count":0,"total":52}],"summary":{"rowsWithEffectFrames":52,"rowsWithTransformDiagnostics":52,"rowsWithMotionDiagnostics":32,"rowsWithSpawnOverTime":52,"rowsWithLoopPreview":22,"rowsWithNestedVisual":12,"rowsWithSparkleMultiSprite":17,"rowsWithPaletteRequirement":1,"rowsWithHiddenCandidates":0}},"motionModelCoverage":{"rowCount":52,"models":[{"id":"explicit-motion-delta","description":"effect frames carry EXE-derived motionX/motionY deltas","count":32,"total":52,"samples":[{"ownerKey":"ataho","skillIdHex":"0x1b","levelOrFixed":2,"name":"비기·맹호광파참","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x1d","levelOrFixed":4,"name":"비기·맹호광파참","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x2c","levelOrFixed":2,"name":"호포권","effectAnimationClass":"frameScript-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x2e","levelOrFixed":4,"name":"호포권","effectAnimationClass":"frameScript-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x33","levelOrFixed":1,"name":"비기·맹호유성각","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x34","levelOrFixed":2,"name":"비기·맹호유성각","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x35","levelOrFixed":3,"name":"비기·맹호유성각","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x36","levelOrFixed":4,"name":"비기·맹호유성각","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x39","levelOrFixed":null,"name":"노익장 대폭발","effectAnimationClass":"frameScript-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x3c","levelOrFixed":null,"name":"기합일발","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x3d","levelOrFixed":null,"name":"천조족","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x3e","levelOrFixed":null,"name":"천조족","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x3f","levelOrFixed":null,"name":"주 백약지장","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x40","levelOrFixed":null,"name":"천조족","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x41","levelOrFixed":null,"name":"천조족","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x11","levelOrFixed":1,"name":"열화폭염권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x12","levelOrFixed":2,"name":"열화폭염권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x13","levelOrFixed":3,"name":"열화폭염권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x14","levelOrFixed":4,"name":"열화폭염권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x16","levelOrFixed":2,"name":"암각·영상승룡파","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]}]},{"id":"loop-counter-placement-stream","description":"movement is represented by repeated/counter-driven placed spawns, not per-frame motion deltas","count":9,"total":52,"samples":[{"ownerKey":"ataho","skillIdHex":"0x21","levelOrFixed":null,"name":"염가열소","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"ataho","skillIdHex":"0x38","levelOrFixed":null,"name":"취호염무","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x15","levelOrFixed":1,"name":"암각·영상승룡파","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x19","levelOrFixed":null,"name":"빙조권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x28","levelOrFixed":1,"name":"암각·영상뢰화","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x29","levelOrFixed":2,"name":"암각·영상뢰화","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x2a","levelOrFixed":3,"name":"암각·영상뢰화","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x2b","levelOrFixed":4,"name":"암각·영상뢰화","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x2c","levelOrFixed":null,"name":"창룡파","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]}]},{"id":"sparkle-stream","description":"movement is represented by sparkle/multi-sprite child streams","count":6,"total":52,"samples":[{"ownerKey":"rinshan","skillIdHex":"0x1a","levelOrFixed":null,"name":"흑영권","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present","child motion loop present"]},{"ownerKey":"rinshan","skillIdHex":"0x2d","levelOrFixed":null,"name":"환영각","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present","child motion loop present"]},{"ownerKey":"smashu","skillIdHex":"0x0a","levelOrFixed":2,"name":"쾌진격","effectAnimationClass":"frameScript-effect","requirements":["random placement/range present"]},{"ownerKey":"smashu","skillIdHex":"0x0b","levelOrFixed":3,"name":"쾌진격","effectAnimationClass":"frameScript-effect","requirements":["random placement/range present"]},{"ownerKey":"smashu","skillIdHex":"0x0c","levelOrFixed":4,"name":"쾌진격","effectAnimationClass":"frameScript-effect","requirements":["random placement/range present"]},{"ownerKey":"smashu","skillIdHex":"0x22","levelOrFixed":null,"name":"투신의 춤","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present","child motion loop present"]}]},{"id":"direct-placement-stream","description":"movement is represented by multiple placed child frames without an explicit motion delta","count":4,"total":52,"samples":[{"ownerKey":"rinshan","skillIdHex":"0x1b","levelOrFixed":null,"name":"맹호열지조","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time","random placement/range present"]},{"ownerKey":"rinshan","skillIdHex":"0x27","levelOrFixed":4,"name":"대폭진","effectAnimationClass":"init-frame-effect","requirements":["random placement/range present"]},{"ownerKey":"smashu","skillIdHex":"0x03","levelOrFixed":null,"name":"마구베기","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time"]},{"ownerKey":"smashu","skillIdHex":"0x04","levelOrFixed":null,"name":"마구베기","effectAnimationClass":"spawn-stream-effect","requirements":["runner must instantiate child objects over time"]}]},{"id":"palette-only-frameScript","description":"visual change is palette/frameScript driven rather than CNS motion","count":1,"total":52,"samples":[{"ownerKey":"smashu","skillIdHex":"0x20","levelOrFixed":null,"name":"열시섬","effectAnimationClass":"frameScript-effect","requirements":["palette transform effect; no CNS frame stream"]}]}],"summary":{"motionModel_explicit_motion_delta":32,"motionModel_loop_counter_placement_stream":9,"motionModel_sparkle_stream":6,"motionModel_direct_placement_stream":4,"motionModel_palette_only_frameScript":1},"classifiedRows":52},"notes":["This report proves browser-visible output for EXE-derived effect requirements.","It does not compare against original game captures or exact RNG particle positions.","Diagnostic coverage separates what static EXE/browser evidence can prove from original-runtime pixel equality.","Motion model coverage classifies rows without explicit motion deltas into EXE-grounded spawn/loop/sparkle/palette models.","Passing means the current web runner exposes diagnostics and draws colored pixels for active effect ticks."]}