Однажды, прогулявшись по нескольким форумам, я нашел комментарии с просьбой перевести на русский javaME игру Fishing Legend. Сразу вспомнил, что эту игру как-то очень давно сам хотел перевести, но не понимал, почему после перевода не отображается русский текст. Тогда я не знал, что существуют рисованные шрифты. Но сейчас, спустя три года, пробежавшись по файликам в архиве, я решил взяться за перевод этой игры.
Итак, открываем архив и ищем интересующие нас файлы — шрифты и текст. В этой игре используются два рисованных шрифта: один крупный (для меню, с обводкой), второй мелкий — для всего остального:
Размеры каждого символа — длина, ширина и расстояние между буквами — находятся в классе i.class, считывание шрифтов, судя по всему, тоже в классе i.class. Здесь два варианта для добавления русских букв: оставить все существующие символы и дорисовать русские в конец изображения либо русские буквы поставить вместо существующих. Я выбрал второй вариант, самый простой, к тому же количество символов в одной строке — 32, как раз все русские буквы можно вставить без проблем (буквы ё в своих переводах я избегаю). Далее появляется еще одна очень неприятная проблема в первом шрифте: так как ширина для всех букв одинакова, изменить ее отдельно нельзя. Изначально она равняется 8 пикселям, что совершенно не подходит для «нестандартных» русских букв «Д», «Ш», «Щ» и «М». На помощь приходит javaByte, с его помощью ширина была увеличена до 10 пикселей. Что касается второго шрифта — там проблем не было никаких, все буквы встали на места как родные.
Вот то, что получилось после нескольких минут работы в графическом редакторе (четвертая строка была удалена за ненадобностью):
А вот то, что было изменено в коде программы:
Code
if(j == 0)
{
a_int_static_fld = 10; // ширина символа изменена на 10
b = 7; // расстояние между символами, не выяснено, почему корректно не увеличивается
c = 12; // выстоа символов
return;
}
На этом работа со шрифтами заканчивается, пора приступать к работе над текстом. Текст находится в каталоге /t/ в восьми файлах, плюс несколько слов в классах. Структура файла на первый раз была непонятна из-за того, что байты записываются в обратном порядке (например, не 0021, а 2100).
Вот как выглядит первый файл в Hex редакторе:
Первые два байта — количество текстовых строк в файле. Далее двухбайтовое число — количество всех байтов с начала файла до нужной текстовой строки. На скрине выше AA00 (байты выделены) — количество байтов до первой текстовой строки, все строки во всех файлах начинаются и заканчиваются символами «+».
Редактировать вручную — вырезать и вставлять строки — очень сложно, так как ситуация ухудшается с появлением «крякозябров» — русские буквы ведь «встали» на место всяких-там-непонятных символов. Отредактированный файл принял такой вид:
Разобраться, где начало, а где конец строки на скрине выше не представляется возможным без индексного файла.
Чтобы избавиться от этой тяжелой работы, мной была написана небольшая программка, выполняющая всю самую кропотливую работу. Эта программа считывает UTF строки с текстом, преобразует их в нужный вид, создает индекс и составляет файл. Скрин программы представлен ниже:
После редактирования / перевода всех восьми файлов и двух классов работа над игрой завершается. Файлы шрифта и перевода совместимы с версиями 240х320 и 176х208. Графику я решил не перерисовывать, поскольку у меня это получается не очень хорошо.
Оценка времени перевода:
1 день на перерисовку шрифтов и написания программы
3 дня на перевод строк
1 день на тестирование
Итого: 5 дней (в среднем за день работы на 3 часа).
Автор урока -
wakko,
вот его сайт.