# 전투 result-family dispatch

- result table: `0x00546970`
- adjacent special table: `0x00546a38`

## 결론
- 8-byte hit unit의 byte[5]는 result-family id다. 0x00433f0e가 이를 target actor +0x6b에 복사한 뒤 0x00546970[id]를 호출한다.
- byte[3]은 현재 추출된 452개 hit unit에서 전부 0x00이므로 reserved/unused로 둔다.
- byte[4]는 action payload의 target scope id다. 현재 값은 0x01 self/setup, 0x05 all allies, 0x06 all enemies, 0x09 one ally, 0x0a one enemy로만 갈라진다.
- byte[4]는 0x00433649에서 직접 읽히고 0x00433545/0x004335c6에서 actor +0x67 target selector로 복사된다.
- handler-table opcode 0x5c/0x0040fa6d는 byte[4] bit 0x08로 selected-target branch를 가르는 gate이고, 0x0040f57c action setup은 selected target latch 0x0059e347을 actor +0x61로 복사한다.
- byte[6]는 hit/avoid class index다. 0x004342e8..0x004342ee가 unit[6]을 읽어 target actor +0x36+index 보정 테이블을 참조한다.
- byte[6] 0..3은 내부 명중 판정 class로 승격한다. 0=상단/공중/상승, 1=일반, 2=하단/지면/다운, 3=잡기/밀착 특수 판정이다.
- 따라서 out/enemy_stat_table의 exported +0x36 필드를 그대로 hit-class 테이블로 승격하지 않는다. byte[6] 소비자는 battle actor table의 +0x36 기반 값을 읽는다.
- family 1은 0x0043485e로 연결되어 actor +0x62 bit 0x04를 세우며, 현재 추출된 레코드에서는 도주만 사용한다.
- 따라서 +0x62 bit 0x04는 타격/크리티컬/상태 플래그가 아니라 도주 계열 battle-flow fan-out 요청으로 승격한다.
- family 2(방어)와 family 3(몸감추기)은 현재 records에서 의도적인 no-op result family로 정리한다. 결과 적용은 없고, 의미는 command/action layer에서 발생한다.
- family 36..44는 아타호 취기 누적 class다. 0x434a4a가 family id 0x24..0x2c를 range/repeat 공식으로 바꿔 취기 actor +0x65와 주량 경험치 actor +0x1a를 누적하고 +0x2a 6/7/8/9로 승급시킨다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 증가한다.
- family 43/0x2b 취기 공식은 result table에 존재하지만 현재 grounded player/shared action records 281개에서는 참조되지 않는다. 구현 소비 대상에서는 table-only unused entry로 둔다.
- family 45는 스마슈 눈요기, family 46은 린샹 도발, family 47은 수경 전용 루틴으로 세분화했다. 이 셋은 +0x6c 상태이상 byte가 아니라 actor +0x2a 또는 fireGuard/waterIceGuard/windThunderGuard byte를 직접 만진다.
- family 47 수경은 +0x2f/+0x30/+0x31을 clear한다. damage formula의 actor+0x1c+family 가변 index와 action payload family 이름 대조로 +0x2f=화염, +0x30=수빙, +0x31=풍뢰 guard로 승격했다.
- 0x00546970 뒤의 0x00546a38은 result-family 50번 이후가 아니라 actor +0x58 특수 경로에서 쓰는 별도 handler table이다.

## Hit Unit Schema

| byte | 의미 | 상태 |
|---|---|---|
| byte[0] | attacker +0x80 scaled into actor +0x70 | grounded |
| byte[1] | attacker +0x82 scaled into actor +0x72 | grounded |
| byte[2] | attacker +0x84 scaled into actor +0x74 | grounded |
| byte[3] | reserved/unused in extracted hit units; constant 0x00 across all current units | grounded |
| byte[4] | target scope id: 0x01 self/setup, 0x05 all allies, 0x06 all enemies, 0x09 one ally, 0x0a one enemy; copied to actor +0x67 by 0x433545/0x4335c6; bit 0x08 branches through opcode 0x5c/0x40fa6d gate to stream +4 target-selection script | grounded |
| byte[5] | result-family dispatch id; copied to target +0x6b | grounded |
| byte[6] | hit/avoid class index; used to read target +0x36+index modifier table. 0=상단/공중/상승, 1=일반, 2=하단/지면/다운, 3=잡기/밀착 특수 | grounded |
| byte[7] | status effect value: 0 none, 1 넘어짐, 2 휙 날아감, 3 행동정지, 4 독, 5 마비, 6 졸림; copied to target +0x6c | grounded |

## Target Scope byte[4]

| value | 의미 | unit | 예시 |
|---|---|---:|---|
| 0x01 | self/setup/no enemy target | 46 | #4.0 아타호 마시기 `00 00 00 00 01 26 01 00`; #5.0 아타호 마시기 `00 00 00 00 01 28 01 00`; #6.0 아타호 마시기 `00 00 00 00 01 29 01 00`; #7.0 아타호 마시기 `00 00 00 00 01 2a 01 00` |
| 0x05 | all allies | 1 | #115.0 린샹 기공대회복 `78 00 00 00 05 20 01 00` |
| 0x06 | all enemies | 140 | #34.0 아타호 맹호난무 `68 6e 96 00 06 10 00 00`; #35.0 아타호 맹호난무 `6d 78 9b 00 06 10 00 00`; #36.0 아타호 맹호난무 `72 82 a0 00 06 10 00 00`; #37.0 아타호 맹호난무 `77 8c a5 00 06 10 00 00` |
| 0x09 | one ally | 2 | #113.0 린샹 기공회복 `82 00 00 00 09 20 01 00`; #114.0 린샹 기공독치료 `00 00 00 00 09 22 01 00` |
| 0x0a | one enemy | 263 | #0.0 아타호 정권 `64 64 64 00 0a 10 01 00`; #1.0 아타호 돌려차기 `6e 6e 5a 00 0a 10 01 00`; #2.0 아타호 던지기 `78 4b 3c 00 0a 10 03 02`; #3.0 아타호 다리후리기 `5a 41 69 00 0a 10 02 01` |

## Hit/Avoid Class byte[6]

| value | 의미 | unit | 예시 |
|---|---|---:|---|
| 0x00 | 상단/공중/상승 판정 | 43 | #17.0 아타호 폭전축 `85 78 96 00 0a 10 00 00`; #18.0 아타호 폭전축 `8c 7d a4 00 0a 10 00 00`; #19.0 아타호 퍽전축 `85 82 96 00 0a 10 00 00`; #19.1 아타호 퍽전축 `50 64 69 00 0a 10 00 01` |
| 0x01 | 일반 타격 판정 | 361 | #0.0 아타호 정권 `64 64 64 00 0a 10 01 00`; #1.0 아타호 돌려차기 `6e 6e 5a 00 0a 10 01 00`; #4.0 아타호 마시기 `00 00 00 00 01 26 01 00`; #5.0 아타호 마시기 `00 00 00 00 01 28 01 00` |
| 0x02 | 하단/지면/다운 판정 | 31 | #3.0 아타호 다리후리기 `5a 41 69 00 0a 10 02 01`; #30.1 아타호 지옥 다리후리기 `3c 00 7d 00 0a 10 02 00`; #30.2 아타호 지옥 다리후리기 `3c 00 7d 00 0a 10 02 00`; #30.3 아타호 지옥 다리후리기 `3c 00 7d 00 0a 10 02 00` |
| 0x03 | 잡기/밀착 특수 판정 | 17 | #2.0 아타호 던지기 `78 4b 3c 00 0a 10 03 02`; #140.0 스마슈 인법·분신술 `55 00 4b 00 06 12 03 00`; #141.0 스마슈 인법·분신술 `50 00 46 00 06 12 03 00`; #141.2 스마슈 인법·분신술 `50 00 46 00 06 12 03 00` |

