# 기술/장비 상태 슬롯 리뷰

## 결론

장비와 기술은 개별 scenario flag가 아니라 actor 상태 구조체 내부 슬롯 배열이다.
`e2/e3` gate, 장비 추가/삭제/장착, 기술 추가/삭제 helper가 같은 슬롯을 읽고 쓴다.

## 상태 구조

- actor base: `0x00457750`
- actor stride: `216` bytes (`0xd8`)
- 현재 장비: `actor+0x48` 무기/술, `actor+0x49` 방어구
- 장비 보유 슬롯: `actor+0x4a + group*6 + slot`, group 0 무기/술, group 1 방어구
- 기술 슬롯: `actor+0x56 + category*6 + slot`, category 0 기본기, 1 개인공격기, 2 전체공격기, 3 특수기

## Reader/Writer

| 함수 | 범위 | 의미 |
|---|---|---|
| 기술 보유/하위 숙련도 lookup | `0x00421b33..0x00421bdf` | actor+0x56 category 슬롯에서 action id를 하향 스캔한다. |
| 기술 숙련도 gate lookup | `0x00421bdf..0x00421d3d` | e3 handler가 호출한다. action table record+0x10 tier marker를 따라 actor+0x56 슬롯을 검사한다. |
| 장비 보유 gate lookup | `0x00421d3d..0x00421e31` | e2 handler가 호출한다. detail+0x29 type으로 actor/group을 고른 뒤 actor+0x4a 슬롯을 검사한다. |
| 기술 추가 writer | `0x00421ef7..0x00421f9c` | 중복 검사 후 actor+0x56 category의 첫 빈 슬롯에 action id를 쓴다. |
| 기술 슬롯 pack/sort helper | `0x00421f9c..0x00422093` | 기술 슬롯의 0 구멍을 뒤로 밀고 action id를 정렬/압축한다. |
| 장비 추가 writer | `0x0042234e..0x00422587` | detail+0x29 type으로 actor/group을 고른 뒤 actor+0x4a group 슬롯에 item id를 쓴다. |
| 장비 슬롯 pack/sort helper | `0x00422587..0x0042267e` | 장비 보유 슬롯의 0 구멍을 뒤로 밀고 item id를 정렬/압축한다. |
| 기술 제거 writer | `0x0042267e..0x004226e9` | actor+0x56 category 슬롯에서 skill id를 찾아 0으로 지운다. |
| 장비 제거 writer | `0x00422899..0x00422a81` | actor+0x4a group 슬롯에서 item id를 찾아 0으로 지운다. |
| 장비 장착/제공 기술 갱신 | `0x00422a81..0x00422b95` | 현재 장비 actor+0x48/+0x49를 바꾸고 기존 제공 기술 제거 뒤 detail+0x2a..0x2d 기술을 추가한다. |

## 장비 type byte

`detail+0x29`의 하위 비트는 캐릭터, `0x80`은 방어구 그룹을 뜻한다.

| type | actor | group | examples |
|---|---|---|---|
| `0x01` | 아타호 | 무기 | 맨주먹, 술, 노주, 특급주 |
| `0x02` | 린샹 | 무기 | 고양이 발톱, 곰발톱, 빙마조, 표범의 발톱 |
| `0x04` | 스마슈 | 무기 | 닌자도, 청룡도, 불타는 마검, 그레이트소드 |
| `0x81` | 아타호 | 방어구 | 인민복, 권법가 도복, 달인의 도복, 호랑이 도복 |
| `0x82` | 린샹 | 방어구 | 드레스, 프리티드레스, 쿵푸드레스, 배틀드레스 |
| `0x84` | 스마슈 | 방어구 | 스마슈타이츠, 가죽 갑옷, 흑장속, 철편 갑옷 |

## 주의

- 단 평가/퍼펙트 클리어가 보는 기술/장비 완료 조건은 이 슬롯 배열의 결과다.
- scenario `0x31/0x32` bit와 혼동하면 안 된다.
- 장비 장착 함수는 현재 장비 값을 바꾸면서 이전 장비 제공 기술을 제거하고 새 장비 제공 기술을 추가한다.
