Переводы, переводы, переводы... > Ромхакинг и перевод

Перевод игры Ghost Trick

(1/5) > >>

cpp:
Привет!
Хотелось бы перевести игру Ghost Trick (DS) на русский. После гугления на эту тему, нашел два начинания:
1)На русский - так и не начат. Автор темы - переводчик, он не умеет вскрывать ромы и ему никто не помог это сделать.
2)На бразильский (или испанский?) - застрял на половине.
Также был найден скрипт на Python (по-видимому, от автора бразильского перевода), который достает текст и запаковывает его.  Тексты в игре сжаты и лежат в файлах с расширением .xml.lz, я ума не приложу, как еще их можно открыть, кроме этого скрипта.
Шрифты я нашел в четырех файлах (возможно, их там больше; я открывал только те, в названии которых есть слово font). Все замечательно открылись в CrystalTile2 с настройками 16х16, Tile form: GBA 4bpp. Один из шрифтов содержит также катакану, а еще каждый символ повернут на 90 градусов. Есть один шрифт 8х8.
Сейчас я переписываю тот самый скрипт на православный C++, попутно понимая, что в нем происходит.
Так как из опыта в ромхакинге у меня только перерисовывание шрифтов в Pokemon Platinum и последующая "BCTABKA BOT TAKOIO TPAHCLUTHOIO TEKCTA", то у меня возникают некие вопросы:
1. Можно ли дорисовать русские буквы на пустое место в шрифтах и как в таком случае игра поймет, что нужно использовать эти клетки?
2. Не был ли изобретен бразильский велосипед? Я имею в виду, возможно, этот скрипт легко можно заменить каким-то более цивилизованным и стандартным решением?


В прикрепленыше шрифты, открытые в CrystalTile2.

Джинни:

--- Цитата: cpp от 25 Октября 2012, 21:24:51 ---Можно ли дорисовать русские буквы на пустое место в шрифтах и как в таком случае игра поймет, что нужно использовать эти клетки?
--- Конец цитаты ---
Нужно. У каждой клетки есть индекс. Индекс = код символа.

cpp:
М, я понял кажется.
Там буквы закодированы двумя байтами от 0x00 0x00 (0) и далее. Причем второй байт служит для каких-то служебных целей (концы строк, эффекты, видимо), обычные буквы и знаки везде содержат 0x00. Поменял вручную несколько букв на 0x73 0x00 (пустая область), нарисовал там квадрат, ну и он отобразился в игре. Правда, с шириной небольшие проблемы, но я там видел файлы с названиями "CharWidth.bin" - там, видимо, хранится ширина. Вобщем надо копать.
Но шрифт! Вот что с ним не так? Как его правильно открыть? У меня получилось очертания букв получить с такими настройками: 16x16, byte jump 32, 4 color 2bpp. Но он выглядит совсем не так, как в игре. Там если все 4 цвета поменять, в буквах есть пробелы. Приложил скриншот с тем, что я получил (внизу - увеличенный текст из эмулятора), а также сам шрифт.

Джинни:
Возможно используется кодировка Shift-JIS. Часто в японских играх.
Формат графики, думаю, надо конвертировать собственными силами. Вряд ли есть такой в тайловых редакторах.

cpp:
Буду здесь писать свой прогресс, вдруг кто-то захочет помочь/подсказать/ткнуть в очевидные ошибки  :)

--- Цитировать (выделенное) ---Формат графики, думаю, надо конвертировать собственными силами.
--- Конец цитаты ---

Я понял, что нужно изменить по сравнению с 4 color 2bpp из CT2:

--- Код: ---
1  ряд +1
2  ряд -1
3  ряд +1
4  ряд -1
5  ряд +1
6  ряд -1
7  ряд +1
8  ряд -1
9  ряд +1
10 ряд -1
11 ряд +1
12 ряд -1
13 ряд +1
14 ряд -1
15 ряд +1
16 ряд -1
--- Конец кода ---
Собственно, каждые 2 ряда должны поменяться местами. Я думаю, что это связано с тем, что CT2 читает файл, как Big Endian, а нужно Little Endian (или наоборот :) ).


По поводу самого текста.
Вот такая вот карта символов у игры:

--- Код: ---
char charmap[]={
 '0','1','2','3','4','5','6','7','8','9',   //9
 'A','B','C','D','E','F','G','H','I','J',   //19
 'K','L','M','N','O','P','Q','R','S','T',   //29
 'U','V','W','X','Y','Z','a','b','c','d',   //39
 'e','f','g','h','i','j','k','l','m','n',   //49
 'o','p','q','r','s','t','u','v','w','x',   //59
 'y','z','!','?','?','?','?','?','?','?',   //69
 '?','?','?','?','?','?','?','?','?','?',   //79
 '?','?','?','?','*','?','?','?','?','?',   //89
 '?','?','?','?','?','?','?','?','?','?',   //99
 '?','?','?','?','?','?','?','?','?','*',   //109
 '?','?','?','?','*','*','*','*','*','*',   //119
 '*','*','*','*','*','*','*','*','*','*',   //129
 '*','*','*','*','*','*','*','*','*','*',   //139
 '*','*','*','*','*','*','*','*','*','*',   //149
 '*','*','*','*','*','*','*','*','*','*',   //159
 '*','*','*','*','*','*','*','*','*','*',   //169
 '*','*','*','*','*','*','*','*','*','*',   //179
 '*','*','*','*','*','*','*','*','*','*',   //189
 '*','*','*','*','*','*','*','*','*','*',   //199
 '*','*','*','*','*','*','*','*','*','*',   //209
 '*','*','*','*','*','*','*','*','*','*',   //219
 '*','*','*','*','*','.','*','?','?','(',   //229
 ')','?','?','*','"','?','?',':','*',',',   //239
 '+','/','#','\'','-','*','*','%','*','*',  //249
 '*','*','&','?','?',' '};                 //255

--- Конец кода ---
* - пустые места (и те, что я еще пока не разобрал). Русский алфавит можно вставить после символа ?
Также я сделал распаковку LZSS + вытаскивание текста в одной программе: скриншот

Осталось прикрутить GUI для перевода, который будет расставлять вместо русских букв их индексы, нарисовать русский шрифт на этих самых индексах и расковырять файлы, где записана ширина символов. Вроде ничего не забыл :) 


******************
(обновление)

Сделал конвертер шрифта в обычный файл. Распознается, как GBA 8bpp - скриншот

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии