 |
shedevr.org.ru Группа перевода приставочных игр "ШЕДЕВР"
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
intro

Зарегистрирован: 06.11.2006 Сообщения: 13
|
Добавлено: Пн Ноя 06, 2006 4:04 am Заголовок сообщения: Помогите с Legend of Zelda, The - Oracle of Ages GBC |
|
|
Решил попробовать перевод чего-нибудь посерьёзнее plain text, такого, как, например на GB "Zelda Link's Awakening".
Почитал всё, что нашёл о pointers, приступил к делу.
Игра:
Legend of Zelda, The - Oracle of Ages (E) (M5) [C][!].gbc
Анализ кода дал следующее:
1. Текста соответствуют кодировке ASCII, т.е. всё видно невооружённым глазом.
2. Слова из диалогов разбиты по всему рому.
3. Используются скрипты.
4. В игре используется 5 языков, что несомненно усложняет перевод =(
Фраза, которую игрушка произносит первой:
"Accept our quest, hero!"
Нахожу слова в роме:
10B5AE quest
113068 Accept
фразы our и hero повторяются несколько раз в роме, не успел найти, какие именно отвечают за данный диалог. А вот quest и Accept точно нашёл правильно, т.к. изменения хотя бы в одной букве отражаются в этом диалоге.
ОК. Ищем поинтер на слово "Accept". Т.к. блоки в GBC (у вас на форуме прочитал) 16k (4000h), адресация поинтеров идёт от начала блока, то поинтер будет 113068-110000=3068, где 110000-начало блока.
Или поинтер будет 6830????
Или я вообще не на том пути???
Короче, после неудачных попыток решил проверить все разом.... Сделал замену сначала ВСЕХ хексовых 3068 на другое значение, ссылающееся на то же "hero" 3106 в роме. Я полагал, что диалог "Accept our quest, hero!" изменится на "hero our quest, hero!" =( Ничего не произошло.... Сделал замену 6830 -> 0631. Опять же нулевой результат...
Как бороться?? Я уже молчу о том, что в фразе есть и знаки препиания. Как их-то искать?
P.S. Это мой первый опыт с поинтерами, тем более такими непростыми... Подскажите, где я не прав, и стоит ли пытаться дальше?? |
|
Вернуться к началу |
|
 |
Chronix RRC2008


Зарегистрирован: 27.12.2003 Сообщения: 288 Откуда: CYBERIA
|
Добавлено: Пн Ноя 06, 2006 6:47 am Заголовок сообщения: Re: Помогите с Legend of Zelda, The - Oracle of Ages GBC |
|
|
intro писал(а): | ...
4. В игре используется 5 языков, что несомненно усложняет перевод =( |
Только если ты визуально не можешь один язык от другого отлечить :)
intro писал(а): | Фраза, которую игрушка произносит первой:
"Accept our quest, hero!"
Нахожу слова в роме:
10B5AE quest
113068 Accept
фразы our и hero повторяются несколько раз в роме, не успел найти, какие именно отвечают за данный диалог. А вот quest и Accept точно нашёл правильно, т.к. изменения хотя бы в одной букве отражаются в этом диалоге.
|
Ну и выбрал же ты себе игру... Тут все несколько сложнее. Если ты серьезно решил ее перевести, то читай документацию по борьбе с DTE/MTE http://magicteam.ucoz.ru/ , а если нет, то лучше найди что-нибудь попроще.
intro писал(а): | P.S. Это мой первый опыт с поинтерами, тем более такими непростыми... |
Судя по всему, по адресу 10BD90-1228D0 находятся английские диалоги, далее, чуть выше (109EDA-10BD90) - MTE таблица и еще чуть выше (107FFF-109EDA) - какая-то таблица (возможно твои поинтеры).
intro писал(а): | Подскажите, где я не прав, и стоит ли пытаться дальше?? |
Лично я на твоем месте выбрал бы что-нибудь попроще. Для начала найди игру в которой текст лежит в готовом виде, а Зельда эта никуда не денется.  |
|
Вернуться к началу |
|
 |
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Пн Ноя 06, 2006 9:25 am Заголовок сообщения: |
|
|
Цитата: | Я уже молчу о том, что в фразе есть и знаки препиания. Как их-то искать? |
Ну, как... Простым вычислением ориентируясь на какой нибуть другой извесный символ. Затем в ручную редактируешь таблицу. |
|
Вернуться к началу |
|
 |
PicaSSO

Зарегистрирован: 04.04.2004 Сообщения: 711 Откуда: Украина. Краматорск
|
Добавлено: Пн Ноя 06, 2006 10:35 am Заголовок сообщения: Re: Помогите с Legend of Zelda, The - Oracle of Ages GBC |
|
|
intro писал(а): | Решил попробовать перевод чего-нибудь посерьёзнее plain text, такого, как, например на GB "Zelda Link's Awakening".
Почитал всё, что нашёл о pointers, приступил к делу.
|
http://shedevr.org.ru/cgi-bin/gamez.cgi?n=21
intro писал(а): |
4. В игре используется 5 языков |
Только в Е-версии. _________________ まだ若い夜... |
|
Вернуться к началу |
|
 |
intro

Зарегистрирован: 06.11.2006 Сообщения: 13
|
Добавлено: Пн Ноя 06, 2006 11:56 am Заголовок сообщения: |
|
|
Chronix писал(а): | Ну и выбрал же ты себе игру... Тут все несколько сложнее. Если ты серьезно решил ее перевести, то читай документацию по борьбе с DTE/MTE http://magicteam.ucoz.ru/ , а если нет, то лучше найди что-нибудь попроще. |
Мы лёгких путей не ищем
Chronix писал(а): | Судя по всему, по адресу 10BD90-1228D0 находятся английские диалоги, далее, чуть выше (109EDA-10BD90) - MTE таблица и еще чуть выше (107FFF-109EDA) - какая-то таблица (возможно твои поинтеры). |
Спасибо за инфу, буду проверять.
PicaSSO писал(а): | http://shedevr.org.ru/cgi-bin/gamez.cgi?n=21 |
Читайте внимательнее. Я же говорю, что ZLA, на которую вы мне ссылку дали, слишком легко переводится, а выбрал я другую игрушку.
PicaSSO писал(а): | Только в Е-версии. |
Спасибо. Уже нашёл U-версию с одним инглишем...
P.S. Всем спасибки за отзывчивость. Не думал, что так среагируете быстро.. |
|
Вернуться к началу |
|
 |
intro

Зарегистрирован: 06.11.2006 Сообщения: 13
|
Добавлено: Пн Ноя 06, 2006 12:07 pm Заголовок сообщения: |
|
|
Ребята, мне никто так и не ответил. Я правильно поинтеры считал?? Отнимать хедер не нужно? Переставлять байты местави тоже не нужно? |
|
Вернуться к началу |
|
 |
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Пн Ноя 06, 2006 12:48 pm Заголовок сообщения: |
|
|
Насколько я знаю у всех приставок кроме Sega одна и таже система поинтеров. А то есть надо отнять Хедер от адреса строки, берём от полученого слово (последние 4 чифры в HEX) и применяем обратный порядок байтов (F3 23 --> 23 F3). Это и будет указатель. |
|
Вернуться к началу |
|
 |
intro

Зарегистрирован: 06.11.2006 Сообщения: 13
|
Добавлено: Пн Ноя 06, 2006 2:05 pm Заголовок сообщения: |
|
|
Нашёл кое-что интересное.
Первый диалог: "Accept our
quest, hero!"
Нашёл в РОМЕ такую строку "Accept[04][0E][04][BD],[04][08]!"
Слова находятся по адресам:
_our~ 77129
quest 775AE
_hero 73F01
где _- пробел,
~- конец строки.
Вот никак понять не могу, где закономерность:
[04][0E] - 77129
[04][BD] - 775AE
[04][08] - 73F01.
уф...ну хоть что-то |
|
Вернуться к началу |
|
 |
gottax

Зарегистрирован: 16.11.2003 Сообщения: 588 Откуда: Курск
|
Добавлено: Пн Ноя 06, 2006 2:24 pm Заголовок сообщения: |
|
|
Указатели надо искать либо с помощью дебаггера (тогда точно надёшь, если есть соотвествующие знания и навыки), либо глазками, в хекс-редакторе, а не вычисляя какие-то абстрактные адреса.
В твоём случае я бы тебе посоветовал для начала составить полную MTE-таблицу. Будет гораздо проще ориентироваться в скрипте. А уж потом искать указатель на конкретную фразу (т. е. ты уже будешь полностью уверен, что это та самая фраза в игре).
Точно не скажу, но похоже, таблица указателей (точнее, там их несколько, так как поинтеры двухбайтные) находится рядом с текстом, и таблица указателей к словарю вместе с ним тоже.
Кстати, как ты правильно заметил, значения указателей перевёрнуты (сначала идёт младший байт, потом старший). |
|
Вернуться к началу |
|
 |
intro

Зарегистрирован: 06.11.2006 Сообщения: 13
|
Добавлено: Пн Ноя 06, 2006 2:32 pm Заголовок сообщения: |
|
|
gottax писал(а): | Указатели надо искать либо с помощью дебаггера (тогда точно надёшь, если есть соотвествующие знания и навыки), либо глазками, в хекс-редакторе, а не вычисляя какие-то абстрактные адреса.
В твоём случае я бы тебе посоветовал для начала составить полную MTE-таблицу. Будет гораздо проще ориентироваться в скрипте. А уж потом искать указатель на конкретную фразу (т. е. ты уже будешь полностью уверен, что это та самая фраза в игре).
Точно не скажу, но похоже, таблица указателей (точнее, там их несколько, так как поинтеры двухбайтные) находится рядом с текстом, и таблица указателей к словарю вместе с ним тоже.
Кстати, как ты правильно заметил, значения указателей перевёрнуты (сначала идёт младший байт, потом старший). |
Спасибо. Что-то закрадываются сомнения, что эту игрушку я не осилю... Хотя, времени до смерти ещё много
А сегодня нужно доделать работу на Transact-SQL. |
|
Вернуться к началу |
|
 |
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Пн Ноя 06, 2006 3:02 pm Заголовок сообщения: |
|
|
intro писал(а): | Нашёл кое-что интересное.
Первый диалог: "Accept our
quest, hero!"
Нашёл в РОМЕ такую строку "Accept[04][0E][04][BD],[04][08]!"
Слова находятся по адресам:
_our~ 77129
quest 775AE
_hero 73F01
где _- пробел,
~- конец строки.
Вот никак понять не могу, где закономерность:
[04][0E] - 77129
[04][BD] - 775AE
[04][08] - 73F01.
уф...ну хоть что-то |
Ну, так вроде всё понятно. 04 0E - это "код" для таблици указателей на словарь. Я особо не изучал MTE, но предпалагаю, что система MTE состоит так:
"Код" на таблицу указателей ---> Таблица указателей словаря ---> Словарь.
Слова, даже если они расположены в ряд, будут в словаре перемешаны т. к. эти слова будут ни раз повторяться. Я предпологаю, что это будет выглядеть так:
В предложении: 04 0E
В таблице MTE: 04 0E 29 71 (последние два байта - указатель)
В словаре по адресу 07 71 29: _our~
Цитата: | значения указателей перевёрнуты (сначала идёт младший байт, потом старший |
Ибо это особенности чтения из памяти в регистр... |
|
Вернуться к началу |
|
 |
АнС RRC2008


Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Пн Ноя 06, 2006 3:34 pm Заголовок сообщения: Re: Помогите с Legend of Zelda, The - Oracle of Ages GBC |
|
|
intro писал(а): | Анализ кода дал следующее:
1. Текста соответствуют кодировке ASCII, т.е. всё видно невооружённым глазом. |
Я так думаю, код игры ты не анализировал Точнее будет сказать - "анализ содержимого РОМа в хекс-редакторе".
Вот тот факт, что текст частично соответствует ASCII, иногда только запутывает начинающего ромхакера. Всё равно лучше составить свою табличку (*.tbl), заодно потом в неё же вносить найденные MTE-слоги из словаря MTE.
Кстати, в хелпе Translhextion (думаю, лучший шестнадцатеричный редактор) есть довольно внятная статейка про DTE/MTE.
intro писал(а): | 3. Используются скрипты. |
Вот верно отмечено, хотя на первый взгляд фраза не в тему.
Для вывода надписей могут использоваться 3 вида "строковых ресурсов":
1. Скрипты заданного формата.
2. Тайловые карты (двумерный массив номеров тайлов).
3. Машинный код, заставляющий процессор расставлять тайлы (обычно спрайтами) по экрану в нужных последовательностях.
1 тип ресурсов используется в большинстве современных игр, 2 тип характерен для старых игр с малым количеством текста (когда нет смысла программировать процедуру обработки скриптов). 3 тип характерен для специфических ситуаций, например, когда в начале уровня вылетает надпись "READY" и т.п.
intro писал(а): | ОК. Ищем поинтер на слово "Accept". |
В играх с большим количеством текста поинтеры объединяются в таблицу, причём последовательность перечисления поинтеров обычно такая же, как у строк скрипта. Так что можно искать не один поинтер, а всю таблицу сразу - это проще.
intro писал(а): | P.S. Это мой первый опыт с поинтерами, тем более такими непростыми... Подскажите, где я не прав, и стоит ли пытаться дальше?? |
Поинтеры-то простые, вот с MTE всегда напряги из-за необходимости пересчитывать словарь. |
|
Вернуться к началу |
|
 |
intro

Зарегистрирован: 06.11.2006 Сообщения: 13
|
Добавлено: Пн Ноя 06, 2006 10:34 pm Заголовок сообщения: |
|
|
Уважаемые, Ura_Orlov и АнС, огромное спасибо за полезную информацию. Думаю, что этого достаточно для начала. Информация, предоставленная вами, действительно полезная и интересная.
Ura_Orlov убедиться в ваших предположениях мне не получилось, но они достаточно убедительные. К сожалению, всё не так просто...
Сделал поиск по РОМу "7129" (а потом и "2971") и рядом (слева, справа), даже похожего ничего на "040E" (или 0E04) нету =(( |
|
Вернуться к началу |
|
 |
Chronix RRC2008


Зарегистрирован: 27.12.2003 Сообщения: 288 Откуда: CYBERIA
|
Добавлено: Вт Ноя 07, 2006 2:33 pm Заголовок сообщения: |
|
|
intro писал(а): | Нашёл кое-что интересное.
Первый диалог: "Accept our
quest, hero!"
Нашёл в РОМЕ такую строку "Accept[04][0E][04][BD],[04][08]!"
Слова находятся по адресам:
_our~ 77129
quest 775AE
_hero 73F01
где _- пробел,
~- конец строки.
Вот никак понять не могу, где закономерность:
[04][0E] - 77129
[04][BD] - 775AE
[04][08] - 73F01.
уф...ну хоть что-то |
Блин, ты что решил не читать доки ?..
Тогда слушай... Ты сталкнешься вот с чем: у тебя есть МТЕ таблица (своеобразный словарь), из которой берутся слова и вставляются в основной игровой текст (адрес ее я дал выше).
А эти коды:
[04][0E]
[04][BD]
[04][08]
- являются адресами слов в этом словаре.
Итак, твоя задача:
Во-первых переписать словарь "под себя", а потом из слов этого словаря составить свой игровой текст.
А поинтеры тебе нужно найти и на "словарь", и на основной текст.
Вот теперь... дерзай!  |
|
Вернуться к началу |
|
 |
alex_231/гость Гость
|
Добавлено: Ср Ноя 08, 2006 9:35 am Заголовок сообщения: |
|
|
Код 04 означает, что следующий код - номер слова в словаре MTE.
ли: Ura_Orlov что-то пытался объяснить, но до конца мысль не закончил (в смысле не оформил её удобочитаемым образом).
А работает оно так:
1) программа види код 04,
2) читает следующий код,
3) переходит в подпрограмму обработки MTE,
4) используя считанный в п. 2 код, вычисляет указатель на слово в словаре: к адресу первого указателя прибавляется считанный код, умноженный на количество байт в указателе, то есть
A=A1+C*L
где: С - считанный код,
A - адрес указателя на слово с кодом С,
А1 - адрес первого указателя на словарь,
L - длина указателя в байтах;
5) начиная с вычисленного указателя, и заканчивая специальным кодом (обычно 00, но в данном случае этого кода я не знаю), программа переписывает символы, либо в буфер, либо сразу в то место памяти, откуда они выводятся на экран.
Затем происходит выход из подпрограммы и чтение следующего байта из скрипта.
АнС говорил правильные вещи, здесь к нему стоит прислушаться (особенно по части Translhextion). |
|
Вернуться к началу |
|
 |
