# 아이템 인벤토리 상태 슬롯 리뷰

## 결론

- 장비 보유/장착은 actor 상태 구조체 슬롯이고, 이 문서는 장비가 아닌 전역 아이템 인벤토리 슬롯을 다룬다.
- 소모품: `0x004576ec` id byte + `0x004576ed` count byte, 6-slot pair, 최대 10개.
- 중요품/스토리 아이템: `0x004576f8` id byte + `0x004576f9` value byte, 30-slot pair, add/shop 경로에서 최대 1.
- `부적 1장`부터 `부적 4장`은 같은 아이콘을 쓰는 별도 item id 상태이며, 하나의 수량 byte를 1..4로 올리는 구조가 아니다.
- 초기 EXE 데이터의 첫 소모품 pair `03 03`은 리프레시 워터 3개와 일치한다.

## 핵심 함수

| 함수 | 범위 | 의미 |
|---|---|---|
| 전투 소모품 선택 -> actor effect | `0x0040f6a8..0x0040f6dc` | 선택된 소모품 슬롯 index로 0x4576ec id를 읽고 actor+0x59에 효과 index를 쓴다. |
| 상점 소모품 구매 상한 | `0x0040fd3f..0x0040fdf4` | 0x4576ec/ed 6칸을 검색하고 현재 수량+구매가능 수량을 10개로 clamp한다. |
| 상점 단일 보유품 구매 상한 | `0x0040fdf4..0x0040fe68` | 보유 predicate 0x421d3d 결과를 기준으로 구매가능 수량을 1개로 clamp한다. |
| 아이템 슬롯 lookup | `0x00421c8c..0x00421d3d` | item record+0x10 flag에 따라 6칸 소모품 또는 30칸 중요품 배열에서 id를 찾는다. |
| 아이템 추가 writer | `0x00422093..0x0042224b` | flag 0이면 0x4576ec/ed 수량형 6칸 max 10, flag 1이면 0x4576f8/f9 단일형 30칸 max 1에 쓴다. |
| 아이템 슬롯 pack/sort helper | `0x0042224b..0x0042234e` | 0x4576ec 또는 0x4576f8 pair 배열의 0 구멍을 뒤로 밀고 정렬/압축한다. |
| 아이템 제거/감소 writer | `0x004226e9..0x00422899` | flag에 따라 수량/value를 감소시키고 0이 되면 pair의 id도 0으로 지운다. |
| 소모품 UI 상태 map | `0x00410f23..0x00410fc4` | 0x4576ec/ed 6칸에서 없음/부족/있음 상태 0/2/1을 만든다. |
| 중요품 UI 페이지 수 | `0x00411068..0x00411138` | 0x4576f8 nonzero id를 세어 6칸 페이지 단위로 계산한다. |
| 중요품 UI 상태 map | `0x00411138..0x004111e5` | 현재 중요품 page에서 0x4576f8/f9 pair를 읽어 없음/부족/있음 상태를 만든다. |

## 소모품

| id | name | max | effect/reference |
|---:|---|---:|---|
| 1 | 약초 | 10 | HP +50 |
| 2 | 해독초 | 10 | 독/마비 회복 |
| 3 | 리프레시 워터 | 10 | 기절 회복, HP +200 |
| 4 | 마법의 물약 | 10 | MP +50 |
| 5 | 고급한방약 | 10 | HP +100, MP +100 |
| 6 | 마수석 | 10 | 기절 회복, HP/MP 완전 회복 |

## 부적 상태 레코드

| id | name | record | icon |
|---:|---|---|---|
| 27 | 부적 １장 | `0x0048ba54` | `0x32` |
| 28 | 부적 ２장 | `0x0048ba5c` | `0x32` |
| 29 | 부적 ３장 | `0x0048ba64` | `0x32` |
| 30 | 부적 ４장 | `0x0048ba6c` | `0x32` |
