상태창 UI 표현부 리뷰

ESC/X 메뉴의 좌측 대형 window region #6 안에 그려지는 상태창 텍스트, actor 수치 필드, 장비명 draw 명령을 EXE 페이로드 기준으로 정리한 자료입니다.

status payload
0x004e842e
window region
#6 · 416x352
actor row
0x00457750 + 0xd8
stat coverage
12/12

결론

상태창 문구 테이블

사용자가 제시한 1장 아타호 상태창 문구가 첫 엔트리와 일치합니다. 이후 같은 40 13 01 구조의 문구 그룹을 추가 스캔했으며, 3개 서브테이블이 있는 그룹은 문체상 아타호/린샹/스마슈 순서 후보로 볼 수 있습니다. 시나리오 플래그별 table id 선택 조건은 아직 별도 추적 대상입니다.

좌표 주의: 40 13 01 그룹은 텍스트 선택 구조입니다. 문구 프레임 위치는 EXE 기반 window template #0 하단 nested frame에서 산출했지만, 텍스트를 실제로 소비하는 cursor 명령은 아직 직접 확인하지 못했습니다.

root
0x004f8500
selector
0x004f8510
pointer table
0x004f851c
adjacent resource
cara_at1.cns

문구 그룹 후보

table idactor tablesmax entriessubtable VAsamples
0x7715단일/current 후보: 0x004f8510오늘은 정말 날씨가 좋군 / 정말 쇼핑하기 좋은 날씨야
0x78110단일/current 후보: 0x004b1ec8계속 걸었더니 피곤하군 / 배도 고픈걸 / 가까운 마을에서 쉬다 갈까
0x79225actor-table-1 후보: 0x0047ea04
actor-table-2 후보: 0x0047eda4
흐음,감회가 새롭군 / 이곳으로 돌아오는 것도 / 오랫만이군!!
대체 여기가 어디지? / 내가 길을 잃은 건가… / 그러면 무도수행은…
0x7a29actor-table-1 후보: 0x0043ffd4
actor-table-2 후보: 0x00440266
꽤 깊은 산속까지 와버렸군 / 정말 이 부근에「호랑이동굴」이 / 있는걸까?
이사람…아타호가 분명하군 / 설마 이런곳에서 만날줄이야… / 설마 이게 운명이라는 걸까?
0x7b342아타호 후보: 0x00511b08
린샹 후보: 0x0051231e
스마슈 후보: 0x00512bc8
동굴인데도 꽤 밝은 곳인걸 / 어둡고 음침한 곳이라고만 / 생각했었는데….
이곳이 분지라는 곳이군 / 깎아지른듯한 절벽에 둘러싸여 / 외부와의 왕래는 드물겠어
쳇! 쫓겨나고 말았군! / 그 아름다운 각선미와… / 작별이라니…쓸쓸하군…
0x7c324아타호 후보: 0x004d7dbc
린샹 후보: 0x004d837a
스마슈 후보: 0x004d87e2
…어쩐지 뭔가 꿈을 / 꾸고 있었던 느낌인데… / 으∼생각이 나질 않아!
아타호… / 정말 기억하지 못하는거야…
우∼나온다∼ / 빨리 화장실로!
0x7d317아타호 후보: 0x0048c428
린샹 후보: 0x0048c9a0
스마슈 후보: 0x0048cdda
린샹… / 어쨌든 다시 한번 만나 / 확실하게 이야기해야 해
아타호,스마슈… / 정말 고마워요 / 빨리 마의 계곡으로 가요
남이 뭐라고해도 / 역시 아저씬…
0x7e34아타호 후보: 0x00454e28
린샹 후보: 0x00454f50
스마슈 후보: 0x0045504c
호오∼ / 설마 이런곳에 / 수련장이 있을 줄이야!!
어때 각오는 됐어? / 이제 뒤돌아설 순 없어
이곳이 환상의 수련장… / 자,정신 바짝 차리자구요
0x7f31아타호 후보: 0x00534724
린샹 후보: 0x00534782
스마슈 후보: 0x005347d0
체험판은 본편보다 짧은가봐 / 그렇다면 전력을 다해 / 단숨에 끝내볼까
이봐요 아타호… / 너무 무리하다간 / 다칠 수도 있어요
아저씨 기운이 넘치는군요 / 나도 질 수는 없는 일이니 / 있는 힘을 다 짜볼까!

