서버 구축편

클라이언트 설정 + 멀티플레이 설정편


1. 자료 준비


필요한 자료는 

1. 아랄트랜스 = 번역 프로그램

2. 이지트랜스 = 일본어 데이터베이스 프로그램

3. 올리디버거 = 주소값 찾는 프로그램

4. CustomDic.txt  = (유저 사전) 

5. 폰트파일 = 프론티어 한국섭 한글폰트

6. 클라이언트 일본어 파일


이렇게 6가지가 있는데, 이지트랜스를 제외한 파일 5개는 MEGA에 공유 해놨으니까


아랄, 올리디버거, 커스텀딕, 일본어 파일 이렇게 5개의 파일은 잘 모아두면 되고

폰트파일은 오른쪽 클릭 -> 설치

아랄트랜스는 경로에 한글이 없도록 주의하자.


이지트랜스는 윈도우 10에서는 정상적으로 설치가 안되서 조금 복잡한 방법으로 설치를 해야하는데, 그게 꽤나 귀찮고 번거로운 작업이고, 여기서 설명하면 너무 길어지기 때문에 무설치 버전으로 준비했음


무설치 방법은 링크 들어가서 하는법 보고 따라하면 되고, 혹여나 무설치 링크가 날아가거나, 문제가 생긴다면 설치판을 구해야되는데 이건 당장 아카라이브 조금만 뒤져봐도 파일이랑 해결법 수두룩하게 있으니까 찾아보길 바람.


여기서 이지트랜스는 아랄용으로만 쓸거라 크랙이나 기한 연장같은건 안해도 무방함, 나도 안해놓고 씀.


이 글의 끝에 아랄트랜스에 ezTransXP를 플러그인으로 적용시켜 실시간 번역 작업을 해야하는데

이지트랜스가 정상적으로 설치되지 않았다면 플러그인 선택시 경로를 찾지 못하는 오류가 발생하니, 이상이 있다면 반드시 먼저 해결하도록 하자.


자료는 여기서 아래 값 해독 하고 나온 주소로 들어가서 받으면 됨.

1~5번 파일

aHR0cHM6Ly9tZWdhLm56L2ZvbGRlci9VUFpqQkN3USMxX1BqYUE3SXloV25nOGFrejNDamlR


6번 파일 무설치 & 레지등록

Cmh0dHBzOi8vYmxvZy5uYXZlci5jb20vUG9zdFZpZXcubmhuP2Jsb2dJZD13bWYxMjM1JmxvZ05vPTUwMTYzMzc4NTQyJnByb3h5UmVmZXJlcj1odHRwczolMkYlMkZ3d3cuZ29vZ2xlLmNvbSUyRiZ2aWV3PWltZ182

------------------------------------------------------------------------------------

여기까지 했다면 자료 준비는 끝났고, 이제 디버거로 주소 따고 번역 돌리는 일만 남았음


올리디버거, 아랄트랜스 실행파일은 반드시 오른쪽 클릭 -> '관리자 권한으로 실행' 할 것

안그러면 프로그램에서 런쳐가 안잡히니까 꼭 명심!




1-1. 클라이언트 일본어로 바꾸기


우선 클라이언트 일본어 파일에 대해서 설명을 해야함, 


이전에 우리가 준비한 클라이언트는 영문이라서 상점, 도감, NPC 이름 등 몇몇 텍스트를 일본어로 다시 돌려놓을 필요가 있음

이지 + 아랄은 일본어를 번역하는 프로그램인데, 일본어로 바꿔놓지 않은 상태에서 번역을 돌려버리면 한글로 표기가 되지 않기 때문임.


치트 상점을 깔아놨다면 이 과정에서 치트 상점도 날아가게 되니까, 클라 폴더를 순정 플레이용, 치트용 2개로 나눠서 관리하는걸 추천함.


설치방법은 압축 폴더 안에 있는 txt 파일을 제외한 나머지 파일들을 \Monster Hunter Frontier Online\dat 에 덮어씌우면 됨

제대로 설치가 됐다면 게임을 실행했을 때 상점과 NPC 이름, 메뉴들이 일본어로 표기될거임



1-2. 올리디버거로 AT코드 주소값 따기


아랄트랜스로 번역을 하기 위해선 AT코드가 필요한데 보통의 게임들은 이 주소값이 고정되어 있는 경우가 많지만,

MHF는 게임을 껐다 켰다 할때마다 주소값이 바뀌기 때문에 게임을 실행시킬 때 마다 찾아줘야하는 번거로움이 있다.