## Result-Family Dispatch Table

| id | entry VA | function | 역할 | unit/record | 예시 | 메모 |
|---|---|---|---|---|---|---|
| 0x00 | 0x00546970 | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x01 | 0x00546974 | 0x0043485e | sets actor +0x62 bit 0x04; flow fan-out request | 3 / 3 | #57.0 아타호 도주 `00 00 00 00 01 01 01 00`; #111.0 린샹 도주 `00 00 00 00 01 01 01 00`; #151.0 스마슈 도주 `00 00 00 00 01 01 01 00` | 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. |
| 0x02 | 0x00546978 | 0x004357d0 | no-op/default result family | 3 / 3 | #58.0 아타호 방어 `00 00 00 00 01 02 01 00`; #112.0 린샹 방어 `00 00 00 00 01 02 01 00`; #152.0 스마슈 방어 `00 00 00 00 01 02 01 00` | 방어-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. |
| 0x03 | 0x0054697c | 0x004357d0 | no-op/default result family | 3 / 3 | #154.0 스마슈 인법·몸감추기 `46 00 00 00 01 03 01 00`; #158.0 공용/적 몸감추기 `00 00 00 00 01 03 01 00`; #277.0 공용/적 인법·몸감추기 `46 00 00 00 01 03 01 00` | 인법·몸감추기-only family in current records. The result dispatcher is intentionally no-op; visual/state behavior is carried outside result-family apply. |
| 0x04 | 0x00546980 | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x05 | 0x00546984 | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x06 | 0x00546988 | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x07 | 0x0054698c | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x08 | 0x00546990 | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x09 | 0x00546994 | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x0a | 0x00546998 | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x0b | 0x0054699c | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x0c | 0x005469a0 | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x0d | 0x005469a4 | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x0e | 0x005469a8 | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x0f | 0x005469ac | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x10 | 0x005469b0 | 0x0043414d | common damage/status formula path | 154 / 86 | #0.0 아타호 정권 `64 64 64 00 0a 10 01 00`; #1.0 아타호 돌려차기 `6e 6e 5a 00 0a 10 01 00`; #2.0 아타호 던지기 `78 4b 3c 00 0a 10 03 02`; #3.0 아타호 다리후리기 `5a 41 69 00 0a 10 02 01` | Start of common damage/status result families. These call the shared formula path 0x43414d. |
| 0x11 | 0x005469b4 | 0x0043414d | common damage/status formula path | 27 / 20 | #65.0 린샹 손톱공격 `64 64 64 00 0a 11 01 00`; #73.0 린샹 안면백조권 `41 00 7d 00 0a 11 01 00`; #73.1 린샹 안면백조권 `41 00 7d 00 0a 11 01 00`; #73.2 린샹 안면백조권 `4b 64 73 00 0a 11 01 00` | Common damage/status result family. |
| 0x12 | 0x005469b8 | 0x0043414d | common damage/status formula path | 76 / 49 | #75.2 린샹 안면백조권 `55 78 6e 00 0a 12 01 00`; #76.3 린샹 안면백조권 `5a 82 69 00 0a 12 01 00`; #91.0 린샹 맹호열지조 `8e 64 af 00 0a 12 02 01`; #96.0 린샹 유미쌍조 `67 7d 9b 00 06 12 00 00` | Common damage/status result family. |
| 0x13 | 0x005469bc | 0x0043414d | common damage/status formula path | 25 / 25 | #32.1 아타호 염가열소 `91 00 fa 00 0a 13 01 00`; #50.0 아타호 비기·맹호유성각 `78 87 96 00 06 13 01 01`; #51.0 아타호 비기·맹호유성각 `7d 8c af 00 06 13 01 01`; #52.0 아타호 비기·맹호유성각 `82 91 c8 00 06 13 01 01` | Common damage/status result family. |
| 0x14 | 0x005469c0 | 0x0043414d | common damage/status formula path | 14 / 14 | #70.0 린샹 꼬챙이 꿰기 `6e 64 5f 00 0a 14 01 00`; #89.0 린샹 빙조권 `82 00 c8 00 0a 14 01 00`; #108.0 린샹 창룡파 `70 00 96 00 06 14 01 00`; #119.0 스마슈 마구베기 `6e 6e 5a 00 0a 14 01 00` | Common damage/status result family. |
| 0x15 | 0x005469c4 | 0x0043414d | common damage/status formula path | 24 / 24 | #42.0 아타호 호포권 `6f 0f 7d 00 06 15 01 00`; #43.0 아타호 호포권 `74 1e 82 00 06 15 01 00`; #44.0 아타호 호포권 `79 2d 91 00 06 15 01 00`; #45.0 아타호 호포권 `7e 3c 8c 00 06 15 01 00` | Common damage/status result family. |
| 0x16 | 0x005469c8 | 0x0043414d | common damage/status formula path | 58 / 14 | #25.0 아타호 비기·맹호광파참 `5a af c8 00 0a 16 01 00`; #25.1 아타호 비기·맹호광파참 `50 00 c8 00 0a 16 01 00`; #25.2 아타호 비기·맹호광파참 `46 00 c8 00 0a 16 01 00`; #26.0 아타호 비기·맹호광파참 `64 c8 e1 00 0a 16 01 00` | Common damage/status result family. |
| 0x17 | 0x005469cc | 0x0043414d | common damage/status formula path | 13 / 13 | #38.0 아타호 맹호의 울부짖음 `37 32 c8 00 06 17 01 03`; #39.0 아타호 맹호의 울부짖음 `46 37 c8 00 06 17 01 03`; #40.0 아타호 맹호의 울부짖음 `55 3c c8 00 06 17 01 03`; #41.0 아타호 맹호의 울부짖음 `64 41 c8 00 06 17 01 03` | Common damage/status result family. |
| 0x18 | 0x005469d0 | 0x0043414d | common damage/status formula path | 3 / 3 | #54.1 아타호 주구격 `4b 32 7d 00 06 18 01 03`; #163.0 공용/적 썩은 점액 `64 64 64 00 0a 18 01 00`; #169.0 공용/적 독액 `5f 64 c8 00 06 18 01 04` | Common damage/status result family. |
| 0x19 | 0x005469d4 | 0x0043414d | common damage/status formula path | 9 / 6 | #90.0 린샹 흑영권 `73 6e 96 00 0a 19 02 02`; #182.0 공용/적 장궁 `5a 64 c8 00 06 19 03 04`; #243.0 공용/적 장궁 `5f 64 c8 00 06 19 01 05`; #257.0 공용/적 마권사암각 `46 00 78 00 06 19 01 00` | Common damage/status result family. |
| 0x1a | 0x005469d8 | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x1b | 0x005469dc | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x1c | 0x005469e0 | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x1d | 0x005469e4 | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x1e | 0x005469e8 | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x1f | 0x005469ec | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x20 | 0x005469f0 | 0x0043487a | HP recovery / revive-style apply path | 7 / 7 | #59.0 아타호 기합일발 `6e 00 00 00 01 20 01 00`; #113.0 린샹 기공회복 `82 00 00 00 09 20 01 00`; #115.0 린샹 기공대회복 `78 00 00 00 05 20 01 00`; #155.0 스마슈 신격방어 `7d 00 00 00 01 20 01 00` | Recovery/apply family via 0x43487a. |
| 0x21 | 0x005469f4 | 0x0043487a | HP recovery / revive-style apply path | 5 / 5 | #60.1 아타호 천조족 `32 00 00 00 01 21 01 00`; #61.1 아타호 천조족 `3c 00 00 00 01 21 01 00`; #63.1 아타호 천조족 `46 00 00 00 01 21 01 00`; #64.1 아타호 천조족 `50 00 00 00 01 21 01 00` | Recovery/apply family via 0x43487a. |
| 0x22 | 0x005469f8 | 0x0043497d | timed-status recovery/special recovery path | 1 / 1 | #114.0 린샹 기공독치료 `00 00 00 00 09 22 01 00` | Special recovery/timed-status path via 0x43497d. |
| 0x23 | 0x005469fc | 0x0043487a | HP recovery / revive-style apply path | 1 / 1 | #62.1 아타호 주 백약지장 `91 00 00 00 01 23 01 00` | Recovery/apply family via 0x43487a. |
| 0x24 | 0x00546a00 | 0x00434a4a | Ataho drunk accumulator / drunk-state promotion path | 2 / 2 | #29.0 아타호 조금 취한 철권 `00 00 00 00 01 24 01 00`; #60.0 아타호 천조족 `00 00 00 00 01 24 01 00` | 아타호 취기 누적 family. 0x434a4a class 0x24: random(8)+1 repeated 2 times, 취기 +0x65와 주량 경험치 +0x1a 누적. |
| 0x25 | 0x00546a04 | 0x00434a4a | Ataho drunk accumulator / drunk-state promotion path | 4 / 4 | #30.0 아타호 지옥 다리후리기 `00 00 00 00 01 25 01 00`; #54.0 아타호 주구격 `00 00 00 00 01 25 01 00`; #61.0 아타호 천조족 `00 00 00 00 01 25 01 00`; #268.0 공용/적 천조족 `00 00 00 00 01 25 01 00` | 아타호 취기 누적 family. 0x434a4a class 0x25: random(0x20)+1 repeated 1 time, 취기 +0x65와 주량 경험치 +0x1a 누적. |
| 0x26 | 0x00546a08 | 0x00434a4a | Ataho drunk accumulator / drunk-state promotion path | 1 / 1 | #4.0 아타호 마시기 `00 00 00 00 01 26 01 00` | 아타호 취기 누적 family. 0x434a4a class 0x26: random(8)+1 repeated 4 times, 취기 +0x65와 주량 경험치 +0x1a 누적. |
| 0x27 | 0x00546a0c | 0x00434a4a | Ataho drunk accumulator / drunk-state promotion path | 2 / 2 | #31.0 아타호 만취한 철권 `00 00 00 00 01 27 01 00`; #62.0 아타호 주 백약지장 `00 00 00 00 01 27 01 00` | 아타호 취기 누적 family. 0x434a4a class 0x27: random(0x0c)+1 repeated 4 times, 취기 +0x65와 주량 경험치 +0x1a 누적. |
| 0x28 | 0x00546a10 | 0x00434a4a | Ataho drunk accumulator / drunk-state promotion path | 6 / 6 | #5.0 아타호 마시기 `00 00 00 00 01 28 01 00`; #32.0 아타호 염가열소 `00 00 00 00 01 28 01 00`; #55.0 아타호 취호염무 `00 00 00 00 01 28 01 00`; #63.0 아타호 천조족 `00 00 00 00 01 28 01 00` | 아타호 취기 누적 family. 0x434a4a class 0x28: random(0x20)+1 repeated 2 times, 취기 +0x65와 주량 경험치 +0x1a 누적. |
| 0x29 | 0x00546a14 | 0x00434a4a | Ataho drunk accumulator / drunk-state promotion path | 4 / 4 | #6.0 아타호 마시기 `00 00 00 00 01 29 01 00`; #33.0 아타호 인사불성 철권 `00 00 00 00 01 29 01 00`; #56.0 아타호 노익장 대폭발 `00 00 00 00 01 29 01 00`; #64.0 아타호 천조족 `00 00 00 00 01 29 01 00` | 아타호 취기 누적 family. 0x434a4a class 0x29: random(0x14)+1 repeated 4 times, 취기 +0x65와 주량 경험치 +0x1a 누적. |
| 0x2a | 0x00546a18 | 0x00434a4a | Ataho drunk accumulator / drunk-state promotion path | 1 / 1 | #7.0 아타호 마시기 `00 00 00 00 01 2a 01 00` | 아타호 취기 누적 family. 0x434a4a class 0x2a: random(0x0c)+1 repeated 8 times, 취기 +0x65와 주량 경험치 +0x1a 누적. |
| 0x2b | 0x00546a1c | 0x00434a4a | Ataho drunk accumulator / drunk-state promotion path | 0 / 0 | - | 아타호 취기 누적 family. 0x434a4a class 0x2b: random(0x20)+1 repeated 4 times. EXE table에는 있으나 grounded player/shared action records 281개에서는 참조되지 않는 table-only entry다. |
| 0x2c | 0x00546a20 | 0x00434a4a | Ataho drunk accumulator / drunk-state promotion path | 1 / 1 | #8.0 아타호 마시기 `00 00 00 00 01 2c 01 00` | 아타호 취기 누적 family. 0x434a4a class 0x2c: random(0x14)+1 repeated 8 times, 취기 +0x65와 주량 경험치 +0x1a 누적. |
| 0x2d | 0x00546a24 | 0x00434cbb | Smash eye-candy state progression path | 1 / 1 | #153.0 스마슈 눈요기 `00 00 00 00 01 2d 01 00` | 스마슈 눈요기 family. +0x2a 11..14를 진행시키고 14 이후 15 푸쉬 + timed lock(+0x62 bit 0x02)을 건다. |
| 0x2e | 0x00546a28 | 0x00434d8d | Rinshan taunt randomized state path | 1 / 1 | #69.0 린샹 도발 `0a fa fa 00 01 2e 01 00` | 린샹 도발 family. random(4)+0x10으로 16..19를 고르고, 현재 상태와 같은 값이 다시 나오면 20 피곤함 + timed lock을 건다. |
| 0x2f | 0x00546a2c | 0x00434e29 | Sukyeong element-guard reset path | 3 / 3 | #116.0 린샹 수경 `00 00 00 00 01 2f 01 00`; #192.0 공용/적 수경 `00 00 00 00 01 2f 01 00`; #215.0 공용/적 수경 `00 00 00 00 01 2f 01 00` | 수경 family. +0x2f/+0x30/+0x31 fireGuard/waterIceGuard/windThunderGuard bytes를 clear/reset한다. damage formula의 actor+0x1c+family 경로와 action payload family 0x13/0x14/0x15 이름 대조로 순서를 확정했다. |
| 0x30 | 0x00546a30 | 0x004357d0 | no-op/default result family | 0 / 0 | - |  |
| 0x31 | 0x00546a34 | 0x00000000 | zero/table boundary | 0 / 0 | - |  |

