전투 result-family dispatch
result table 0x00546970, special table 0x00546a38. 현재 전투 레코드의 hit-unit byte[5] 분포와 EXE dispatch 근거를 함께 본다.
결론
- 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 / Hit Class
byte[4] Target Scope
| 값 | 의미 | 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 #8.0 아타호 마시기 00 00 00 00 01 2c 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 #38.0 아타호 맹호의 울부짖음 37 32 c8 00 06 17 01 03 |
| 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 #9.0 아타호 호격권 78 78 9b 00 0a 10 01 00 |
byte[6] Hit/Avoid Class
| 값 | 의미 | 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 #20.0 아타호 폭전축 8c 87 96 00 0a 10 00 00 |
| 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 #6.0 아타호 마시기 00 00 00 00 01 29 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 #30.4 아타호 지옥 다리후리기 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 #142.0 스마슈 인법·분신술 4b 00 41 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 #9.0 아타호 호격권 78 78 9b 00 0a 10 01 00 |
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 #74.0 린샹 안면백조권 46 00 7d 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 #97.0 린샹 유미쌍조 6c 82 a5 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 #53.0 아타호 비기·맹호유성각 87 96 e1 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 #149.0 스마슈 냉도투무 7d 00 c8 00 06 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 #104.0 린샹 암각·영상뢰화 7a 00 c8 00 06 15 01 03 |
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 #26.1 아타호 비기·맹호광파참 55 00 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 #56.1 아타호 노익장 대폭발 82 78 b4 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 #257.1 공용/적 마권사암각 46 00 6e 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 #159.0 공용/적 회복 6e 7d c8 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 #268.1 공용/적 천조족 3c 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 #266.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 승격
이 표는 이전에 넓게 미확정으로 남아 있던 no-op family와 고유 상태 family를 EXE 루틴 기준으로 좁힌 것이다.
| 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=풍뢰를 지지한다. |
현재 레코드 사용 분포
총 452개 hit unit, 28개 family가 현재 추출 레코드에서 사용된다.
| 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 | 공용/적 공도축, 공용/적 백섬질풍각, 공용/적 백인일섬, 공용/적 베기, 공용/적 수참축, 공용/적 열풍검, 공용/적 유미쌍조, 공용/적 충격파, 공용/적 투구쪼개기, 공용/적 할퀴기, 공용/적 2연속 베기, 공용/적 3연속 베기, 공용/적 5연속 베기, 린샹 맹호단공아 ... | 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
0x00546a38은 result-family 50번 이후가 아니라 actor +0x58 경로에서 actor +0x59로 호출되는 별도 테이블이다.
| 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
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
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
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
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
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
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
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
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
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
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