{"version":1,"kind":"hwanse-battle-critical-presentation-review","source":["Hwanse2.exe","out/battle_sound_role_review.json","tools/build_battle_helper_child_script_review.py"],"status":"critical-palette-flash-script-grounded","consumer":{"consumerVaHex":"0x0040ef16","consumerEndVaHex":"0x0040efaa","flag":"attacker +0x62 bit 0x10","alternateWlkOperand":"stream +3","runnerVaHex":"0x00402321","childScriptTablePointerVaHex":"0x00442da1","childScriptTableOffsetHex":"0x150","childScriptIndex":84,"childScriptVaHex":"0x004b85cc"},"paletteBinding":{"opcode3bHandlerVaHex":"0x00406313","opcode38HandlerVaHex":"0x004060db","paletteBackupHelperVaHex":"0x004012c0","palettePointerVaHex":"0x004676e8","paletteBackupBufferVaHex":"0x00559da1","paletteDirtyFlagVaHex":"0x00559d98","meaning":"0x3b backs up palette RGB triplets, 0x38 mode 1 applies the bright flash range, and 0x38 mode 2 performs a fade/step sequence before the object exits."},"scriptSummary":{"childScriptVaHex":"0x004b85cc","stopReason":"destroy/end at 0x004b85fc","instructionCount":8,"opcodeCounts":{"0x00":1,"0x01":2,"0x06":1,"0x08":1,"0x38":2,"0x3b":1},"paletteRows":3,"yieldCount":2,"repeatLoopCount":1,"durationInterpretation":"The script has one immediate flash write, then a mode2 palette step at 0x004b85e8, a yield, and a repeat-loop count 8 back to that mode2 step. Exact wall-clock ms still depends on the display VM tick cadence."},"scriptRows":[{"vaHex":"0x004b85cc","opcode":"0x08","category":"init-block","length":12,"bytes":"08 00 00 00 02 14 08 01 ff 00 00 00","summary":"variable init block writes=2 stop=terminator","paletteStartHex":null,"paletteCountHex":null,"argHex":null,"repeatCount":null,"targetVaHex":null,"waitFrames":null},{"vaHex":"0x004b85d8","opcode":"0x3b","category":"palette-backup","length":4,"bytes":"3b 30 a0 00","summary":"backup palette range start=0x30 count=0xa0","paletteStartHex":"0x30","paletteCountHex":"0xa0","argHex":null,"repeatCount":null,"targetVaHex":"","waitFrames":null},{"vaHex":"0x004b85dc","opcode":"0x38","category":"palette-transform","length":8,"bytes":"38 01 30 a0 ff ff ff ff","summary":"palette set/flash mode1 range=0x30 count=0xa0 arg=0xffffffff","paletteStartHex":"0x30","paletteCountHex":"0xa0","argHex":"0xffffffff","repeatCount":null,"targetVaHex":"","waitFrames":null},{"vaHex":"0x004b85e4","opcode":"0x01","category":"yield","length":4,"bytes":"01 00 00 00","summary":"yield one VM tick and advance","paletteStartHex":null,"paletteCountHex":null,"argHex":null,"repeatCount":null,"targetVaHex":null,"waitFrames":null},{"vaHex":"0x004b85e8","opcode":"0x38","category":"palette-transform","length":8,"bytes":"38 02 30 a0 20 00 00 00","summary":"palette fade/step mode2 range=0x30 count=0xa0 steps=32","paletteStartHex":"0x30","paletteCountHex":"0xa0","argHex":"0x00000020","repeatCount":null,"targetVaHex":"","waitFrames":null},{"vaHex":"0x004b85f0","opcode":"0x01","category":"yield","length":4,"bytes":"01 00 00 00","summary":"yield one VM tick and advance","paletteStartHex":null,"paletteCountHex":null,"argHex":null,"repeatCount":null,"targetVaHex":null,"waitFrames":null},{"vaHex":"0x004b85f4","opcode":"0x06","category":"repeat-loop","length":8,"bytes":"06 00 08 00 e8 85 4b 00","summary":"repeat/control count=8, target=0x004b85e8; static walk records it but does not expand loop body","paletteStartHex":null,"paletteCountHex":null,"argHex":null,"repeatCount":8,"targetVaHex":"0x004b85e8","waitFrames":null},{"vaHex":"0x004b85fc","opcode":"0x00","category":"destroy/end","length":4,"bytes":"00 00 00 00","summary":"destroy/free display object candidate","paletteStartHex":null,"paletteCountHex":null,"argHex":null,"repeatCount":null,"targetVaHex":null,"waitFrames":null}],"consumerDisassembly":"  40ef16:\t8b 45 f8             \tmov    eax,DWORD PTR [ebp-0x8]\n  40ef19:\t33 c9                \txor    ecx,ecx\n  40ef1b:\t8a 48 62             \tmov    cl,BYTE PTR [eax+0x62]\n  40ef1e:\tf6 c1 10             \ttest   cl,0x10\n  40ef21:\t0f 84 83 00 00 00    \tje     0x40efaa\n  40ef27:\t8b 45 08             \tmov    eax,DWORD PTR [ebp+0x8]\n  40ef2a:\t8b 40 40             \tmov    eax,DWORD PTR [eax+0x40]\n  40ef2d:\t33 c9                \txor    ecx,ecx\n  40ef2f:\t8a 48 01             \tmov    cl,BYTE PTR [eax+0x1]\n  40ef32:\t83 f9 02             \tcmp    ecx,0x2\n  40ef35:\t0f 84 2a 00 00 00    \tje     0x40ef65\n  40ef3b:\t8b 45 08             \tmov    eax,DWORD PTR [ebp+0x8]\n  40ef3e:\t8b 40 40             \tmov    eax,DWORD PTR [eax+0x40]\n  40ef41:\t66 0f b6 40 03       \tmovzx  ax,BYTE PTR [eax+0x3]\n  40ef46:\t50                   \tpush   eax\n  40ef47:\t6a 00                \tpush   0x0\n  40ef49:\te8 25 c0 01 00       \tcall   0x42af73\n  40ef4e:\t83 c4 08             \tadd    esp,0x8\n  40ef51:\t66 a3 6c dd 59 00    \tmov    ds:0x59dd6c,ax\n  40ef57:\t33 c0                \txor    eax,eax\n  40ef59:\t66 a1 6c dd 59 00    \tmov    ax,ds:0x59dd6c\n  40ef5f:\t8b 4d 08             \tmov    ecx,DWORD PTR [ebp+0x8]\n  40ef62:\t89 41 58             \tmov    DWORD PTR [ecx+0x58],eax\n  40ef65:\t6a 02                \tpush   0x2\n  40ef67:\t68 21 23 40 00       \tpush   0x402321\n  40ef6c:\te8 ea 6b 02 00       \tcall   0x435b5b\n  40ef71:\t83 c4 08             \tadd    esp,0x8\n  40ef74:\t89 45 fc             \tmov    DWORD PTR [ebp-0x4],eax\n  40ef77:\t8b 45 08             \tmov    eax,DWORD PTR [ebp+0x8]\n  40ef7a:\t8b 4d fc             \tmov    ecx,DWORD PTR [ebp-0x4]\n  40ef7d:\t89 81 a0 00 00 00    \tmov    DWORD PTR [ecx+0xa0],eax\n  40ef83:\ta1 a1 2d 44 00       \tmov    eax,ds:0x442da1\n  40ef88:\t8b 80 50 01 00 00    \tmov    eax,DWORD PTR [eax+0x150]\n  40ef8e:\t8b 4d fc             \tmov    ecx,DWORD PTR [ebp-0x4]\n  40ef91:\t89 41 40             \tmov    DWORD PTR [ecx+0x40],eax\n  40ef94:\t8b 45 f8             \tmov    eax,DWORD PTR [ebp-0x8]\n  40ef97:\t33 c9                \txor    ecx,ecx\n  40ef99:\t8a 48 62             \tmov    cl,BYTE PTR [eax+0x62]\n  40ef9c:\t80 e1 ef             \tand    cl,0xef\n  40ef9f:\t8b 45 f8             \tmov    eax,DWORD PTR [ebp-0x8]\n  40efa2:\t88 48 62             \tmov    BYTE PTR [eax+0x62],cl\n  40efa5:\te9 74 00 00 00       \tjmp    0x40f01e","opcode3bDisassembly":"  406313:\t55                   \tpush   ebp\n  406314:\t8b ec                \tmov    ebp,esp\n  406316:\t53                   \tpush   ebx\n  406317:\t56                   \tpush   esi\n  406318:\t57                   \tpush   edi\n  406319:\t8b 45 08             \tmov    eax,DWORD PTR [ebp+0x8]\n  40631c:\t8b 40 40             \tmov    eax,DWORD PTR [eax+0x40]\n  40631f:\t8a 40 02             \tmov    al,BYTE PTR [eax+0x2]\n  406322:\t50                   \tpush   eax\n  406323:\t8b 45 08             \tmov    eax,DWORD PTR [ebp+0x8]\n  406326:\t8b 40 40             \tmov    eax,DWORD PTR [eax+0x40]\n  406329:\t8a 40 01             \tmov    al,BYTE PTR [eax+0x1]\n  40632c:\t50                   \tpush   eax\n  40632d:\te8 8e af ff ff       \tcall   0x4012c0\n  406332:\t83 c4 08             \tadd    esp,0x8\n  406335:\t8b 45 08             \tmov    eax,DWORD PTR [ebp+0x8]\n  406338:\t83 40 40 04          \tadd    DWORD PTR [eax+0x40],0x4\n  40633c:\t5f                   \tpop    edi\n  40633d:\t5e                   \tpop    esi\n  40633e:\t5b                   \tpop    ebx\n  40633f:\tc9                   \tleave\n  406340:\tc3                   \tret","opcode38Disassembly":"  4060db:\t55                   \tpush   ebp\n  4060dc:\t8b ec                \tmov    ebp,esp\n  4060de:\t83 ec 08             \tsub    esp,0x8\n  4060e1:\t53                   \tpush   ebx\n  4060e2:\t56                   \tpush   esi\n  4060e3:\t57                   \tpush   edi\n  4060e4:\t8b 45 08             \tmov    eax,DWORD PTR [ebp+0x8]\n  4060e7:\t8b 40 40             \tmov    eax,DWORD PTR [eax+0x40]\n  4060ea:\t33 c9                \txor    ecx,ecx\n  4060ec:\t8a 48 01             \tmov    cl,BYTE PTR [eax+0x1]\n  4060ef:\t89 4d f8             \tmov    DWORD PTR [ebp-0x8],ecx\n  4060f2:\te9 e0 00 00 00       \tjmp    0x4061d7\n  4060f7:\tc7 45 fc 00 00 00 00 \tmov    DWORD PTR [ebp-0x4],0x0\n  4060fe:\te9 03 00 00 00       \tjmp    0x406106\n  406103:\tff 45 fc             \tinc    DWORD PTR [ebp-0x4]\n  406106:\t8b 45 08             \tmov    eax,DWORD PTR [ebp+0x8]\n  406109:\t8b 40 40             \tmov    eax,DWORD PTR [eax+0x40]\n  40610c:\t33 c9                \txor    ecx,ecx\n  40610e:\t8a 48 02             \tmov    cl,BYTE PTR [eax+0x2]\n  406111:\t3b 4d fc             \tcmp    ecx,DWORD PTR [ebp-0x4]\n  406114:\t0f 86 17 00 00 00    \tjbe    0x406131\n  40611a:\t8b 45 08             \tmov    eax,DWORD PTR [ebp+0x8]\n  40611d:\t8b 40 40             \tmov    eax,DWORD PTR [eax+0x40]\n  406120:\t8b 40 04             \tmov    eax,DWORD PTR [eax+0x4]\n  406123:\t50                   \tpush   eax\n  406124:\te8 a9 af ff ff       \tcall   0x4010d2\n  406129:\t83 c4 04             \tadd    esp,0x4\n  40612c:\te9 d2 ff ff ff       \tjmp    0x406103\n  406131:\te9 c4 00 00 00       \tjmp    0x4061fa\n  406136:\tc7 45 fc 00 00 00 00 \tmov    DWORD PTR [ebp-0x4],0x0\n  40613d:\te9 03 00 00 00       \tjmp    0x406145\n  406142:\tff 45 fc             \tinc    DWORD PTR [ebp-0x4]\n  406145:\t8b 45 08             \tmov    eax,DWORD PTR [ebp+0x8]\n  406148:\t8b 40 40             \tmov    eax,DWORD PTR [eax+0x40]\n  40614b:\t33 c9                \txor    ecx,ecx\n  40614d:\t8a 48 07             \tmov    cl,BYTE PTR [eax+0x7]\n  406150:\t3b 4d fc             \tcmp    ecx,DWORD PTR [ebp-0x4]\n  406153:\t0f 86 2b 00 00 00    \tjbe    0x406184\n  406159:\t8b 45 08             \tmov    eax,DWORD PTR [ebp+0x8]\n  40615c:\t8b 40 40             \tmov    eax,DWORD PTR [eax+0x40]\n  40615f:\t83 c0 04             \tadd    eax,0x4\n  406162:\t50                   \tpush   eax\n  406163:\t8b 45 08             \tmov    eax,DWORD PTR [ebp+0x8]\n  406166:\t8b 40 40             \tmov    eax,DWORD PTR [eax+0x40]\n  406169:\t8a 40 03             \tmov    al,BYTE PTR [eax+0x3]\n  40616c:\t50                   \tpush   eax\n  40616d:\t8b 45 08             \tmov    eax,DWORD PTR [ebp+0x8]\n  406170:\t8b 40 40             \tmov    eax,DWORD PTR [eax+0x40]\n  406173:\t8a 40 02             \tmov    al,BYTE PTR [eax+0x2]\n  406176:\t50                   \tpush   eax\n  406177:\te8 9c b3 ff ff       \tcall   0x401518\n  40617c:\t83 c4 0c             \tadd    esp,0xc\n  40617f:\te9 be ff ff ff       \tjmp    0x406142\n  406184:\te9 71 00 00 00       \tjmp    0x4061fa\n  406189:\tc7 45 fc 00 00 00 00 \tmov    DWORD PTR [ebp-0x4],0x0\n  406190:\te9 03 00 00 00       \tjmp    0x406198\n  406195:\tff 45 fc             \tinc    DWORD PTR [ebp-0x4]\n  406198:\t8b 45 08             \tmov    eax,DWORD PTR [ebp+0x8]\n  40619b:\t8b 40 40             \tmov    eax,DWORD PTR [eax+0x40]\n  40619e:\t33 c9                \txor    ecx,ecx\n  4061a0:\t8a 48 04             \tmov    cl,BYTE PTR [eax+0x4]\n  4061a3:\t3b 4d fc             \tcmp    ecx,DWORD PTR [ebp-0x4]\n  4061a6:\t0f 86 21 00 00 00    \tjbe    0x4061cd\n  4061ac:\t8b 45 08             \tmov    eax,DWORD PTR [ebp+0x8]\n  4061af:\t8b 40 40             \tmov    eax,DWORD PTR [eax+0x40]\n  4061b2:\t8a 40 03             \tmov    al,BYTE PTR [eax+0x3]\n  4061b5:\t50                   \tpush   eax\n  4061b6:\t8b 45 08             \tmov    eax,DWORD PTR [ebp+0x8]\n  4061b9:\t8b 40 40             \tmov    eax,DWORD PTR [eax+0x40]\n  4061bc:\t8a 40 02             \tmov    al,BYTE PTR [eax+0x2]\n  4061bf:\t50                   \tpush   eax\n  4061c0:\te8 a5 b2 ff ff       \tcall   0x40146a\n  4061c5:\t83 c4 08             \tadd    esp,0x8\n  4061c8:\te9 c8 ff ff ff       \tjmp    0x406195\n  4061cd:\te9 28 00 00 00       \tjmp    0x4061fa\n  4061d2:\te9 23 00 00 00       \tjmp    0x4061fa\n  4061d7:\t83 7d f8 00          \tcmp    DWORD PTR [ebp-0x8],0x0\n  4061db:\t0f 84 16 ff ff ff    \tje     0x4060f7\n  4061e1:\t83 7d f8 01          \tcmp    DWORD PTR [ebp-0x8],0x1\n  4061e5:\t0f 84 4b ff ff ff    \tje     0x406136\n  4061eb:\t83 7d f8 02          \tcmp    DWORD PTR [ebp-0x8],0x2\n  4061ef:\t0f 84 94 ff ff ff    \tje     0x406189\n  4061f5:\te9 00 00 00 00       \tjmp    0x4061fa\n  4061fa:\t8b 45 08             \tmov    eax,DWORD PTR [ebp+0x8]\n  4061fd:\t83 40 40 08          \tadd    DWORD PTR [eax+0x40],0x8\n  406201:\t5f                   \tpop    edi\n  406202:\t5e                   \tpop    esi\n  406203:\t5b                   \tpop    ebx\n  406204:\tc9                   \tleave\n  406205:\tc3                   \tret","conclusions":["Critical/alternate result presentation is not a MISS/HIT text sprite path.","The 0x10 consumer plays alternate WLK id 14 and spawns generic runner 0x00402321.","The spawned child script [0x442da1 + 0x150] resolves to 0x004b85cc.","That child script backs up palette range 0x30 count 0xa0, applies palette transform mode 1 with arg 0xffffffff, then loops palette transform mode 2 with 32-step parameter eight times.","Therefore the critical white flash should be implemented as a palette/full-screen flash presentation; only exact wall-clock duration remains approximate in the browser runner."]}