안녕하세요 새항아리입니다.

 

제목 : GBA 한글화 쌩초보 강좌 - 4

부제목 : 제어코드에 대하여..

 

원래 이번 시간에는 고유번호표 작성에 대해 알아보고자 했으나. 고유번호표 작성에 앞서 잠깐이나마 롬의 제어코드를 분석하는 시간을 갖도록 하겠습니다.

 

사실 코드라는 것은 아주 단순합니다.

기계는 거짓말도 못하고 스스로 일도 못합니다.

즉 하라는 것을 딱딱 집어 넣어주어야 일을 한다는 의미지요..

 

그런데 이녀석이 이게 명령을 말하는 건지 아니면 그 명령을 수행할 대상을 말하는 건지 잘 모릅니다.

 

그래서 제어코드라는 게 있죠..

 

말을 쉽게 하자면.. 이런 녀석이 나오면.. 어떻게 해라.. 라는 겁니다.

여기에서 이런 녀석 이 바로 제어코드입니다.

 

우선 롬을 보면서 예를 들어보도록 하겠습니다..

롬에는 다른 제어코드들도 많지만 한글화에 중요한 것은 대사 내의 제어코드입니다.

다른 것은 상콤하니 무시해주세요..

 

우성 하로보츠를 봅니다.

사용자 삽입 이미지

 

저번 강좌에서 ABCabc123으로 입력하고 서치알로 대사 위치를 찾았던걸 기억 하실 겁니다.

 

그 주소로 가봅시다.

사용자 삽입 이미지

 

32 4D 5B 4D

3C F1 06 F1 17 3D C4 7B 9A 76 B0 80 87 9B CC
94 37 FD F1 E7 61 4D 4C F1 FD F2 EF 38 F2 3B 39

49 70 36 29 2D 42 4D 36 25 36 FD FF

 

 이렇게 코드가 있습니다. 이게 대사라는 확증은 저번 시간에 한 코드로 밀어봤을때 쭉 그대로 출력되었던게 증거이죠?

 

어쨋건 이 코드내에 제어코드가 있습니다..

 

어딜까요? 우선 원본 글씨를 봅시다.

 

사용자 삽입 이미지


다섯글자 후에 한자가 출력되었네요.그리고 와(하) 라는 글자, 폰트표에서 3D(16진수) 번째의 글자입니다.

 

그러면 다섯글자 후 3D를 출력하라는 메세지전 까지의 4개의 코드는

F1 06 F1 17 이네요. 이게 뭡니까? 이것은 저번 시간에 배운 2바이트 코드입니다.

F1로 시작할때는 2바이트 문자니까 F1위치의 6번째, 17번째 글자를 출력하라는 뜻이죠?

 

이것을 제어코드로 보지 않을 수도 있습니다. 왜냐하면 이것은 그냥 고유번호라고 생각될수 있기 때문이죠..

 

고유번호라는 것은 그것을 나타내어주는 고유한 넘버라는 뜻입니다.

 

즉 군번이나 학번과 같은거죠.. 대학마다 학번이 달라서 어느 대학은 학생인원이 600여명이라서 심플하게 3자리로 그사람들 대변해 줄수도 있지만..

큰 대학이라서 10만명 정도가 다닌다면.. 적어도 6자리 이상의 학번이여야 할겁니다..

왜냐하면 학번이 중복되면 안되니까요..

 

그러니까 F106은 무조건 大를 뜻한다고 생각하면. 그것은 고유번호이고.. F1이 나오면 2바이트 문자를 출력해야한다고 제어쪽으로 생각하면 그것을 제어코드로 볼수 있는겁니다..

 

어쨋건 F1은 한자를 출력하는것이라는것을 깨닳게 되었군요..

 

이렇게 하나하나 배워가봅시다.

그리고 중간부분 다음과 같이 써있습니다.

 

37 FD F1 E7 61 4D 4C F1 FD F2 EF 38 F2 3B 39

49 70 36 29 2D 42 4D 36 25 36 FD FF

 

37(16진수)번째는 토를 말합니다. 첫줄 맨 마지막 단어죠..그러면 그다음에 나온 것은 FD(?)

이것은 무엇일까요.. 딱 보니 그다음은 F1E7로 F1위치의 E7번째 한자를 출력하라는 것이니까

FD는 독립적으로 쓰인거겠군요..

 

그 위치에 독립적으로 쓰일만한 제어코드는 ....

 

한줄내림이겠네요... 그런데 확실히 모르겠다.. 이게 한줄 내림이라는것에 대한 확신이 필요하다면