## State / No-op Families 승격

| family | routine | 레이블 | 동작 | 세부 |
|---|---|---|---|---|
| 0x02 | 0x004357d0 | 방어 | result-family layer에서는 no-op | 현재 action records에서 아타호/린샹/스마슈 방어만 사용한다. 방어의 실제 자세/계수 반영은 command/action layer 또는 actor mode 쪽으로 분리해서 봐야 한다. |
| 0x03 | 0x004357d0 | 인법·몸감추기 | result-family layer에서는 no-op | 스마슈/공용 몸감추기 계열만 사용한다. 눈요기와 달리 이 family 자체가 +0x2a를 갱신하지 않는다. |
| 0x24 | 0x00434a4a | 아타호 취기 누적 | 0x24: sum(random(8)+1 x 2) = 2..16 | 조금 취한 철권/술 계열 천조족. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다. |
| 0x25 | 0x00434a4a | 아타호 취기 누적 | 0x25: sum(random(32)+1 x 1) = 1..32 | 지옥 다리후리기/주구격/노주 계열 천조족. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다. |
| 0x26 | 0x00434a4a | 아타호 취기 누적 | 0x26: sum(random(8)+1 x 4) = 4..32 | 마시기 record 0x004d24cc. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다. |
| 0x27 | 0x00434a4a | 아타호 취기 누적 | 0x27: sum(random(12)+1 x 4) = 4..48 | 만취한 철권/주 백약지장. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다. |
| 0x28 | 0x00434a4a | 아타호 취기 누적 | 0x28: sum(random(32)+1 x 2) = 2..64 | 마시기 record 0x004d24d4, 염가열소/취호염무/화주 계열 천조족. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다. |
| 0x29 | 0x00434a4a | 아타호 취기 누적 | 0x29: sum(random(20)+1 x 4) = 4..80 | 마시기 record 0x004d24dc, 인사불성 철권/노익장 대폭발/귀신살 계열 천조족. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다. |
| 0x2a | 0x00434a4a | 아타호 취기 누적 | 0x2a: sum(random(12)+1 x 8) = 8..96 | 마시기 record 0x004d24e4. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다. |
| 0x2b | 0x00434a4a | 아타호 취기 누적 | 0x2b: sum(random(32)+1 x 4) = 4..128 | EXE table에만 존재, grounded player/shared action records 미사용. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다. |
| 0x2c | 0x00434a4a | 아타호 취기 누적 | 0x2c: sum(random(20)+1 x 8) = 8..160 | 마시기 record 0x004d24ec. 증가량은 취기 actor +0x65와 주량 경험치 actor +0x1a에 더해진다. 취기는 0xff에서 cap되고, 0/0x21/0x42/0x64 임계값을 넘으면 +0x2a가 6/7/8/9 (얼근히 취함/만취함/정신없이 취함/대호)로 승급한다. 주량 경험치가 100을 넘으면 주량 actor +0x18이 최대 100까지 1 증가한 뒤 주량 경험치는 0으로 리셋된다. |
| 0x2d | 0x00434cbb | 스마슈 눈요기 | +0x2a 11..15 progression | 처음이면 11 흥분으로 진입한다. 11..13은 다음 단계로 진행한다. 14 대폭발에서 다시 걸리면 15 푸쉬로 전환하고 +0x64=random(2)+2, +0x62 bit 0x02 timed command/action lock을 건다. |
| 0x2e | 0x00434d8d | 린샹 도발 | random(4)+0x10 => +0x2a 16..19 | 16..19(위압적인 자세/노발충천/무뚝뚝한 표정/여왕님) 중 하나를 고른다. 현재 상태와 같은 값이 다시 나오면 20 피곤함으로 전환하고 +0x64=random(2)+2, +0x62 bit 0x02 timed lock을 건다. |
| 0x2f | 0x00434e29 | 수경 | +0x2f/+0x30/+0x31 fire/water-ice/wind-thunder guard clear | 수경 레코드만 이 family를 사용한다. damage formula는 actor +0x1c + family를 가변 index로 읽으므로 family 0x13/0x14/0x15가 actor +0x2f/+0x30/+0x31에 대응한다. action payload 기술명 집계가 0x13=화염, 0x14=수빙, 0x15=풍뢰를 지지한다. |