HOOK(0x????????,TRANS(EAX,OVERWRITE),RETNPOS(SOURCE)),FORCEFONT(5),FONT(CreGothic_NHN M,-13),ENCODEKOR


우리가 찾아야하는 값은 위의 AT코드 초입부에 있는 8자리의 ?에 들어갈 값인데, 이때 사용하는 프로그램이 이 올리디버거 라는 프로그램이다.


처음엔 조금 시간이 걸리는 작업이지만 요령만 터득하면 아랄트랜스로 번역을 적용하는데 까지 2~3분이면 끝나는 아주 쉬운 작업이니 

잘 보고 따라하도록 하자.




/// 이제는 고정 AT코드 값을 찾아서 아래 주소값 찾는 과정(1-2) 없이 바로 1-3으로 넘어가서


HOOK(mhfo-hd.dll!0x14DF502,TRANS(EAX,OVERWRITE),RETNPOS(SOURCE)),FORCEFONT(13),FONT(CreGothic_NHN M,-13),ENCODEKOR 


이 코드만 집어넣으면 됨, 코드 집어넣어서 옵션 적용하고 아래 바로가기 눌러서 바로가기 만들어놓으면 바로가기 실행하는 것 만으로 바로 번역을 적용 시킬 수 있음.  //






우선 게임을 키고 메뉴창을 열어 상태창 -> 몬스터 도감 탭으로 들어가 주소값을 찾을때 참고할 단어를 찾아야 한다.



내 예시에서는 값이 8자리인 식혈룡의 2486.3cm 를 예시로 들겠다.


참고할 몬스터를 찾았으면 창을 띄워놓은 상태로 Alt + Tab으로 화면을 빠져나가 올리디버거를 관리자 권한으로 실행시키자.

관리자 권한으로 실행하지 않으면 런쳐가 잡히지 않거나, 오류가 발생하니 주의!


만약 본인이 도감에 참고할만한 몬스터가 없다면, 

상점에서 가격이 4자릿 수인 아이템 (예: 125z, 150z, 200z)을 참고용으로 쓰거나

최소 사이즈가 1000.0cm 이상(1000 + .0cm 으로 4자리 + 4자리 = 8자리)이 나오는 몬스터를 수렵해서 도감에 찍어놓도록 하자.





올리디버거를 실행시키면 다음과 같은 화면이 표시된다.


1번은 메모리 맵, 우리가 찾으려는 값을 대조하는데 쓰이는 리스트이다.

2번은 레지스터값, 여긴 후술할 주소값 검색 과정에서 정상적으로 진행 중인지 확인할 수 있는 창인데 크게 중요하지는 않다.

3번은 CPU값, 이 창에서 주소값을 알 수 있다, 여기서 우리가 찾아야 하는건 MOVZX ~ [EAX]로 끝나는 항목의 가장 좌측에 표시될 8자리의 값이다.





확인이 끝났다면 좌측 상단의 File -> Attach를 클릭






그럼 다음과 같은 창이 뜨며 Attach(부착)할 프로세스를 선택하라고 한다, mhf를 찾아 선택 후 Attach 시켜주자.

앞서 서술했듯, 관리자 권한으로 프로그램이 실행되지 않았다면 이 과정에서 오류가 발생한다.


Attach를 시키고 나면 게임이 정지 상태가 된다






그럼 화면이 위와 같이 바뀌게 될건데, 

우측 최하단 화살표 부분을 보면 Paused 라고 되어있는걸 확인 할 수 있다 F9를 눌러 Running 상태로 바꿔주자.

올리디버거에선 F9를 눌러 정지/재생 상태를 전환시킬 수 있으며, 후술할 CPU에서 주소값을 찾는 과정에서 한 프레임씩 검색할 때도 쓰인다.


Paused 상태로 너무 오래 놔두면 게임이 튕길 수도 있다고 하니 주의하도록 하자.



이제 Memory map에서 참조값의 위치를 찾을 차례다.



우선 그림의 1번과 같이 Memory map의 최상단에 있는 항목을 클릭해서 포인터 위치를 지정해준 후,

2번과 같이 Ctrl + B를 눌러 패턴 검색창을 열어 ASCII 항목에 우리가 찾고자 하는 값을 입력한다.


추가// 그리고 아래 HEX +00 안에 있는 값이 8자릿 수 또는 4자릿 수 인지 확인해야 한다.

왜냐하면, 위에서 설명했듯 우리가 찾아야 하는 주소값은 8자릿 수 이기 때문에 HEX +00에 있는 값 또한 