기존 0x77 아타호 테이블

#startendlinesdisplay
10x004f85300x004f856e오늘은 정말 날씨가 좋군
정말 쇼핑하기 좋은 날씨야
오늘은 정말 날씨가 좋군 / 정말 쇼핑하기 좋은 날씨야
20x004f856e0x004f85bc도대체 누구야?
기껏 좋은 기분으로
잠을 청하고 있었는데 귀찮군
도대체 누구야? / 기껏 좋은 기분으로 / 잠을 청하고 있었는데 귀찮군
30x004f85bc0x004f8606분명 머리맡의 항아리에
종이조각들을 정리해서
넣어두었는데….
분명 머리맡의 항아리에 / 종이조각들을 정리해서 / 넣어두었는데….
40x004f86060x004f8632안내장도 있겠다
서둘러서 출발해볼까
안내장도 있겠다 / 서둘러서 출발해볼까
50x004f86320x004f866e설마 나까지 노릴 줄이야…
녀석…가만두지 않겠다!
설마 나까지 노릴 줄이야… / 녀석…가만두지 않겠다!
문구 테이블 포인터 참조
targetref VAfile offset
0x004f85100x004f85040x000f6504
0x004f85300x004f851c0x000f651c
0x004f856e0x004f85200x000f6520
0x004f85bc0x004f85240x000f6524
0x004f86060x004f85280x000f6528
0x004f86320x004f852c0x000f652c
0x004f866e0x004f85080x000f6508
0x004f86720x004f850c0x000f650c
0x004f86760x004f85180x000f6518

30 85 4f 00 6e 85 4f 00 bc 85 4f 00 06 86 4f 00 32 86 4f 00

고정 텍스트 draw

VAopcodex,ytextraw
0x004e84da40 0e24,128무기40 0e 18 00 80 00 00 00 b9 ab b1 e2
0x004e84f640 0e24,192방어구40 0e 18 00 c0 00 00 00 b9 e6 be ee b1 b8
0x004e851440 0e208,24레벨 40 0e d0 00 18 00 00 00 b7 b9 ba a7 a1 a1
0x004e852a40 0e208,48체력 40 0e d0 00 30 00 00 00 c3 bc b7 c2 a1 a1
0x004e854a40 0e208,72기력 40 0e d0 00 48 00 00 00 b1 e2 b7 c2 a1 a1
0x004e856a40 0e208,96경험 40 0e d0 00 60 00 00 00 b0 e6 c7 e8 a1 a1
0x004e858a40 0e208,128공격력40 0e d0 00 80 00 00 00 b0 f8 b0 dd b7 c2
0x004e85a040 0e208,152방어력40 0e d0 00 98 00 00 00 b9 e6 be ee b7 c2
0x004e85b640 0e208,176기술력40 0e d0 00 b0 00 00 00 b1 e2 bc fa b7 c2
0x004e85cc40 0e208,200순발력40 0e d0 00 c8 00 00 00 bc f8 b9 df b7 c2
0x004e85e240 0e208,224 운 40 0e d0 00 e0 00 00 00 a1 a1 bf ee a1 a1

수치 필드 draw

VAlabel contextactor offsetfieldwidthevidenceraw
0x004e8522레벨0x06레벨4actor row +0x06 level40 2e 04 04 06 00 00 00
0x004e8538체력0x08현재 체력4actor row +0x08 current HP40 2e 04 04 08 00 00 00
0x004e8542체력0x0a최대 체력3actor row +0x0a max HP40 2e 04 03 0a 00 00 00
0x004e8558기력0x0e현재 기력4actor row +0x0e current MP40 2e 04 04 0e 00 00 00
0x004e8562기력0x10최대 기력3actor row +0x10 max MP40 2e 04 03 10 00 00 00
0x004e8578경험0x14현재 경험4actor row +0x14 current EXP40 2e 04 04 14 00 00 00
0x004e8582경험0x16다음/필요 경험 후보3actor row +0x16 next/required EXP candidate40 2e 04 03 16 00 00 00
0x004e8598공격력0x1c공격력4actor row +0x1c attack40 2e 04 04 1c 00 00 00
0x004e85ae방어력0x20방어력4actor row +0x20 defense40 2e 04 04 20 00 00 00
0x004e85c4기술력0x22기술력4actor row +0x22 technique40 2e 04 04 22 00 00 00
0x004e85da순발력0x24순발력4actor row +0x24 agility40 2e 04 04 24 00 00 00
0x004e85f00x264actor row +0x26 luck40 2e 04 04 26 00 00 00