## 현재 레코드 사용 분포

| family | unit | record | 기술명 | status effect byte[7] | 메모 |
|---|---|---|---|---|---|
| 0x01 | 3 | 3 | 린샹 도주, 스마슈 도주, 아타호 도주 | 0:none | 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. |
| 0x02 | 3 | 3 | 린샹 방어, 스마슈 방어, 아타호 방어 | 0:none | 방어-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. |
| 0x03 | 3 | 3 | 공용/적 몸감추기, 공용/적 인법·몸감추기, 스마슈 인법·몸감추기 | 0:none | 인법·몸감추기-only family in current records. The result dispatcher is intentionally no-op; visual/state behavior is carried outside result-family apply. |
| 0x10 | 154 | 86 | 공용/적 날갯짓, 공용/적 다리후리기, 공용/적 대폭진, 공용/적 돌려차기, 공용/적 때리기, 공용/적 맹호비상각, 공용/적 비상쌍축격, 공용/적 삼단공격, 공용/적 삼연각, 공용/적 선렬각, 공용/적 승격파, 공용/적 승천포, 공용/적 암각·단파, 공용/적 암각·용황난무, 공용/적 암각·지뢰격, 공용/적 암각·지화난무, 공용/적 암각·평화권, 공용/적 암단축, 공용/적 이단차기, 공용/적 정권 ... | 0:none, 1:넘어짐, 2:휙 날아감, 3:행동정지 | Start of common damage/status result families. These call the shared formula path 0x43414d. |
| 0x11 | 27 | 20 | 공용/적 강습, 공용/적 격돌, 공용/적 급강하, 공용/적 돌진, 공용/적 물어뜯기, 공용/적 육탄돌격, 공용/적 저돌맹진, 공용/적 푹 찌르기, 공용/적 흡혈, 린샹 손톱공격, 린샹 안면백조권, 스마슈 쾌진격 | 0:none, 1:넘어짐, 2:휙 날아감, 4:독, 5:마비 | Common damage/status result family. |
| 0x12 | 76 | 49 | 공용/적 공도축, 공용/적 백섬질풍각, 공용/적 백인일섬, 공용/적 베기, 공용/적 수참축, 공용/적 열풍검, 공용/적 유미쌍조, 공용/적 충격파, 공용/적 투구쪼개기, 공용/적 할퀴기, 공용/적 ２연속 베기, 공용/적 ３연속 베기, 공용/적 ５연속 베기, 린샹 맹호단공아, 린샹 맹호열지조, 린샹 안면백조권, 린샹 유미쌍조, 스마슈 난도질, 스마슈 대타격, 스마슈 백인일섬 ... | 0:none, 1:넘어짐, 2:휙 날아감, 3:행동정지 | Common damage/status result family. |
| 0x13 | 25 | 25 | 공용/적 열화폭염권, 공용/적 염가열소, 공용/적 작렬축, 공용/적 취호염무, 공용/적 화염, 린샹 열화폭염권, 스마슈 마구베기, 스마슈 열시섬, 스마슈 정열의 붉은마검, 아타호 비기·맹호유성각, 아타호 염가열소, 아타호 취호염무 | 0:none, 1:넘어짐 | Common damage/status result family. |
| 0x14 | 14 | 14 | 공용/적 냉기, 공용/적 냉도투무, 공용/적 물어뜯기, 공용/적 빙참축, 린샹 꼬챙이 꿰기, 린샹 빙조권, 린샹 창룡파, 스마슈 냉도투무, 스마슈 마구베기 | 0:none, 1:넘어짐 | Common damage/status result family. |
| 0x15 | 24 | 24 | 공용/적 기포, 공용/적 뢰, 공용/적 뢰격, 공용/적 비룡장파, 공용/적 아랑권, 공용/적 암각·영상뢰화, 공용/적 암각기포, 공용/적 연기권, 공용/적 전뢰, 공용/적 조기탄, 공용/적 쾌진격, 린샹 암각·영상뢰화, 아타호 호포권 | 0:none, 2:휙 날아감, 3:행동정지 | Common damage/status result family. |
| 0x16 | 58 | 14 | 공용/적 비기·맹호광파참, 공용/적 암각·광룡도, 공용/적 암각·영상승룡파, 린샹 꼬챙이 꿰기, 린샹 암각·영상승룡파, 스마슈 마구베기, 아타호 비기·맹호광파참 | 0:none | Common damage/status result family. |
| 0x17 | 13 | 13 | 공용/적 엉겨붙기, 공용/적 튀어오르기, 공용/적 휘감기기, 린샹 고양이달래기, 린샹 꼬챙이 꿰기, 아타호 노익장 대폭발, 아타호 맹호의 울부짖음 | 0:none, 3:행동정지, 5:마비 | Common damage/status result family. |
| 0x18 | 3 | 3 | 공용/적 독액, 공용/적 썩은 점액, 아타호 주구격 | 0:none, 3:행동정지, 4:독 | Common damage/status result family. |
| 0x19 | 9 | 6 | 공용/적 마권사암각, 공용/적 장궁, 린샹 흑영권 | 0:none, 2:휙 날아감, 4:독, 5:마비 | Common damage/status result family. |
| 0x20 | 7 | 7 | 공용/적 기합일발, 공용/적 회복, 린샹 기공대회복, 린샹 기공회복, 스마슈 신격방어, 아타호 기합일발 | 0:none | Recovery/apply family via 0x43487a. |
| 0x21 | 5 | 5 | 공용/적 천조족, 아타호 천조족 | 0:none | Recovery/apply family via 0x43487a. |
| 0x22 | 1 | 1 | 린샹 기공독치료 | 0:none | Special recovery/timed-status path via 0x43497d. |
| 0x23 | 1 | 1 | 아타호 주 백약지장 | 0:none | Recovery/apply family via 0x43487a. |
| 0x24 | 2 | 2 | 아타호 조금 취한 철권, 아타호 천조족 | 0:none | 아타호 취기 누적 family. 0x434a4a class 0x24: random(8)+1 repeated 2 times, 취기 +0x65와 주량 경험치 +0x1a 누적. |
| 0x25 | 4 | 4 | 공용/적 천조족, 아타호 주구격, 아타호 지옥 다리후리기, 아타호 천조족 | 0:none | 아타호 취기 누적 family. 0x434a4a class 0x25: random(0x20)+1 repeated 1 time, 취기 +0x65와 주량 경험치 +0x1a 누적. |
| 0x26 | 1 | 1 | 아타호 마시기 | 0:none | 아타호 취기 누적 family. 0x434a4a class 0x26: random(8)+1 repeated 4 times, 취기 +0x65와 주량 경험치 +0x1a 누적. |
| 0x27 | 2 | 2 | 아타호 만취한 철권, 아타호 주 백약지장 | 0:none | 아타호 취기 누적 family. 0x434a4a class 0x27: random(0x0c)+1 repeated 4 times, 취기 +0x65와 주량 경험치 +0x1a 누적. |
| 0x28 | 6 | 6 | 공용/적 염가열소, 공용/적 취호염무, 아타호 마시기, 아타호 염가열소, 아타호 천조족, 아타호 취호염무 | 0:none | 아타호 취기 누적 family. 0x434a4a class 0x28: random(0x20)+1 repeated 2 times, 취기 +0x65와 주량 경험치 +0x1a 누적. |
| 0x29 | 4 | 4 | 아타호 노익장 대폭발, 아타호 마시기, 아타호 인사불성 철권, 아타호 천조족 | 0:none | 아타호 취기 누적 family. 0x434a4a class 0x29: random(0x14)+1 repeated 4 times, 취기 +0x65와 주량 경험치 +0x1a 누적. |
| 0x2a | 1 | 1 | 아타호 마시기 | 0:none | 아타호 취기 누적 family. 0x434a4a class 0x2a: random(0x0c)+1 repeated 8 times, 취기 +0x65와 주량 경험치 +0x1a 누적. |
| 0x2c | 1 | 1 | 아타호 마시기 | 0:none | 아타호 취기 누적 family. 0x434a4a class 0x2c: random(0x14)+1 repeated 8 times, 취기 +0x65와 주량 경험치 +0x1a 누적. |
| 0x2d | 1 | 1 | 스마슈 눈요기 | 0:none | 스마슈 눈요기 family. +0x2a 11..14를 진행시키고 14 이후 15 푸쉬 + timed lock(+0x62 bit 0x02)을 건다. |
| 0x2e | 1 | 1 | 린샹 도발 | 0:none | 린샹 도발 family. random(4)+0x10으로 16..19를 고르고, 현재 상태와 같은 값이 다시 나오면 20 피곤함 + timed lock을 건다. |
| 0x2f | 3 | 3 | 공용/적 수경, 린샹 수경 | 0:none | 수경 family. +0x2f/+0x30/+0x31 fireGuard/waterIceGuard/windThunderGuard bytes를 clear/reset한다. damage formula의 actor+0x1c+family 경로와 action payload family 0x13/0x14/0x15 이름 대조로 순서를 확정했다. |

