Как делается перевод...

Необходимые программы:

N64Gfx v2.0 (by EAR_CLOCK, CesarB & Hyllian) - DOS.
    Утилита для экспотра графики из рома, а также импорта ее обратно в ром.
    Работает только с файлами *.png (output / input).
    Используется также с файлами *.dat (см. Zelda Extractor), для редактирования сжатой графики в игре.
Sprite Viewer v1.65 (by Peekin) - DOS
    Программка для просмотра и поиска графики в роме. 
    (А также другой информации (оффсет, режим, размер) для использования с n64gfx).
    Для ромов N64 используйте режимы linear4, linear8, n64high, n64true
    Показывает только не сжатую графику в ромах N64.
    Можно также использовать для поиска графики в ромах других консолей (Nes, Snes, Sega, Gameboy и.т.д)
    Более подробную информацию можно найти в readme.
Macromedia Fireworks v4.0.1 - Windows
    Графический редактор. 
    Необходим для работы с файлами *.png, используемыми N64Gfx.
    Можно также использовать Adobe Photoshop, (лучше версии 6.0).
Hexposure v0.44b (by SnowBro) - DOS
    Хекс-редактор.
    Используется непосредственно для перевода диалогов.
    В Zelda весь текст хранится в кодировке ASCII, так что таблиц делать не надо.
    Перевод можно делать прямо в роме.