8자리가 아니라면 찾아도 엉뚱한 값이 나오기 때문이다. 

4자릿 수 여도 괜찮은 이유는 이 후에 알려주겠다.


내 경우엔 식혈룡의 몬스터 사이즈였으니 2486.3cm을 입력해주면, 

아래 HEX +00 이라고 써있는 부분이 HEX +08 (8자리라서 00 -> 08)로 변하며 되며


32 / 34 / 38 / 36 / 2E / 33 / 63 / 6D 라는 HEX 값으로 변환되고, 변환된 값이 8자리가 맞으니까 검색했을 때 올바른 주소값이 검색 될 것이다.


이제 입력이 끝났다면 Search를 눌러 검색을 시작한다.




Search를 누르면 Memory map 에서 선택했던 회색영역이 아래로 주르륵 내려가며 검색을 시작하는데, 

중간에 멈추거나 좌측 그림 하단과 같이 오류가 뜨며 멈춘다면 Memory map에서 방향키 아래를 누르거나 클릭하여 

1~2칸 내려간 뒤 Ctrl + L 버튼을 눌러 우측과 같은 Dump창이 뜰 때 까지 반복하자.


제대로 검색이 됐다면 Dump창의 ASCII 항목에 우리가 참조값으로 넣었던 2486.3cm이 있을 것이다.





본격적으로 중단점(Breakpoint)를 잡아주기 전에, 먼저 확인해야 할 것이 있다.


우선, 맨 우측 ASCII에서 우리가 위에서 입력했던 참조값 (내 경우 2486.3cm)을 드래그 했을 때,

중앙 Hex Dump에 8자리 or 4자리가 올바르게 잡히는지 다시 한 번 확인해보자.


그럼 이제 여기에 중단점을 설정하고 본격적으로 주소값을 찾을 때가 되었다, 마우스 오른쪽을 누르고 Breakpoint -> Memory enable을 누르면 

게임이 정지 상태가 되고, Hex dump값에 노랗게 하이라이트 된 부분이 붉게 변한다.


만약 자동으로 잡히지 않았다면 Memory enable이라는 항목이 보이지 않고 Memory, Memory log 두 개의 항목만 보일텐데



앞서 입력했던 참조값 (내 경우 2486.3cm)을 드래그 하고 Breakpoint -> Memory를 눌러 강제로 경로를 잡아주자.

그러면 위 그림과 같은 창이 뜨고 OK를 눌러주면 Memory enable을 누른 것과 같이 동일하게 진행된다.






이제 이 상태에서는 우측 CPU창에 주목하면 된다.



우선 우리가 찾아야 하는것은,


3번 화살표에 검게 하이라이트된 8자리의 알파벳+숫자로 이루어진 주소값이다.

하지만, 아무 주소값이나 찾아서 넣으면 되는 것이 아니고 올바른 위치의 주소값을 찾아야 한다.


그렇기 위해선 2번 화살표에 쓰여진 내용이 MOVZX EDX, BYTE PTR DS:[EAX] (줄여서 MOVZX~[EAX])

가 맞는지 확인을 해야하며, 

만약 MOVZX~[EAX]가 맞다면, 그 줄의 8자리 주소값(3번 화살표)을 저장해두면 된다.

아니라면 F9를 눌러 프레임 단위로 데이터를 넘겨 다음 항목으로 넘어갈 필요가 있다.




프레임 단위로 데이터가 넘어가는지 확인하는 방법은 1번 화살표에 적힌 내용을 보면 알 수 있는데,

위에서 우리가 참조값을 찾기위해 입력한 "2486.3cm" 값이 쓰여져 있는걸 확인할 수 있다.


여기서 F9를 누르면 1번 화살표에 표시된 참조값이

"2486.3cm" 

"486.3cm"

"86.3cm" 

와 같이 한자리씩 점점 줄어들며 데이터가 넘어가는 것을 확인할 수 있다.


전부 다 줄어들고나면 다시 2486.3cm으로 돌아오면서 2번 화살표 부분에 써있는 단어가 넘어가며 바뀌게 되는데, 

MOVZX ~ [EAX]가 나올 때 까지 이 작업을 반복해주자 보통은 1~2번 데이터를 완전히 넘겨주면 찾는다.





찾았다면 3번 화살표에 있는 검게 하이라이트 되어있는 8자리의 주소값을 

HOOK(0x????????,TRANS(EAX,OVERWRITE),RETNPOS(SOURCE)),FORCEFONT(5),FONT(CreGothic_NHN M,-13),ENCODEKOR

