Chief-NET

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Chief-NET » Базовый хакинг » Metal Gear Solid [GBC]


Metal Gear Solid [GBC]

Сообщений 1 страница 20 из 21

1

Привет. Вот у меня собственно какой вопрос. Нужна помощь в понимании поинтеров на примере игры Metal Gear Solid [GBC]. Долго разжевывать не буду, почти сразу к вопросу перейду.

Нашел я текст меню (new game, continue и т.д., смещение 0x6C0C), таблицу поинтеров для меню (она прям над текстом 0x6B6C), нашел сам текст (0x148987) и поинтеры для него (опять чуть выше, 0x148787).

Собственно, вот та вещь, которую я не могу понять: вот есть таблица слов, есть поинтеры, которые идут по порядку. А как найти сам текст? Я должен искать указатель на указатель что ли? Ну так не получается найти.
ссылка на файлы - таблицы для меню и для диалога + оригинальный ром + с перерисованным шрифтом (диалог, я не нашел шрифт меню)

2

"нашел сам текст (0x148987) и поинтеры для него (опять чуть выше, 0x148787)"

"А как найти сам текст?"

Что? :blink:

3

Хах, ну не так написал. Я нашел слова, разделенные символом FF (кажется им, пишу с телефона по памяти). И перед блоком слов находится плавно растущая таблица, в том же порядке что и слова, указывающая на эти слова. Как-то так. А я хочу понять, где и как искать сами предложения, с запятыми и так далее.

Отредактировано maslanin (2015-01-07 19:56:33)

4

А как ты нашёл слова? Так и ищи предложения. Ничем не отличается.

В предложениях так же есть FF. Ну и ищи их по адресам перед этими FF. Всё так же...

Т.е. по твоим словам ты нашёл "таблицу слов", а теперь ищи "таблицу предложений". Они ничем, кроме длины, не должны отличаться...

Отредактировано Guyver (2015-01-07 20:18:17)

5

Ну слова я нашел относительным поиском. А предложения разве из голого текста будут состоять? Я думал, там что-то типа указатель1,указатель3! указатель6 указатель2, указатель1 и т.д.

6

Если в игре используется МТЕ (словарная система кодирования текста), то в предложениях не будет указателей, а будут коды (в один или два байта), соответствующие элементам словаря.
Текст тоже можно искать относительным поиском, а можно по таблице (которую можно составить по дампу видеопамяти).

7

Ага, это же GBC, тут дамп не поможет, но таблицу ты более-менее верную составил (хоть и не совсем полную).
Текст хранится банками по h4000 байт начиная с адреса x1D4000, а вот с поинтерами там не всё понятно.
В тексте используется МТЕ: hFB - индикатор МТЕ, следующий за ним код - номер слова в словаре (том, который ты нашел).

8

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

P.S. Номер слов в предложениях откуда берется? Из АДРЕСА таблицы поинтеров? Или просто если слово 2е в таблице, то в тексте будет байт 02 вместо него?

Отредактировано maslanin (2015-01-08 11:25:54)

9

Словарь МТЕ хранится в роме отдельно. И коды у него могут быть разные. К примеру, в словаре у тебя есть слово - HEAD. Находишь по игре, где оно выводится, и смотришь в хексредактор какой у него код. К примеру, FB01. Соответственно следующее слово в словаре будет иметь кода FB02 и так далее, а слово перед ним FB00. На основании этого и делается табличка для текста.
С такой системой оптимизации текста удобнее всего освоить Круптар. Но это когда ты для себя составишь карту ресурсов (словарь, текст и все прочее).
P. S. Доки по Круптару есть здесь http://magicteam.net/ и http://romhack.github.io. Если освоишь, дам проект на тини туна. По образцу сможешь сделать свой. Там тоже МТЕ сжатие, только коды в словаре однобайтные.
Алекс подробнее расскажет про систему в этой игре.
P. P. S. И не "мёртвый" у нас форум. :)  Просто не всё открыто для посторонних глаз. Вот проявишь себя и не забросишь на полпути дело, поможем и перенес темку  в раздел для союзников.

10

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

P.S. Номер слов в предложениях откуда берется? Из АДРЕСА таблицы поинтеров? Или просто если слово 2е в таблице, то в тексте будет байт 02 вместо него?

Номер слова в словаре - это ПОРЯДКОВЫЙ номер слова в словаре:
FB00 - первое слово в словаре,
FB01 - второе слово...
FBFF - последнее слово в словаре (всего их 256).

