5. 랑그릿사2 텍스트 데이터 (1)
랑그릿사2 PC판에서 텍스트와 관련된 파일은 다음과 같습니다.
1. tdat.res >> CHRMAKE.DAT : 캐릭터 메이킹
2. tdat.res >> E_*.DAT : 시나리오별 이벤트
3. tdat.res >> E_*J.DAT : 시나리오별 승리조건 및 패배조건
4. tdat.res >> E_*P.DAT : 시나리오별 프롤로그
5. tdat.res >> EP.DAT : 엔딩 후일담
6. tdat.res >> ITEM.DAT : 아이템 이름 및 설명
7. tdat.res >> MENU.DAT : 메뉴
8. tdat.res >> NAME.DAT : 캐릭터 이름
9. tdat.res >> SCEN_NO.DAT : 시나리오 번호
10. tdat.res >> SETUMEI.DAT : 전술 설명
11. tdat.res >> STAFF.DAT : 엔딩 스탭 롤
하지만 메모장으로 파일을 열어봐도 텍스트를 확인할 수 없습니다. 이는 텍스트가 약간 변형돼있기 때문입니다. 0x38와 XOR 연산을 하면 텍스트를 복원할 수 있습니다. 예를 들어 CHRMAKE.DAT 파일을 보면,
Offset(h)
00000000 : 87 9C 83 DF 80 96 86 FE 87 99 18 87 F8 85 FD 18
00000010 : 88 F5 F8 83 18 F0 97 87 8D FF ED 8C F7 8C E1 16
00000020 : 32 F9 9E 18 F8 F4 80 9F F8 82 18 8F DF 85 FB 80
...
첫번째 바이트는 0x87이며 이를 0x38와 XOR 연산을 하면 0xBF가 됩니다. 이와 같은 방식으로 모든 바이트를 변환할 수 있습니다.
Offset(h)
00000000 : "엘사리아에 오신 "
00000010 : "것을 환영합니다."
00000020 : "\n제 이름은 루시리"
00000030 : "스. 지상에서는\n"
00000040 : "빛의 여신이라 불"
00000050 : "리고 있습니다. \0"
...
(여기서 \n은 줄바꿈을 나타내고 \0은 문자열이 끝났음을 나타냅니다.)
변환한 결과 CHRMAKE.DAT 파일의 첫번째 문장은 다음과 같음을 알 수 있습니다.
"엘사리아에 오신 것을 환영합니다.\n제 이름은 루시리스. 지상에서는\n빛의 여신이라 불리고 있습니다. \0"
마찬가지로 나머지 문장들도 변환하여 모든 텍스트를 알아낼 수 있습니다. 다만, 실행파일(langpc2.exe) 안에 있는 텍스트는 다른 방법으로 찾아내야 합니다. 이에 대해서는 다음 글에서 설명하겠습니다.
1. tdat.res >> CHRMAKE.DAT : 캐릭터 메이킹
2. tdat.res >> E_*.DAT : 시나리오별 이벤트
3. tdat.res >> E_*J.DAT : 시나리오별 승리조건 및 패배조건
4. tdat.res >> E_*P.DAT : 시나리오별 프롤로그
5. tdat.res >> EP.DAT : 엔딩 후일담
6. tdat.res >> ITEM.DAT : 아이템 이름 및 설명
7. tdat.res >> MENU.DAT : 메뉴
8. tdat.res >> NAME.DAT : 캐릭터 이름
9. tdat.res >> SCEN_NO.DAT : 시나리오 번호
10. tdat.res >> SETUMEI.DAT : 전술 설명
11. tdat.res >> STAFF.DAT : 엔딩 스탭 롤
하지만 메모장으로 파일을 열어봐도 텍스트를 확인할 수 없습니다. 이는 텍스트가 약간 변형돼있기 때문입니다. 0x38와 XOR 연산을 하면 텍스트를 복원할 수 있습니다. 예를 들어 CHRMAKE.DAT 파일을 보면,
Offset(h)
00000000 : 87 9C 83 DF 80 96 86 FE 87 99 18 87 F8 85 FD 18
00000010 : 88 F5 F8 83 18 F0 97 87 8D FF ED 8C F7 8C E1 16
00000020 : 32 F9 9E 18 F8 F4 80 9F F8 82 18 8F DF 85 FB 80
...
첫번째 바이트는 0x87이며 이를 0x38와 XOR 연산을 하면 0xBF가 됩니다. 이와 같은 방식으로 모든 바이트를 변환할 수 있습니다.
Offset
|
원래 데이터
|
XOR 연산후
|
한글
|
00
|
87
|
BF
|
엘
|
01
|
9C
|
A4
|
|
02
|
83
|
BB
|
사
|
03
|
DF
|
E7
|
|
04
|
80
|
B8
|
리
|
05
|
96
|
AE
|
|
06
|
86
|
BE
|
아
|
07
|
FE
|
C6
|
|
08
|
87
|
BF
|
에
|
09
|
99
|
A1
|
|
0A
|
18
|
20
|
(공백)
|
0B
|
87
|
BF
|
오
|
0C
|
F8
|
C0
|
|
0D
|
85
|
BD
|
신
|
0E
|
FD
|
C5
|
|
0F
|
18
|
20
|
(공백)
|
...
|
...
|
...
|
...
|
Offset(h)
00000000 : "엘사리아에 오신 "
00000010 : "것을 환영합니다."
00000020 : "\n제 이름은 루시리"
00000030 : "스. 지상에서는\n"
00000040 : "빛의 여신이라 불"
00000050 : "리고 있습니다. \0"
...
(여기서 \n은 줄바꿈을 나타내고 \0은 문자열이 끝났음을 나타냅니다.)
변환한 결과 CHRMAKE.DAT 파일의 첫번째 문장은 다음과 같음을 알 수 있습니다.
"엘사리아에 오신 것을 환영합니다.\n제 이름은 루시리스. 지상에서는\n빛의 여신이라 불리고 있습니다. \0"
마찬가지로 나머지 문장들도 변환하여 모든 텍스트를 알아낼 수 있습니다. 다만, 실행파일(langpc2.exe) 안에 있는 텍스트는 다른 방법으로 찾아내야 합니다. 이에 대해서는 다음 글에서 설명하겠습니다.
댓글
댓글 쓰기