글자라는 게 확실한 코드를 FD로 변경해보십시오. 그래서 한줄내림이 된다면..

 

아 이게 한줄내림 제어코드구나 라는 것을 확인할수 있는 것입니다..

쭉 나가다가 FF가 있죠? 이것은 문단 끝을 말하는 제어코드라는 것을 의심해볼수 있습니다..

이것도 확인해보시려면.. 글자 중간에 FF를 넣어보시면 됩니다..

 

 

제어코드를 왜 분석해야하느냐.. 라는 것에 대한 것은 아래의 롬들이 답해줄겁니다..

 

우선 스크류 브레이커를 살펴보죠..

 

사용자 삽입 이미지


이롬을 보면 글자내에 색깔이 변경된 부분이 있습니다.

색이 변경되었다는 것은 이부분에 제어코드가 있음을 암시해주는 것입니다.

 

왜냐.. 제어코드가 없었다면 모두 글자로 인식해 그냥 출력을 했겠죠..

따로 포인터 지정등과 같은 방식으로 처리하지 않았다면 말이죠.. 

 

사용자 삽입 이미지


이부분이 대사부분이라는 것은 저번 강좌시간에 찾아놨죠?

이 부분을 한번 적어봅시다.

 

0B 01 00 FC 01 04 FC 03

05 08 29 28 FC 01 0B FC 03 0A 05 24 48 2E AB FE

12 07 1F 0C 10 40 AB FE

 

왜 0B부터 드래그 했는지는 간단히 생각하시면 알수 있죠?

대사의 첫글자가 0B번째 글자니까요. 그리고 01번째 글자..

 

그리고 나온게 00 ? 이것은 무엇일까요?

 

이것도 앞서 말씀드린 것과 같은 제어코드이자 고유번호인 띄어쓰기 입니다.

저번 강좌때 잊고 말씀 안드린게 있는데..

 

우리가 보통 10까지 세어봐라 라고 할때.. 0부터 세는 사람 1부터 세는 사람이 있죠?

이것도 마찬가지입니다.

 

제가 연습한 롬인 스크류 브레이커는 00이 띄어쓰기로 잡혀있기 때문에 "아"라는 글자가 1번째(01번째) 글자가 되었지만 00이 띄어쓰기로 잡혀있지 않았다면.. "아"라는 글자가 0번째(00번째) 글자 가 되었을지도 모르는 일입니다.

 

어쨋건 00은 띄어쓰기입니다. 이것도 확인하려면 아까 말씀드린것과 같이 확실히 글자인것과 바꿔넣어보면 알겠죠?

 

그리고 나온게.. FC 01 04 FC 03 05 입니다.

빨간색으로 적힌 쿠루리 라는 글자의 번호는 08 29 28(16진수)번째 글자들입니다.

 

즉 FC 01 04 FC 03 05 이부분은 정확히 말하자면 대사코드는 아닌겁니다.

그럼 무엇일까요? 제어코드입니다.

 

제어코드가 한개가 아니네 하시는 분이 계실지 모르지만 이렇게 여러개가 적용된 코드도 있을 수 있습니다.

분석해보지는 않았지만 뒷부분에 다시 글자색이 바뀌는 부분에서도

FC 01 0B FC 03 0A 라고 적힌 부분을 봤을때 FC가 쓰이면 그 다음 2 개는 내부 인자코드라는 것을 알수 있습니다..

 

뭐 이런 뜻이겠지요. 뒤에 나오는 글자를 몇번째 색깔로 출력해.. 이런...

내부 인자코드라는 것은 쉽게 말해. 영어의 목적어입니다.

영어를 하다보면.. I LOVE <?> 이렇게 적혀 있다면 ? 부분에는 반드시 뭔가 들어가야겠지요?

이걸 목적어라고 부릅니다. 목적을 가진 대상이라는 뜻이구..

코드내에 목적어라면.. 몇번째 색깔이나 어느 위치를 어느위치에 등등이 되겠죠?

 

그리고 나오는 FE 이것이 아마도 한줄내림 코드인듯 싶죠? 왜냐하면 한 대사에 두번 쓰였으니

문단 종료코드는 아닐것이고.. 한줄 맨 마지막 단어 (여기서는 !(아마도 코드로는 AB))의 뒤에 쓰였으니까요..

 


사용자 삽입 이미지

갑자기 쌩뚱맞은 소리 대표적..

 

이쯤에서 쌩뚱맞게도 왜!!!! 제어코드가 중요한 것인가.. 왜!!!! 롬을 분석해야하는 가에 대해 설명드리겠습니다.

 

