{"version":1,"kind":"hwanse-battle-support-status-policy-review","source":["out/battle_skill_implementation_gap_review.json","out/battle_action_mapping.json","out/battle_result_family_dispatch_review.json","out/battle_status_transition_review.json","out/battle_result_flag_lifecycle_review.json","out/battle_recovery_item_effect_review.json"],"status":"confirmed","summary":{"rows":25,"owners":{"아타호":13,"린샹":7,"스마슈":5},"policyClasses":{"아타호 술 상태":10,"전투 흐름":3,"자세/명령":4,"회복":9,"린샹 고유 상태":1,"상태 해제":1,"원소 방어":1,"스마슈 고유 상태":1},"families":{"0x26":1,"0x28":2,"0x29":2,"0x2a":1,"0x2c":1,"0x01":3,"0x02":3,"0x20":4,"0x21":4,"0x24":1,"0x25":1,"0x23":1,"0x27":1,"0x2e":1,"0x22":1,"0x2f":1,"0x2d":1,"0x03":1},"staticAnalysisGapRows":0,"runnerAnimationGapRows":0},"interpretationNotes":["이 25개 행은 공격 프레임 누락이 아니라 support/status action이다.","도주/방어/몸감추기는 result-family apply가 no-op이거나 flow flag만 세우며, 실제 처리는 command/action layer에서 분리된다.","회복 계열은 family 0x20/0x23=HP, 0x21=MP, 0x22=독/마비 해제 경로로 분류한다.","술/도발/눈요기/수경은 actor status bytes(+0x2a, +0x65, +0x18, +0x1a, +0x2f..+0x31)를 갱신하는 정책 행이다."],"statusProducerGroups":[{"idRange":"1..5","group":"전투 자세","ids":"보통, 돌격, 방어, 선제, 반격","producer":"플레이어 PgUp/PgDn 자세 변경 루틴","relationToEffect":"+0x6c 상태 효과값과 무관하게 actor +0x2a를 직접 갱신한다."},{"idRange":"6..10","group":"아타호 술취함","ids":"얼근히 취함, 만취함, 정신없이 취함, 대호, 곤드레만드레","producer":"술 마시기/취호권 전용 루틴 0x00434a4a 및 부작용 검사 0x0043512e","relationToEffect":"+0x6c 없이 actor +0x2a를 직접 갱신한다. 곤드레만드레는 부작용 경로에서 졸림으로 전환될 수 있다."},{"idRange":"11..15","group":"스마슈 눈요기","ids":"흥분, 분노, 폭발직전, 대폭발, 푸쉬","producer":"눈요기 전용 루틴 0x00434cbb","relationToEffect":"+0x6c 없이 actor +0x2a를 직접 갱신한다."},{"idRange":"16..20","group":"린샹 도발","ids":"위압적인 자세, 노발충천, 무뚝뚝한 표정, 여왕님, 피곤함","producer":"도발 전용 루틴 0x00434d8d","relationToEffect":"+0x6c 없이 actor +0x2a를 직접 갱신한다."},{"idRange":"21..27","group":"일반 상태이상/행동불가","ids":"졸림, 행동정지, 넘어짐, 휙 날아감, 독, 마비, 기절","producer":"공격 부가효과 +0x6c 변환 루틴 0x00434e84, HP 0 처리, 일부 캐릭터 고유 부작용","relationToEffect":"+0x6c는 이 그룹 중 21..26만 생산한다. 기절 27은 HP 0 경로, 졸림 21은 아타호 술취함 부작용 경로에서도 생산된다."}],"resultFlags":[{"bit":"0x01","scope":"long-lived, one-turn","name":"one-turn action/display latch","status":"확정","producer":"status results 1..3 and paralysis recovery set this as a temporary action-block marker.","consumer":"0x40d95b battle-order cleanup restores +0x2a from +0x66, clears +0x64, then clears bit 0x01.","engineMeaning":"넘어짐/휙 날아감/행동정지 같은 1턴 행동불가 결과를 다음 battle-order pass까지 유지한다.","open":"UI label은 상태 id(+0x2a)가 담당한다. bit 0x01 자체는 표시명이 아니라 1턴 action/display latch다."},{"bit":"0x02","scope":"long-lived, timed","name":"timed command/action lock","status":"확정","producer":"마비/졸림/푸쉬/곤드레만드레 계열이 +0x64 timer와 함께 세운다.","consumer":"0x43512e decrements/checks +0x64, restores +0x2a from +0x66, clears +0x64 and bit 0x02 when recovery passes.","engineMeaning":"action script gate 0x40db36 tests 0x83, so 0x02 actors skip/jump command flow while locked.","open":"UI label은 상태 id(+0x2a)가 담당한다. bit 0x02 자체는 +0x64 timer/random recovery가 해제하는 command/action lock이다."},{"bit":"0x04","scope":"battle-flow request, per-hit reset","name":"family 1 flow fan-out / escape marker","status":"고신뢰","producer":"result-family table 0x546970 index 1 calls 0x43485e, which ORs bit 0x04. Current extracted action records use family 1 only for 도주.","consumer":"0x40dcf7 tests bit 0x04 and marks all eligible actors or the current actor with +0x5b=1, +0x5c=3, +0x60=6, then sets global 0x59e334=2. Hit-unit reset clears it with &= 0xc3.","engineMeaning":"타격/크리티컬/상태 플래그가 아니라 도주 계열에서 battle-flow/display fan-out을 요청하는 마커다.","open":"+0x5b/+0x5c/+0x60의 필드 역할은 battle_actor_display_state_review에서 각각 activation latch / display bitmask / phase selector로 확정됐다. 이 흐름에서는 +0x5c=0x3, +0x60=6인 도주 fan-out phase다."},{"bit":"0x08","scope":"per-hit result","name":"guard/glancing chip-damage branch","status":"확정","producer":"0x434218 hit/avoid branch sets target bit 0x08 when avoid beats hit but not enough for full miss.","consumer":"0x43414d turns it into random 1..3 damage and clears target +0x6c status effect id. Normal result sound/effect path also checks target 0x28.","engineMeaning":"MISS는 아니지만 일반 damage formula 대신 1..3의 가드/스침성 chip damage로 처리되는 결과.","open":"target result script 0x004545b4가 WLK id 11, helper 0x16(dec 22), btl_efc F56..F59, target frame 0을 선택한다. 사용자 관찰처럼 MISS 라벨 없이 normal frame에 1자리수 데미지와 약한 '팅' 계열 효과음만 뜬다."},{"bit":"0x10","scope":"per-hit result","name":"critical presentation / alternate damage branch","status":"확정","producer":"0x4343db luck-side comparison and random threshold set attacker bit 0x10.","consumer":"0x43414d selects alternate damage formula, 0x434737 may clear it if damage is too low, and 0x40ef1b consumes it for alternate sound/effect then clears it.","engineMeaning":"크리티컬 presentation에 대응하는 1타성 결과 플래그. 일반 타격과 다른 데미지식/결과음/섬광성 이펙트 선택에 쓰인다.","open":"전용 result sound/helper 경로, WLK id 14 선택, palette flash/fade child script는 확정됐다. 남은 것은 브라우저 러너에서 VM tick을 wall-clock ms로 환산하는 미세 타이밍이다."},{"bit":"0x20","scope":"per-hit result","name":"full miss / HP-apply skip","status":"고신뢰","producer":"0x434218 hit/avoid branch sets target bit 0x20 when avoid greatly exceeds hit.","consumer":"0x4340ae immediately returns before HP damage/recovery apply. Normal result sound/effect path also checks target 0x28.","engineMeaning":"결과 적용 자체를 건너뛰는 완전 회피/미스 계열.","open":"MISS 렌더링/사운드가 별도 VM object에서 붙는 지점은 별도 display layer 추적 필요."},{"bit":"0x40","scope":"long-lived battle state","name":"HP zero / knockout","status":"확정","producer":"0x4353f8 HP damage apply sets bit 0x40 when current HP reaches zero.","consumer":"0x434e84 maps it to +0x2a status id 27 기절. Full reset 0x4354eb preserves 0x40 with &= 0xc0. Refresh water 0x43583c and beast stone 0x43590d overwrite +0x62=0x01 when target has 0x80, clearing 0x40/0x80 together.","engineMeaning":"기절/전투불능 상태. HP0 후 표시/비활성 phase에서 0x80과 결합되고, 부활 소모품에서 active one-turn flag 0x01로 재초기화된다.","open":"전투 종료 후 전체 party 회복/여관/세이브포인트가 같은 helper를 쓰는지는 별도 추적 필요."},{"bit":"0x80","scope":"long-lived actor/display eligibility","name":"display wait skip / target-excluded actor","status":"고신뢰","producer":"phase 4 display transition at 0x40d57f/0x40d61d sets bit 0x80 after scheduling +0x5b=1, +0x5c=0x20, +0x60=4. Script byte OR opcode can also propagate 0x80 to actor sets.","consumer":"battle order, target picker, action script loops, display wait loop, and HP recovery result display skip actors with bit 0x80. Refresh water 0x43583c and beast stone 0x43590d clear it by overwriting +0x62=0x01. Hit/full resets preserve it.","engineMeaning":"대상 선택/행동 순서 제외뿐 아니라 display wait 종료에도 직접 쓰이는 actor skip/completed bit. 부활 소모품에서는 비활성/기절 actor를 다시 active actor로 되돌리는 gate로 쓰인다.","open":"소모품이 아닌 actor 생성/전투 종료/scene 전환에서 0x80을 재초기화하는 루틴은 추가 추적 대상이다."}],"rows":[{"ownerKey":"ataho","ownerName":"아타호","skillIdHex":"0x05","skillName":"마시기","payloadVaHex":"0x004d2e04","mpCost":0,"effectCount":1,"targetScopes":[1],"families":[38],"policyClasses":["아타호 술 상태"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 01 26 01 00","amountByte0":0,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":38,"familyHex":"0x26","statusEffect":0,"policy":"아타호 술 상태","label":"취기 누적","effect":"random(8)+1을 4회 합산해 취기/주량 경험치에 더한다.","detail":"마시기 record 0x004d24cc. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다.","applyRoutine":"0x00434a4a","dispatchRole":"Ataho drunk accumulator / drunk-state promotion path","dispatchNote":"아타호 취기 누적 family. 0x434a4a class 0x26: random(8)+1 repeated 4 times, 취기 +0x65와 주량 경험치 +0x1a 누적."}]},{"ownerKey":"ataho","ownerName":"아타호","skillIdHex":"0x06","skillName":"마시기","payloadVaHex":"0x004d2e22","mpCost":0,"effectCount":1,"targetScopes":[1],"families":[40],"policyClasses":["아타호 술 상태"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 01 28 01 00","amountByte0":0,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":40,"familyHex":"0x28","statusEffect":0,"policy":"아타호 술 상태","label":"취기 누적","effect":"random(32)+1을 2회 합산해 취기/주량 경험치에 더한다.","detail":"마시기 record 0x004d24d4, 염가열소/취호염무/화주 계열 천조족. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다.","applyRoutine":"0x00434a4a","dispatchRole":"Ataho drunk accumulator / drunk-state promotion path","dispatchNote":"아타호 취기 누적 family. 0x434a4a class 0x28: random(0x20)+1 repeated 2 times, 취기 +0x65와 주량 경험치 +0x1a 누적."}]},{"ownerKey":"ataho","ownerName":"아타호","skillIdHex":"0x07","skillName":"마시기","payloadVaHex":"0x004d2e40","mpCost":0,"effectCount":1,"targetScopes":[1],"families":[41],"policyClasses":["아타호 술 상태"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 01 29 01 00","amountByte0":0,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":41,"familyHex":"0x29","statusEffect":0,"policy":"아타호 술 상태","label":"취기 누적","effect":"random(20)+1을 4회 합산해 취기/주량 경험치에 더한다.","detail":"마시기 record 0x004d24dc, 인사불성 철권/노익장 대폭발/귀신살 계열 천조족. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다.","applyRoutine":"0x00434a4a","dispatchRole":"Ataho drunk accumulator / drunk-state promotion path","dispatchNote":"아타호 취기 누적 family. 0x434a4a class 0x29: random(0x14)+1 repeated 4 times, 취기 +0x65와 주량 경험치 +0x1a 누적."}]},{"ownerKey":"ataho","ownerName":"아타호","skillIdHex":"0x08","skillName":"마시기","payloadVaHex":"0x004d2e5e","mpCost":0,"effectCount":1,"targetScopes":[1],"families":[42],"policyClasses":["아타호 술 상태"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 01 2a 01 00","amountByte0":0,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":42,"familyHex":"0x2a","statusEffect":0,"policy":"아타호 술 상태","label":"취기 누적","effect":"random(12)+1을 8회 합산해 취기/주량 경험치에 더한다.","detail":"마시기 record 0x004d24e4. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다.","applyRoutine":"0x00434a4a","dispatchRole":"Ataho drunk accumulator / drunk-state promotion path","dispatchNote":"아타호 취기 누적 family. 0x434a4a class 0x2a: random(0x0c)+1 repeated 8 times, 취기 +0x65와 주량 경험치 +0x1a 누적."}]},{"ownerKey":"ataho","ownerName":"아타호","skillIdHex":"0x09","skillName":"마시기","payloadVaHex":"0x004d2e7c","mpCost":0,"effectCount":1,"targetScopes":[1],"families":[44],"policyClasses":["아타호 술 상태"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 01 2c 01 00","amountByte0":0,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":44,"familyHex":"0x2c","statusEffect":0,"policy":"아타호 술 상태","label":"취기 누적","effect":"random(20)+1을 8회 합산해 취기/주량 경험치에 더한다.","detail":"마시기 record 0x004d24ec. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다.","applyRoutine":"0x00434a4a","dispatchRole":"Ataho drunk accumulator / drunk-state promotion path","dispatchNote":"아타호 취기 누적 family. 0x434a4a class 0x2c: random(0x14)+1 repeated 8 times, 취기 +0x65와 주량 경험치 +0x1a 누적."}]},{"ownerKey":"ataho","ownerName":"아타호","skillIdHex":"0x3a","skillName":"도주","payloadVaHex":"0x004d35c2","mpCost":0,"effectCount":1,"targetScopes":[1],"families":[1],"policyClasses":["전투 흐름"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 01 01 01 00","amountByte0":0,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":1,"familyHex":"0x01","statusEffect":0,"policy":"전투 흐름","label":"도주 flow request","effect":"+0x62 bit 0x04를 세워 도주 fan-out phase를 요청한다.","detail":"Only 도주 uses this family in the current action records. It sets +0x62 bit 0x04, then script opcode 0x40dcf7 fans out +0x5b/+0x5c/+0x60 and global 0x59e334=2.","applyRoutine":"0x0043485e","dispatchRole":"sets actor +0x62 bit 0x04; flow fan-out request","dispatchNote":"Only 도주 uses this family in the current action records. It sets +0x62 bit 0x04, then script opcode 0x40dcf7 fans out +0x5b/+0x5c/+0x60 and global 0x59e334=2."}]},{"ownerKey":"ataho","ownerName":"아타호","skillIdHex":"0x3b","skillName":"방어","payloadVaHex":"0x004d35e0","mpCost":0,"effectCount":1,"targetScopes":[1],"families":[2],"policyClasses":["자세/명령"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 01 02 01 00","amountByte0":0,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":2,"familyHex":"0x02","statusEffect":0,"policy":"자세/명령","label":"방어 command","effect":"result-family apply는 no-op이다. 방어 보정은 command/action layer에서 처리된다.","detail":"현재 action records에서 아타호/린샹/스마슈 방어만 사용한다. 방어의 실제 자세/계수 반영은 command/action layer 또는 actor mode 쪽으로 분리해서 봐야 한다.","applyRoutine":"0x004357d0","dispatchRole":"no-op/default result family","dispatchNote":"방어-only family in current records. The result dispatcher is intentionally no-op; defensive behavior is carried by command/action-layer state, not by a result apply routine."}]},{"ownerKey":"ataho","ownerName":"아타호","skillIdHex":"0x3c","skillName":"기합일발","payloadVaHex":"0x004d35fe","mpCost":5,"effectCount":1,"targetScopes":[1],"families":[32],"policyClasses":["회복"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"6e 00 00 00 01 20 01 00","amountByte0":110,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":32,"familyHex":"0x20","statusEffect":0,"policy":"회복","label":"HP 회복","effect":"payload byte0 값을 HP 회복량으로 사용하고 max HP에서 clamp한다.","detail":"Recovery/apply family via 0x43487a.","applyRoutine":"0x0043487a -> 0x00435295","dispatchRole":"HP recovery / revive-style apply path","dispatchNote":"Recovery/apply family via 0x43487a."}]},{"ownerKey":"ataho","ownerName":"아타호","skillIdHex":"0x3d","skillName":"천조족","payloadVaHex":"0x004d361c","mpCost":1,"effectCount":2,"targetScopes":[1],"families":[33,36],"policyClasses":["아타호 술 상태","회복"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 01 24 01 00","amountByte0":0,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":33,"familyHex":"0x21","statusEffect":0,"policy":"회복","label":"MP 회복","effect":"payload byte0 값을 MP 회복량으로 사용하고 max MP에서 clamp한다.","detail":"Recovery/apply family via 0x43487a.","applyRoutine":"0x0043487a -> 0x00435356","dispatchRole":"HP recovery / revive-style apply path","dispatchNote":"Recovery/apply family via 0x43487a."},{"unitIndex":1,"unitHex":"32 00 00 00 01 21 01 00","amountByte0":50,"targetScope":null,"targetScopeHex":null,"targetScopeLabel":null,"family":36,"familyHex":"0x24","statusEffect":null,"policy":"아타호 술 상태","label":"취기 누적","effect":"random(8)+1을 2회 합산해 취기/주량 경험치에 더한다.","detail":"조금 취한 철권/술 계열 천조족. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다.","applyRoutine":"0x00434a4a","dispatchRole":"Ataho drunk accumulator / drunk-state promotion path","dispatchNote":"아타호 취기 누적 family. 0x434a4a class 0x24: random(8)+1 repeated 2 times, 취기 +0x65와 주량 경험치 +0x1a 누적."}]},{"ownerKey":"ataho","ownerName":"아타호","skillIdHex":"0x3e","skillName":"천조족","payloadVaHex":"0x004d3642","mpCost":1,"effectCount":2,"targetScopes":[1],"families":[33,37],"policyClasses":["아타호 술 상태","회복"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 01 25 01 00","amountByte0":0,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":33,"familyHex":"0x21","statusEffect":0,"policy":"회복","label":"MP 회복","effect":"payload byte0 값을 MP 회복량으로 사용하고 max MP에서 clamp한다.","detail":"Recovery/apply family via 0x43487a.","applyRoutine":"0x0043487a -> 0x00435356","dispatchRole":"HP recovery / revive-style apply path","dispatchNote":"Recovery/apply family via 0x43487a."},{"unitIndex":1,"unitHex":"3c 00 00 00 01 21 01 00","amountByte0":60,"targetScope":null,"targetScopeHex":null,"targetScopeLabel":null,"family":37,"familyHex":"0x25","statusEffect":null,"policy":"아타호 술 상태","label":"취기 누적","effect":"random(32)+1을 1회 적용해 취기/주량 경험치에 더한다.","detail":"지옥 다리후리기/주구격/노주 계열 천조족. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다.","applyRoutine":"0x00434a4a","dispatchRole":"Ataho drunk accumulator / drunk-state promotion path","dispatchNote":"아타호 취기 누적 family. 0x434a4a class 0x25: random(0x20)+1 repeated 1 time, 취기 +0x65와 주량 경험치 +0x1a 누적."}]},{"ownerKey":"ataho","ownerName":"아타호","skillIdHex":"0x3f","skillName":"주 백약지장","payloadVaHex":"0x004d3668","mpCost":5,"effectCount":2,"targetScopes":[1],"families":[35,39],"policyClasses":["아타호 술 상태","회복"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 01 27 01 00","amountByte0":0,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":35,"familyHex":"0x23","statusEffect":0,"policy":"회복","label":"HP 회복","effect":"주 백약지장용 HP 회복 family. payload byte0 값을 HP 회복량으로 사용한다.","detail":"Recovery/apply family via 0x43487a.","applyRoutine":"0x0043487a -> 0x00435295","dispatchRole":"HP recovery / revive-style apply path","dispatchNote":"Recovery/apply family via 0x43487a."},{"unitIndex":1,"unitHex":"91 00 00 00 01 23 01 00","amountByte0":145,"targetScope":null,"targetScopeHex":null,"targetScopeLabel":null,"family":39,"familyHex":"0x27","statusEffect":null,"policy":"아타호 술 상태","label":"취기 누적","effect":"random(12)+1을 4회 합산해 취기/주량 경험치에 더한다.","detail":"만취한 철권/주 백약지장. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다.","applyRoutine":"0x00434a4a","dispatchRole":"Ataho drunk accumulator / drunk-state promotion path","dispatchNote":"아타호 취기 누적 family. 0x434a4a class 0x27: random(0x0c)+1 repeated 4 times, 취기 +0x65와 주량 경험치 +0x1a 누적."}]},{"ownerKey":"ataho","ownerName":"아타호","skillIdHex":"0x40","skillName":"천조족","payloadVaHex":"0x004d368e","mpCost":1,"effectCount":2,"targetScopes":[1],"families":[33,40],"policyClasses":["아타호 술 상태","회복"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 01 28 01 00","amountByte0":0,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":33,"familyHex":"0x21","statusEffect":0,"policy":"회복","label":"MP 회복","effect":"payload byte0 값을 MP 회복량으로 사용하고 max MP에서 clamp한다.","detail":"Recovery/apply family via 0x43487a.","applyRoutine":"0x0043487a -> 0x00435356","dispatchRole":"HP recovery / revive-style apply path","dispatchNote":"Recovery/apply family via 0x43487a."},{"unitIndex":1,"unitHex":"46 00 00 00 01 21 01 00","amountByte0":70,"targetScope":null,"targetScopeHex":null,"targetScopeLabel":null,"family":40,"familyHex":"0x28","statusEffect":null,"policy":"아타호 술 상태","label":"취기 누적","effect":"random(32)+1을 2회 합산해 취기/주량 경험치에 더한다.","detail":"마시기 record 0x004d24d4, 염가열소/취호염무/화주 계열 천조족. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다.","applyRoutine":"0x00434a4a","dispatchRole":"Ataho drunk accumulator / drunk-state promotion path","dispatchNote":"아타호 취기 누적 family. 0x434a4a class 0x28: random(0x20)+1 repeated 2 times, 취기 +0x65와 주량 경험치 +0x1a 누적."}]},{"ownerKey":"ataho","ownerName":"아타호","skillIdHex":"0x41","skillName":"천조족","payloadVaHex":"0x004d36b4","mpCost":1,"effectCount":2,"targetScopes":[1],"families":[33,41],"policyClasses":["아타호 술 상태","회복"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 01 29 01 00","amountByte0":0,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":33,"familyHex":"0x21","statusEffect":0,"policy":"회복","label":"MP 회복","effect":"payload byte0 값을 MP 회복량으로 사용하고 max MP에서 clamp한다.","detail":"Recovery/apply family via 0x43487a.","applyRoutine":"0x0043487a -> 0x00435356","dispatchRole":"HP recovery / revive-style apply path","dispatchNote":"Recovery/apply family via 0x43487a."},{"unitIndex":1,"unitHex":"50 00 00 00 01 21 01 00","amountByte0":80,"targetScope":null,"targetScopeHex":null,"targetScopeLabel":null,"family":41,"familyHex":"0x29","statusEffect":null,"policy":"아타호 술 상태","label":"취기 누적","effect":"random(20)+1을 4회 합산해 취기/주량 경험치에 더한다.","detail":"마시기 record 0x004d24dc, 인사불성 철권/노익장 대폭발/귀신살 계열 천조족. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다.","applyRoutine":"0x00434a4a","dispatchRole":"Ataho drunk accumulator / drunk-state promotion path","dispatchNote":"아타호 취기 누적 family. 0x434a4a class 0x29: random(0x14)+1 repeated 4 times, 취기 +0x65와 주량 경험치 +0x1a 누적."}]},{"ownerKey":"rinshan","ownerName":"린샹","skillIdHex":"0x05","skillName":"도발","payloadVaHex":"0x004d3752","mpCost":0,"effectCount":1,"targetScopes":[1],"families":[46],"policyClasses":["린샹 고유 상태"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"0a fa fa 00 01 2e 01 00","amountByte0":10,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":46,"familyHex":"0x2e","statusEffect":0,"policy":"린샹 고유 상태","label":"도발 random mode","effect":"random(4)+0x10으로 16..19 모드를 고르고, 같은 상태면 피곤함으로 전환한다.","detail":"16..19(위압적인 자세/노발충천/무뚝뚝한 표정/여왕님) 중 하나를 고른다. 현재 상태와 같은 값이 다시 나오면 20 피곤함으로 전환하고 +0x64=random(2)+2, +0x62 bit 0x02 timed lock을 건다.","applyRoutine":"0x00434d8d","dispatchRole":"Rinshan taunt randomized state path","dispatchNote":"린샹 도발 family. random(4)+0x10으로 16..19를 고르고, 현재 상태와 같은 값이 다시 나오면 20 피곤함 + timed lock을 건다."}]},{"ownerKey":"rinshan","ownerName":"린샹","skillIdHex":"0x2f","skillName":"도주","payloadVaHex":"0x004d3d86","mpCost":0,"effectCount":1,"targetScopes":[1],"families":[1],"policyClasses":["전투 흐름"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 01 01 01 00","amountByte0":0,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":1,"familyHex":"0x01","statusEffect":0,"policy":"전투 흐름","label":"도주 flow request","effect":"+0x62 bit 0x04를 세워 도주 fan-out phase를 요청한다.","detail":"Only 도주 uses this family in the current action records. It sets +0x62 bit 0x04, then script opcode 0x40dcf7 fans out +0x5b/+0x5c/+0x60 and global 0x59e334=2.","applyRoutine":"0x0043485e","dispatchRole":"sets actor +0x62 bit 0x04; flow fan-out request","dispatchNote":"Only 도주 uses this family in the current action records. It sets +0x62 bit 0x04, then script opcode 0x40dcf7 fans out +0x5b/+0x5c/+0x60 and global 0x59e334=2."}]},{"ownerKey":"rinshan","ownerName":"린샹","skillIdHex":"0x30","skillName":"방어","payloadVaHex":"0x004d3da4","mpCost":0,"effectCount":1,"targetScopes":[1],"families":[2],"policyClasses":["자세/명령"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 01 02 01 00","amountByte0":0,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":2,"familyHex":"0x02","statusEffect":0,"policy":"자세/명령","label":"방어 command","effect":"result-family apply는 no-op이다. 방어 보정은 command/action layer에서 처리된다.","detail":"현재 action records에서 아타호/린샹/스마슈 방어만 사용한다. 방어의 실제 자세/계수 반영은 command/action layer 또는 actor mode 쪽으로 분리해서 봐야 한다.","applyRoutine":"0x004357d0","dispatchRole":"no-op/default result family","dispatchNote":"방어-only family in current records. The result dispatcher is intentionally no-op; defensive behavior is carried by command/action-layer state, not by a result apply routine."}]},{"ownerKey":"rinshan","ownerName":"린샹","skillIdHex":"0x31","skillName":"기공회복","payloadVaHex":"0x004d3dc2","mpCost":5,"effectCount":1,"targetScopes":[9],"families":[32],"policyClasses":["회복"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"82 00 00 00 09 20 01 00","amountByte0":130,"targetScope":9,"targetScopeHex":"0x09","targetScopeLabel":"아군 1명","family":32,"familyHex":"0x20","statusEffect":0,"policy":"회복","label":"HP 회복","effect":"payload byte0 값을 HP 회복량으로 사용하고 max HP에서 clamp한다.","detail":"Recovery/apply family via 0x43487a.","applyRoutine":"0x0043487a -> 0x00435295","dispatchRole":"HP recovery / revive-style apply path","dispatchNote":"Recovery/apply family via 0x43487a."}]},{"ownerKey":"rinshan","ownerName":"린샹","skillIdHex":"0x32","skillName":"기공독치료","payloadVaHex":"0x004d3de0","mpCost":3,"effectCount":1,"targetScopes":[9],"families":[34],"policyClasses":["상태 해제"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 09 22 01 00","amountByte0":0,"targetScope":9,"targetScopeHex":"0x09","targetScopeLabel":"아군 1명","family":34,"familyHex":"0x22","statusEffect":0,"policy":"상태 해제","label":"독/마비 치료","effect":"독 또는 마비 상태면 +0x66의 prior mode를 복원하고 timer/lock flag를 해제한다.","detail":"Special recovery/timed-status path via 0x43497d.","applyRoutine":"0x0043497d","dispatchRole":"timed-status recovery/special recovery path","dispatchNote":"Special recovery/timed-status path via 0x43497d."}]},{"ownerKey":"rinshan","ownerName":"린샹","skillIdHex":"0x33","skillName":"기공대회복","payloadVaHex":"0x004d3dfe","mpCost":10,"effectCount":1,"targetScopes":[5],"families":[32],"policyClasses":["회복"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"78 00 00 00 05 20 01 00","amountByte0":120,"targetScope":5,"targetScopeHex":"0x05","targetScopeLabel":"아군 전체","family":32,"familyHex":"0x20","statusEffect":0,"policy":"회복","label":"HP 회복","effect":"payload byte0 값을 HP 회복량으로 사용하고 max HP에서 clamp한다.","detail":"Recovery/apply family via 0x43487a.","applyRoutine":"0x0043487a -> 0x00435295","dispatchRole":"HP recovery / revive-style apply path","dispatchNote":"Recovery/apply family via 0x43487a."}]},{"ownerKey":"rinshan","ownerName":"린샹","skillIdHex":"0x34","skillName":"수경","payloadVaHex":"0x004d3e1c","mpCost":15,"effectCount":1,"targetScopes":[1],"families":[47],"policyClasses":["원소 방어"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 01 2f 01 00","amountByte0":0,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":47,"familyHex":"0x2f","statusEffect":0,"policy":"원소 방어","label":"수경","effect":"+0x2f/+0x30/+0x31의 화염/수빙/풍뢰 guard bytes를 reset한다.","detail":"수경 레코드만 이 family를 사용한다. damage formula는 actor +0x1c + family를 가변 index로 읽으므로 family 0x13/0x14/0x15가 actor +0x2f/+0x30/+0x31에 대응한다. action payload 기술명 집계가 0x13=화염, 0x14=수빙, 0x15=풍뢰를 지지한다.","applyRoutine":"0x00434e29","dispatchRole":"Sukyeong element-guard reset path","dispatchNote":"수경 family. +0x2f/+0x30/+0x31 fireGuard/waterIceGuard/windThunderGuard bytes를 clear/reset한다. damage formula의 actor+0x1c+family 경로와 action payload family 0x13/0x14/0x15 이름 대조로 순서를 확정했다."}]},{"ownerKey":"smashu","ownerName":"스마슈","skillIdHex":"0x23","skillName":"도주","payloadVaHex":"0x004d42f6","mpCost":0,"effectCount":1,"targetScopes":[1],"families":[1],"policyClasses":["전투 흐름"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 01 01 01 00","amountByte0":0,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":1,"familyHex":"0x01","statusEffect":0,"policy":"전투 흐름","label":"도주 flow request","effect":"+0x62 bit 0x04를 세워 도주 fan-out phase를 요청한다.","detail":"Only 도주 uses this family in the current action records. It sets +0x62 bit 0x04, then script opcode 0x40dcf7 fans out +0x5b/+0x5c/+0x60 and global 0x59e334=2.","applyRoutine":"0x0043485e","dispatchRole":"sets actor +0x62 bit 0x04; flow fan-out request","dispatchNote":"Only 도주 uses this family in the current action records. It sets +0x62 bit 0x04, then script opcode 0x40dcf7 fans out +0x5b/+0x5c/+0x60 and global 0x59e334=2."}]},{"ownerKey":"smashu","ownerName":"스마슈","skillIdHex":"0x24","skillName":"방어","payloadVaHex":"0x004d4314","mpCost":0,"effectCount":1,"targetScopes":[1],"families":[2],"policyClasses":["자세/명령"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 01 02 01 00","amountByte0":0,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":2,"familyHex":"0x02","statusEffect":0,"policy":"자세/명령","label":"방어 command","effect":"result-family apply는 no-op이다. 방어 보정은 command/action layer에서 처리된다.","detail":"현재 action records에서 아타호/린샹/스마슈 방어만 사용한다. 방어의 실제 자세/계수 반영은 command/action layer 또는 actor mode 쪽으로 분리해서 봐야 한다.","applyRoutine":"0x004357d0","dispatchRole":"no-op/default result family","dispatchNote":"방어-only family in current records. The result dispatcher is intentionally no-op; defensive behavior is carried by command/action-layer state, not by a result apply routine."}]},{"ownerKey":"smashu","ownerName":"스마슈","skillIdHex":"0x25","skillName":"눈요기","payloadVaHex":"0x004d4332","mpCost":0,"effectCount":1,"targetScopes":[1],"families":[45],"policyClasses":["스마슈 고유 상태"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"00 00 00 00 01 2d 01 00","amountByte0":0,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":45,"familyHex":"0x2d","statusEffect":0,"policy":"스마슈 고유 상태","label":"눈요기 progression","effect":"흥분 -> 분노 -> 폭발직전 -> 대폭발 -> 푸쉬 상태를 진행한다.","detail":"처음이면 11 흥분으로 진입한다. 11..13은 다음 단계로 진행한다. 14 대폭발에서 다시 걸리면 15 푸쉬로 전환하고 +0x64=random(2)+2, +0x62 bit 0x02 timed command/action lock을 건다.","applyRoutine":"0x00434cbb","dispatchRole":"Smash eye-candy state progression path","dispatchNote":"스마슈 눈요기 family. +0x2a 11..14를 진행시키고 14 이후 15 푸쉬 + timed lock(+0x62 bit 0x02)을 건다."}]},{"ownerKey":"smashu","ownerName":"스마슈","skillIdHex":"0x26","skillName":"인법·몸감추기","payloadVaHex":"0x004d4350","mpCost":1,"effectCount":1,"targetScopes":[1],"families":[3],"policyClasses":["자세/명령"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"46 00 00 00 01 03 01 00","amountByte0":70,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":3,"familyHex":"0x03","statusEffect":0,"policy":"자세/명령","label":"인법·몸감추기 command","effect":"result-family apply는 no-op이다. 회피/표시 상태는 별도 command/action layer로 분리된다.","detail":"스마슈/공용 몸감추기 계열만 사용한다. 눈요기와 달리 이 family 자체가 +0x2a를 갱신하지 않는다.","applyRoutine":"0x004357d0","dispatchRole":"no-op/default result family","dispatchNote":"인법·몸감추기-only family in current records. The result dispatcher is intentionally no-op; visual/state behavior is carried outside result-family apply."}]},{"ownerKey":"smashu","ownerName":"스마슈","skillIdHex":"0x27","skillName":"신격방어","payloadVaHex":"0x004d436e","mpCost":10,"effectCount":1,"targetScopes":[1],"families":[32],"policyClasses":["회복"],"analysisStatus":"confirmed-support/status-policy","runnerTreatment":"공격 타임라인 누락이 아니라 battle formula/status UI 경로에서 처리해야 한다.","units":[{"unitIndex":0,"unitHex":"7d 00 00 00 01 20 01 00","amountByte0":125,"targetScope":1,"targetScopeHex":"0x01","targetScopeLabel":"자기 자신/setup","family":32,"familyHex":"0x20","statusEffect":0,"policy":"회복","label":"HP 회복","effect":"payload byte0 값을 HP 회복량으로 사용하고 max HP에서 clamp한다.","detail":"Recovery/apply family via 0x43487a.","applyRoutine":"0x0043487a -> 0x00435295","dispatchRole":"HP recovery / revive-style apply path","dispatchNote":"Recovery/apply family via 0x43487a."}]}]}