А теперь сюрприз: текст в игре помимо МТЕ оптимизирован ещё и перекрестными ссылками (в них я не стал сильно разбираться).
Один из вариантов (не знаю, может и единственный) - код h04, за ним идет ссылка (два байта) на копирование последовательности байт. Судя по всему, эта ссылка указана относительно таблицы поинтеров к текущей группе предложений, но наверняка сказать пока не могу, так как с поинтерами не разобрался, странные они какие-то.

11

освоить Круптар

Сколько пытался освоить круптар, нифига не вышло. Видеоуроков случайно нет на него? :)

Насчет забросить - смотря что )) я люблю колупаться, в коде разбираться, программировать. Сам процесс нравится )) Английский понимаю, но с художественным переводом будет туго.

12

Номер слова в словаре - это ПОРЯДКОВЫЙ номер слова в словаре:
FB00 - первое слово в словаре,
FB01 - второе слово...
FBFF - последнее слово в словаре (всего их 256).

Спасибо, теперь понял принцип. Почему-то ранее ни в одной доке такого не видел. Получается двойное указывание, то есть поинтер указывает на слово в словаре, а в тексте указывается номер поинтера. (ну + управляющий байт(ы)).
Насчет сюрприза - не дошел еще, пока составляю таблицу для себя в виде

Код:
00=Snake
01=Campbell
02=Mei Ling
03=Weasel
04=McBride

etc.

Отредактировано maslanin (2015-01-08 14:31:15)

13

Чего там составлять-то.
Вот таьлица МТЕ плюс некоторые коды, которым я значений не искал, просто в таблицу занес.

14

Чего там составлять-то.
Вот таьлица МТЕ плюс некоторые коды, которым я значений не искал, просто в таблицу занес.

Вот блин. Я почти вручную набил их, а у вас программа какая-то есть для этого? :)

И еще кое что. Основной шрифт я нашел 0x142900 (1BPP), а вот шрифт для надписей NEW GAME, CONTINUE что-то не могу найти. Какое-то подобие нашел на 0x7550 и всё.

Отредактировано maslanin (2015-01-08 15:08:44)

15

Любым скриптером можно вынуть такую таблицу, или даже в Translhextion подключить таблицу шрифта и вынуть текст, а потом разбить на строки в блокноте.

16

Вот блин. Я почти вручную набил их, а у вас программа какая-то есть для этого? smiles.gif

Программы есть. Но Круптар может практически всё. А если ещё Марат плагин напишет под эту игру, то и с ней программа справится. :)

Один из вариантов (не знаю, может и единственный) - код h04, за ним идет ссылка (два байта) на копирование последовательности байт. Судя по всему, эта ссылка указана относительно таблицы поинтеров к текущей группе предложений, но наверняка сказать пока не могу, так как с поинтерами не разобрался, странные они какие-то.

Это интересно. Хотелось бы, чтобы ты всё-таки разобрался и описал алгоритм вывода текста. Пригодится. ;)

Отредактировано Mefistotel (2015-01-08 15:05:33)

17

Вот уж точно сюрприз с текстом :)

В самом начале, когда игру начинаешь, идет вызов, далее открывается экран рации. Там идет текст

Код:
Snake
This is Snake....
Colonel,can you
hear me?

This is Snake.... записано вот так (0x1E30B0):

Код:
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 символов. Чуть подвигав туда-сюда получаю фразу, из которой берется кусок:

Код:
Word is he's

Ищу поиском, этот кусок находится чуть выше (0x1E2DC7).
Если отнять от адреса ' is ' 0x78, то попадем на 0x1E2D53, где так же записан байт 0E (не факт, что связано - возможно, просто совпадение).
Сам байт 0E - видимо, управляющий. Пишу 0E 78 вместо FB 00, и получаю вместо

Код:
This is Snake

-

Код:
This is  is he's
Gindra

Вот так.

И еще кое что. Основной шрифт я нашел 0x142900 (1BPP), а вот шрифт для надписей NEW GAME, CONTINUE что-то не могу найти. Какое-то подобие нашел на 0x7550 и всё.

Шрифт так и не нашел для меню.

Вывод такой вот для себя: про поинтеры понял, а игра не та, с которой следовало бы начать новичку.

Отредактировано maslanin (2015-01-23 08:52:00)

18

Заходи к нам на PSCD.RU, мы планируем заняться переводом этой игры. Или скинь просто аську.

19

На rhdn выложили софт для работы со сжатыми данными в mgs gbc.

20

Автор софта даже, если не ошибаюсь, русскоговорящий.

Отредактировано KenshinX (2015-01-31 14:06:29)


Вы здесь » Chief-NET » Базовый хакинг » Metal Gear Solid [GBC]