글 수 217
안녕하세요.
아랄트랜스에는 수많은 필터가 있지만 여태까지
싹 정리할겸 필터들에 대해서 설명을 해보도록하겠습니다.
우선 아랄트랜스가 뭘하는 녀석일까 생각해보죠.
간단히 말해서 아랄트랜스는
게임 프로그램에서 대사가 지나갈 때 그걸 '납치'해선 번역하고 다시 집어넣는
작업을 하는 프로그램!
이라고 볼 수 있겠죠.
그런데 이 대사를 가져올 때 진짜 대사만 슥싹하고 가져오면 무척 좋겠지만
아랄트랜스가 가져오는 텍스트가 순수하게 대사만 있는 경우는 그렇게 많지 않다는게 문제!
이 텍스트를 그대로 번역기에 돌렸다간 문제가 발생할 수도 있겠죠?
그래서 문제가 발생하지 않도록 적절히 처리를 해주기 위해 필터를 사용합니다.
그렇다면 필터들은 대체 어떻게 돌아가는 걸까요?
우선 아랄트랜스 창을 불러와보죠.
자주 볼 수 있는 모양이죠?
후킹플러그인에 ATCode, 번역에 ezTransXP가 설정되어있고, 그 가운데에 필터들이 보입니다.
이 필터는 파이프라인 구조로 위->아래, 아래->위로 차례대로 실행됩니다.
말이 좀 어렵죠?
그림으로 나타내보면 이렇게!
이걸 설명해보자면
(1) 우선 후킹 모듈에서 일본어를 납치합니다.
(2) 필터1이 그 텍스트를 적절히 처리하고 다음으로 넘깁니다. [필터1 전처리]
(3) 필터2가 그 텍스트에 '추가로' 처리하고 다음을 넘깁니다. [필터2 전처리]
(4) 필터3이 또 그 텍스트를 처리하고 번역기로 넘깁니다. [필터3 전처리]
(5) 마지막으로 넘어온 텍스트를 번역 모듈이 '번역'합니다. [번역]
(6) 다시 필터3이 번역된 문장을 원래대로 되돌립니다 [필터3 후처리]
(7) 그 다음에 다시 필터2가 원래대로 되돌리고 [필터2 후처리]
(8) 필터1도 처리한걸 되돌리고 다음으로 넘기고 [필터1 후처리]
(9) 마지막으로 후킹 모듈이 받아서 게임에 고쳐씁니다.
이렇게 필터들은 자기 차례에 자기 할 일만 맡아서 처리하게 됩니다.
앞에 오는 필터는 항상 앞에 오고, 뒤에 오는 필터는 항상 뒤에 오는 것을 알 수 있죠.
(당연하겠지만) 필터별로 처리해야 할 위치가 정해져있기 때문입니다.
2번에서 보았듯이 필터들은 딱 자기 할 일만 하고 텍스트를 넘기기 때문에,
자기가 처리해둔 일에 대해서 '표시'를 해두게 됩니다. (일부분을 떼어먹는 경우도있습니다;)
그리고 주우욱 필터들을 돌았다가 다시 자기 차례가 되었을때 그 '표시'를 보고 마무리 작업을 하게 되는데,
그 표시 또는 미리 작업으로 인해 다른 필터가 오작동을 할 수 있기 때문에 그런 일을 줄이기 위해
순서를 표시하게 됩니다.
적절한 예를 들어볼까요?
한 게임은 게임 대사에 띄어쓰기가 들어가선 안되고,
예외로 '[Exit Scene]'이라는 경우만 게임이 종료되기 위해 필요하다고 해보죠.
[이런 경우와 비슷한 게임들이 좀 있습니다 -_-ㅋ]
필터 A와 필터 B가 있고 이런 일을 한다고 해보죠.
필터 A - 나는 [Exit Scene]을 보관했다가 번역이 끝나면 다시 되돌려 줘.
필터 B - 나는 띄어쓰기가 보이면 무조건 제거해.
이 경우에 필요한 필터 순서는
후킹 플러그인 -> 필터 A -> 필터 B -> 번역기
가 됩니다.
(2) 필터 A가 이걸 'ゲームが終わった。'로 바꾸고 [Exit Scene]을 보관합니다.
(3) 필터 B는 여기에선 할 일이 없으므로 그냥 넘깁니다. 'ゲームが終わった。'
(4) 번역합니다! '게임이 끝났다.'
(5) 필터 B가 띄어쓰기를 없앱니다 '게임이끝났다.'
(6) 필터 A가 뒤에 [Exit Scene]을 붙입니다. '게임이끝났다.[Exit Scene]'
(7) 후킹 플러그인이 '게임이끝났다.[Exit Scene]'를 게임에 넣습니다.
그런데 만약 이 순서가 뒤집혀 있다면 어떻게 될까요?
후킹 플러그인 -> 필터 B -> 필터 A -> 번역기
(2) 필터 B는 여기에선 할 일이 없으므로 그냥 넘깁니다. 'ゲームが終わった。[Exit Scene]'
(3) 필터 A가 이걸 'ゲームが終わった。'로 바꾸고 [Exit Scene]을 보관합니다.
(4) 번역합니다! '게임이 끝났다.'
(5) 필터 A가 뒤에 [Exit Scene]을 붙입니다. '게임이 끝났다.[Exit Scene]'
(6) 필터 B가 띄어쓰기를 없앱니다 '게임이끝났다.[ExitScene]'
(7) 후킹 플러그인이 '게임이끝났다.[ExitScene]'를 게임에 넣습니다. [어라?]
이 경우에 게임은 [Exit Scene]을 찾기 못해서 에러가 나게 됩니다[....]
왜 이런 문제가 발생했을까요?
그야, [Exit Scene]의 띄어쓰기를 제거하면 안되니까 겠죠?
그래서 필터들은 제각기 순서를 갖게 됩니다.
이 순서는 대략적으로 다음으로 정할 수 있습니다.
1. 텍스트를 확인하는 필터 : 다른 작업이 포함되면 안되니까 가장 앞에!
2. 함수를 처리하는 필터 : 번역율을 올리기 위해 가능한 앞에!
3. 문장을 다듬는 필터 : 함수를 처리한 다음에 해야겠죠?
4. 글자를 처리하는 필터 : 가장 작은 것을 처리하므로 뒤로
5. 번역에 도움을 주는 필터 : 번역 모듈과 가까울수록 좋겠죠? 가장 아래로!
이 원칙과 필터의 기능을 조금 생각해보면 어떻게 해야 올바른 순서를 갖는지 아실 수 있을거에요.
*. 추가로 다음 문서들을 참고해보세요!
필터 순서 ( http://www.aralgood.com/zbxe/475169 )
모든 플러그인 안내 ( http://www.aralgood.com/zbxe/152140 )
이것으로 필터의 간단한 구조에 대한 설명을 마치도록 하겠습니다.
궁금한 내용이나 부족한 내용이 있다면 질문하면 보충하도록 하겠습니다!
다음부터는 각각의 필터에 대해서 설명을 해보도록 하겠습니다.
다른 강의는 태그:필터강의 에서 확인할 수 있습니다.
아랄트랜스에는 수많은 필터가 있지만 여태까지
각 필터들을 종합해서 설명한 적이
한번도 없었기 때문에[...]
한번도 없었기 때문에[...]
싹 정리할겸 필터들에 대해서 설명을 해보도록하겠습니다.
1. 필터가 왜 필요할까?
우선 아랄트랜스가 뭘하는 녀석일까 생각해보죠.
간단히 말해서 아랄트랜스는
게임 프로그램에서 대사가 지나갈 때 그걸 '납치'해선 번역하고 다시 집어넣는
작업을 하는 프로그램!
이라고 볼 수 있겠죠.
그런데 이 대사를 가져올 때 진짜 대사만 슥싹하고 가져오면 무척 좋겠지만
아랄트랜스가 가져오는 텍스트가 순수하게 대사만 있는 경우는 그렇게 많지 않다는게 문제!
이 텍스트를 그대로 번역기에 돌렸다간 문제가 발생할 수도 있겠죠?
그래서 문제가 발생하지 않도록 적절히 처리를 해주기 위해 필터를 사용합니다.
2. 필터들은 어떤식으로 작동할까?
그렇다면 필터들은 대체 어떻게 돌아가는 걸까요?
우선 아랄트랜스 창을 불러와보죠.
자주 볼 수 있는 모양이죠?
이 필터는 파이프라인 구조로 위->아래, 아래->위로 차례대로 실행됩니다.
말이 좀 어렵죠?
그림으로 나타내보면 이렇게!
이걸 설명해보자면
(1) 우선 후킹 모듈에서 일본어를 납치합니다.
(2) 필터1이 그 텍스트를 적절히 처리하고 다음으로 넘깁니다. [필터1 전처리]
(3) 필터2가 그 텍스트에 '추가로' 처리하고 다음을 넘깁니다. [필터2 전처리]
(4) 필터3이 또 그 텍스트를 처리하고 번역기로 넘깁니다. [필터3 전처리]
(5) 마지막으로 넘어온 텍스트를 번역 모듈이 '번역'합니다. [번역]
(6) 다시 필터3이 번역된 문장을 원래대로 되돌립니다 [필터3 후처리]
(7) 그 다음에 다시 필터2가 원래대로 되돌리고 [필터2 후처리]
(8) 필터1도 처리한걸 되돌리고 다음으로 넘기고 [필터1 후처리]
(9) 마지막으로 후킹 모듈이 받아서 게임에 고쳐씁니다.
이렇게 필터들은 자기 차례에 자기 할 일만 맡아서 처리하게 됩니다.
3. 필터들의 순서
코드글을 필터를 보게 되면,앞에 오는 필터는 항상 앞에 오고, 뒤에 오는 필터는 항상 뒤에 오는 것을 알 수 있죠.
(당연하겠지만) 필터별로 처리해야 할 위치가 정해져있기 때문입니다.
2번에서 보았듯이 필터들은 딱 자기 할 일만 하고 텍스트를 넘기기 때문에,
자기가 처리해둔 일에 대해서 '표시'를 해두게 됩니다. (일부분을 떼어먹는 경우도있습니다;)
그리고 주우욱 필터들을 돌았다가 다시 자기 차례가 되었을때 그 '표시'를 보고 마무리 작업을 하게 되는데,
그 표시 또는 미리 작업으로 인해 다른 필터가 오작동을 할 수 있기 때문에 그런 일을 줄이기 위해
순서를 표시하게 됩니다.
적절한 예를 들어볼까요?
한 게임은 게임 대사에 띄어쓰기가 들어가선 안되고,
예외로 '[Exit Scene]'이라는 경우만 게임이 종료되기 위해 필요하다고 해보죠.
[이런 경우와 비슷한 게임들이 좀 있습니다 -_-ㅋ]
필터 A와 필터 B가 있고 이런 일을 한다고 해보죠.
필터 A - 나는 [Exit Scene]을 보관했다가 번역이 끝나면 다시 되돌려 줘.
필터 B - 나는 띄어쓰기가 보이면 무조건 제거해.
이 경우에 필요한 필터 순서는
후킹 플러그인 -> 필터 A -> 필터 B -> 번역기
가 됩니다.
작동 예제!
(1) 후킹 플러그인이 'ゲームが終わった。[Exit Scene]'라는 문장을 받아 넘깁니다.(2) 필터 A가 이걸 'ゲームが終わった。'로 바꾸고 [Exit Scene]을 보관합니다.
(3) 필터 B는 여기에선 할 일이 없으므로 그냥 넘깁니다. 'ゲームが終わった。'
(4) 번역합니다! '게임이 끝났다.'
(5) 필터 B가 띄어쓰기를 없앱니다 '게임이끝났다.'
(6) 필터 A가 뒤에 [Exit Scene]을 붙입니다. '게임이끝났다.[Exit Scene]'
(7) 후킹 플러그인이 '게임이끝났다.[Exit Scene]'를 게임에 넣습니다.
그런데 만약 이 순서가 뒤집혀 있다면 어떻게 될까요?
후킹 플러그인 -> 필터 B -> 필터 A -> 번역기
작동 예제!
(1) 후킹 플러그인이 'ゲームが終わった。[Exit Scene]'라는 문장을 받아 넘깁니다.(2) 필터 B는 여기에선 할 일이 없으므로 그냥 넘깁니다. 'ゲームが終わった。[Exit Scene]'
(3) 필터 A가 이걸 'ゲームが終わった。'로 바꾸고 [Exit Scene]을 보관합니다.
(4) 번역합니다! '게임이 끝났다.'
(5) 필터 A가 뒤에 [Exit Scene]을 붙입니다. '게임이 끝났다.[Exit Scene]'
(6) 필터 B가 띄어쓰기를 없앱니다 '게임이끝났다.[ExitScene]'
(7) 후킹 플러그인이 '게임이끝났다.[ExitScene]'를 게임에 넣습니다. [어라?]
이 경우에 게임은 [Exit Scene]을 찾기 못해서 에러가 나게 됩니다[....]
왜 이런 문제가 발생했을까요?
그야, [Exit Scene]의 띄어쓰기를 제거하면 안되니까 겠죠?
그래서 필터들은 제각기 순서를 갖게 됩니다.
이 순서는 대략적으로 다음으로 정할 수 있습니다.
1. 텍스트를 확인하는 필터 : 다른 작업이 포함되면 안되니까 가장 앞에!
2. 함수를 처리하는 필터 : 번역율을 올리기 위해 가능한 앞에!
3. 문장을 다듬는 필터 : 함수를 처리한 다음에 해야겠죠?
4. 글자를 처리하는 필터 : 가장 작은 것을 처리하므로 뒤로
5. 번역에 도움을 주는 필터 : 번역 모듈과 가까울수록 좋겠죠? 가장 아래로!
이 원칙과 필터의 기능을 조금 생각해보면 어떻게 해야 올바른 순서를 갖는지 아실 수 있을거에요.
*. 추가로 다음 문서들을 참고해보세요!
필터 순서 ( http://www.aralgood.com/zbxe/475169 )
모든 플러그인 안내 ( http://www.aralgood.com/zbxe/152140 )
이것으로 필터의 간단한 구조에 대한 설명을 마치도록 하겠습니다.
궁금한 내용이나 부족한 내용이 있다면 질문하면 보충하도록 하겠습니다!
다음부터는 각각의 필터에 대해서 설명을 해보도록 하겠습니다.
다른 강의는 태그:필터강의 에서 확인할 수 있습니다.