의 ??? 자리에 넣어주도록 하자.


내 경우는 1679F502 였으니 즉, AT코드는

HOOK(0x1679F502,TRANS(EAX,OVERWRITE),RETNPOS(SOURCE)),FORCEFONT(5),FONT(CreGothic_NHN M,-13),ENCODEKOR

가 되는 것이다.


만약 본인이 4자릿수 아이템 가격(150z, 125z, 등...)으로 주소값을 구했다면 구한 값의 앞 4자리는 놔두고 뒷 4자리를 F502로 바꿔 AT 코드에 넣도록 하자.

왜냐하면, 현재 프리서버 클라이언트에서 뒷쪽 4자리(F502) 는 바뀌지 않기 때문이다.


현재 클라이언트의 앞 4자릿 수는 게임을 끄고 킬 때 마다 매번 바뀌지만,

뒷 4자릿 수(F502)는 게임을 끄고 켜도 항상 고정이기 때문에 앞서 서술했듯 4자리만 구해도 올바른 값을 구할 수 있다.


다시 말해, 위에서 올바르게 주소값 구하는 작업을 진행 했더라도 뒤 4자릿 수가 F502 로 끝나지 않는다면 번역을 했을 때 

주소값이 맞지 않아 한글과 일본어가 혼용되어 표시되는 폰트 깨짐 현상이 발생하게 된다.


/////

예를 들자면, 

만약 내가 도스팡고를 잡은 사이즈가 916.8cm 라서, 이 값을 ASCII에 참조값으로 입력했다고 하자.


그렇게 되면 HEX값은 

HEX+07 39 / 31 / 36 / 2E / 38 / 63 / 6D  라는 7자리의 HEX 값으로 변환될 것이다.


이 상태에서 주소값을 검색하여 MOVZX~[EAX] 에 해당하는 값을 찾게된다면 1679F5AE 와 같은 값이 나올 것이며,

앞 4자리는 1679 임으로, 찾아야하는 주소값이 정확히 일치하니 문제가 없지만, 뒷 자리는 F5AE 임으로 입력했을 때 문제가 생길 것이다.


하지만, 여기서 우리는 뒷 4자리 F502 라는 값이 항상 고정인 것을 알고 있기 때문에 올바른 앞자리 1679만 구했다면 

(1679  F502 =) 1679F502 라는 값을 입력하여 문제없이 쓸 수 있는 것이다.


이 예시가 이해되지 않는다면 무리해서 이해하려고 하지 말자. 

처음엔 이해하기 힘든 것이 당연하고 반복해서 작업하다 보면 이 규칙성에 대해서 자연스레 이해하게 될 것이다.


더 깊숙히 들어가면 머리가 아파지니 지금 당장은 

한 번에 4자리씩 쪼개서 비교한다 -> 

우리가 구하는 값은 8자리값 (4 + 4 = 8), 7자리가 들어가면(4 + 3 = 7) ->

검색한 주소값은 무조건 8자리로 표시되고, 앞은 4라서 일치하지만 뒤는 3이라서 우리가 찾는 값과 일치하지 않는다 = 뒷자리가 F502가 안나온다

-> 오류 발생!

정도의 규칙이 있다는 것 정도만 알고 있으면 되겠다.

/////


이렇게 값을 찾고 나면 이제 안전하게 부착을 해제해주는 일만 남았다.

Detach를 하지 않으면 올리디버거를 종료했을 때 게임도 같이 꺼져버리니 주의하도록 하자.



좌측의 Dump창에서 마우스 우클릭 -> Breakpoint -> Memory disable 선택 후, F9를 눌러 Paused를 Running 상태로 변환시켜준다.

그 후, 좌측 최상단 File -> Detach 를 눌러 부착을 해제하고 올리디버거를 종료 시켜준다.


여기까지 왔다면 번역작업의 80%는 끝난 샘이다.




1-3 아랄트랜스로 번역돌리기


1-2에서 올리디버거를 이용해 AT코드를 찾아냈으니, 이젠 아랄트랜스를 이용하여 게임에 한글번역을 적용시킬 일 만 남았다.


그 전에, 먼저 해 둬야 할 작업이 있는데 CustomDic.txt 파일을 사용하여 번역에 유저 사전을 적용시키는 것 이다.



CustomDic 파일의 내용은 다음과 같다.


보이다시피 아랄트랜스가 번역 중 좌측에 있는 단어가 감지되면 우측에 있는 단어로 바꾸어 번역해주는 역할을 하며,

