기술/장비 상태 슬롯 리뷰
HWANSE_SKILL_EQUIPMENT_STATE_LAYOUT_REVIEW_READY
장비와 기술은 개별 scenario flag가 아니라 actor 상태 구조체 내부의 6-slot 배열이다. e2/e3 gate, 장비 추가/삭제/장착, 기술 추가/삭제 helper가 같은 슬롯을 읽고 쓴다.
0x00457750actor state base
216actor stride bytes
+0x4a장비 보유 슬롯 offset
+0x56기술 슬롯 offset
Slot Layout
{
"baseVaHex": "0x00457750",
"stride": 216,
"currentEquipment": {
"offsetHex": "+0x48",
"weaponOrLiquor": "byte actor+0x48",
"armor": "byte actor+0x49"
},
"equipmentSlots": {
"offsetHex": "+0x4a",
"shape": "2 groups x 6 slots",
"groups": {
"0": "무기/술",
"1": "방어구"
}
},
"skillSlots": {
"offsetHex": "+0x56",
"shape": "4 categories x 6 slots",
"categories": {
"0": "기본기",
"1": "개인공격기",
"2": "전체공격기",
"3": "특수기"
}
}
}
Actor Initial State
| actor | base | current equipment | owned equipment slots | skill slots |
|---|---|---|---|---|
| 아타호 | 0x00457750 |
+0x48=1:맨주먹 / +0x49=7:인민복 | +0x4a 무기/술 [1:맨주먹, 0, 0, 0, 0, 0] +0x50 방어구 [7:인민복, 0, 0, 0, 0, 0] |
+0x56 기본기 [1, 2, 3, 4, 0, 0] +0x5c 개인공격기 [10:호격권, 0, 0, 0, 0, 0] +0x62 전체공격기 [35:맹호난무, 0, 0, 0, 0, 0] +0x68 특수기 [58, 59, 0, 0, 0, 0] |
| 린샹 | 0x00457828 |
+0x48=13:고양이 발톱 / +0x49=19:드레스 | +0x4a 무기/술 [13:고양이 발톱, 0, 0, 0, 0, 0] +0x50 방어구 [19:드레스, 0, 0, 0, 0, 0] |
+0x56 기본기 [1, 2, 3, 4, 5, 0] +0x5c 개인공격기 [9:안면백조권, 0, 0, 0, 0, 0] +0x62 전체공격기 [28:고양이달래기, 0, 0, 0, 0, 0] +0x68 특수기 [47, 48, 49, 0, 0, 0] |
| 스마슈 | 0x00457900 |
+0x48=25:닌자도 / +0x49=31:스마슈타이츠 | +0x4a 무기/술 [25:닌자도, 0, 0, 0, 0, 0] +0x50 방어구 [31:스마슈타이츠, 0, 0, 0, 0, 0] |
+0x56 기본기 [1, 0, 0, 0, 0, 0] +0x5c 개인공격기 [5:대타격, 0, 0, 0, 0, 0] +0x62 전체공격기 [20:백인일섬, 0, 0, 0, 0, 0] +0x68 특수기 [35, 36, 0, 0, 0, 0] |
Readers/Writers
| function | VA span | role | call refs |
|---|---|---|---|
| 기술 보유/하위 숙련도 lookup | 0x00421b33..0x00421bdf |
actor+0x56 category 슬롯에서 action id를 하향 스캔한다. | 3 |
| 기술 숙련도 gate lookup | 0x00421bdf..0x00421d3d |
e3 handler가 호출한다. action table record+0x10 tier marker를 따라 actor+0x56 슬롯을 검사한다. | 1 |
| 장비 보유 gate lookup | 0x00421d3d..0x00421e31 |
e2 handler가 호출한다. detail+0x29 type으로 actor/group을 고른 뒤 actor+0x4a 슬롯을 검사한다. | 3 |
| 기술 추가 writer | 0x00421ef7..0x00421f9c |
중복 검사 후 actor+0x56 category의 첫 빈 슬롯에 action id를 쓴다. | 3 |
| 기술 슬롯 pack/sort helper | 0x00421f9c..0x00422093 |
기술 슬롯의 0 구멍을 뒤로 밀고 action id를 정렬/압축한다. | 0 |
| 장비 추가 writer | 0x0042234e..0x00422587 |
detail+0x29 type으로 actor/group을 고른 뒤 actor+0x4a group 슬롯에 item id를 쓴다. | 0 |
| 장비 슬롯 pack/sort helper | 0x00422587..0x0042267e |
장비 보유 슬롯의 0 구멍을 뒤로 밀고 item id를 정렬/압축한다. | 0 |
| 기술 제거 writer | 0x0042267e..0x004226e9 |
actor+0x56 category 슬롯에서 skill id를 찾아 0으로 지운다. | 2 |
| 장비 제거 writer | 0x00422899..0x00422a81 |
actor+0x4a group 슬롯에서 item id를 찾아 0으로 지운다. | 1 |
| 장비 장착/제공 기술 갱신 | 0x00422a81..0x00422b95 |
현재 장비 actor+0x48/+0x49를 바꾸고 기존 제공 기술 제거 뒤 detail+0x2a..0x2d 기술을 추가한다. | 1 |
Write Semantics
| kind | function | write target | return/side effect |
|---|---|---|---|
| equipment-add | 0x0042234e |
actorBase+0x4a+group*6+slot | 0 inserted, 1 duplicate, 2 no empty slot |
| equipment-remove | 0x00422899 |
actorBase+0x4a+group*6+slot = 0 | 0 removed, 1 not found |
| equipment-apply | 0x00422a81 |
actorBase+0x48 weapon/liquor or actorBase+0x49 armor | old equipment-provided skills removed, new detail+0x2a..0x2d skills inserted |
| skill-add | 0x00421ef7 |
actorBase+0x56+category*6+slot | 1 already known, 0 inserted |
| skill-remove | 0x0042267e |
actorBase+0x56+category*6+slot = 0 | matched slot cleared then packed/sorted |
Equipment Type Map
detail record +0x29 type byte. Low bits select actor, high bit 0x80 selects armor group.
| type | actor | group | examples |
|---|---|---|---|
0x01 |
아타호 | 무기 | 맨주먹, 술, 노주, 특급주 |
0x02 |
린샹 | 무기 | 고양이 발톱, 곰발톱, 빙마조, 표범의 발톱 |
0x04 |
스마슈 | 무기 | 닌자도, 청룡도, 불타는 마검, 그레이트소드 |
0x81 |
아타호 | 방어구 | 인민복, 권법가 도복, 달인의 도복, 호랑이 도복 |
0x82 |
린샹 | 방어구 | 드레스, 프리티드레스, 쿵푸드레스, 배틀드레스 |
0x84 |
스마슈 | 방어구 | 스마슈타이츠, 가죽 갑옷, 흑장속, 철편 갑옷 |
Switch Tables
| table | VA | bytes | raw |
|---|---|---|---|
| 장비 보유 predicate jump table | 0x00421df8 |
28 | 5f 1d 42 00 85 1d 42 00 ab 1d 42 00 72 1d 42 00 98 1d 42 00 be 1d 42 00 98 1e 42 00 |
| 장비 보유 predicate type index table | 0x00421e14 |
132 | 00 01 06 02 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 ... |
| 장비 추가 writer jump table | 0x004223f7 |
28 | 70 23 42 00 90 23 42 00 b0 23 42 00 80 23 42 00 a0 23 42 00 c0 23 42 00 97 24 42 00 |
| 장비 추가 writer type index table | 0x00422413 |
132 | 00 01 06 02 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 ... |
| 장비 제거 writer jump table | 0x00422942 |
28 | bb 28 42 00 db 28 42 00 fb 28 42 00 cb 28 42 00 eb 28 42 00 0b 29 42 00 e2 29 42 00 |
| 장비 제거 writer type index table | 0x0042295e |
132 | 00 01 06 02 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 ... |