장비명 draw

VAcursor x,yslotslot idtabletable roleinterpretationraw
0x004e84ee32,152무기/술00x0048b1dcequipment tabledraws equipped item icon and equipment name at the current 40 0e cursor40 30 00 00 dc b1 48 00
0x004e850c32,216방어구10x0048b1dcequipment tabledraws equipped item icon and equipment name at the current 40 0e cursor40 30 01 00 dc b1 48 00

장비 아이콘 cell

장비 record의 meta high word 0x0006item.cns, low word는 32x32 cell index입니다. 상태창 미리보기는 이 확정 매핑으로 착용 장비 아이콘을 그립니다.

equipment idnameitem.cns cellrectmetasource
1맨주먹0x000,0,32,320x00060000out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
20x0132,0,32,320x00060001out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
3노주0x0264,0,32,320x00060002out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
4특급주0x0396,0,32,320x00060003out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
5화주0x04128,0,32,320x00060004out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
6명주·귀신살0x05160,0,32,320x00060005out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
7인민복0x06192,0,32,320x00060006out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
8권법가 도복0x07224,0,32,320x00060007out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
9달인의 도복0x08256,0,32,320x00060008out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
10호랑이 도복0x09288,0,32,320x00060009out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
11나찰의 도복0x0a320,0,32,320x0006000aout/ui_cns_grid_mappings.json equipment table confirmed-item-grid
12백호 도복0x0b352,0,32,320x0006000bout/ui_cns_grid_mappings.json equipment table confirmed-item-grid
13고양이 발톱0x0c0,32,32,320x0006000cout/ui_cns_grid_mappings.json equipment table confirmed-item-grid
14곰발톱0x0d32,32,32,320x0006000dout/ui_cns_grid_mappings.json equipment table confirmed-item-grid
15빙마조0x0e64,32,32,320x0006000eout/ui_cns_grid_mappings.json equipment table confirmed-item-grid
16표범의 발톱0x0f96,32,32,320x0006000fout/ui_cns_grid_mappings.json equipment table confirmed-item-grid
17팬톰크로우0x10128,32,32,320x00060010out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
18호랑이발톱0x11160,32,32,320x00060011out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
19드레스0x12192,32,32,320x00060012out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
20프리티드레스0x13224,32,32,320x00060013out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
21쿵푸드레스0x14256,32,32,320x00060014out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
22배틀드레스0x15288,32,32,320x00060015out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
23데몬드레스0x16320,32,32,320x00060016out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
24퀸드레스0x17352,32,32,320x00060017out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
25닌자도0x180,64,32,320x00060018out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
26청룡도0x1932,64,32,320x00060019out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
27불타는 마검0x1a64,64,32,320x0006001aout/ui_cns_grid_mappings.json equipment table confirmed-item-grid
28그레이트소드0x1b96,64,32,320x0006001bout/ui_cns_grid_mappings.json equipment table confirmed-item-grid
29나찰의 흉인0x1c128,64,32,320x0006001cout/ui_cns_grid_mappings.json equipment table confirmed-item-grid
30마인아수라0x1d160,64,32,320x0006001dout/ui_cns_grid_mappings.json equipment table confirmed-item-grid
31스마슈타이츠0x1e192,64,32,320x0006001eout/ui_cns_grid_mappings.json equipment table confirmed-item-grid
32가죽 갑옷0x1f224,64,32,320x0006001fout/ui_cns_grid_mappings.json equipment table confirmed-item-grid
33흑장속0x20256,64,32,320x00060020out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
34철편 갑옷0x21288,64,32,320x00060021out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
35어설트 슈트0x22320,64,32,320x00060022out/ui_cns_grid_mappings.json equipment table confirmed-item-grid
36투신의 갑옷0x23352,64,32,320x00060023out/ui_cns_grid_mappings.json equipment table confirmed-item-grid

