유니코드 사용 게임에서
번역시 (대사)(문장부호 , . ? !)(공백문자)(대사)로 번역될 때
대사 번역의 공백문자를 제외한 문장부호 다음의 공백문자만 제거하는 방법을 알고 싶습니다.
보통 포인터 바꿔치기나 스마트 방식의 AT코드를 쓰는 게임에서는 공백문자가 반각으로 출력되므로 문제가 없습니다만
메모리 덮어쓰기를 써야할 경우에는 텍스트 출력 과정에서 공백문자가 전각으로 출력되어서 조금 문제가 있습니다.
특히 문장부호 다음에 공백이 오는 것은 상당히 간격이 커져서 어색합니다.
이미 시도해 본 방법은
1) 코필터로 문장부호+공백문자+{T} : 안 됨
2) 커스텀딕으로 문장부호+공백문자 ->문장부호 : 안 됨
최선으로는 포인터 바꿔치기나 스마트 문자열이 먹히는 위치를 찾는 것이지만
(줄단위로 분리된 스크립트 대사) -> (줄단위의 대사가 모인 고정된 스텍) -> (제어문자를 붙여 줄단위로 분리된 스텍)
이런 방식의 경우 제대로 된 번역을 위해서는 가운데의 고정 스텍을 메모리 덮어쓰기로 하는 방법 말고는 딱히 좋은 방법이 없네요.
공백문자 제거방법이 있다면 알려주셨으면 합니다.
cos
- 2012.08.15
- 20:03:39
-_- 제가 제 정신이 아닌지 위에 코필터라고 썼군요. 위에 코필터라고 쓴 것들은 다 fixline입니다;
예문을 들자면
원문 : そこは、魔物が徘徊する危険地帯。
원문 HEX : 305D 3053 306F 3001 9B54 7269 304C 5F98 5F8A 3059 308B 5371 967A 5730 5E2F 3002
번역문 : 거기는, 마물이 배회하는 위험지대.
cos
- 2012.08.15
- 20:53:16
그리고 제가 위에 쓴 후킹방식에 대해서는 제가 봐도 헷갈리기만 하는 내용이네요-_-;
참고로 해당 게임에 대해 조금 더 설명하자면
진행 순서대로
줄 단위로 스크립트를 읽어서 A지점의 고정 스텍에 복사
↓
(A지점) : 화면 단위의 대사가 모이는 지점. 메모리 덮어쓰기로 후킹가능. 공백문자의 hex값은 0020이지만 번역 결과는 전각 공백문자.
↓
(B지점) : A지점의 대사를 줄 단위로 읽어 제어문자를 붙여 다른 스텍에 복사. 포인터 바꿔치기로 후킹가능. 공백문자의 hex값은 0020이지만 번역 결과는 전각 공백문자.
↓
(C지점) : 한 글자 단위로 읽어와서 다른 스텍에 복사. 아랄로는 후킹이 안 되고 AGTH나 ITH 등에서 후킹가능. A지점이나 B지점의 번역 과정에서 0020으로 번역된 코드도 3000으로 읽어옴.
B->C 과정에서 0020->3000으로 바뀌기 때문에 반각 공백문자로 번역하는 건 어려울 것 같아서 생각한 차선책이 문장부호 다음의 공백문자만 제거하는 거였습니다;
B와 C 사이에서 반각 공백문자로 번역되는 위치를 찾더라도 줄 단위로 잘린 문장이기 때문에 제대로 된 번역이 어렵기 때문입니다.
요는 아스키가 아닌 유니코드에서
반각특수 문자가 아닌 전각 특수 문자 사용시
번역 후의 상태에서 그 뒤에 붙은 공백문자 제거 말씀이시군요?
메모리 덮어쓰기 일때만 그렇게 동작한다는 소리는 처음 듣습니다만...
(아마 스마트나 포인터도 그리 동작하지 않을 까 싶기도 합니다)
일단 위에 제가 말한 것이 맞다면
필터하나 만들면 해결됩니다.
제가 만들면 되긴하므로
우선 위에 제가 말한바가 맞는지 확인 부탁드립니다