форум группы Chief-Net » » Экстрим хакинг » Metal Gear Solid [GBC]

Страниц (1): [1]
 

1. maslanin - 17 Декабря, 2015 - 02:31:01 - перейти к сообщению
Привет. Вот у меня собственно какой вопрос. Нужна помощь в понимании поинтеров на примере игры Metal Gear Solid [GBC]. Долго разжевывать не буду, почти сразу к вопросу перейду.

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

Собственно, вот та вещь, которую я не могу понять: вот есть таблица слов, есть поинтеры, которые идут по порядку. А как найти сам текст? Я должен искать указатель на указатель что ли? Ну так не получается найти.
ссылка на файлы - таблицы для меню и для диалога + оригинальный ром + с перерисованным шрифтом (диалог, я не нашел шрифт меню)
2. Guyver - 17 Декабря, 2015 - 02:32:00 - перейти к сообщению
Guyver
"нашел сам текст (0x148987) и поинтеры для него (опять чуть выше, 0x148787)"
"А как найти сам текст?"
Что? :blink:
3. maslanin - 17 Декабря, 2015 - 02:32:39 - перейти к сообщению
maslanin
Хах, ну не так написал. Я нашел слова, разделенные символом FF (кажется им, пишу с телефона по памяти). И перед блоком слов находится плавно растущая таблица, в том же порядке что и слова, указывающая на эти слова. Как-то так. А я хочу понять, где и как искать сами предложения, с запятыми и так далее.
4. Guyver - 17 Декабря, 2015 - 02:33:01 - перейти к сообщению
Guyver
А как ты нашёл слова? Так и ищи предложения. Ничем не отличается.
В предложениях так же есть FF. Ну и ищи их по адресам перед этими FF. Всё так же...
Т.е. по твоим словам ты нашёл "таблицу слов", а теперь ищи "таблицу предложений". Они ничем, кроме длины, не должны отличаться...
5. maslanin - 17 Декабря, 2015 - 02:33:58 - перейти к сообщению
maslanin
Ну слова я нашел относительным поиском. А предложения разве из голого текста будут состоять? Я думал, там что-то типа указатель1,указатель3! указатель6 указатель2, указатель1 и т.д.
6. alex_231 - 17 Декабря, 2015 - 02:34:20 - перейти к сообщению
alex_231
Если в игре используется МТЕ (словарная система кодирования текста), то в предложениях не будет указателей, а будут коды (в один или два байта), соответствующие элементам словаря.
Текст тоже можно искать относительным поиском, а можно по таблице (которую можно составить по дампу видеопамяти).
7. alex_231 - 17 Декабря, 2015 - 02:34:45 - перейти к сообщению
alex_231
Ага, это же GBC, тут дамп не поможет, но таблицу ты более-менее верную составил (хоть и не совсем полную).
Текст хранится банками по h4000 байт начиная с адреса x1D4000, а вот с поинтерами там не всё понятно.
В тексте используется МТЕ: hFB - индикатор МТЕ, следующий за ним код - номер слова в словаре (том, который ты нашел).
8. maslanin - 17 Декабря, 2015 - 02:35:06 - перейти к сообщению
maslanin
Ну вот, а я думал, что тут полуживой (читай, мервый) форум Улыбка
1. Таблица не полная, потому что я ее не закончил, и убрал подальше - не смог найти шрифт для меню.
2. Вот теперь понятно стало. Таблица таблицей, а текст текстом. Ну плюс еще нагуглил доку эту, стало намного понятнее.
3. Вы мне прямо разжевали и в рот положили ))) теперь буду думать, как вы искали и как мне повторить.
P.S. Номер слов в предложениях откуда берется? Из АДРЕСА таблицы поинтеров? Или просто если слово 2е в таблице, то в тексте будет байт 02 вместо него?
9. Mefistotel - 17 Декабря, 2015 - 02:35:27 - перейти к сообщению
Mefistotel
Словарь МТЕ хранится в роме отдельно. И коды у него могут быть разные. К примеру, в словаре у тебя есть слово - HEAD. Находишь по игре, где оно выводится, и смотришь в хексредактор какой у него код. К примеру, FB01. Соответственно следующее слово в словаре будет иметь кода FB02 и так далее, а слово перед ним FB00. На основании этого и делается табличка для текста.
С такой системой оптимизации текста удобнее всего освоить Круптар. Но это когда ты для себя составишь карту ресурсов (словарь, текст и все прочее).
P. S. Доки по Круптару есть здесь http://magicteam.net/ и http://romhack.github.io. Если освоишь, дам проект на тини туна. По образцу сможешь сделать свой. Там тоже МТЕ сжатие, только коды в словаре однобайтные.
Алекс подробнее расскажет про систему в этой игре.
P. P. S. И не "мёртвый" у нас форум. Улыбка Просто не всё открыто для посторонних глаз. Вот проявишь себя и не забросишь на полпути дело, поможем и перенес темку в раздел для союзников.
10. alex_231 - 17 Декабря, 2015 - 02:35:58 - перейти к сообщению
alex_231
Цитата:
Ну вот, а я думал, что тут полуживой (читай, мервый) форум Улыбка
1. Таблица не полная, потому что я ее не закончил, и убрал подальше - не смог найти шрифт для меню.
2. Вот теперь понятно стало. Таблица таблицей, а текст текстом. Ну плюс еще нагуглил доку эту , стало намного понятнее.
3. Вы мне прямо разжевали и в рот положили ))) теперь буду думать, как вы искали и как мне повторить.

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

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

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

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

