네버윈터나이츠 EE 다크니스 오버 대거포드 잡설 엘더스크롤 NWN DA

EE 공식 프리미엄 모듈인 다크니스 오버 대거포드는 NWN1기반이고 오로라툴셋은 DIALOG.TLK 연동에 있어 이후 작품들에 비해 현저히 비효율적입니다. 그래서 GFF에디터 혹은 AuroraExt등을 사용해서 모드를 작성하면 위와 같이 STRREF 값은 -1로 정의하고 그냥 DLG에 바로 적어버리는 구조를 취하고 있습니다. 

하여튼간에 다크니스 오버 대거포드를 분석해보면 가장 처음 접하게 되는 DLG는 ks_ar0601_intro.dlg가 되겠습니다. nwnexplorer.exe로 텍스트를 적당하게 추출한 뒤에서 텍스트 부분만 추출할 수 있게금 아래처럼 프로그램을 짜서 돌려봤습니다.

#include "iostream"
#include "stdio.h"
#include "stdlib.h"

int main(int argc, char* argv[])
{
FILE *IN1, *OUT;
char str[1024];
char in_name[255];
char out_name[255];
char fix_name[255];
char *fix_buffer;
char *temp;
char *strref; 
char *next_temp = NULL;
char *next_fix = NULL;
int ck1 = 0; 
strcpy_s(in_name,argv[1]);

strcpy_s(fix_name, in_name);
fix_buffer = strtok_s(fix_name, ".", &next_fix);
strcpy_s(out_name, fix_buffer);
strcat_s(out_name, sizeof(out_name), ".txt");
fopen_s(&IN1, in_name, "r");
fopen_s(&OUT, out_name, "w");
do {
fgets(str, 1024, IN1);
if (!feof(IN1))
{
if (strstr(str, "(12, Text") != NULL) ck1 = 1;

if (ck1 == 1)
{
if (strstr(str, ")") != NULL)
{
ck1 = 0;
temp = strtok_s(str, ",", &next_temp);
temp = strtok_s(NULL, ",", &next_temp);
strref = strtok_s(NULL, ")", &next_temp);
if (strref != NULL)
{
fputs(strref, OUT);
fputs("n", OUT);
}
}
}
}
} while (!feof(IN1));

fclose(IN1); fclose(OUT);
return 0;
}

여담으로 DLG 파일을 다루는 방식 자체는 발더스게이트하고 딱히 차이가 없슬거라고 봅니다만 빔독이 모드의 UNPACK 상태 구동을 제대로 지원을 안해주는 치명적인 문제등등으로 아이디어 차원을 넘어 구체적으로 DLG를 만들겠다라는 상황으로 발전을 할 수가 없는 상황입니다. 그래서 발더스게이트EE와는 다른 길을 걷고 있는 중이기도 하죠. 

하여튼 위의 프로그램까지 굴려서 ks_ar0601_intro.dlg.txt를 넣어보면 아래와 같은 텍스트가 추출됩니다. 

 You shake off slumber slowly, clearing the dim fog of sleep from your weary eyes. It is quiet...too quiet. The creak of the caravan wagon's heavy axles and the steady rumble of its wheels upon the Trade Way road are strangely absent.
 After quickly rubbing the sleep from your tired eyes, you pause to consider the events of the past few days. In Waterdeep, a fat halfling merchant named Falias hired you to accompany his caravan on this routine journey south along the Trade Way road towar
 Accompanying you is your longtime friend and faithful companion, Talarenne. You don't know how many times you have saved each other's lives but this seasoned fighter with long flowing dark hair and a mischievous smile is your most trusted companion.
 Quickly looking around the small caravan wagon, you notice that your friend Talarenne is not here. Instead, you spot the fat halfling merchant, Falias, wringing his sweaty hands nervously.
 "Excuse me. I apologize for waking you so soon after you had retired, but I am afraid there will be a short delay to our journey. A tree is blocking the road ahead, no doubt brought down by one of the recent storms."
 "Oh no, certainly not. Your friend Talarenne is waiting outside and hoped that you might join her for a while."
 "That be most kind of you to offer, but I believe the guards have everything in hand. Your friend Talarenne is waiting outside, however, and she asked if you would join her."
 "Ah, excellent. I will tell Talarenne to expect you once you have made your preparations. Now, if you will excuse me..."
 Falias bows before turning on his heels and leaving you alone to gather your belongings.
 
 
 
 
 And you wake me just for this?
 Has something happened to Talarenne?
 Perhaps I could help to clear the way?
 You may go now.
 Since I'm already awake, I might as well step outside.
 Tell Talarenne I'll be right out.
 
