결론 : 분석하기전에 검색좀 제대로 해볼껄 -_- . . .
엔스크립트의 반각처리는 불가능하다, 어렵다 라는 이야기를 이전부터 들은바가 있어
최근 모 카페에서 엔스크립트 엔진파일이 올라와있길래 생각난 김에 잠깐 분석해봄.
우선, 엔스크립트 일문 버전을 다운받고, 텍스트를 출력해보았다.
00.txt |
*define |
뭐.. 여기까진 예상했다. Font default charset 이 일본어로 되어있기때문이다.
이걸 좀 바꿔주면
한국어로 매우 잘 출력되는 "듯" 보인다.
(위에 있는 일어 메뉴는 리소스만 좀 바꿔주면 금방 끝날듯 싶다. )
하지만 이건 Fake !
두가지 문제가 있다.
첫번째로, 위 00.txt 보면 안녕하세요!<-- 느낌표가 짤려나갔다.
그리고, 두번째 문제의 경우 스크립트를 조금 변경해보고 출력해보았다.
00.txt |
*define |
안녕하세요의 안과 녕 사이에 '반각'인 A를 넣어보았다.
신나게 짤려나가신다. 왜 이런 현상이 일어나는걸까 ?
이유는 간단하다. 엔스크립트는 첫문자가 공백이 아닌 반각문자가 들어가면 1바이트씩 읽는게 아니고
일반 대화스크립트(캐릭터 대사나 자막 등)로 판단해서 무조건 2바이트씩 읽어버린다.
즉, 이런 현상이다.
A로 인해 2바이트씩 읽어버리는게 무너져버렸다.
이걸 처리할 방법이 없는가 ?
간단하지만 좀 귀찮은 작업이긴한데 가능하긴하다.
이걸 처리하면
뭐.. 출력은 잘(?)된다. ( 만족스럽지 않음. )
여기서 다시 살펴보면, 또다시 2가지 문제에 닥치게 된다.
위에서 언급한 첫번째 문제로 느낌표가 짤려나간 부분.
두번째는 반각으론 출력됐으나, 여전히 전각으로 보인다.
첫번째 문제에 대한건 나중에 이야기 하도록 하고, 먼저, 두번째 문제부터 살펴보자.
우선, 엔스크립트가 문자를 어떤식으로 출력하는가에 대해 문제가 있다.
엔스크립트는 Empty DC 에 TextOutA 을 통해 하나의 문자를 그려넣고
Bitblt 함수를 통해 하나씩 출력한다. 즉, Bitblt의 출력위치, 가로길이가 문제가 있다.
( 엄밀히, 출력위치의 간격, 가로길이의 값이 고정되어있는게 문제다. )
이걸 해결해서 출력하면
위와 같이 반각도 깔끔하게 출력된다.
( 기본 폰트를 변경할 경우 조금 귀찮아질 수 있다. )
자, 이제 느낌표가 짤려나간 첫번째 문제에 대해 이야기해보자.
일단, 엔스크립트는 기본적으로 반각에 대해선 대사가 아닌 명령 스크립트로 처리하려고 한다.
개행 후 첫문자가 반각이면, 무조건 명령스크립트로 보는 성질이 있는거 같고
( 이 부분에 대해선 정확히 분석해보지 않아서 장담해서 말할 수 없다. )
반각 스페이스라던가 반각 논리연산자(느낌표나 >,< 등)의 경우엔
단순 공백, 연산자로 인식하는건가 모르겠는데 인식되지 않는다.
( 이 부분도 조금만 컨트롤해주면 출력가능할듯 싶으나, 여기까지 할 시간은 부족했다. )
엔스크립트 분석에 대해선 여기까지 적고 위와 같은 이유로 엔스크립트 게임 한글화한다고 하면
가능하면 피하는게 정신건강적으로 매우 좋지 않을까 싶다.
( 반각 처리 안한다고하면, 매우 편할듯. )
IE UTF-8 인코딩과 encodeURIComponent 의 이야기. (2) | 2015.05.25 |
---|---|
미연시계의 횡포. 2***AME (0) | 2015.05.08 |
네○파라 vol.1 암호화 루틴 (2) | 2014.12.31 |
[Python] pf2 (8) | 2014.12.16 |
[C/C++] 한글 판별 코드. (2) | 2014.12.16 |
|
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |