Список форумов shedevr.org.ru shedevr.org.ru
Группа перевода приставочных игр "ШЕДЕВР"
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Помогите с Legend of Zelda, The - Oracle of Ages GBC

 
Начать новую тему   Ответить на тему    Список форумов 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
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 точно нашёл правильно, т.к. изменения хотя бы в одной букве отражаются в этом диалоге.

Ну и выбрал же ты себе игру... Confused Тут все несколько сложнее. Если ты серьезно решил ее перевести, то читай документацию по борьбе с DTE/MTE http://magicteam.ucoz.ru/ , а если нет, то лучше найди что-нибудь попроще.

intro писал(а):
P.S. Это мой первый опыт с поинтерами, тем более такими непростыми...

Судя по всему, по адресу 10BD90-1228D0 находятся английские диалоги, далее, чуть выше (109EDA-10BD90) - MTE таблица и еще чуть выше (107FFF-109EDA) - какая-то таблица (возможно твои поинтеры).

intro писал(а):
Подскажите, где я не прав, и стоит ли пытаться дальше??
Confused Confused
Лично я на твоем месте выбрал бы что-нибудь попроще. Для начала найди игру в которой текст лежит в готовом виде, а Зельда эта никуда не денется. Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Пн Ноя 06, 2006 9:25 am    Заголовок сообщения: Ответить с цитатой

Цитата:
Я уже молчу о том, что в фразе есть и знаки препиания. Как их-то искать?


Ну, как... Простым вычислением ориентируясь на какой нибуть другой извесный символ. Затем в ручную редактируешь таблицу.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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 языков

Только в Е-версии.
_________________
まだ若い夜...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
intro



Зарегистрирован: 06.11.2006
Сообщения: 13

СообщениеДобавлено: Пн Ноя 06, 2006 11:56 am    Заголовок сообщения: Ответить с цитатой

Chronix писал(а):
Ну и выбрал же ты себе игру... Тут все несколько сложнее. Если ты серьезно решил ее перевести, то читай документацию по борьбе с DTE/MTE http://magicteam.ucoz.ru/ , а если нет, то лучше найди что-нибудь попроще.

Мы лёгких путей не ищем Wink
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). Это и будет указатель.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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-таблицу. Будет гораздо проще ориентироваться в скрипте. А уж потом искать указатель на конкретную фразу (т. е. ты уже будешь полностью уверен, что это та самая фраза в игре).

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

Спасибо. Что-то закрадываются сомнения, что эту игрушку я не осилю... Хотя, времени до смерти ещё много Wink
А сегодня нужно доделать работу на 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~


Цитата:
значения указателей перевёрнуты (сначала идёт младший байт, потом старший

Ибо это особенности чтения из памяти в регистр...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2818

СообщениеДобавлено: Пн Ноя 06, 2006 3:34 pm    Заголовок сообщения: Re: Помогите с Legend of Zelda, The - Oracle of Ages GBC Ответить с цитатой

intro писал(а):
Анализ кода дал следующее:
1. Текста соответствуют кодировке ASCII, т.е. всё видно невооружённым глазом.


Я так думаю, код игры ты не анализировал Smile Точнее будет сказать - "анализ содержимого РОМа в хекс-редакторе".

Вот тот факт, что текст частично соответствует ASCII, иногда только запутывает начинающего ромхакера. Всё равно лучше составить свою табличку (*.tbl), заодно потом в неё же вносить найденные MTE-слоги из словаря MTE.

Кстати, в хелпе Translhextion (думаю, лучший шестнадцатеричный редактор) есть довольно внятная статейка про DTE/MTE.


intro писал(а):
3. Используются скрипты.


Вот верно отмечено, хотя на первый взгляд фраза не в тему.
Для вывода надписей могут использоваться 3 вида "строковых ресурсов":
1. Скрипты заданного формата.
2. Тайловые карты (двумерный массив номеров тайлов).
3. Машинный код, заставляющий процессор расставлять тайлы (обычно спрайтами) по экрану в нужных последовательностях.

1 тип ресурсов используется в большинстве современных игр, 2 тип характерен для старых игр с малым количеством текста (когда нет смысла программировать процедуру обработки скриптов). 3 тип характерен для специфических ситуаций, например, когда в начале уровня вылетает надпись "READY" и т.п.


intro писал(а):
ОК. Ищем поинтер на слово "Accept".


В играх с большим количеством текста поинтеры объединяются в таблицу, причём последовательность перечисления поинтеров обычно такая же, как у строк скрипта. Так что можно искать не один поинтер, а всю таблицу сразу - это проще.


intro писал(а):
P.S. Это мой первый опыт с поинтерами, тем более такими непростыми... Подскажите, где я не прав, и стоит ли пытаться дальше??


Поинтеры-то простые, вот с MTE всегда напряги из-за необходимости пересчитывать словарь.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
intro



Зарегистрирован: 06.11.2006
Сообщения: 13

СообщениеДобавлено: Пн Ноя 06, 2006 10:34 pm    Заголовок сообщения: Ответить с цитатой

Уважаемые, Ura_Orlov и АнС, огромное спасибо за полезную информацию. Думаю, что этого достаточно для начала. Информация, предоставленная вами, действительно полезная и интересная.

Ura_Orlov убедиться в ваших предположениях мне не получилось, но они достаточно убедительные. К сожалению, всё не так просто...
Сделал поиск по РОМу "7129" (а потом и "2971") и рядом (слева, справа), даже похожего ничего на "040E" (или 0E04) нету =((
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Chronix
RRC2008
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]
- являются адресами слов в этом словаре.
Итак, твоя задача:
Во-первых переписать словарь "под себя", а потом из слов этого словаря составить свой игровой текст.
А поинтеры тебе нужно найти и на "словарь", и на основной текст.

Вот теперь... дерзай! Wink Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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
RRC2008


Зарегистрирован: 27.12.2003
Сообщения: 288
Откуда: CYBERIA

СообщениеДобавлено: Ср Ноя 08, 2006 5:13 pm    Заголовок сообщения: Ответить с цитатой

alex_231/гость писал(а):
Код 04 означает, что следующий код - номер слова в словаре MTE.

Вовсе нет... Confused
[04 08] (и т.п.) - это именно адрес слова.

[02 08] = Holodrum
[03 08] = ong ago
[04 08] = hero

и т.д.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
intro



Зарегистрирован: 06.11.2006
Сообщения: 13

СообщениеДобавлено: Ср Ноя 08, 2006 11:36 pm    Заголовок сообщения: Ответить с цитатой

Laughing Столько разных интересных версий.....разберьсь тут новичку...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Chronix
RRC2008
RRC2008


Зарегистрирован: 27.12.2003
Сообщения: 288
Откуда: CYBERIA

СообщениеДобавлено: Чт Ноя 09, 2006 2:02 pm    Заголовок сообщения: Ответить с цитатой

intro писал(а):
Laughing Столько разных интересных версий.....разберьсь тут новичку...

Начни с чего-нибудь более простого. С опытом все придет. Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
gottax



Зарегистрирован: 16.11.2003
Сообщения: 588
Откуда: Курск

СообщениеДобавлено: Пт Ноя 10, 2006 10:32 am    Заголовок сообщения: Ответить с цитатой

[http://www.shedevr.org.ru/temp/LoZTOoA(U)_dictionary.txt]

intro, вот весь словарь, правда сырой, не в виде таблицы с кодами (для этого отдельную прогу писать пришлось бы, а я ленивый оченьSmile). В каждой строчке хранится отдельное слово, на которое указывает поинтер из таблицы указателей для словаря.
Чтобы составить MTE-таблицу, тебе нужно слева добавить код для каждого слова (два байта) и поставить "=" (в общем, я думаю, ты понял, это будет обычная двухбайтная таблица). Какой код какой строчке соответствует, ты посчитаешь самWink
Тебе уже известны коды этих слов:
{04}{0E}= our~
{04}{BD}=quest
{04}{08}= hero
От них, собственно и считай коды для остальных слов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Базовый ромхакинг Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group