중장전희 L10N 파일 분석

* 본 포스트는 네이버 블로그에 2020-03-30에 작성한 글입니다.

1. 파일 개요

files/Android/language/*.ab : L10N 유니티 애셋번들 파일
.ab 파일 언패킹 후,
*_storyJsonDatas.txt  : 게임 내의 스토리 모드에서 사용되는 텍스트 스크립트 모음
*_LanguageData.txt : 게임 내 UI등에 사용되는 텍스트 모음

2-1. SC_storyJsonDatas.txt 파일분석 (JsonParser 포맷)

a. 0x000000 ~ 0x000003 : 파일 이름 길이

b. 0x000004 ~ 0x000017 : 파일 이름

c. 0x000018 ~ 0x00001B : 앞으로 읽어들일 바이트 수

d ~ g : JsonParser 스트림 포맷

d.0x00001C ~ 0x000031 : 파악못함.

e. 0x000032 ~ : 앞으로 읽어들일 Json 본문 바이트 수

: 하나의 바이트 값이 0x80을 넘어서면 다음 바이트에 1을 추가하여 바이트를 늘려감.
: 0x80보다 작은 값이 나오면 read 멈춤.
: 1 -> 0x01 -> 0x01, 128 -> 0x80 -> 0x80 0x01, 256 -> 0x00 0x01 -> 0x80 0x02
: abcd에 대해
첫바이트 -> (abcd % 0x80) + (abcd > 0x7F ? 0x80 : 0x00)
다음바이트 -> ((abcd % (0x80)^2) / 0x80) + ((abcd / 0x80) > 0x7F ? 0x80 : 0x00)
N바이트 -> ((abcd % (0x80)^N) / 0x80^(N-1)) + ((abcd / 0x80^(N-1)) > 0x7F ? 0x80 : 0x00)

f.0x000034 ~ : Json 본문

{
    "key1" : "value1",
    ...
    "keyN" : "valueN"
}





g. 0x076052 : 0x0B(파일 끝)( 이후 바이트를 완전 버림 : 앞서 c. 에서 계산되는 바이트에서 빠져야됨.)


2-2. SC_LanguageData.txt 파일분석

a. 0x000000 ~ 0x000003 : 파일 이름 길이

b ~ f : Dictionary<int, string> 스트림 포맷

b. 0x000004 ~ 0x000013 : 파일 이름

c. 0x000014 ~ 0x000017 : 앞으로 읽어들일 바이트 수


d. 0x000018 ~ 0x000559 : 메타 데이터

e. 0x0002BD ~ 0x0002C0, 0x000375 ~ 0x000378 : 텍스트 개수

f. 이후 텍스트 데이터

* 텍스트 데이터 분석

4 바이트 : 텍스트 Key Id

1 바이트 : 텍스트 유무 코드 (유 : 0x06, 무 : 0x09)

4 바이트 : 체크섬 코드 A

(optional : 텍스트 유) 1~ 바이트 : 텍스트 바이트 수 2-1.e 항목 참고

(optional : 텍스트 유) 1~ 바이트 : 텍스트 Value (UTF-8)

1바이트 : 다음 텍스트 유무 코드 (유 : 0x01, 무 : 0x0B (-> 파일끝))

4바이트 : 체크섬 코드 B (텍스트 유 : A+B = 0xffffffff)

4바이트 : End 코드 (항상 0xFC 0xFF 0xFF 0xFF)



3. 결론

텍스트 키와 값을 읽어들일 수 있고 또한 분석된 결과를 토대로 새로운 파일을 생성할 수 있게 되었다. 한글 텍스트와 중국어 텍스트를 합쳐서 중국어 리소스에 엎어 씌게 되면 결과적으로 해당되는 텍스트 키에 맞게 한글 또는 중국어가 나오게 할 수 있다는 말.

한글 텍스트는 다음 버전부터 제공되지 않고 업데이트 되지도 않을 테니, 새로운 패치 내용에 맞는 텍스트를 한글로 적용하기 위해서는 누군가의 번역데이터가 필요할 듯. 시트를 생성하고 시트 값을 바탕으로 텍스트 데이터를 만들 수 있는 프로그램을 제작하여야 겠지만..

귀찮기도 하고 배포한다고 사용할 유저수도 적고 뭐 ㅋ


4. 결과



5. 비고

중섭기준인데, 텍스트 키값은 변경하지 않았을 확률이 높으니 대만섭에서도 잘 돌지 않을까?

암튼 #중장전희 재밌음.