Без описания |
Поиск в теме | Версия для печати |
maslanin |
Отправлено: 17 Декабря, 2015 - 02:31:01
|
Покинул форум
Сообщений всего: 16
Дата рег-ции: Июнь 2015
|
Привет. Вот у меня собственно какой вопрос. Нужна помощь в понимании поинтеров на примере игры Metal Gear Solid [GBC]. Долго разжевывать не буду, почти сразу к вопросу перейду.
Нашел я текст меню (new game, continue и т.д., смещение 0x6C0C), таблицу поинтеров для меню (она прям над текстом 0x6B6C), нашел сам текст (0x148987) и поинтеры для него (опять чуть выше, 0x148787).
Собственно, вот та вещь, которую я не могу понять: вот есть таблица слов, есть поинтеры, которые идут по порядку. А как найти сам текст? Я должен искать указатель на указатель что ли? Ну так не получается найти.
ссылка на файлы - таблицы для меню и для диалога + оригинальный ром + с перерисованным шрифтом (диалог, я не нашел шрифт меню) |
|
|
maslanin |
Отправлено: 17 Декабря, 2015 - 02:35:06
|
Покинул форум
Сообщений всего: 16
Дата рег-ции: Июнь 2015
|
maslanin
Ну вот, а я думал, что тут полуживой (читай, мервый) форум
1. Таблица не полная, потому что я ее не закончил, и убрал подальше - не смог найти шрифт для меню.
2. Вот теперь понятно стало. Таблица таблицей, а текст текстом. Ну плюс еще нагуглил доку эту, стало намного понятнее.
3. Вы мне прямо разжевали и в рот положили ))) теперь буду думать, как вы искали и как мне повторить.
P.S. Номер слов в предложениях откуда берется? Из АДРЕСА таблицы поинтеров? Или просто если слово 2е в таблице, то в тексте будет байт 02 вместо него? |
|
|
Mefistotel |
Отправлено: 17 Декабря, 2015 - 02:35:27
|
Chief-Net
Покинул форум
Сообщений всего: 7127
Дата рег-ции: Окт. 2014
Откуда: МАГАДАН
|
Mefistotel
Словарь МТЕ хранится в роме отдельно. И коды у него могут быть разные. К примеру, в словаре у тебя есть слово - HEAD. Находишь по игре, где оно выводится, и смотришь в хексредактор какой у него код. К примеру, FB01. Соответственно следующее слово в словаре будет иметь кода FB02 и так далее, а слово перед ним FB00. На основании этого и делается табличка для текста.
С такой системой оптимизации текста удобнее всего освоить Круптар. Но это когда ты для себя составишь карту ресурсов (словарь, текст и все прочее).
P. S. Доки по Круптару есть здесь http://magicteam.net/ и http://romhack.github.io. Если освоишь, дам проект на тини туна. По образцу сможешь сделать свой. Там тоже МТЕ сжатие, только коды в словаре однобайтные.
Алекс подробнее расскажет про систему в этой игре.
P. P. S. И не "мёртвый" у нас форум. Просто не всё открыто для посторонних глаз. Вот проявишь себя и не забросишь на полпути дело, поможем и перенес темку в раздел для союзников.
----- "Перевод старых игр - отличная возможность понять, как устроены программы, подучить иностранный язык и поднять уровень владения родным. Ну и конечно, это просто возможность "общения" со своей любимой игрой детства." © Dimouse |
|
|
alex_231 |
Отправлено: 17 Декабря, 2015 - 02:35:58
|
Chief-Net
Покинул форум
Сообщений всего: 4688
Дата рег-ции: Окт. 2014
|
alex_231
Цитата: Ну вот, а я думал, что тут полуживой (читай, мервый) форум
1. Таблица не полная, потому что я ее не закончил, и убрал подальше - не смог найти шрифт для меню.
2. Вот теперь понятно стало. Таблица таблицей, а текст текстом. Ну плюс еще нагуглил доку эту , стало намного понятнее.
3. Вы мне прямо разжевали и в рот положили ))) теперь буду думать, как вы искали и как мне повторить.
P.S. Номер слов в предложениях откуда берется? Из АДРЕСА таблицы поинтеров? Или просто если слово 2е в таблице, то в тексте будет байт 02 вместо него?
Номер слова в словаре - это ПОРЯДКОВЫЙ номер слова в словаре:
FB00 - первое слово в словаре,
FB01 - второе слово...
FBFF - последнее слово в словаре (всего их 256).
А теперь сюрприз: текст в игре помимо МТЕ оптимизирован ещё и перекрестными ссылками (в них я не стал сильно разбираться).
Один из вариантов (не знаю, может и единственный) - код h04, за ним идет ссылка (два байта) на копирование последовательности байт. Судя по всему, эта ссылка указана относительно таблицы поинтеров к текущей группе предложений, но наверняка сказать пока не могу, так как с поинтерами не разобрался, странные они какие-то.
----- Делая выбор, отбрось простое решение и выбери правильное...
|
|
|
maslanin |
Отправлено: 17 Декабря, 2015 - 02:37:00
|
Покинул форум
Сообщений всего: 16
Дата рег-ции: Июнь 2015
|
maslanin
Цитата: Номер слова в словаре - это ПОРЯДКОВЫЙ номер слова в словаре:
FB00 - первое слово в словаре,
FB01 - второе слово...
FBFF - последнее слово в словаре (всего их 256).
Спасибо, теперь понял принцип. Почему-то ранее ни в одной доке такого не видел. Получается двойное указывание, то есть поинтер указывает на слово в словаре, а в тексте указывается номер поинтера. (ну + управляющий байт(ы)).
Насчет сюрприза - не дошел еще, пока составляю таблицу для себя в виде
CODE:00=Snake
01=Campbell
02=Mei Ling
03=Weasel
04=McBride
etc. |
|
|
Mefistotel |
Отправлено: 17 Декабря, 2015 - 02:39:10
|
Chief-Net
Покинул форум
Сообщений всего: 7127
Дата рег-ции: Окт. 2014
Откуда: МАГАДАН
|
Mefistotel
Цитата:Вот блин. Я почти вручную набил их, а у вас программа какая-то есть для этого? smiles.gif
Программы есть. Но Круптар может практически всё. А если ещё Марат плагин напишет под эту игру, то и с ней программа справится.
Цитата:Один из вариантов (не знаю, может и единственный) - код h04, за ним идет ссылка (два байта) на копирование последовательности байт. Судя по всему, эта ссылка указана относительно таблицы поинтеров к текущей группе предложений, но наверняка сказать пока не могу, так как с поинтерами не разобрался, странные они какие-то.
Это интересно. Хотелось бы, чтобы ты всё-таки разобрался и описал алгоритм вывода текста. Пригодится.
----- "Перевод старых игр - отличная возможность понять, как устроены программы, подучить иностранный язык и поднять уровень владения родным. Ну и конечно, это просто возможность "общения" со своей любимой игрой детства." © Dimouse |
|
|
maslanin |
Отправлено: 17 Декабря, 2015 - 02:39:58
|
Покинул форум
Сообщений всего: 16
Дата рег-ции: Июнь 2015
|
maslanin
Вот уж точно сюрприз с текстом
В самом начале, когда игру начинаешь, идет вызов, далее открывается экран рации. Там идет текст
CODE:Snake
This is Snake....
Colonel,can you
hear me?
This is Snake.... записано вот так (0x1E30B0):
CODE:1D FB E4 0E 78 20 FB 00 27 27
1D = T, FBE4 = his, а вот дальше непонятно и интересно.
0E78 выводит ' is ' (без кавычек), при этом если 78 менять на 77 или 79, то сдвигается надпись на 'd is' или 'is h'. А если поизменять следующий байт - 20, то можно понять, что он указывает длину куска. Например 20 копирует 4 символа, а 22 уже 6 символов. Чуть подвигав туда-сюда получаю фразу, из которой берется кусок:
Ищу поиском, этот кусок находится чуть выше (0x1E2DC7).
Если отнять от адреса ' is ' 0x78, то попадем на 0x1E2D53, где так же записан байт 0E (не факт, что связано - возможно, просто совпадение).
Сам байт 0E - видимо, управляющий. Пишу 0E 78 вместо FB 00, и получаю вместо - CODE:This is is he's
Gindra
Вот так.
Цитата:И еще кое что. Основной шрифт я нашел 0x142900 (1BPP), а вот шрифт для надписей NEW GAME, CONTINUE что-то не могу найти. Какое-то подобие нашел на 0x7550 и всё.
Шрифт так и не нашел для меню.
Вывод такой вот для себя: про поинтеры понял, а игра не та, с которой следовало бы начать новичку. |
|
|
|
Поиск в теме | Версия для печати |
Страниц (1): [1] |
Сейчас эту тему просматривают: 6 (гостей: 6, зарегистрированных: 0) |
« Экстрим хакинг » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|