# Battle Skill Pattern Review

- status: `classifies-hit-count-speed-and-visual-scaling-patterns`
- decoded skill rows: `156`
- family groups: `28`

## Interpretation

- speed-scaling은 payload 타수와 frame sequence가 그대로인데 gate/movement divisor만 줄어드는 계열이다. 프리뷰에서 타수를 추가하면 틀린다.
- hit-count-scaling은 effectCount와 0xc2/result sound 또는 hit frame 수가 함께 증가하는 계열이다.
- visual-scaling은 payload 타수는 그대로인데 시전 이펙트/프레임만 늘어나는 계열이다.
- constant-fixed-family는 actor VM frame/gate/hit가 숙련도별로 고정인 패밀리다. 헬퍼 VM이나 WLK/result 레이어의 차이는 통합 리포트에서 따로 본다.
- repeat-loop가 있는 기술은 정적 frameSequence를 단순 나열한 값과 실제 반복 타격/연출 수가 다를 수 있다.

## Group Summary

| actor | family | class | skill ids | effectCount | frames | movement divisor | sounds | effect WLK | repeat | notes |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 린샹 | display-table fallback | `visual-scaling` | `0x01`, `0x02`, `0x03`, `0x04`, `0x05`, `0x06`, `0x07`, `0x08`, `0x19`, `0x1a`, `0x1b`, `0x2c`, `0x2d`, `0x2e`, `0x2f`, `0x30` | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 | 6, 4, 4, 4, 13, 6, 6, 6, 8, 6, 6, 34, 6, 3, 8, 1 | [], [], [], [], [], [], [], [], [], [], [], [], [], [8], [], [] | 1, 1, 1, 1, 0, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 0 | 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 7, 1, 0, 1, 0 | 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0 | payload 타수는 같지만 frame/effect sound가 숙련도에 따라 달라진다.; frame count: 6, 4, 4, 4, 13, 6, 6, 6, 8, 6, 6, 34, 6, 3, 8, 1, effect WLK count: 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 7, 1, 0, 1, 0 |
| 린샹 | 고양이달래기 | `constant-fixed-family` | `0x1c`, `0x1d`, `0x1e`, `0x1f` | 1, 1, 1, 1 | 3, 3, 3, 3 | [], [], [], [] | 1, 1, 1, 1 | 0, 0, 0, 0 | 0, 0, 0, 0 | 현재 승격된 actor VM 기준으로 숙련도별 frame/gate/hit 변화가 없다.; 이는 미해석이 아니라 actor 동작은 고정이고, 숙련도 차이는 MP/헬퍼/효과 크기/결과음 등 다른 레이어에서 확인해야 하는 패밀리다. |
| 린샹 | 대폭진 | `visual-scaling` | `0x24`, `0x25`, `0x26`, `0x27` | 1, 1, 1, 1 | 6, 6, 6, 7 | [], [], [], [] | 1, 1, 1, 1 | 0, 0, 0, 1 | 0, 0, 0, 0 | payload 타수는 같지만 frame/effect sound가 숙련도에 따라 달라진다.; frame count: 6, 6, 6, 7, effect WLK count: 0, 0, 0, 1 |
| 린샹 | 선렬각 | `hit-count-scaling` | `0x0d`, `0x0e`, `0x0f`, `0x10` | 3, 4, 5, 6 | 8, 10, 12, 13 | [], [], [], [4] | 3, 4, 5, 6 | 0, 0, 0, 0 | 0, 0, 0, 0 | payload effectCount changes: 3, 4, 5, 6; 0xc2 result sound count changes: 3, 4, 5, 6; frame count changes: 8, 10, 12, 13 |
| 린샹 | 안면백조권 | `hit-count-scaling` | `0x09`, `0x0a`, `0x0b`, `0x0c` | 3, 3, 3, 4 | 16, 16, 20, 27 | [], [], [], [] | 3, 3, 3, 4 | 0, 0, 0, 0 | 0, 0, 0, 0 | payload effectCount changes: 3, 3, 3, 4; 0xc2 result sound count changes: 3, 3, 3, 4; frame count changes: 16, 16, 20, 27 |
| 린샹 | 암각·영상뢰화 | `visual-scaling` | `0x28`, `0x29`, `0x2a`, `0x2b` | 1, 1, 1, 1 | 14, 26, 30, 32 | [], [], [], [] | 1, 1, 1, 1 | 2, 4, 6, 7 | 0, 0, 0, 0 | payload 타수는 같지만 frame/effect sound가 숙련도에 따라 달라진다.; frame count: 14, 26, 30, 32, effect WLK count: 2, 4, 6, 7 |
| 린샹 | 암각·영상승룡파 | `hit-count-scaling` | `0x15`, `0x16`, `0x17`, `0x18` | 3, 4, 5, 10 | 5, 6, 7, 8 | [], [], [], [] | 1, 2, 3, 4 | 1, 1, 1, 1 | 1, 1, 1, 2 | payload effectCount changes: 3, 4, 5, 10; 0xc2 result sound count changes: 1, 2, 3, 4; frame count changes: 5, 6, 7, 8; repeat-loop가 있어 단순 frameSequence 길이만으로 타수를 판단하면 안 된다. |
| 린샹 | 열화폭염권 | `visual-scaling` | `0x11`, `0x12`, `0x13`, `0x14` | 1, 1, 1, 1 | 4, 5, 6, 8 | [], [], [], [] | 1, 1, 1, 1 | 1, 2, 3, 5 | 0, 0, 0, 0 | payload 타수는 같지만 frame/effect sound가 숙련도에 따라 달라진다.; frame count: 4, 5, 6, 8, effect WLK count: 1, 2, 3, 5 |
| 린샹 | 유미쌍조 | `visual-scaling` | `0x20`, `0x21`, `0x22`, `0x23` | 1, 1, 1, 1 | 8, 12, 15, 18 | [], [], [], [] | 1, 1, 1, 1 | 0, 0, 0, 0 | 0, 0, 0, 0 | payload 타수는 같지만 frame/effect sound가 숙련도에 따라 달라진다.; frame count: 8, 12, 15, 18, effect WLK count: 0, 0, 0, 0 |
| 린샹 | 회복/방어 특수기 | `mixed-fixed-family` | `0x31`, `0x32`, `0x33`, `0x34` | 1, 1, 1, 1 | 5, 5, 5, 5 | [], [], [], [] | 0, 0, 0, 0 | 1, 1, 1, 1 | 0, 0, 0, 0 | 한 패밀리에 서로 다른 고정/장비 기술명이 섞여 있어 4단계 숙련도 비교로 보면 안 된다.; skill names: 기공회복, 기공독치료, 기공대회복, 수경 |
| 스마슈 | display-table fallback | `hit-count-scaling` | `0x01`, `0x02`, `0x03`, `0x04`, `0x11`, `0x12`, `0x13`, `0x20`, `0x21`, `0x22`, `0x23`, `0x24`, `0x25`, `0x26`, `0x27` | 1, 1, 1, 1, 1, 4, 10, 1, 1, 3, 1, 1, 1, 1, 1 | 4, 4, 6, 6, 18, 5, 11, 16, 5, 8, 19, 1, 1, 1, 4 | [], [], [], [], [], [], [12], [], [], [], [], [], [], [], [] | 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 3, 0, 0, 0, 0 | 0, 0, 0, 0, 4, 0, 0, 1, 1, 1, 3, 0, 1, 1, 1 | 0, 0, 0, 0, 4, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0 | payload effectCount changes: 1, 1, 1, 1, 1, 4, 10, 1, 1, 3, 1, 1, 1, 1, 1; 0xc2 result sound count changes: 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 3, 0, 0, 0, 0; frame count changes: 4, 4, 6, 6, 18, 5, 11, 16, 5, 8, 19, 1, 1, 1, 4; repeat-loop가 있어 단순 frameSequence 길이만으로 타수를 판단하면 안 된다. |
| 스마슈 | 대타격 | `constant-fixed-family` | `0x05`, `0x06`, `0x07`, `0x08` | 1, 1, 1, 1 | 6, 6, 6, 6 | [], [], [], [] | 1, 1, 1, 1 | 0, 0, 0, 0 | 0, 0, 0, 0 | 현재 승격된 actor VM 기준으로 숙련도별 frame/gate/hit 변화가 없다.; 이는 미해석이 아니라 actor 동작은 고정이고, 숙련도 차이는 MP/헬퍼/효과 크기/결과음 등 다른 레이어에서 확인해야 하는 패밀리다. |
| 스마슈 | 백인일섬 | `constant-fixed-family` | `0x14`, `0x15`, `0x16`, `0x17` | 1, 1, 1, 1 | 5, 5, 5, 5 | [], [], [], [] | 1, 1, 1, 1 | 0, 0, 0, 0 | 0, 0, 0, 0 | 현재 승격된 actor VM 기준으로 숙련도별 frame/gate/hit 변화가 없다.; 이는 미해석이 아니라 actor 동작은 고정이고, 숙련도 차이는 MP/헬퍼/효과 크기/결과음 등 다른 레이어에서 확인해야 하는 패밀리다. |
| 스마슈 | 비검·목단미인 | `visual-scaling` | `0x0d`, `0x0e`, `0x0f`, `0x10` | 1, 1, 1, 1 | 6, 10, 14, 18 | [], [], [], [] | 1, 1, 1, 1 | 1, 2, 3, 4 | 1, 2, 3, 4 | payload 타수는 같지만 frame/effect sound가 숙련도에 따라 달라진다.; frame count: 6, 10, 14, 18, effect WLK count: 1, 2, 3, 4 |
| 스마슈 | 비검·시공단 | `visual-scaling` | `0x1c`, `0x1d`, `0x1e`, `0x1f` | 1, 1, 1, 1 | 4, 6, 11, 16 | [], [], [], [] | 1, 1, 1, 1 | 1, 1, 1, 1 | 0, 0, 0, 1 | payload 타수는 같지만 frame/effect sound가 숙련도에 따라 달라진다.; frame count: 4, 6, 11, 16, effect WLK count: 1, 1, 1, 1 |
| 스마슈 | 인법·분신술 | `hit-count-scaling` | `0x18`, `0x19`, `0x1a`, `0x1b` | 2, 3, 4, 5 | 12, 13, 14, 15 | [], [], [], [] | 2, 3, 4, 5 | 2, 2, 2, 2 | 0, 0, 0, 0 | payload effectCount changes: 2, 3, 4, 5; 0xc2 result sound count changes: 2, 3, 4, 5; frame count changes: 12, 13, 14, 15 |
| 스마슈 | 쾌진격 | `speed-scaling` | `0x09`, `0x0a`, `0x0b`, `0x0c` | 1, 1, 1, 1 | 4, 4, 4, 4 | [20], [16], [12], [8] | 1, 1, 1, 1 | 0, 0, 0, 0 | 0, 0, 0, 0 | movement divisor descends: 20, 16, 12, 8; 타수 증가가 아니라 같은 동작의 속도/관통 시간 변화로 처리해야 한다. |
| 아타호 | display-table fallback | `hit-count-scaling` | `0x01`, `0x02`, `0x03`, `0x04`, `0x05`, `0x06`, `0x07`, `0x08`, `0x09`, `0x33`, `0x34`, `0x35`, `0x36`, `0x37`, `0x38`, `0x39`, `0x3a`, `0x3b`, `0x3c`, `0x3d`, `0x3e`, `0x3f`, `0x40`, `0x41` | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2 | 3, 5, 3, 3, 11, 11, 11, 11, 11, 2, 2, 2, 2, 16, 16, 20, 1, 2, 2, 12, 12, 12, 12, 12 | [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] | 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 | 0, 0, 0, 0, 3, 3, 3, 3, 3, 2, 2, 2, 2, 4, 4, 10, 0, 1, 1, 3, 3, 3, 3, 3 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | payload effectCount changes: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2; 0xc2 result sound count changes: 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0; frame count changes: 3, 5, 3, 3, 11, 11, 11, 11, 11, 2, 2, 2, 2, 16, 16, 20, 1, 2, 2, 12, 12, 12, 12, 12 |
| 아타호 | 맹호난무 | `visual-scaling` | `0x23`, `0x24`, `0x25`, `0x26` | 1, 1, 1, 1 | 11, 12, 13, 19 | [], [], [], [] | 1, 1, 1, 1 | 2, 2, 2, 3 | 0, 2, 2, 2 | payload 타수는 같지만 frame/effect sound가 숙련도에 따라 달라진다.; frame count: 11, 12, 13, 19, effect WLK count: 2, 2, 2, 3 |
| 아타호 | 맹호룬룬권 | `hit-count-scaling` | `0x2f`, `0x30`, `0x31`, `0x32` | 2, 3, 4, 5 | 9, 11, 13, 17 | [], [], [], [] | 2, 3, 4, 5 | 1, 1, 1, 1 | 0, 0, 0, 0 | payload effectCount changes: 2, 3, 4, 5; 0xc2 result sound count changes: 2, 3, 4, 5; frame count changes: 9, 11, 13, 17 |
| 아타호 | 맹호비상각 | `speed-scaling` | `0x0e`, `0x0f`, `0x10`, `0x11` | 1, 1, 1, 1 | 2, 2, 2, 2 | [32], [24], [16], [8] | 1, 1, 1, 1 | 1, 1, 1, 1 | 0, 0, 0, 0 | movement divisor descends: 32, 24, 16, 8; first frame gate descends: 32, 24, 16, 8; 타수 증가가 아니라 같은 동작의 속도/관통 시간 변화로 처리해야 한다. |
| 아타호 | 맹호스페셜 | `hit-count-scaling` | `0x16`, `0x17`, `0x18`, `0x19` | 3, 3, 4, 7 | 14, 10, 20, 28 | [], [4], [], [4] | 3, 3, 4, 7 | 0, 0, 0, 0 | 0, 0, 0, 0 | payload effectCount changes: 3, 3, 4, 7; 0xc2 result sound count changes: 3, 3, 4, 7; frame count changes: 14, 10, 20, 28 |
| 아타호 | 맹호의 울부짖음 | `constant-fixed-family` | `0x27`, `0x28`, `0x29`, `0x2a` | 1, 1, 1, 1 | 5, 5, 5, 5 | [], [], [], [] | 1, 1, 1, 1 | 1, 1, 1, 1 | 0, 0, 0, 0 | 현재 승격된 actor VM 기준으로 숙련도별 frame/gate/hit 변화가 없다.; 이는 미해석이 아니라 actor 동작은 고정이고, 숙련도 차이는 MP/헬퍼/효과 크기/결과음 등 다른 레이어에서 확인해야 하는 패밀리다. |
| 아타호 | 비기·맹호광파참 | `hit-count-scaling` | `0x1a`, `0x1b`, `0x1c`, `0x1d` | 3, 3, 4, 5 | 7, 7, 8, 9 | [], [], [], [] | 3, 3, 4, 5 | 2, 2, 2, 2 | 0, 0, 0, 0 | payload effectCount changes: 3, 3, 4, 5; 0xc2 result sound count changes: 3, 3, 4, 5; frame count changes: 7, 7, 8, 9 |
| 아타호 | 취호권 개인공격기 | `mixed-fixed-family` | `0x1e`, `0x1f`, `0x20`, `0x21`, `0x22` | 2, 6, 2, 2, 2 | 10, 13, 12, 13, 15 | [], [], [], [], [] | 1, 1, 1, 1, 1 | 2, 2, 2, 2, 2 | 0, 1, 0, 0, 2 | 한 패밀리에 서로 다른 고정/장비 기술명이 섞여 있어 4단계 숙련도 비교로 보면 안 된다.; skill names: 조금 취한 철권, 지옥 다리후리기, 만취한 철권, 염가열소, 인사불성 철권; repeat-loop 포함 기술이 있어 별도 수동 검토가 필요하다. |
| 아타호 | 폭전축/퍽전축 | `hit-count-scaling` | `0x12`, `0x13`, `0x14`, `0x15` | 1, 1, 2, 3 | 9, 9, 9, 9 | [], [], [], [] | 1, 1, 2, 3 | 0, 0, 0, 0 | 0, 0, 0, 0 | payload effectCount changes: 1, 1, 2, 3; 0xc2 result sound count changes: 1, 1, 2, 3 |
| 아타호 | 호격권 | `visual-scaling` | `0x0a`, `0x0b`, `0x0c`, `0x0d` | 1, 1, 1, 1 | 6, 6, 8, 12 | [], [], [], [] | 1, 1, 1, 1 | 1, 1, 2, 4 | 0, 0, 0, 0 | payload 타수는 같지만 frame/effect sound가 숙련도에 따라 달라진다.; frame count: 6, 6, 8, 12, effect WLK count: 1, 1, 2, 4 |
| 아타호 | 호포권 | `constant-fixed-family` | `0x2b`, `0x2c`, `0x2d`, `0x2e` | 1, 1, 1, 1 | 4, 4, 4, 4 | [], [], [], [] | 1, 1, 1, 1 | 1, 1, 1, 1 | 0, 0, 0, 0 | 현재 승격된 actor VM 기준으로 숙련도별 frame/gate/hit 변화가 없다.; 이는 미해석이 아니라 actor 동작은 고정이고, 숙련도 차이는 MP/헬퍼/효과 크기/결과음 등 다른 레이어에서 확인해야 하는 패밀리다. |