Насчет забросить - смотря что )) я люблю колупаться, в коде разбираться, программировать. Сам процесс нравится )) Английский понимаю, но с художественным переводом будет туго.
12. maslanin - 17 Декабря, 2015 - 02:37:00 - перейти к сообщению
maslanin
Цитата:
Номер слова в словаре - это ПОРЯДКОВЫЙ номер слова в словаре:
FB00 - первое слово в словаре,
FB01 - второе слово...
FBFF - последнее слово в словаре (всего их 256).

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

CODE:
00=Snake
01=Campbell
02=Mei Ling
03=Weasel
04=McBride


etc.
13. alex_231 - 17 Декабря, 2015 - 02:37:34 - перейти к сообщению
alex_231
Чего там составлять-то.
Вот таьлица МТЕ плюс некоторые коды, которым я значений не искал, просто в таблицу занес.
14. maslanin - 17 Декабря, 2015 - 02:38:09 - перейти к сообщению
maslanin

Вот блин. Я почти вручную набил их, а у вас программа какая-то есть для этого? Улыбка
И еще кое что. Основной шрифт я нашел 0x142900 (1BPP), а вот шрифт для надписей NEW GAME, CONTINUE что-то не могу найти. Какое-то подобие нашел на 0x7550 и всё.
15. alex_231 - 17 Декабря, 2015 - 02:38:39 - перейти к сообщению
alex_231
Любым скриптером можно вынуть такую таблицу, или даже в Translhextion подключить таблицу шрифта и вынуть текст, а потом разбить на строки в блокноте.
16. Mefistotel - 17 Декабря, 2015 - 02:39:10 - перейти к сообщению
Mefistotel
Цитата:
Вот блин. Я почти вручную набил их, а у вас программа какая-то есть для этого? smiles.gif

Программы есть. Но Круптар может практически всё. А если ещё Марат плагин напишет под эту игру, то и с ней программа справится. Улыбка
Цитата:
Один из вариантов (не знаю, может и единственный) - код h04, за ним идет ссылка (два байта) на копирование последовательности байт. Судя по всему, эта ссылка указана относительно таблицы поинтеров к текущей группе предложений, но наверняка сказать пока не могу, так как с поинтерами не разобрался, странные они какие-то.

Это интересно. Хотелось бы, чтобы ты всё-таки разобрался и описал алгоритм вывода текста. Пригодится. Подмигивание
17. maslanin - 17 Декабря, 2015 - 02:39:58 - перейти к сообщению
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 символов. Чуть подвигав туда-сюда получаю фразу, из которой берется кусок:
CODE:
Word is he's

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


Вот так.

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

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

Вывод такой вот для себя: про поинтеры понял, а игра не та, с которой следовало бы начать новичку.
18. greengh0st - 17 Декабря, 2015 - 02:40:41 - перейти к сообщению
greengh0st
Заходи к нам на PSCD.RU, мы планируем заняться переводом этой игры. Или скинь просто аську.
19. lupus - 17 Декабря, 2015 - 02:41:03 - перейти к сообщению
lupus
На rhdn выложили софт для работы со сжатыми данными в mgs gbc.
20. KenshinX - 17 Декабря, 2015 - 02:41:34 - перейти к сообщению
KenshinX
Автор софта даже, если не ошибаюсь, русскоговорящий.
21. greengh0st - 17 Декабря, 2015 - 02:42:15 - перейти к сообщению
greengh0st
Это прога Protona скорее всего.
22. Mefistotel - 17 Декабря, 2015 - 10:55:10 - перейти к сообщению
Вот этот компрессор. Metal Gear Solid GBC Compressor/Decompressor
http://www.romhacking.net/utilities/1110/

Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®