Zelda Extractor (by _Demo_) - DOS
    Программка для распаковки сжатой графики в Zelda: Ocarina of Time и в Zelda: Majora's Mask.
    После распаковки создается 1456 файлов *.dat (для Majora's Mask - 2033).
    Каждый файл содержит найденную в игре графику (сжатую и нет). Просматривать - в Sprite Viewer.
    Имя *.dat файла - это адрес, по которому хранится найденная графика в роме.
    Но именно сжатая доступна теперь для просмотра в Sprite Viewer.
Yaz0 Kit (by PSA) - DOS
    Две программки для распаковки и обратной компрессии сжатой графики в обеих Zelda.
    Распаковка работает точно также, как и Zelda Extractor, только вместо *.dat файлов, 
    (с адресом в качестве имени), создается такое же количество *.unp файлов. 
    Имя файла здесь - просто номер по порядку. 
    Поэтому гораздо удобнее использовать ZeldaExtractor в качестве распаковщика. 
    Запаковщик работает только с файлами "unp" (без расширения). Просто unp.
    Для компрессии необходимо просто переименовать конкретный *.dat в unp. 
Romput v1.0 (by Icarus) - DOS
    Программка, вставляющая любые данные в ром N64 по заданному адресу.
    Нужна для вставки отредактированных (и снова запакованных) данных обратно в ром.

 

Редактирование графики (не сжатой):

(На примере надписей на кнопке "Action Icon")

Кнопка "Action Icon"
Поиск графики:
Sprite Viewer

    Берем ром Zelda64 (ром должен быть не byteswapped). Открываем его в Sprite Viewer и ищем графику. 
    Для быстроты поиска понажимайте ], и клавишей PageDown (или стрелками) доберитесь до адреса 0x8C4D71.
    Теперь перейдите в режим Linear 4 (клавиша 4), выберете палитру Gray (клавишей P).
    Теперь понажимайте [, чтобы ширина изображения получилась 48 пикселей.
    На экране должно получится примерно следующее:

 
               Оффсет                        Размер                     Режим                                                                          Палитра


В случае с другой графикой все подбирается опытным путем, в режимах linear4, linear8, n64high, n64true.
Наилучшее качество получается в палитре Gray. В случае с режимами n64high и n64true - в палитре True color.
Так, например, выглядят предметы в инвентаре:

 
Экспорт графики из рома:
N64Gfx

    Запоминаем оффсет, размер и режим. Закрываем Sprite Viewer, запускаем n64gfx (frontend). 
    На вкладку Palmatch не обращаем внимания.   
    (Ром и n64gfx должны лежать в одной директории)
    Заполняем поля в n64gfx следующим образом:

 

    Обратите внимание, что в поле Rom name with (ext) не надо писать полный путь к рому. 
    (Например - C:/n64translate/n64gfx/zelda64.rom). Если написать путь, n64gfx не будет ничего делать.
    Также в поле Palette type практически всегда надо выбирать builtin igray.
    Еще нормально работает default.
    В поле Image size первую цифру пишем 48 (ширина), так как показывало в Sprite viewer-e. 
    Вторую - подбираем опытным путем. В данном случае - 465. 
    (Но иногда желательно, чтобы одно значение было кратно другому).
    Все заполнили - жмем самую большую кнопку - Run N64gfx. Создается файл "action-icon.png" (рис.1)

 
 рис. 1 (фрагмент)
                                                                        
Перерисовка по-русски:
Photoshop (или Fireworks)
    Рисовать можно как в фотошопе, так и в файрворксе. 

    Photoshop (v5.0, v5.5, v6.0)
    Теперь перерисовываем графику, с сохранением палитры.
    Чтобы использовать оригинальную палитру, в фотошопе открываем action-icon.png, 
    (он экспортируется из рома в режиме Indexed Color). идем в меню Image, 
    выбираем Mode -> Color Table, жмем Save. Называем файл, скажем, Action.act.
    Пересохраняем файл action-icon.png как action-rus.png (или любой другой формат, лучше *.psd).
    Рисуем русские надписи, примерно как на рис. 2.

   
 рис. 2 (фрагмент)

    Удобнее редактировать в режиме RGB color, который поддерживает использование слоев и другие
    функции фотошопа, недоступные в режиме indexed color. (Режим меняется в Image -> Mode -> RGB color).
    Нарисовали, понравилось - теперь надо возвернуть режим indexed color. (Image -> Mode -> Indexed color).
    В появившемся окне во вкладке Palette выбираем Custom.
    Открывается знакомое окно с палитрой. Жмем Load и открываем сохраненный ранее Action.act. 
    Жмем ОК и сохраняем файл как action-rus.png (в появившемся окне с параметрами png ставим interlaced - none).

    Все, к вставке в ром файл готов *. 

    * На всякий случай можно переименовать action-rus.png в action-r.png
      (иногда при импорте n64gfx не воспринимает длинные имена файлов. Dos есть Dos... 
      Максимум 8 букв в имени файла. Я заметил этот баг только при импорте в палитре builtin igray).
    
    Fireworks (v4.0.1)
    В случае с файрворксом, можно либо редактировать в нем, либо открыть подготовленный
    раньше в фотошопе файл. Файрворкс понимает разные форматы файлов (jpg, tif, psd, png, bmp и т.п.). 

    Открываем (или создаем) action-rus.png в Fireworks. 
    Нужно обратить внимание, чтобы размер изображения (image size) нового файла
    точно соответствовал оригинальному. Если будет отличие хоть на один пиксел, то n64gfx не будет работать.
    В нашем случае image size должен быть 48х465 пикселей, 72 dpi.

    В Fireworkse в меню File выбираем Export Preview. Выбираем параметры для экспорта. 
    Я делал опытным путем, в итоге наилучшее качество получилось с такими параметрами:



    PNG 8, Grayscale 16 цветов, Dither 100% (иногда - 0%), Index transparency.
 
    Жмем кнопку Export..., пересохраняем файл под тем же именем.
    (или сохраняем под другим именем, на всякий случай, к примеру - action-rus2.png). 
  
Импорт графики в ром:
N64Gfx

    Теперь загружаем n64gfx frontend, (action-rus.png, N64Gfx и ром дожны лежать в одной папке).
    заполняем все точно так же, как и при экспорте, только в поле Operation вместо export ставим import 
    и в поле Image name *.png пишем название нашего нового перерисованного файла - action-rus.png (или action-r.png).
    Все заполнили - жмем Run N64gfx. Все. Готово. Теперь надписи на Action Icon должны быть по-русски.
    На всякий случай, можно открыть ром в Sprite Viewer, и по знакомому адресу посмотреть изменения.
    Должно получится следующее:

 

    Все. Открываем ром в эмуляторе, начинаем игру (или грузим сейв) и видим:

 

    Круто.
Шрифты:
Sprite Viewer / N64Gfx / Photoshop (Fireworks)

    Самое главное - перерисовка шрифтов - делается по такому же принципу, как и надписи на Action Icon.
    Редактирование осложнается тем, что шрифт слегка размыт, в отличие от Action Icon. 
    В n64gfx только можно в поле Type выбрать Block, для удобства редактирования, 
    но тогда прийдется оба значения Image Size подбирать опытным путем. Значения должны быть кратны.
   
    В игре используется два шрифта. Один - выбор имени в начале игры и надпись PRESS START.
    Второй - собственно в диалогах.

    В идеале вытянутый из рома шрифт (второй, для диалогов), выглядит так: *
    
 

    * Параметры n64gfx для второго шрифта:

      offset - 0x906f70, mode - linear 4, type - block, size - 16 x 16, image size - 160 x 224, palette type - builtin igray  
    Буквы перерисовываются так, как кому удобно. Мы их располагали примерно так, как они расположены на клавиатуре.
    Т.е., на месте английской "A" рисуем русскую "Ф" и т.д. 
    Важно нарисовать буквы так, чтобы ширина новой русской буквы 
    соответствовала ширине английской, на месте которой она рисуется. 
    Иначе в игре одни буквы будут налазить друг на друга, а между другими будут большие пробелы.
    Теоретически эту проблему можно решить, найдя в роме таблицу ширины букв, и изменив ее. 
    Но как это сделать - пока никто не додумался. 
Перевод:
Hexposure

    После того, как перерисован и вставлен в ром шрифт, можно приступать непосредственно к переводу.
    Открываем Hexposure *, открываем ром и ищем текст. Выглядит все это так:



    Перевод делается в правой колонке. Например, "30 Rupees" переводим как "30 Рупий".
    Учитывая подстановку букв, пишем: "30 Hegbq".
    И погнали....

    Как все это выглядит в игре - можно увидеть в разделе Screenshots, а лучше скачать патч, и поиграть.

    В средней колонке - 16-тиричные обозначения символов. В левой - оффсет.

    Если, к примеру, необходимо выделение части фразы цветом, вроде "Ты нашел Сердце", используются пойнтеры.
    В hexposure это будет выглядеть так: "Ns yf*tk .ACth{wt.@" (уже переведенная фраза).
    В данном примере - "" - начало выделения красным цветом. ".@" - конец выделения цветом (любым).
    Значения пойнтеров пишутся в средней части окна: "" = 05 41, а ".@" = 05 40.

    * Можно использовать и другие hex-редакторы, вроде Thingy или Hex Workshop. Это кому где удобнее.

 

Редактирование графики (сжатой):

 

Распаковка графики:
Zelda Extractor

    К сожалению, большая часть необходимой для перевода графики в игре сжата. Процесс распаковки делается самой игрой.
    Редактированию обычным способом она не поддается, но выход есть.
    Берем наш оригинальный ром Zelda64. Копируем его и Zelda Extractor в одну папку. 
    В командной строке пишем: Zextract.exe Zelda64.rom (или перетаскиваем ром на Zextract.exe в explorer-e).
    После некоторых раздумий программки, в нашей папке создается немеренное количество файлов *.dat (1456 штук).
    Эти файлики - все графические данные, найденные в игре. Как сжатые, так и нет. 
    Имя файла - адрес, по которому данные лежат в роме.    
    Но сжатые данные теперь стали доступны для просмотра в Sprite Viewer, а значит - и для перерисовки.
    Распаковали - переходим ко второму, самому нудному шагу: поиску нужной графики во всей этой куче.
Поиск графики :
Sprite Viewer

    Все точно также, как и поиск в роме, только вместо рома в Sprite Viewer нужно просмотреть
    все эти 1456 *.dat файлов. Чтоб долго не искать, для начала можно, к примеру, взять файлы размером по 6,75 кб - 
    - в них находятся названия мест в игре, которые появляются в середине экрана, когда заходишь в это место/местность.
    (Kokiri Forest, Hyrule field, Water Temple и т.п. Короче - все названия. Я нашел 57 штук). В Sprite Viewer это выглядит так:

  
    
    Для полного перевода игры потребуется найти: *
    
    - названия мест
    - главное меню игры (кнопки и надписи)
    - надпись Nintendo64 в самом начале
    - логотип Zelda, если хотите **
    - надпись "Navi" на кнопке C-up ***
    - некоторые надписи в подменю (subscreens)
    - имена боссов
    - надпись GAME OVER (довольно неудобно хранится)    
    - надпись The End, лого Нинтенды и прочий мусор.

      * для Majora's Mask - примерно то же самое
     ** при изменении лого игра может зависнуть в Gerudo Fortress. Не знаю, почему
    *** а в этом случае игра может зависнуть в самом начале, в момент появления логотипа Zelda. Тоже пока загадка.
    
    Нашли, отсортировали все *.dat файлы, нужные для работы. 
Экспорт данных из *.dat файла:
N64Gfx

    Точно так же, как и из рома, только вместо рома в поле Rom name with (ext) в N64Gfx пишем имя нужного *.dat-а
    Так же заполняем все поля, по информации, найденной в Sprite Viewer.
Редактирование:
Photoshop (Fireworks)

    Опять точно так же, как и не сжатую. Те же *.png файлы. Фотошоп или файрворкс.  
    Есть пару моментов:

    - размер измененного *.png может быть немного больше, чем оригинал
    - обязательно нужно сохранять оригинальную палитру
    - редактировать нужно очень аккуратно, стараясь достичь такого же качества, как оригинальный *.png
    - обязательно нужно добиться того, чтобы количество пикселей в новой картинке
      было меньше или равно оригиналу. Иначе могут быть зависания в игре.
    
    Нарисовали русскую надпись. Следующий шаг - импорт обратно в *.dat.
Импорт данных в *.dat файл:
N64Gfx

    Тот же N64Gfx. Вместо Export выбираем Import *.
    
    * имя импортируемого *.png файла - желательно максимум 8 символов. А-ля DOS.
      
Компрессия данных :
Yaz0 Kit

    Самое ответственное. Разворачиваем архив Yaz0kit.zip. Там 4 файла:

    - Распаковщик Yaz0unp.exe (можно не использовать. Работает по тому же принципу, что и Zelda Extractor,
      только имена создаваемых файлов - просто порядковый номер. Расширение - *.unp)  
    - Запаковщик Yaz0comp.exe (самое оно).    
    - Файлик unp (пример распакованных данных. Просто один из 1456 файлов. Можно удалить).
    - Файлик !out.org (пример запакованных данных. Запакованный файлик unp. Можно удалить).   

    Берем нужный и измененный *.dat. Проверяем в Sprite Viewer, чтобы не было никаких глюков.
    Кидаем в одну папку с Yaz0 kit. 
    Переименовываем наш отредактированный *.dat в файл с простым названием unp. Без расширения.
    Запускаем Yaz0comp.exe. Создается файл !out.
    Этот !out - как раз то, как хранится данная графика в роме. В двух словах - просто кусок рома.
    Но уже отредактированный *.
    
    * Важный момент:

    размер !out файла должен быть меньше или равен оригинальному. Желательно меньше.
    (оригинальный можно получить, запаковав оригинальный, не отредактированный *.dat).

    Все. Можно приступать к последнему шагу - вставке в ром.
Вставка в ром:
Romput

    Берем программку Romput 1.0.
    Помещаем ее, ром, и файл !out (полученный из измененного *.dat) в одну папку.
    Записываем где нибудь оффсет, по которому будем вставлять (имя *.dat файла).
 
    Запускаем Romput. Внешне ничего сложного. Единственное - не надо заполнять поля в ручную, а надо
    пользоваться кнопками (Load ROM, Load BIN). Иначе программка выругается и ничего не сделает.
    Выглядит это так:

 
    ROM - имя рома
    BIN - файл "!out"
    ADR - оффсет в роме (имя *.dat файла)
    
  Заполнили поля - жмем кнопку Attach!

    Готово!

    Открываем ром в эмуляторе и смотрим изменения.
    Если повезет, и ничего не зависнет, получится примерно так, как в разделе Screenshots.


В общем - все. Если появится желание покопаться в ромах N64, поддающихся переводу,
вроде Zelda: Majora's Mask, в которой все почти то же самое, что и в Ocarina of Time - 
пишите, мы постараемся ответить на все вопросы.

 

Tutorial - (с) Anton