## Adjacent Special Handler Table

| index | entry VA | function | 역할 |
|---|---|---|---|
| 0 | 0x00546a38 | 0x004357db | actor +0x58 special handler table entry 0 |
| 1 | 0x00546a3c | 0x004357e6 | actor +0x58 special handler table entry 1 |
| 2 | 0x00546a40 | 0x00435810 | actor +0x58 special handler table entry 2 |
| 3 | 0x00546a44 | 0x0043583c | actor +0x58 special handler table entry 3 |
| 4 | 0x00546a48 | 0x004358ab | actor +0x58 special handler table entry 4 |
| 5 | 0x00546a4c | 0x004358d5 | actor +0x58 special handler table entry 5 |

## 근거 라인

### hit-unit setup selects action payload and dispatches by unit[5] (0x00433f78..0x004340a9)

```asm
  433f83:	e9 3f 00 00 00       	jmp    0x433fc7
  433f88:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
  433f8b:	33 c9                	xor    ecx,ecx
  433f8d:	8a 48 05             	mov    cl,BYTE PTR [eax+0x5]
  433f90:	8b 04 8d 88 24 4d 00 	mov    eax,DWORD PTR [ecx*4+0x4d2488]
  433f97:	8b 4d 08             	mov    ecx,DWORD PTR [ebp+0x8]
  433f9a:	33 d2                	xor    edx,edx
  433f9c:	8a 51 59             	mov    dl,BYTE PTR [ecx+0x59]
  433faa:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
  433fad:	33 c9                	xor    ecx,ecx
  433faf:	8a 48 59             	mov    cl,BYTE PTR [eax+0x59]
  433fb2:	a1 94 24 4d 00       	mov    eax,ds:0x4d2494
  433fb7:	8b 04 c8             	mov    eax,DWORD PTR [eax+ecx*8]
  433fba:	89 45 f8             	mov    DWORD PTR [ebp-0x8],eax
  433fbd:	e9 1e 00 00 00       	jmp    0x433fe0
  433fd5:	0f 84 cf ff ff ff    	je     0x433faa
  433fdb:	e9 00 00 00 00       	jmp    0x433fe0
  433fe0:	33 c0                	xor    eax,eax
  433fe2:	66 a1 a4 e2 59 00    	mov    ax,ds:0x59e2a4
  433fe8:	c1 e0 03             	shl    eax,0x3
  433feb:	03 45 f8             	add    eax,DWORD PTR [ebp-0x8]
  433fee:	83 c0 16             	add    eax,0x16
  434071:	8b 4d 0c             	mov    ecx,DWORD PTR [ebp+0xc]
  434074:	88 41 6a             	mov    BYTE PTR [ecx+0x6a],al
  434077:	8b 45 fc             	mov    eax,DWORD PTR [ebp-0x4]
  43407a:	8a 40 05             	mov    al,BYTE PTR [eax+0x5]
  43407d:	8b 4d 0c             	mov    ecx,DWORD PTR [ebp+0xc]
  434080:	88 41 6b             	mov    BYTE PTR [ecx+0x6b],al
  434083:	8b 45 fc             	mov    eax,DWORD PTR [ebp-0x4]
  434096:	50                   	push   eax
  434097:	8b 45 fc             	mov    eax,DWORD PTR [ebp-0x4]
  43409a:	33 c9                	xor    ecx,ecx
  43409c:	8a 48 05             	mov    cl,BYTE PTR [eax+0x5]
  43409f:	ff 14 8d 70 69 54 00 	call   DWORD PTR [ecx*4+0x546970]
  4340a6:	83 c4 08             	add    esp,0x8
```

