» » Уроки перевода приставочных игр (базовый ромхакинг)
Навигация по сайту
Случайная игра

Вступай!!!
Облако тегов
Уроки перевода приставочных игр (базовый ромхакинг)

Уроки перевода приставочных игр (базовый ромхакинг)

Введение
Итак, добро пожаловать в сообщество увлечённых переводчиков приставочных игр, или как нас ещё называют - ромхакеров. Если вы даже не собираетесь надолго увлечься этим непростым, но интересным занятием, а просто хотите перевести любимую игрушку, то всё равно ярмо ромхакера останется на вас навсегда. Как говорится, once a Jedi - always a Jedi:) А поэтому делать надо всё со знанием дела, а главное - грамотно.
Хорошая игра нуждается в хорошем переводе, а плохих игр на старых добрых приставках, как известно, практически нет. Тем более, сейчас и так предостаточно до жути кривых и убогих переводов разных Кудосов, да 7-ых Волков, которые в одинаковой степени раздражают и закоренелых приставочников, и обычных юзеров. Повторения подобной ситуации на ромхакингсцене непозволительно, поэтому все светлые умы ромхакингсцены активно выступают против безграмотных переводов.
При написании статей я использую свой опыт перевода игр. Соответственно, я описываю свои способы работы с тем или иным этапом перевода игры. Но помимо этих способов, как правило, есть и другие. Я не навязываю действовать именно по моему шаблону, вы всегда можете изучить статьи по ромхакингу других авторов и сделать для себя выбор. И ещё одна деталь. Такие понятия, как, например, шестнадцатеричная система счисления, я не раскрываю. Подразумевается, что это вы сами должны уже знать, ибо без этого лучше продолжать просто играть в игры, не вдумываясь, как они работают.
Я сразу предупреждаю: эти статьи предназначены только для тех, кто не просто хочет сделать перевод игрушки, а ещё и в состоянии сделать его качественным. Если вы плохо знаете английский или того хуже, русский язык, лучше сразу переходите к другому разделу журнала - здесь вам делать нечего. Если же вы неплохо знаете инглиш, умеете красиво и грамотно излагать перевод и горите желанием перевести любимую игрушку, тогда вперёд!

Урок 1. Поиск шрифта в роме.
Это первый и самый важный шаг, если вы решили перевести какую-нибудь игрушку. Если вы не найдёте шрифта, то, возможно, он запакован, и тогда уже перевод данной игры выходит за рамки данного цикла статей. Но это замечание относится скорее к тем, кто уже имеет кое-какие навыке в ромхакинге и умеет без проблем отыскивать шрифты и графику в ромах с помощью тайловых редакторов, и есть все основания полагать, что шрифт запакован. Новички же обычно очень легко отступают, не найдя нужного шрифта, в то время как шрифт лежит открыто, и нужно лишь правильно выбрать режим цветности или тайловое смещение.
Тайловых редакторов, предназначенных именно для хакинга ромов, существует несколько. Я остановил свой выбор на двух из них: Tile Layer Pro (TLP) и RomArtist (RA). У каждого из них есть свои преимущества. Это проверенные временем (и мной:)) тайловые редакторы, которые помогут вам отыскать шрифт в большинстве случаев. Но замечу, что программы эти хороши не столько из-за того, что с их помощью удобно искать шрифт, сколько из-за того, что с их помощью удобно обрабатывать графику, так как у них есть очень удобные инструменты именно для этих целей.
Для собственно поиска шрифта (особенно если детальный поиск с помощью вышеупомянутых программ ничего не дал) я рекомендую использовать тайловый редактор Tile Molester (TM), в котором имеется гораздо большой выбор различных режимов цветности, а также методов хранения графики, нежели в TLP и RA.
Что ж, хватит лить воду, приступим непосредственно к делу. Откройте ром с игрой в каком-нибудь из двух редакторов. Допустим, в TLP. При открытии укажите нужный тип файла рома. Слева в окошке вы увидите тайлы, разделённые тайловой сеткой.

Уроки перевода приставочных игр (базовый ромхакинг)


Кстати, пока я не забыл, скажу, что TLP отбрасывает первые 128 кб рома (если сам ром занимает больше 128 кб), в котором обычно хранится только служебная информация, в то время как RA всегда показывает весь ром целиком. Учитывайте этот момент. Теперь, медленно прокручивая графику вниз, внимательно смотрите на содержимое тайлов, пока не найдёте нужный шрифт. Во время прокручивания вам может встретится также другая графика из игры, которую стоит перерисовать, поэтому желательно записать, где она хранится (узнать это можно по значению Offset). Как работать с графикой, вы узнаете в следующих уроках.
Если шрифт вы не нашли, то имеет смысл просмотреть ром в других режимах цветности, особенно в режиме 1bpp. Конечно же, искать шрифт в игре для NES в цветовом режиме Genesis - занятие бесперспективное и глупое, поэтому не стоит тупо пересматривать весь ром во всех режимах. Также при неудаче откройте ром в TM и попробуйте поискать шрифт, выбрав другой метод хранения графики, например, 2-Dimensional. Попробуйте включить опцию Row-interleaved.

Уроки перевода приставочных игр (базовый ромхакинг)

Кроме того, иногда у шрифта присутствует тайловое смещение (символы выглядят "разделёнными"). В этом случае в RA подберите удобный вид с помощью параметров "Ширина тайла" и "Высота тайла".

Уроки перевода приставочных игр (базовый ромхакинг)

Ну вот, в общем-то и всё, что вам нужно знать, чтобы отыскать шрифт в играх для NES, SNES, Genesis, GBA и т. п. С более современными консолями дело обстоит несколько иначе. Ещё есть более сложный способ отыскания шрифта в роме - аналитический, но в виду его сложности (да и я сам плохо разбираюсь в нём), описывать его я не стану.
В дополнение к этому уроку я могу написать, как искать графику и шрифт в играх для Nintendo64, но решать, стоит ли писать об этом в следующем номере журнала или нет, я буду по вашим отзывам.

--Термины урока--

1bpp
Так называемый монохромный режим графики. См. также режим цветности.

Запакованный текст (графика)
Информация, упакованная по специальным алгоритмам, которую невозможно редактировать напрямую и очень трудно найти без специальных знаний о платформе, для которой написана игра. В данном цикле статей о ромхакинге не рассматривается.

Режим цветности
Количество битов с информацией о цвете на пискель (bit per pixel, bpp).

Смещение (offset)
Адрес, по которому располагается найденная в тайловом редакторе графика в роме.

Тайл (tile)
Блок пикселей, содержащий кусок графического объекта, либо символ, либо часть символа и т. д.

Тайловое смещение (не путать со смещением тайла!)
В играх иногда тайл занимает больший размер, чем стандартный 8х8, не только по длине, но и по ширине, поэтому приходится менять размер тайла, чтобы каждая буква умещалась в одном тайле.

Тайловый редактор
Графическая программа, позволяющая редактировать блоки графики (тайлы), в которых хранится вся графика в роме (надписи, шрифты и прочее)

--Используемые утилиты--

RomArtist
Tile Layer Pro
Tile Molester
+Java Runtime Environment 1.4 (или выше)

Урок 2. Составление таблицы кодировки текста.

Попробуем составить таблицу кодировки текста в игре. На родном PC используется стандартная кодировка, а вот в приставочных играх очень часто - нестандартная. Наша задача заключается в том, чтобы найти соответствующий шестнадцатеричный код (далее HEX-код) для каждого используемого символа из шрифта игры, а также специальных символов типа перехода на следующую строку, окончания либо начала диалога и т. п. Заметьте, чем подробней мы опишем все найденные символы в таблице, тем легче и нагляднее будет работать с текстом в дальнейшем.
Итак, приступаем. Прежде всего надо чётко определить, какой конкретно текст мы будем искать. Для этого вам нужно выбрать какую-нибудь фразу из диалогов персонажей игры (желательно просто взять длинное и не часто повторяющееся слово). Теперь отыщем этот текст в роме с помощью так называемого "релсерча" (Relative Search), то есть относительного поиска. Например, можно воспользоваться специальными утилитами для нахождения текста и генерации таблиц, а можно составить таблицу вручную. Так или иначе, полную таблицу с помощью утилит вы не составите всё равно, придётся ручками дорабатывать. Я советую воспользоваться досовской утилитой HEXPOSE, которая отлично зарекомендовала себя. В архиве вместе с утилитой также находятся несколько готовых таблиц; помотрите их, чтобы составить представление о том, как должна выглядеть таблица. (Учтите только, что прога капризная, и в WinXP работает только через досовский эмулятор DOSBox). Откройте в ней ром, нажмите F6 и введите нужное слово из игры (или выберите из меню (нажав Esc) Search->Relative). Запомните: искомое слово должно состоять только из букв одного регистра!
Если текст нашёлся, я советую присмотреться к кодам букв: если букве "а" соответствует код 41h либо 61h, то это скорее всего стандартная кодировка, составлять свою таблицу для неё не нужно. В этом случае заново откройте ром и нажмите F9 (File->Save .TBL). Задайте таблице имя вида game_name.tbl и сохраните её. Не беспокойтесь, увидев в этой таблице даже те символы, которых нет в шрифте игры, и не удаляйте их - в тексте они использоваться не будут. В случае с нестандартной таблицей после относительного поиска также нажмите F9 и сохраните таблицу, но в такой таблице будут только заглавные и строчные буквы.
Если текст найти не получилось, то возможно: а)текст запакован; б)используется двухбайтовая кодировка; в)используется оптимизация текста (словарный метод хранения (DTE/MTE)); г)то, что вы ищете - не текст, а спрайт или графика; д)дрожат руки, ошиблись при наборе:) В случае с а) я вам ничем помочь не могу, так как это выходит за рамки моих знаний и возможностей. Про б), в) и г) будет подробно написано в следующих уроках, ну а с д) вы сами разберётесь:) Если всё получилось, то в первом случае я советую открыть в тайловом редакторе ром и сверить коды рассчитанных по расположению символов с их табличными значениями. Во втором случае тоже открывайте ром в редакторе, высчитывайте коды всех не вошедших символов и заносите их в таблицу.
Теперь расскажу подробнее о том, как собственно высчитывать. Самое главное - сравните уже имеющиеся коды букв в таблице с их положением в шрифте. Вспомните математику и шестнадцатеричное исчисление, то есть воспользуйтесь калькулятором и включите мозги. Всё просто: символ левее имеет код на единицу меньше, правее - больше. Иногда, правда, если символ хранится в двух тайлах, то и их коды идут через единицу. Но сразу хочу заметить, что это не обязательно. Бывает, символы в тайлах располагаются вообще бог знает как, так что посматривайте в созданную вами ранее таблицу и будьте внимательны. Внесите в таблицу все недостающие символы из шрифта.

Уроки перевода приставочных игр (базовый ромхакинг)

Осталось добавить в таблицу специфические символы типа перехода на следующую строку. Для этого придётся открыть ром в HEXPOSE (предварительно поместив созданную таблицу вместе с ромом и дав ей имя, такое же, как и у самого рома, но с расширением *.tbl), а также игру в эмуляторе. В игре найдите подходящий диалог и найдите его же в HEXPOSE с помощью обычного поиска. Теперь посмотрите на то, как кончается диалог в игре и на это место в HEХ-редакторе. Обычно диалоги заканчиваются одними и теми же символами с кодом типа 00h. Конечно, часто бывает, что между этим символом и следующим диалогом находятся ещё какие-то коды, но в их назначении надо разбираться отдельно (чаще всего это выяснять не нужно). Строки тоже обычно делятся кодами типа FFh. Примерно так же определяются и другие спецсимволы, хотя это бывает не так просто.
Уроки перевода приставочных игр (базовый ромхакинг)

Найдя символ конца диалога и строки, занесите их в вашу таблицу.
Так как в следующем уроке, в котором пойдёт речь о вынимании скрипта в текстовый файл, будет использована программа THINGY, то и таблицу будем оптимизировать под её стандарт. К счастью, в основном стандарты на таблицы одинаковые, так что особых сложностей не будет. Итак, в самый верх таблицы добавьте:

*XXh
/XYh

где XXh - код переноса на другую строку, а XYh - код окончания диалога.
Ну вот, теперь таблица готова.

--Термины урока--

Двухбайтовая кодировка
Кодировка теста, в которой каждый символ кодируется двумя байтами.

Код символа
Шестнадцатеричное значение, которому соответствует какой-то символ из шрифта игры.

Относительный поиск (relative search)
Поиск текста (и не только), который основан на том, что некоторые символы (например, буквы или цифры) всегда располагаются друг за другом в определённом, заранее известном порядке.

Словарный метод хранения текста
Метод оптимизации (не путать с запаковкой!) текста, при котором наиболее часто используемые слова/части слов выносятся в т. н. "словарь", каждому из которых задаётся свой шестнадцатеричный код. Потом текст игры оптимизируется путём замены повторяющихся слов/частей на их код.

Спецсимволы
Символы, которые не являются графическими, а отвечают за форматирование текста в игре, его положение и т. п.

Таблица кодировки
Таблица символов и кодов, которыми они кодируются в роме. Обычно в играх используются однобайтовые кодировки, в которых каждому символу соответствует один байт.

--Используемые утилиты--

HEXPOSE +DOSBox (для WinXP)
Текстовый редактор (сгодится и Блокнот)

Ну всё, хватит:) Переваривайте пока то, что я здесь написал, а в следующем номере я расскажу о том, как вынимать текст скрипта игры в файл, о тонкостях его редактирования и последующей обратной вставке в ром. О перерисовке шрифта писать не буду - с этой процедурой справится даже ребёнок. А на сколько красиво вы перерисуете шрифт - зависит только от вас и вашей фантазии.
И жду ваших отзывов на форуме по первым урокам, а также о нужности или ненужности дополнения к первой статье о поиске графики и шрифтов для Nintendo64 (человек десять попросят - значит напишу;)).

До новых встреч на электронных страницах журнала!

Автор: gottaX
Журнал: Game Bit



Вернуться
  • Комментарий: 1
  • Просмотров: 5719
  • 24 января 2024 14:15
  • Регистрация: --
  • ICQ: {icq}
  • Комментариев: 0
  • Новостей: 0
Было бы интересно посмотреть возможности перевода на 2024 год.

Комментарии:

Оставить комментарий