이 파일이 없다면 게임 내 고유명사를 단어 그대로 번역해버리는 문제가 발생한다.


유저 사전인 만큼

원문(일본어) <---TAB키 눌러 공백---> 번역문(한국어)

와 같은 규칙으로 새롭게 단어를 추가 할 수도 있다.


txt파일은 \Monster Hunter Frontier Online\ATData 폴더에 넣어두고

이 후, 아랄트랜스에서 플러그인으로 불러오기만 하면 된다.


우선 아랄트랜스를 관리자 권한으로 실행시키도록 하자.

만약 경로에 아랄트랜스가 설치된 경로에 한글이 섞여있다면 정상적으로 작동하지 않을 수도 있으니 주의




아랄트랜스를 키면 이렇게 창이 뜬다, mhf.exe를 누르고 아래 실행 버튼을 눌러 부착시키도록 하자.

만약 mhf.exe가 잡히지 않는다면, 관리자 권한으로 실행되지 않아서 그럴경우가 굉장히 높다.


그리고 이 작업 중 아랄트랜스가 게임 뒤편으로 가버려 Alt + Tab이 안먹는다면

Alt + Enter로 게임의 전체 창모드를 풀면 뒤에 숨어있던 아랄트랜스 창이 정상적으로 선택된다.





부착시키면 이런 창이 뜨는데, 우선 상단의 번역 항목 -> 플러그인 -> ezTransXP를 선택해주자.

앞서 말했듯, ezTransXP가 정상적으로 설치되지 않았거나, 한 번이라도 이지트랜스가 실행된적이 없어 레지스트리에 경로가 잡히지 않았다면

이 과정에서 플러그인 선택시 경로를 찾지 못하는 오류가 발생한다.


무설치 버전은 레지스트리를 이용해서 강제로 위치를 등록하는 방식이니 큰 문제는 없을 것




그 다음은 유저사전을 적용시킬 차례다, 필터 항목 -> 추가 -> CustomDic 을 눌러 유저사전을 추가해주는데

만약 본인이 게임을 하다가 정상적으로 번역이 되지 않는 부분이 있어 수정하고 싶다면 CustomScript도 같이 추가해주면 된다.


CustomScript를 추가하면 위 그림과 같이

아랄트랜스를 통해 번역되는 텍스트들이 CustomScript_Auto.txt 파일에 자동으로 저장되니 차후에 수정이 좀 더 요긴하다.


물론 수정할 생각이 없다면 CustomDic만 필터로 추가해주면 된다.





그런 다음 추가한 플러그인을 누르고 -> 설정 을 눌러 그림과 같이 세팅해주면 된다.


만약 CustomDic만 사용한다면 1번은 스킵하고 2번만 세팅해주면 되고,

둘 다 사용한다면 CustomScript의 순서가 맨 위로 가도록 옮긴 뒤 세팅해주면 된다.






다음은 하단 후킹 항목 -> 플러그인 -> ATCode 를 선택하고 우측에 설정 버튼을 누른다






그럼 이렇게 AT Code Option 창이 뜨는데, 좌측 최하단 옵션값 직접입력을 누르고 아까 구해놨던 AT코드를 복사한다.





내 경우는 

HOOK(0x1679F502,TRANS(EAX,OVERWRITE),RETNPOS(SOURCE)),FORCEFONT(5),FONT(CreGothic_NHN M,-13),ENCODEKOR 이였으니,


복사하여 그대로 붙여준 후 OK를 누르고, 적용 -> 확인을 누르면 번역이 적용된다.





만약 이 과정에서 폰트가 "곍, 갹, @, 걁의 기단" 같이 깨진다면 AT코드의 주소값이 잘못됐을 가능성이 높으니 1-1로 돌아가 주소값을 다시 찾아보자.


번역은 정상적으로 되지만 단어의 끝자락에 '이나 . 처럼 점이 찍혀 나온다면 폰트 크기가 문제일 가능성이 높으니,

Alt + Enter로 전체화면을 풀었다가 줄였다가 하면 해결된다.

그래도 해결이 되지 않는다면 AT코드 끝부분의 " FONT(CreGothic_NHN M,-13),ENCODEKOR " 에서 회색으로 표기된 숫자(폰트 사이즈)를 10으로 수정해서 써보자.




성공적으로 아랄트랜스가 적용됐다면 이렇게 일본어가 한국어로 번역되어 나오게 된다, 이제 맘 편하게 한글로 프론티어를 즐기도록 하자.