기술/장비 상태 슬롯 리뷰

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 ...