Как делается перевод...
Необходимые программы: | |
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") | |
Поиск графики: |
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