불행히도 nwnexplorer.exe도 문자열 길이를 충분하게 설정하지 않았기 때문에 towards the town of Daggerford. 처럼 일부 누락된 부분이 있더군요. 어찌되었든 이걸 파파고에서 번역을 해보고 GFF에디터로 ks_ar0601_intro.dlg 파일을 수정 해봅니다. 

참고로 GFF에디터에서 해당문단을 수정하는건 딱히 전문적으로 행하는 기능이 아니기 때문에 재현가능한 버그들이 존재합니다. 가령 원래 문자열 엘레멘트에서 다른 문자열 엘레멘트로 바로 이동을 해버리면 메모리 누수 현상이 일어나면서 해당 데이타가 사라질 수가 있죠. 뭐 이렇게 입력하는 경우에는 랭귀지 ID에 0을 입력하고 엔터를 누르면 적을 수 있기 때문에 버그 해결 요령을 알면 상관은 없는 문제;;;

그 결과를 다시 출력해보면 아래와 같습니다.


 당신은 피곤한 눈에서 잠의 희미한 안개를 치우며 천천히 잠을 털어낸다. 조용하다...너무 조용하다 캐러밴 마차의 무거운 차축의 삐걱거리는 소리와 트레이드 웨이 도로 위에서 끊임없이 바퀴가 윙윙거리는 소리가 묘하게 없다.
 피곤한 눈에서 재빨리 잠을 비벼본 후, 당신은 잠시 멈춰서 지난 며칠 동안의 사건들을 고려한다. 워터딥에서 살찐 반쪽짜리 상인 팔리아스가 단검포드 마을로 가는 트레이드 웨이 길을 따라 남쪽으로 향하는 캐러밴과 동행하도록 자네를 고용했어
 너의 오랜 친구, 그리고 충실한 동반자, 탈라렌도 너와 동행한다. 서로의 목숨을 몇 번이나 구해줬는지는 모르지만 길게 흐르는 검은 머리와 짓궂은 미소를 가진 이 노련한 투사는 가장 신뢰받는 동반자다.
 작은 캐러밴 마차를 재빨리 둘러보면, 친구 탈라렌이 여기 없다는 것을 알 수 있다. 그 대신 뚱뚱한 하플링 상인 팔리아스가 땀에 젖은 손을 신경질적으로 쥐어짜는 것을 발견한다.
 "실례합니다만. 은퇴한 지 얼마 안 돼서 깨워서 미안한데, 우리 여행이 조금 늦어질 것 같아. 나무 한 그루가 앞길을 막고 있어, 틀림없이 최근의 폭풍우 중 하나가 쓰러졌다."
 "아이고, 물론 아니지. 너의 친구 탈라렌은 밖에서 기다리고 있어. 그리고 네가 그녀와 잠시 함께 하기를 바랬어."
 "그것 참 친절하게 해주시는군. 하지만 경비원들이 모든 것을 손에 쥐고 있다고 믿소. 그런데 네 친구 탈라렌이 밖에서 기다리고 있는데 같이 가겠느냐고 물었어."
 "아아, 훌륭해. 탈라렌느에게 네가 준비되면 너를 기대하라고 말할게. 자, 실례지만..."
 팔리아스는 발뒤꿈치를 켜고 당신 혼자 짐을 챙기기 전에 절을 한다.
 
 
 
 
 이걸 위해서 날 깨운 거야?
 탈라렌에게 무슨 일이 생긴 거야?
 길을 치우는 데 내가 도와줄 수 있을까?
 먼저 가셔도 됩니다.
 나는 이미 깨어났으니 밖으로 나가는 편이 나을 것 같다.
 탈라렌에게 내가 곧 나갈 거라고 전해줘.
 
 
이제 ks_ar0601_intro.dlg 파일을 예의 override 폴더에 넣고 추가로 대거포드.mod 혹은 nwm의 경우 mod로 확장자를 변경한 복사본을 하나 만들어서 modules 폴더에 넣은 뒤 nwnpack같은 패키징프로그램을 사용해서 mod 패키지 내의 ks_ar0601_intro.dlg 파일을 삭제합니다. 

EE의 경우 빔독이 언팩킹 모드의 파일들 읽는 순서에 문제가 있기 때문에 이렇게까지 해야 됩니다. 그리고, 파일명도 원래와 동일할 필요가 없으니까 TEST.MOD같은 이름도 상관없습니다.

하여튼 이렇게 복잡한 절차를 거치고 대거포드 모드를 실행해보면 한글이 출력되는걸 확인할 수 있습니다.

결론은 EE에서 다크니 오브 대거포드 모드 한글화는 가능합니다. 문제는 일련의 과정이 너무나도 험난하고 모드 개발툴 자체도 드에나 네윈나2랑 비교해서 한글화에 사용하기에는 불안정하기 짝이 없습니다. 

덧글

댓글 입력 영역