12. 랑그릿사2 상점 데이터
랑그릿사2 PC판의 아이템 데이터에 대해서는 11번 글에서 살펴봤습니다.
상점의 아이템 목록 데이터는 메모리 주소 00_44_6C_10 (헥스에디터 기준 00_04_5A_10) 를 살펴봐야합니다.
Ghidra로 살펴보면 00_44_6C_10 부터 00_44_6D_9F 까지 주소로 채워져있는 것을 알 수 있습니다.
Offset (h)
00_44_6C_10 : CC 6A 44 00 (시나리오 1 상점 아이템 목록 데이터 주소)
00_44_6C_14 : D0 6A 44 00 (시나리오 2 상점 아이템 목록 데이터 주소)
00_44_6C_18 : D8 6A 44 00 (시나리오 3 상점 아이템 목록 데이터 주소)
00_44_6C_1C : E0 6A 44 00 (시나리오 4 상점 아이템 목록 데이터 주소)
...
모든 데이터는 littel endian 방식이므로 바이트 단위로 거꾸로 읽어야 합니다. 예를 들어 CC 6A 44 00 는 00_44_6A_CC 로 해석됩니다. 헥스에디터에서 편집하려면 여기서 00_40_12_00 을 빼줘야합니다. 00_44_6A_CC에서 00_40_12_00을 빼면 00_04_58_CC 이 됩니다. 이런 식으로 변환해서 정리하면 다음과 같이 됩니다.
<상점 아이템 목록 데이터 주소(헥스에디터 기준)>
시나리오 1 : 00_04_58_CC
시나리오 2 : 00_04_58_D0
시나리오 3 : 00_04_58_D8
시나리오 4 : 00_04_58_E0
시나리오 5 : 00_04_58_E8
시나리오 6 : 00_04_58_D0
...
시나리오 99 : 00_04_6B_D0
시나리오 100 : 00_04_6B_E8
(사실 시나리오 99와 시나리오 100은 없고 각각 숨겨진 상점1,2에 해당됩니다.)
헥스에디터로 langpc2.exe 파일을 열어서 해당되는 부분을 살펴봅시다. 00 은 데이터의 끝을 나타냅니다. 예를 들어, 시나리오 5의 상점 데이터가 있는 00_04_58_E8 부분을 살펴보면 04 1A 1E 00 00 00 00 00 02 03 04 0C 17 18 1E 00 ... 과 같이 나타나는데, 04 1A 1E 까지가 의미있는 부분입니다. 마찬가지 방식으로 상점 데이터를 정리하면 다음과 같습니다.
<상점 아이템 목록 데이터>
시나리오 1 : 01 15
시나리오 2 : 01 1A
시나리오 3 : 01 02 03 15 16 1A
시나리오 4 : 02 03 16 17 18 1E
시나리오 5 : 04 1A 1E
시나리오 6 : 01 1A
...
각각의 숫자는 아이템 번호를 의미하며 아이템 번호는 11번 글에서 본 순서와 같습니다. 즉, 다음과 같습니다.
01 : 나이프
02 : 워 해머
03 : 그레이트 소드
04 : 완드
05 : 플레임 랜스
06 : 데빌 액스
07 : D-슬레이어
08 : 랑그릿사
09 : 랑그릿사
0A : 철 아령
0B : 메사이얀 소드
0C : 오브
0D : 홀리 로드
0E : 홀리 로드
0F : 다크 로드
10 : 롱 보우
11 : 아바 레스트
12 : 알하자드
13 : 알하자드
14 : 오딘의 방패
15 : 스몰 실드
16 : 라지 실드
17 : 체인 메일
18 : 플레이트아머
19 : 아절트 슈트
1A : 로브
1B : 드래곤 스케일
1C : 미라쥬 로브
1D : 아뮬렛
1E : 크로스
1F : 넥크리스
20 : 스피드 부츠
21 : 크라운
22 : 그레이프 닐
23 : 룬스톤
예를 들어, 시나리오 4의 상점에 있는 아이템은 02(워 해머), 03(그레이트 소드), 16(라지 실드), 17(체인 메일), 18(플레이트아머), 1E(크로스) 입니다.
그리고 아이템의 가격은 메모리 주소 00_44_6D_E8 (헥스에디터 기준 00_04_5B_E8) 에 있습니다.
Offset (h)
00000000 : 05 00 0C 00 1E 00 0F 00 52 03 FA 00 E8 03 00 00
00000010 : 00 00 01 00 3C 00 64 00 00 00 00 00 00 00 64 00
00000020 : F4 01 00 00 00 00 CC 01 06 00 14 00 28 00 3C 00
...
아이템이 총 35개이고 아이템 하나당 2바이트씩 정보가 있으므로 총 35 x 2바이트 = 70바이트가 있습니다. 가격 데이터를 아이템 순서대로 정리해보면 다음과 같습니다.
01 : 나이프 : 05 00
02 : 워 해머 : 0C 00
03 : 그레이트 소드 : 1E 00
04 : 완드 : 0F 00
05 : 플레임 랜스 : 52 03
06 : 데빌 액스 : FA 00
...
가격 데이터도 littel endian 이므로 거꾸로 읽어야 합니다. 플레임 랜스의 가격 데이터는 52 03 이므로 03_52로 읽어야 하고 16진수를 10진수로 바꾸면 850이 됩니다. 여기에 10을 곱해주면 실제 가격인 8500이 나옵니다. 마찬가지 방식으로 하면 다음과 같이 아이템의 가격을 알 수 있습니다.
01 : 나이프 : 50
02 : 워 해머 : 120
03 : 그레이트 소드 : 300
04 : 완드 : 150
05 : 플레임 랜스 : 8500
06 : 데빌 액스 : 2500
...
상점의 아이템 목록 데이터는 메모리 주소 00_44_6C_10 (헥스에디터 기준 00_04_5A_10) 를 살펴봐야합니다.
Ghidra로 살펴보면 00_44_6C_10 부터 00_44_6D_9F 까지 주소로 채워져있는 것을 알 수 있습니다.
Offset (h)
00_44_6C_10 : CC 6A 44 00 (시나리오 1 상점 아이템 목록 데이터 주소)
00_44_6C_14 : D0 6A 44 00 (시나리오 2 상점 아이템 목록 데이터 주소)
00_44_6C_18 : D8 6A 44 00 (시나리오 3 상점 아이템 목록 데이터 주소)
00_44_6C_1C : E0 6A 44 00 (시나리오 4 상점 아이템 목록 데이터 주소)
...
모든 데이터는 littel endian 방식이므로 바이트 단위로 거꾸로 읽어야 합니다. 예를 들어 CC 6A 44 00 는 00_44_6A_CC 로 해석됩니다. 헥스에디터에서 편집하려면 여기서 00_40_12_00 을 빼줘야합니다. 00_44_6A_CC에서 00_40_12_00을 빼면 00_04_58_CC 이 됩니다. 이런 식으로 변환해서 정리하면 다음과 같이 됩니다.
<상점 아이템 목록 데이터 주소(헥스에디터 기준)>
시나리오 1 : 00_04_58_CC
시나리오 2 : 00_04_58_D0
시나리오 3 : 00_04_58_D8
시나리오 4 : 00_04_58_E0
시나리오 5 : 00_04_58_E8
시나리오 6 : 00_04_58_D0
...
시나리오 99 : 00_04_6B_D0
시나리오 100 : 00_04_6B_E8
(사실 시나리오 99와 시나리오 100은 없고 각각 숨겨진 상점1,2에 해당됩니다.)
헥스에디터로 langpc2.exe 파일을 열어서 해당되는 부분을 살펴봅시다. 00 은 데이터의 끝을 나타냅니다. 예를 들어, 시나리오 5의 상점 데이터가 있는 00_04_58_E8 부분을 살펴보면 04 1A 1E 00 00 00 00 00 02 03 04 0C 17 18 1E 00 ... 과 같이 나타나는데, 04 1A 1E 까지가 의미있는 부분입니다. 마찬가지 방식으로 상점 데이터를 정리하면 다음과 같습니다.
<상점 아이템 목록 데이터>
시나리오 1 : 01 15
시나리오 2 : 01 1A
시나리오 3 : 01 02 03 15 16 1A
시나리오 4 : 02 03 16 17 18 1E
시나리오 5 : 04 1A 1E
시나리오 6 : 01 1A
...
각각의 숫자는 아이템 번호를 의미하며 아이템 번호는 11번 글에서 본 순서와 같습니다. 즉, 다음과 같습니다.
01 : 나이프
02 : 워 해머
03 : 그레이트 소드
04 : 완드
05 : 플레임 랜스
06 : 데빌 액스
07 : D-슬레이어
08 : 랑그릿사
09 : 랑그릿사
0A : 철 아령
0B : 메사이얀 소드
0C : 오브
0D : 홀리 로드
0E : 홀리 로드
0F : 다크 로드
10 : 롱 보우
11 : 아바 레스트
12 : 알하자드
13 : 알하자드
14 : 오딘의 방패
15 : 스몰 실드
16 : 라지 실드
17 : 체인 메일
18 : 플레이트아머
19 : 아절트 슈트
1A : 로브
1B : 드래곤 스케일
1C : 미라쥬 로브
1D : 아뮬렛
1E : 크로스
1F : 넥크리스
20 : 스피드 부츠
21 : 크라운
22 : 그레이프 닐
23 : 룬스톤
예를 들어, 시나리오 4의 상점에 있는 아이템은 02(워 해머), 03(그레이트 소드), 16(라지 실드), 17(체인 메일), 18(플레이트아머), 1E(크로스) 입니다.
그리고 아이템의 가격은 메모리 주소 00_44_6D_E8 (헥스에디터 기준 00_04_5B_E8) 에 있습니다.
Offset (h)
00000000 : 05 00 0C 00 1E 00 0F 00 52 03 FA 00 E8 03 00 00
00000010 : 00 00 01 00 3C 00 64 00 00 00 00 00 00 00 64 00
00000020 : F4 01 00 00 00 00 CC 01 06 00 14 00 28 00 3C 00
...
아이템이 총 35개이고 아이템 하나당 2바이트씩 정보가 있으므로 총 35 x 2바이트 = 70바이트가 있습니다. 가격 데이터를 아이템 순서대로 정리해보면 다음과 같습니다.
01 : 나이프 : 05 00
02 : 워 해머 : 0C 00
03 : 그레이트 소드 : 1E 00
04 : 완드 : 0F 00
05 : 플레임 랜스 : 52 03
06 : 데빌 액스 : FA 00
...
가격 데이터도 littel endian 이므로 거꾸로 읽어야 합니다. 플레임 랜스의 가격 데이터는 52 03 이므로 03_52로 읽어야 하고 16진수를 10진수로 바꾸면 850이 됩니다. 여기에 10을 곱해주면 실제 가격인 8500이 나옵니다. 마찬가지 방식으로 하면 다음과 같이 아이템의 가격을 알 수 있습니다.
01 : 나이프 : 50
02 : 워 해머 : 120
03 : 그레이트 소드 : 300
04 : 완드 : 150
05 : 플레임 랜스 : 8500
06 : 데빌 액스 : 2500
...
겔상대로 능력치 오르는거 보면, 랑1에서 승병 처음나오는 장면 생각나네요... 퍼센티지가 굉장합니다.
답글삭제