### hit-unit setup resets per-hit +0x62 bits before dispatch (0x00433f0e..0x00433f39)

```asm
  433f1a:	33 c9                	xor    ecx,ecx
  433f1c:	8a 48 62             	mov    cl,BYTE PTR [eax+0x62]
  433f1f:	80 e1 c3             	and    cl,0xc3
  433f22:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
  433f25:	88 48 62             	mov    BYTE PTR [eax+0x62],cl
  433f28:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  433f2b:	33 c9                	xor    ecx,ecx
  433f2d:	8a 48 62             	mov    cl,BYTE PTR [eax+0x62]
  433f30:	80 e1 c3             	and    cl,0xc3
  433f33:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  433f36:	88 48 62             	mov    BYTE PTR [eax+0x62],cl
```

### family 1 producer sets +0x62 bit 0x04 (0x0043485e..0x0043487a)

```asm
  434862:	56                   	push   esi
  434863:	57                   	push   edi
  434864:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
  434867:	33 c9                	xor    ecx,ecx
  434869:	8a 48 62             	mov    cl,BYTE PTR [eax+0x62]
  43486c:	80 c9 04             	or     cl,0x4
  43486f:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
  434872:	88 48 62             	mov    BYTE PTR [eax+0x62],cl
  434875:	5f                   	pop    edi
  434876:	5e                   	pop    esi
  434877:	5b                   	pop    ebx
  434878:	c9                   	leave
```

### script opcode consumes bit 0x04 and fans out +0x5b/+0x5c/+0x60 (0x0040dcf7..0x0040ddf9)