Chronix RRC2008


Зарегистрирован: 27.12.2003 Сообщения: 288 Откуда: CYBERIA
|
Добавлено: Ср Ноя 08, 2006 5:13 pm Заголовок сообщения: |
|
|
alex_231/гость писал(а): | Код 04 означает, что следующий код - номер слова в словаре MTE. |
Вовсе нет...
[04 08] (и т.п.) - это именно адрес слова.
[02 08] = Holodrum
[03 08] = ong ago
[04 08] = hero
и т.д. |
|
Вернуться к началу |
|
 |
intro

Зарегистрирован: 06.11.2006 Сообщения: 13
|
Добавлено: Ср Ноя 08, 2006 11:36 pm Заголовок сообщения: |
|
|
Столько разных интересных версий.....разберьсь тут новичку... |
|
Вернуться к началу |
|
 |
Chronix RRC2008


Зарегистрирован: 27.12.2003 Сообщения: 288 Откуда: CYBERIA
|
Добавлено: Чт Ноя 09, 2006 2:02 pm Заголовок сообщения: |
|
|
intro писал(а): | Столько разных интересных версий.....разберьсь тут новичку... |
Начни с чего-нибудь более простого. С опытом все придет.  |
|
Вернуться к началу |
|
 |
gottax

Зарегистрирован: 16.11.2003 Сообщения: 588 Откуда: Курск
|
Добавлено: Пт Ноя 10, 2006 10:32 am Заголовок сообщения: |
|
|
[http://www.shedevr.org.ru/temp/LoZTOoA(U)_dictionary.txt]
intro, вот весь словарь, правда сырой, не в виде таблицы с кодами (для этого отдельную прогу писать пришлось бы, а я ленивый очень ). В каждой строчке хранится отдельное слово, на которое указывает поинтер из таблицы указателей для словаря.
Чтобы составить MTE-таблицу, тебе нужно слева добавить код для каждого слова (два байта) и поставить "=" (в общем, я думаю, ты понял, это будет обычная двухбайтная таблица). Какой код какой строчке соответствует, ты посчитаешь сам
Тебе уже известны коды этих слов:
{04}{0E}= our~
{04}{BD}=quest
{04}{08}= hero
От них, собственно и считай коды для остальных слов. |
|
Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group
|