Привет!
Хотелось бы перевести игру Ghost Trick (DS) на русский. После гугления на эту тему, нашел два начинания:
1)На русский (http://www.shedevr.org.ru/forum/viewtopic.php?t=4225) - так и не начат. Автор темы - переводчик, он не умеет вскрывать ромы и ему никто не помог это сделать.
2)На бразильский (или испанский?) (http://romhacking.trd.br/index.php?/topic/7147-nds-ghost-trick-phantom-detective/) - застрял на половине.
Также был найден скрипт на Python (http://pastebin.com/5rjf3DV8) (по-видимому, от автора бразильского перевода), который достает текст и запаковывает его. Тексты в игре сжаты и лежат в файлах с расширением .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, 22:24:51Можно ли дорисовать русские буквы на пустое место в шрифтах и как в таком случае игра поймет, что нужно использовать эти клетки?
Нужно. У каждой клетки есть индекс. Индекс = код символа.
М, я понял кажется.
Там буквы закодированы двумя байтами от 0x00 0x00 (0) и далее. Причем второй байт служит для каких-то служебных целей (концы строк, эффекты, видимо), обычные буквы и знаки везде содержат 0x00. Поменял вручную несколько букв на 0x73 0x00 (пустая область), нарисовал там квадрат, ну и он отобразился в игре. Правда, с шириной небольшие проблемы, но я там видел файлы с названиями "CharWidth.bin" - там, видимо, хранится ширина. Вобщем надо копать.
Но шрифт! Вот что с ним не так? Как его правильно открыть? У меня получилось очертания букв получить с такими настройками: 16x16, byte jump 32, 4 color 2bpp. Но он выглядит совсем не так, как в игре. Там если все 4 цвета поменять, в буквах есть пробелы. Приложил скриншот с тем, что я получил (внизу - увеличенный текст из эмулятора), а также сам шрифт.
Возможно используется кодировка Shift-JIS. Часто в японских играх.
Формат графики, думаю, надо конвертировать собственными силами. Вряд ли есть такой в тайловых редакторах.
Буду здесь писать свой прогресс, вдруг кто-то захочет помочь/подсказать/ткнуть в очевидные ошибки :)
ЦитироватьФормат графики, думаю, надо конвертировать собственными силами.
Я понял, что нужно изменить по сравнению с 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 + вытаскивание текста в одной программе:
скриншот (http://ssmaker.ru/886d7ebf/)
Осталось прикрутить GUI для перевода, который будет расставлять вместо русских букв их индексы, нарисовать русский шрифт на этих самых индексах и расковырять файлы, где записана ширина символов. Вроде ничего не забыл :)
******************
(обновление)
Сделал конвертер шрифта в обычный файл. Распознается, как GBA 8bpp -
скриншот (http://ssmaker.ru/a8d7042f/)
Молодец. Ещё палитру нормальную подключи и вообще будет здорово :)
http://ssmaker.ru/6580ea88/ вот с нормальной палитрой.
http://SSMaker.Ru/f661e2ea/ вот я перерисовал букву M, закодировал шрифт назад и посмотрел на результат. Работает!
Теперь буду делать редактор текста
Действительно молодец. :)
Если у редактора будет возможность вставлять более емкий по сравнению с оригиналом текст, то будет супер. То есть он должен работать по указателям и должна быть возможность изменения адресов хранения текста. По аналогии как Круптар)
А зачем редактор текста? Там специфические коды с текстом идут?
Цитата: JurasskPark от 29 октября 2012, 16:49:18
А зачем редактор текста? Там специфические коды с текстом идут?
Цитата: cpp от 25 октября 2012, 22:24:51Тексты в игре сжаты и лежат в файлах с расширением .xml.lz
Цитата: Oraculum от 29 октября 2012, 22:02:23
Цитата: JurasskPark от 29 октября 2012, 16:49:18
А зачем редактор текста? Там специфические коды с текстом идут?
Цитата: cpp от 25 октября 2012, 22:24:51Тексты в игре сжаты и лежат в файлах с расширением .xml.lz
Ну так не редактор, а конвертер.
Цитата: JurasskPark от 29 октября 2012, 22:52:15
Цитата: Oraculum от 29 октября 2012, 22:02:23
Цитата: JurasskPark от 29 октября 2012, 16:49:18
А зачем редактор текста? Там специфические коды с текстом идут?
Цитата: cpp от 25 октября 2012, 22:24:51Тексты в игре сжаты и лежат в файлах с расширением .xml.lz
Ну так не редактор, а конвертер.
Естественно, редактор будет включать в себя распаковщик и запаковщик.
Ну, во-первых, специфические коды идут, да. Например, всякие там раскрашивания текста, портреты, звуки.
А во-вторых, это хороший повод попрактиковаться в программировании :)
http://ssmaker.ru/1c0e1191/
Г слишком уж ровная по сравнению с остальными.
Это специально такой жуткий шрифт?)))
Вырвиглазный шрифт :o
Я думал это стилизация, хотя в игре текст идёт более удобочитаемым шрифтом. Может. не туда смотрю? :)
(http://api.ning.com/files/CnmfgTHWa2vI1ITemq5hb-9-dEqP35Mh3b4bn6OVfajlOTzSUclbn0bONjEy366FtbsKnqAWYxHyRwrO6gmYzz5bc1yTOtff/GhostTrick05.jpg)
Цитата: German от 31 октября 2012, 09:58:09Я думал это стилизация, хотя в игре текст идёт более удобочитаемым шрифтом. Может. не туда смотрю? :)
В оригинале шрифт не только прямее, но и многоцветный (с полутонами), а ТС сделал кривой одноцветный шрифт. Судя по всему, шрифт он вручную не рисовал, а нафотошопил из какого-нибудь имеющегося в системе шрифта. С полутонами он, может быть, смотрелся ещё ничего, но если из фигурного шрифта делать чисто белый (с заменой полутонов на белый цвет), то ожидаемо получается "вырвиглаз".
Ну что есть новости?
Там текст запакован в не стандартный .lz архив, удалось его достать?
Ни у кого контакты автора темы не сохранились? Почта или агент какой.