초상화/상태 패널 후보

VAcursor x,yface/actor argarg0arg2interpretationraw
0x004e847a56,400013draws a portrait/status marker at the current 40 0e cursor; the trailing words are not x/y offsets40 24 00 00 00 00 0d 00
0x004e84a656,402013draws a portrait/status marker at the current 40 0e cursor; the trailing words are not x/y offsets40 24 00 00 02 00 0d 00
0x004e84d256,401013draws a portrait/status marker at the current 40 0e cursor; the trailing words are not x/y offsets40 24 00 00 01 00 0d 00

상태창 미리보기

window.cns template #0, face_01.cns 80x80 grid, actor row 초기값을 조합한 검토용 렌더링입니다. 문구는 선택한 table id 안에서 현재 캐릭터에 대응되는 서브테이블만 사용합니다. 해당 캐릭터 테이블이 없으면 빈 상태로 표시합니다.

캐릭터
장비/레벨
레벨 1 능력치는 고정입니다. 레벨을 바꾸면 해당 레벨까지 캐릭터별 상승 범위를 누적하고, 운은 rand(100)+level/2+1 구조로 결정합니다.
상태창 문구 그룹/엔트리
문구 프레임 위치 · template #0 기반

프레임: [32, 256, 352, 80] · 텍스트 영역: [48, 272, 320, 48] · 상태: template-derived-frame-position-text-consumer-unverified

줄피치: EXE 0x02 줄이동 opcode는 줄 수 분기 없이 런타임 font metric 값을 y에 더한다. 이 미리보기는 웹의 실제 Canvas 폰트 metric을 읽고, 실패 시 16px를 fallback으로 쓴다.

40 24 인자 survey

전체 data/rdata에서 8바이트 command 형태로 보이는 40 24만 모은 것입니다. 상태창은 arg2=0x0d 3개를 사용합니다.

count 28 · arg1 values 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d · arg2 histogram {'0x0e': 7, '0x05': 18, '0x0d': 3}

VAarg1arg2next opcoderaw
0x004e80140x000x0e0x0e40 24 00 00 00 00 0e 00
0x004e80240x010x0e0x0e40 24 00 00 01 00 0e 00
0x004e80340x020x0e0x0e40 24 00 00 02 00 0e 00
0x004e80e00x000x0e0x0e40 24 00 00 00 00 0e 00
0x004e81580x000x050x2440 24 00 00 00 00 05 00
0x004e81600x010x050x2440 24 00 00 01 00 05 00
0x004e81680x020x050x2440 24 00 00 02 00 05 00
0x004e81700x030x050x2440 24 00 00 03 00 05 00
0x004e81780x080x050x2440 24 00 00 08 00 05 00
0x004e81800x040x050x0f40 24 00 00 04 00 05 00
0x004e82940x010x0e0x0040 24 00 00 01 00 0e 00
0x004e83b20x050x050x2440 24 00 00 05 00 05 00
0x004e83ba0x060x050x2440 24 00 00 06 00 05 00
0x004e83c20x070x050x2440 24 00 00 07 00 05 00
0x004e83ca0x010x050x2440 24 00 00 01 00 05 00
0x004e83d20x080x050x2440 24 00 00 08 00 05 00
0x004e83da0x090x050x0f40 24 00 00 09 00 05 00
0x004e847a0x000x0d0x0140 24 00 00 00 00 0d 00
0x004e84a60x020x0d0x0140 24 00 00 02 00 0d 00
0x004e84d20x010x0d0x0e40 24 00 00 01 00 0d 00
0x004e88a60x480x050x0e40 24 00 00 48 00 05 00
0x004e88c60x490x050x0e40 24 00 00 49 00 05 00
0x004e88e60x4a0x050x0e40 24 00 00 4a 00 05 00
0x004e89060x4b0x050x0e40 24 00 00 4b 00 05 00
0x004e89260x4c0x050x0e40 24 00 00 4c 00 05 00
0x004e89460x4d0x050x0e40 24 00 00 4d 00 05 00
0x004e8d8e0x090x0e0x3240 24 00 00 09 00 0e 00
0x004e8da60x0a0x0e0x0e40 24 00 00 0a 00 0e 00

보류