만약 제어코드를 분석하지 않고 대사만 출력한다면.. 대사내의 쓰레기가 엄청생깁니다.!!

쓰레기 라는 것은 대사는 아닌데 대사로 분류되었다는 것이고 이 쓰레기의 대부분은 제어코드가 잘못 읽혀진게 대부분입니다.

 

쓰레기가 생기면 걸러내야 하고 이 작업은 초반에 단추를 잘못끼워 다시 전체의 단추를 풀어헤치는 것과 비슷합니다.

 

쓰레기를 안생기게 처음부터 제어코드를 인지하고 처리했다면.. 수고를 덜었겠지요?

그리고 이것이 쓰레기라고 이름표가 붙어 있다면 안보고 지나갈수도 있을것 아니겠습니까?

 

그렇기 때문에 코드의 분석이 중요합니다.

제가 한글화 했던 모두의 쇼기는 제어코드가 좀 난잡했습니다..

 

설명부터 드리죠..

 

사용자 삽입 이미지

 

저번 시간에 대사위치를 찾았던 모두의 쇼기..
 

사용자 삽입 이미지


대사위치를 확실히 찾아봤었는데요.. 한번 보죠.. 

 

사용자 삽입 이미지
 

2줄의 대사를 출력하기 위해 몇줄의 코드가 쓰였는지 모르겠습니다.

여기에서는 대사의 2바이트 코드가 뒤쪽에 있네요

즉 몇번째 글자 몇번째 위치라는 뜻입니다.

 

사용자 삽입 이미지
 
코마라는 단어와 병양이라는 단어가 색이 다릅니다.
이 색을 변경 위해서 18바이트의 코드가 쓰였습니다.
 
제가 한글화 한것이기 때문에 코드를 직접 적어 쓰지는 않겠지만.
 
FFFF는 문장의 끝과 제어코드 시작을 의미하고 그 후에 0F00 이 나올때까지는 내부인자코드..(그림및 색을 바꾼다던가. 움직임을 준다던가 하는 일) 0F00이 나온후 2번째코드는 상대포인터 3번째 코드는 글자수를 뜻합니다.
 
코드를 풀어 쓰는 것은 지극히 롬마다 다릅니다..
몇몇 롬은(하로보츠처럼) 간단히 대사만 있는 경우도 있고
몇몇은 색을 변경하는 정도(스크류 브레이커처럼)의 제어코드만 있는 경우도 있고.
몇몇은 화면 디스플레이까지 제어코드로(모두의쇼기) 대사 스크립트 내에 적힌경우도 있습니다.
 
롬마다 특성이 다르기 때문에 어떤게 편하다 하기는 어렵지만 아무래도 제어코드가 많으면 분석이 오래걸리고 한글화 하기도 귀찮아 지기에 이쪽이 조금 불편하다고 할 수 있겠습니다.
 
사실 제어코드는 고유번호를 뽑은후 보는게 더 잘보일수도 있습니다..
왜냐하면 대사를 뽑아보고 그 대사가 나오는 부분을 살피면 이건 대사가 아니네.. 그럼 제어코드겠구나 하는 생각말이죠..
 
하지만 쓰레기 양이 엄청 많거나 아니면 대사를 직접 대조할수 없는 경우라면.. 제어코드를 먼저 분석하는게 훨씬 유리 할 수 있습니다.
 
다음 강좌는 고유번호표를 만들어 대사를 뽑는 작업에 대해 이야기 해보도록 하겠습니다..
그럼 이만..
 

댓글을 달아 주세요

  1. 바베큐 2007.09.30 18:28  address  modify / delete  reply

    이번껀 하나도 이해가 안가네요 .. 아휴 ;; 왜 이렇게 머리가 안좋은건가 ;;

  2. Favicon of http://blog.naver.com/jhw0604 에플트리 2008.02.10 06:07  address  modify / delete  reply

    요런건 GBA말고도 응용이 가능하겟네요 ㅎㅎ

    • Favicon of https://shouting.tistory.com 새항아리 2008.02.10 12:37 신고  address  modify / delete

      대부분의 한글화는 방식이 비슷합니다.
      DS의 경우는 압축 해제 부분을 제외하면 비슷하다고 볼 수 있고 SFC,GB,NES등은 뱅크 부분만 다르다고 보시면 됩니다.

  3. 어려워 ㅠㅠ 2008.09.23 00:10  address  modify / delete  reply

    그런데 이런거 파일 어디서 가져가나요? ㅇㅅㅇ...
    올려주실껑에영?

  4. 머리깨짐 2010.02.12 20:14  address  modify / delete  reply

    가입해 봤는데 없더군요.. ㅠㅠ