```asm
  40dcf7:	8b 45 fc             	mov    eax,DWORD PTR [ebp-0x4]
  40dcfa:	33 c9                	xor    ecx,ecx
  40dcfc:	8a 48 62             	mov    cl,BYTE PTR [eax+0x62]
  40dcff:	f6 c1 04             	test   cl,0x4
  40dd02:	0f 84 ea 00 00 00    	je     0x40ddf2
  40dd08:	8b 45 fc             	mov    eax,DWORD PTR [ebp-0x4]
  40dd0b:	33 c9                	xor    ecx,ecx
  40dd1f:	e9 03 00 00 00       	jmp    0x40dd27
  40dd24:	ff 45 f8             	inc    DWORD PTR [ebp-0x8]
  40dd27:	33 c0                	xor    eax,eax
  40dd29:	a0 e8 76 45 00       	mov    al,ds:0x4576e8
  40dd2e:	3b 45 f8             	cmp    eax,DWORD PTR [ebp-0x8]
  40dd31:	0f 86 4f 00 00 00    	jbe    0x40dd86
  40dd37:	8b 45 f8             	mov    eax,DWORD PTR [ebp-0x8]
  40dd4f:	e9 d0 ff ff ff       	jmp    0x40dd24
  40dd54:	8b 45 f8             	mov    eax,DWORD PTR [ebp-0x8]
  40dd57:	8b 04 85 30 db 59 00 	mov    eax,DWORD PTR [eax*4+0x59db30]
  40dd5e:	c6 40 5b 01          	mov    BYTE PTR [eax+0x5b],0x1
  40dd62:	8b 45 f8             	mov    eax,DWORD PTR [ebp-0x8]
  40dd65:	8b 04 85 30 db 59 00 	mov    eax,DWORD PTR [eax*4+0x59db30]
  40dd6c:	c7 40 5c 03 00 00 00 	mov    DWORD PTR [eax+0x5c],0x3
  40dd73:	8b 45 f8             	mov    eax,DWORD PTR [ebp-0x8]
  40dd76:	8b 04 85 30 db 59 00 	mov    eax,DWORD PTR [eax*4+0x59db30]
  40dd7d:	c6 40 60 06          	mov    BYTE PTR [eax+0x60],0x6
  40dd81:	e9 9e ff ff ff       	jmp    0x40dd24
  40dd86:	c6 05 34 e3 59 00 02 	mov    BYTE PTR ds:0x59e334,0x2
  40dd8d:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
  40dd90:	8b 40 40             	mov    eax,DWORD PTR [eax+0x40]
  40dd93:	8b 40 04             	mov    eax,DWORD PTR [eax+0x4]
  40dd99:	89 41 40             	mov    DWORD PTR [ecx+0x40],eax
  40dd9c:	e9 4c 00 00 00       	jmp    0x40dded
  40dda1:	8b 45 fc             	mov    eax,DWORD PTR [ebp-0x4]
  40dda4:	c6 40 5b 01          	mov    BYTE PTR [eax+0x5b],0x1
  40dda8:	8b 45 fc             	mov    eax,DWORD PTR [ebp-0x4]
  40ddab:	c7 40 5c 03 00 00 00 	mov    DWORD PTR [eax+0x5c],0x3
  40ddb2:	8b 45 fc             	mov    eax,DWORD PTR [ebp-0x4]
  40ddb5:	c6 40 60 06          	mov    BYTE PTR [eax+0x60],0x6
  40ddb9:	c6 05 34 e3 59 00 02 	mov    BYTE PTR ds:0x59e334,0x2
  40ddc0:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
  40ddc3:	8b 40 40             	mov    eax,DWORD PTR [eax+0x40]
  40ddc6:	8b 40 04             	mov    eax,DWORD PTR [eax+0x4]
```

### actor +0x58 uses a separate adjacent special handler table (0x00433f49..0x00433f73)

```asm
  433f49:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
  433f4c:	33 c9                	xor    ecx,ecx
  433f4e:	8a 48 58             	mov    cl,BYTE PTR [eax+0x58]
  433f51:	85 c9                	test   ecx,ecx
  433f53:	0f 84 1f 00 00 00    	je     0x433f78
  433f59:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  433f60:	50                   	push   eax
  433f61:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
  433f64:	33 c9                	xor    ecx,ecx
  433f66:	8a 48 59             	mov    cl,BYTE PTR [eax+0x59]
  433f69:	ff 14 8d 38 6a 54 00 	call   DWORD PTR [ecx*4+0x546a38]
  433f70:	83 c4 08             	add    esp,0x8
```

### hit/avoid routine indexes target +0x36 table with unit[6] (0x004342a2..0x00434310)

```asm
  4342a2:	66 8b 48 06          	mov    cx,WORD PTR [eax+0x6]
  4342a6:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
  4342a9:	33 d2                	xor    edx,edx
  4342c9:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  4342cc:	33 d2                	xor    edx,edx
  4342ce:	66 8b 50 06          	mov    dx,WORD PTR [eax+0x6]
  4342d2:	03 ca                	add    ecx,edx
  4342d4:	66 89 4d ec          	mov    WORD PTR [ebp-0x14],cx
  4342e3:	8b 45 fc             	mov    eax,DWORD PTR [ebp-0x4]
  4342e6:	33 c9                	xor    ecx,ecx
  4342e8:	8a 48 06             	mov    cl,BYTE PTR [eax+0x6]
  4342eb:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  4342ee:	66 0f b6 44 01 36    	movzx  ax,BYTE PTR [ecx+eax*1+0x36]
  4342f4:	66 89 45 e4          	mov    WORD PTR [ebp-0x1c],ax
  4342f8:	8b 45 f4             	mov    eax,DWORD PTR [ebp-0xc]
  434303:	81 e1 ff ff 00 00    	and    ecx,0xffff
  434309:	0f af c1             	imul   eax,ecx
  43430c:	b9 64 00 00        	mov    ecx,0x64
```

### family 36..44 select Ataho drunk increment formula (0x00434a4a..0x00434cb6)

```asm
  434a5e:	e9 9e 00 00 00       	jmp    0x434b01
  434a63:	66 c7 45 fc 08 00    	mov    WORD PTR [ebp-0x4],0x8
  434a69:	66 c7 45 f8 02 00    	mov    WORD PTR [ebp-0x8],0x2
  434a6f:	e9 c9 00 00 00       	jmp    0x434b3d
  434a74:	66 c7 45 fc 20 00    	mov    WORD PTR [ebp-0x4],0x20
  434a7a:	66 c7 45 f8 01 00    	mov    WORD PTR [ebp-0x8],0x1
  434a80:	e9 b8 00 00 00       	jmp    0x434b3d
  434a85:	66 c7 45 fc 08 00    	mov    WORD PTR [ebp-0x4],0x8
  434a8b:	66 c7 45 f8 04 00    	mov    WORD PTR [ebp-0x8],0x4
  434a91:	e9 a7 00 00 00       	jmp    0x434b3d
  434a96:	66 c7 45 fc 0c 00    	mov    WORD PTR [ebp-0x4],0xc
  434a9c:	66 c7 45 f8 04 00    	mov    WORD PTR [ebp-0x8],0x4
  434aa2:	e9 96 00 00 00       	jmp    0x434b3d
  434aa7:	66 c7 45 fc 20 00    	mov    WORD PTR [ebp-0x4],0x20
  434aad:	66 c7 45 f8 02 00    	mov    WORD PTR [ebp-0x8],0x2
  434ab3:	e9 85 00 00 00       	jmp    0x434b3d
  434ab8:	66 c7 45 fc 14 00    	mov    WORD PTR [ebp-0x4],0x14
  434abe:	66 c7 45 f8 04 00    	mov    WORD PTR [ebp-0x8],0x4
  434ac4:	e9 74 00 00 00       	jmp    0x434b3d
  434ac9:	66 c7 45 fc 0c 00    	mov    WORD PTR [ebp-0x4],0xc
  434acf:	66 c7 45 f8 08 00    	mov    WORD PTR [ebp-0x8],0x8
  434ad5:	e9 63 00 00 00       	jmp    0x434b3d
  434ada:	66 c7 45 fc 20 00    	mov    WORD PTR [ebp-0x4],0x20
  434ae0:	66 c7 45 f8 04 00    	mov    WORD PTR [ebp-0x8],0x4
  434ae6:	e9 52 00 00 00       	jmp    0x434b3d
  434aeb:	66 c7 45 fc 14 00    	mov    WORD PTR [ebp-0x4],0x14
  434af1:	66 c7 45 f8 08 00    	mov    WORD PTR [ebp-0x8],0x8
  434af7:	e9 41 00 00 00       	jmp    0x434b3d
  434b8a:	33 c9                	xor    ecx,ecx
  434b8c:	8a 48 65             	mov    cl,BYTE PTR [eax+0x65]
  434b8f:	8b 45 f4             	mov    eax,DWORD PTR [ebp-0xc]
  434ba8:	33 c9                	xor    ecx,ecx
  434baa:	8a 48 65             	mov    cl,BYTE PTR [eax+0x65]
  434bad:	8b 45 f4             	mov    eax,DWORD PTR [ebp-0xc]
  434bb7:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434bba:	88 48 65             	mov    BYTE PTR [eax+0x65],cl
  434bbd:	e9 07 00 00 00       	jmp    0x434bc9
  434bc2:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434bc5:	c6 40 65 ff          	mov    BYTE PTR [eax+0x65],0xff
  434bc9:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434c36:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434c39:	8a 40 2a             	mov    al,BYTE PTR [eax+0x2a]
  434c3c:	8b 4d 0c             	mov    ecx,DWORD PTR [ebp+0xc]
  434c45:	33 c9                	xor    ecx,ecx
  434c47:	8a 48 65             	mov    cl,BYTE PTR [eax+0x65]
  434c4a:	85 c9                	test   ecx,ecx
  434c52:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434c55:	c6 40 2a 06          	mov    BYTE PTR [eax+0x2a],0x6
  434c59:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
  434c5c:	33 c9                	xor    ecx,ecx
  434c5e:	8a 48 65             	mov    cl,BYTE PTR [eax+0x65]
  434c61:	83 f9 21             	cmp    ecx,0x21
  434c6a:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434c6d:	c6 40 2a 07          	mov    BYTE PTR [eax+0x2a],0x7
  434c71:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
  434c74:	33 c9                	xor    ecx,ecx
  434c76:	8a 48 65             	mov    cl,BYTE PTR [eax+0x65]
  434c79:	83 f9 42             	cmp    ecx,0x42
  434c82:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434c85:	c6 40 2a 08          	mov    BYTE PTR [eax+0x2a],0x8
  434c89:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
  434c8c:	33 c9                	xor    ecx,ecx
  434c8e:	8a 48 65             	mov    cl,BYTE PTR [eax+0x65]
  434c91:	83 f9 64             	cmp    ecx,0x64
  434c9a:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434c9d:	c6 40 2a 09          	mov    BYTE PTR [eax+0x2a],0x9
  434ca1:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434caf:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434cb2:	c6 40 69 01          	mov    BYTE PTR [eax+0x69],0x1
```

### family 45 Smash eye-candy progresses +0x2a and can set timed lock (0x00434cbb..0x00434d8d)

```asm
  434cce:	0f 85 0c 00 00 00    	jne    0x434ce0
  434cd4:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434cd7:	8a 40 2a             	mov    al,BYTE PTR [eax+0x2a]
  434cda:	8b 4d 0c             	mov    ecx,DWORD PTR [ebp+0xc]
  434cdd:	88 41 66             	mov    BYTE PTR [ecx+0x66],al
  434ce0:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434ce3:	c6 40 64 00          	mov    BYTE PTR [eax+0x64],0x0
  434ce7:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434cea:	33 c9                	xor    ecx,ecx
  434cec:	8a 48 2a             	mov    cl,BYTE PTR [eax+0x2a]
  434cef:	89 4d fc             	mov    DWORD PTR [ebp-0x4],ecx
  434cf2:	e9 67 00 00 00       	jmp    0x434d5e
  434d15:	e9 67 00 00 00       	jmp    0x434d81
  434d1a:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434d1d:	c6 40 2a 0f          	mov    BYTE PTR [eax+0x2a],0xf
  434d21:	6a 02                	push   0x2
  434d23:	e8 08 2a ff ff       	call   0x427730
  434d3a:	33 c9                	xor    ecx,ecx
  434d3c:	8a 48 62             	mov    cl,BYTE PTR [eax+0x62]
  434d3f:	80 c9 02             	or     cl,0x2
  434d42:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434d45:	88 48 62             	mov    BYTE PTR [eax+0x62],cl
  434d48:	e9 34 00 00 00       	jmp    0x434d81
  434d4d:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434d50:	c6 40 2a 0b          	mov    BYTE PTR [eax+0x2a],0xb
  434d54:	e9 28 00 00 00       	jmp    0x434d81
  434d59:	e9 23 00 00 00       	jmp    0x434d81
  434d7c:	e9 cc ff ff ff       	jmp    0x434d4d
  434d81:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434d84:	c6 40 68 01          	mov    BYTE PTR [eax+0x68],0x1
  434d88:	5f                   	pop    edi
  434d89:	5e                   	pop    esi
```

### family 46 Rinshan taunt chooses random +0x10..+0x13 and can set tired lock (0x00434d8d..0x00434e29)

```asm
  434da0:	0f 85 0c 00 00 00    	jne    0x434db2
  434da6:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434da9:	8a 40 2a             	mov    al,BYTE PTR [eax+0x2a]
  434dac:	8b 4d 0c             	mov    ecx,DWORD PTR [ebp+0xc]
  434daf:	88 41 66             	mov    BYTE PTR [ecx+0x66],al
  434db2:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434db5:	c6 40 64 00          	mov    BYTE PTR [eax+0x64],0x0
  434db9:	6a 04                	push   0x4
  434dbb:	e8 70 29 ff ff       	call   0x427730
  434dc0:	83 c4 04             	add    esp,0x4
  434dc3:	0f b7 c0             	movzx  eax,ax
  434dc6:	83 c0 10             	add    eax,0x10
  434dc9:	88 45 fc             	mov    BYTE PTR [ebp-0x4],al
  434dcc:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434dcf:	33 c9                	xor    ecx,ecx
  434dd1:	8a 48 2a             	mov    cl,BYTE PTR [eax+0x2a]
  434dd4:	33 c0                	xor    eax,eax
  434dd6:	8a 45 fc             	mov    al,BYTE PTR [ebp-0x4]
  434dea:	e9 2e 00 00 00       	jmp    0x434e1d
  434def:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434df2:	c6 40 2a 14          	mov    BYTE PTR [eax+0x2a],0x14
  434df6:	6a 02                	push   0x2
  434df8:	e8 33 29 ff ff       	call   0x427730
  434e0f:	33 c9                	xor    ecx,ecx
  434e11:	8a 48 62             	mov    cl,BYTE PTR [eax+0x62]
  434e14:	80 c9 02             	or     cl,0x2
  434e17:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434e1a:	88 48 62             	mov    BYTE PTR [eax+0x62],cl
```

### family 47 Sukyeong clears element-guard bytes (0x00434e29..0x00434e49)

```asm
  434e2f:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434e32:	c6 40 2f 00          	mov    BYTE PTR [eax+0x2f],0x0
  434e36:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434e39:	c6 40 30 00          	mov    BYTE PTR [eax+0x30],0x0
  434e3d:	8b 45 0c             	mov    eax,DWORD PTR [ebp+0xc]
  434e40:	c6 40 31 00          	mov    BYTE PTR [eax+0x31],0x0
  434e44:	5f                   	pop    edi
```

## 미확정
