|
shedevr.org.ru Группа перевода приставочных игр "ШЕДЕВР"
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Deathless
Зарегистрирован: 30.10.2005 Сообщения: 14
|
Добавлено: Вс Дек 19, 2010 11:24 am Заголовок сообщения: Поинтеры и глобальные сдвиги |
|
|
Такое дело - если я не ошибаюсь, вопрос поинтеров почти всегда ассоциируется с поинтерами на текст. А что насчет тех случаев, когда требуется найти поинтеры для тех данных, которые связаны с указанием на блоки данных (где, например, находится блок обработки событий)? Если я вставляю некоторую дополнительную информацию в середину файла, это обязательно влечет за собой то, что вся остальная инфа, которая следует за данным участком, будет смещена, а ведь там есть и другие, нетекстовые области. И ладно, если б нужно было поправить лишь один байт (нашел бы методом тыка), но ведь их там может быть десятки, а то и сотни разбросанных по всему файлу.
Я сейчас разбираюсь с DS игрой, где требуемая для меня информация расположена в парных файлах (для каждого крупного фрагмента игры выделяется по файлу со скриптами и файлу с диалогами для данного скрипта). В скриптовом файле требуется поправить одновременно два участка памяти - первый отвечает за указатели на текст в диалоговом файле, а второй отвечает за сами скрипт событий, среди которых и вывод диалогов. И если добавление посторонних (дополнительных) скриптов для вывода новых диалогов в блоке с событиями не оказывает негативного влияния (т.к. он находится почти в конце файла), то расширение первого, связующего, блока влечет за собой сбой. Вот и думаю, как бы вычислить расположение тех участков в скриптовом файле. Здесь у меня пока нет никаких идей.
Заранее извиняюсь, если этот вопрос банален и освещался везде, где это возможно, и лишь ленивый не прочтет об этом сам. Но у меня есть маленькое оправдание в том, что сейчас голова перегружена другой проблемой по взлому, которую нужно домыслить и закодить, пока не запутался окончательно. Если я займусь сейчас чтением документации, то я банально могу сбиться и потратить много времени, чтобы снова войти в колею. |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Вс Дек 19, 2010 1:29 pm Заголовок сообщения: |
|
|
А на кой тебе раздвигать блоки? Если уж так надо увеличить один из блоков - перенеси его в конец (не трогая остальных данных) и будет тебе щасье. |
|
Вернуться к началу |
|
|
Dr. MefistO
Зарегистрирован: 28.03.2006 Сообщения: 189 Откуда: Беларусь
|
Добавлено: Вс Дек 19, 2010 1:43 pm Заголовок сообщения: |
|
|
А если игра отслеживает контрольные суммы данных блоков, или их размеры? _________________ Metal is my life... |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Вс Дек 19, 2010 2:16 pm Заголовок сообщения: Re: Поинтеры и глобальные сдвиги |
|
|
Deathless писал(а): | Такое дело - если я не ошибаюсь, вопрос поинтеров почти всегда ассоциируется с поинтерами на текст. |
Это только потому, что ромхакинг почти всегда ассоциируется с любительским переводом. А по сути нет, любые ресурсы удобнее держать в одном месте и для быстрого доступа использовать таблицу поинтеров (смещений от начала структуры). Во многих PC-играх ещё с начала 90-х практикуется помещение всех игровых данных в один файл-контейнер, в начале которого хранится таблица смещений (поинтеров) на каждый блок.
Deathless писал(а): | А что насчет тех случаев, когда требуется найти поинтеры для тех данных, которые связаны с указанием на блоки данных (где, например, находится блок обработки событий)? |
Всё то же самое - последовательно определяешь размеры нескольких блоков, следующих друг за другом, и ищешь таблицу поинтеров с помощью относительного поиска. В простейшем случае таблица легко находится глазами в хекс-редакторе - обычно прямо перед самым первым блоком данных. Если контейнер маленький, поинтеры могут быть двухбайтовыми, а не четырёхбайтовыми.
Deathless писал(а): | И если добавление посторонних (дополнительных) скриптов для вывода новых диалогов в блоке с событиями не оказывает негативного влияния (т.к. он находится почти в конце файла) |
Если не в самом конце, а "почти" (т.е. после него есть хотя бы ещё один блок данных), то вставка лишнего байта в любом случае оказывает негативное влияние (т.к. ведёт к смещению этого последующего блока).
Deathless писал(а): | Вот и думаю, как бы вычислить расположение тех участков в скриптовом файле. Здесь у меня пока нет никаких идей. |
Ну, название РОМа ты не привёл, ромхакинг вполне базовый, просто сиди в шестнадцатеричном редакторе и разбирай.
Dr. MefistO писал(а): | А если игра отслеживает контрольные суммы данных блоков |
Тогда, скорее всего, без дебаггера не обойтись. Но это вряд ли, максимум проверяется чексумма всего контейнера, а не каждого куска.
Dr. MefistO писал(а): | или их размеры? |
Это тут при чём? Размеры и так "проверяются" при составлении таблицы поинтеров. Никакого смысла проверять размер данных нет. Даже у проверки чексумм смысл вовсе не в том, чтобы усложнить жизнь ромхакеру, а в том, чтобы определить случайное искажение данных при печати картриджа/передаче данных. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Вс Дек 19, 2010 3:47 pm Заголовок сообщения: Re: Поинтеры и глобальные сдвиги |
|
|
АнС писал(а): | Во многих PC-играх ещё с начала 90-х практикуется помещение всех игровых данных в один файл-контейнер, в начале которого хранится таблица смещений (поинтеров) на каждый блок. |
АнС, ты немного путаешь указатели на память с указателями на файлы в архивах. Да, в архиве тоже есть указатели, но их смысл немного другой - они указывают смещение "файла" в файле-архиве, чтобы считать их в память, а указатель на данные в загружаемом в память файле - немного другое. Тут же, насколько я понимаю, речь как раз о "образах", загружаемых в память - такое много где практикуется, когда все или часть данных, требуемых на уровне/локации/etc. помещаются в один файл. Хотя реальный смысл это имеет в основном на дисковых консолях.
Чаще всего разницы в реализации между этими случаями не прослеживается, но в "образы" иногда приспособлены под потоковое чтение - т.е. подразумевается, что обработаются все данные, находящиеся в "образе" (в то время как из архива читается только необходимое). Поэтому сами указатели могут и отсутствовать, ограничиваясь лишь размером следующего блока. Также в "образах" часто практикуются абсолютные указатели на память (особенно часто применяется на PSX), либо же относительные указатели после загрузки файла в память преобразуются в абсолютные. Хотя, на тех же дисковых консолях и в архивах нередко видишь абсолютные номера секторов.
По сабжу скажу, что лучшим выходом было бы разобраться в структуре файлов и по возможности написать инструментарий для работы с ними (для распаковки данных на отдельные файлы и сборки обратно). Вообще, по-хорошему, разбираться в формате стоит всегда, это может сразу избавить от множества проблем и потенциальных ошибок.
Dr. MefistO писал(а): | А если игра отслеживает контрольные суммы данных блоков, или их размеры? |
Если бы да кабы... _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Вс Дек 19, 2010 5:07 pm Заголовок сообщения: Re: Поинтеры и глобальные сдвиги |
|
|
HoRRoR писал(а): | АнС писал(а): | Во многих PC-играх ещё с начала 90-х практикуется помещение всех игровых данных в один файл-контейнер, в начале которого хранится таблица смещений (поинтеров) на каждый блок. |
АнС, ты немного путаешь указатели на память с указателями на файлы в архивах. |
Это ты путаешь поинтеры и указатели. Указатель - это строго переменная, принимающая значение в рамках адресного пространства целевого процессора. А поинтер - это более разнородная отсылка на данные (не только в ОЗУ), то есть термин, имеющий отношение к хранению ресурсов, а не к инструкциям косвенной адресации.
Слово "указатель" я нигде не писал. Да и мне вообще не приходилось сталкиваться с указателями до GBA-игр (где уже активно используется динамическая память, и иногда приходилось искать объекты в ОЗУ, но это уже не базовый ромхакинг). А в базовом ромхакинге новичкам, имхо, проще оперировать словами, не пересекающимися с однозвучными терминами программирования. Недаром так повелось - не переводить слово "поинтер", чтобы сразу разграничить понятия.
HoRRoR писал(а): | Да, в архиве тоже есть указатели, но их смысл немного другой - они указывают смещение "файла" в файле-архиве, чтобы считать их в память, а указатель на данные в загружаемом в память файле - немного другое. |
Ну, надеюсь, это ты не мне объяснял. Вот поэтому я всегда предпочитал не называть поинтеры указателями, потому что может возникнуть путаница. На 32-разрядной платформе указатели строго 4-байтные, а вот поинтеры на том же GBA могут быть и двух-, и четырёх-, и даже восьмибайтными. |
|
Вернуться к началу |
|
|
Deathless
Зарегистрирован: 30.10.2005 Сообщения: 14
|
Добавлено: Вс Дек 19, 2010 5:09 pm Заголовок сообщения: Re: Поинтеры и глобальные сдвиги |
|
|
АнС писал(а): |
Всё то же самое - последовательно определяешь размеры нескольких блоков, следующих друг за другом, и ищешь таблицу поинтеров с помощью относительного поиска. В простейшем случае таблица легко находится глазами в хекс-редакторе - обычно прямо перед самым первым блоком данных. Если контейнер маленький, поинтеры могут быть двухбайтовыми, а не четырёхбайтовыми. |
Мм, т.е. обычно все поинтеры для блоков в начале...? Ок, попробую, там в самом деле есть что-то похожее. Проблема в том, что, по моим догадкам, там помимо общей таблицы поинтеров, есть и под-таблицы (т.е. предпожительно, главная поинт-таблица указывает на другую поинт-таблицу, которая уже указывает на нужные данные). Лад, если буду знать где основные блоки, там уже будет виднее
АнС писал(а): |
Если не в самом конце, а "почти" (т.е. после него есть хотя бы ещё один блок данных), то вставка лишнего байта в любом случае оказывает негативное влияние (т.к. ведёт к смещению этого последующего блока). |
Да, не в самом конце, так что что-то, да портится, просто поверхностно это пока не видно. Поэтому пока что приоритет на то, чтобы добиться базовой работоспособности при добавления своих данных, а там уже в ходе проверок будет виднее что поправлять.
АнС писал(а): | Ну, название РОМа ты не привёл, ромхакинг вполне базовый, просто сиди в шестнадцатеричном редакторе и разбирай. |
Название игры пока принципиально не хочется упоминать, т.к. игра во-первых переводится с японского на англ-й (я лишь технической частью занимаюсь, сам перевод не на мне), а во-вторых потому, что это первый проект. Поскольку достаточно редко первые проекты выживают, не хотелось бы раньше времени воду мутить.
Гость писал(а): | А на кой тебе раздвигать блоки? Если уж так надо увеличить один из блоков - перенеси его в конец (не трогая остальных данных) и будет тебе щасье. |
Как вариант можно, но оставлю его на десерт. |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Вс Дек 19, 2010 5:17 pm Заголовок сообщения: Re: Поинтеры и глобальные сдвиги |
|
|
Deathless писал(а): | Да, не в самом конце, так что что-то, да портится, просто поверхностно это пока не видно. Поэтому пока что приоритет на то, чтобы добиться базовой работоспособности при добавления своих данных, а там уже в ходе проверок будет виднее что поправлять. |
Лучше сразу отказаться от таких заплаточных методов, чтобы быть уверенным в работоспособности даже без проверок.
Deathless писал(а): | Название игры пока принципиально не хочется упоминать, т.к. игра во-первых переводится с японского на англ-й (я лишь технической частью занимаюсь, сам перевод не на мне) |
Таак, а русские тогда при чём? Что, на русский язык перевод не планируется? |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Вс Дек 19, 2010 5:19 pm Заголовок сообщения: Re: Поинтеры и глобальные сдвиги |
|
|
АнС писал(а): | Это ты путаешь поинтеры и указатели. |
Разница лишь в том, что указатель - это поинтер по-русски. И всё. _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
Deathless
Зарегистрирован: 30.10.2005 Сообщения: 14
|
Добавлено: Вс Дек 19, 2010 5:24 pm Заголовок сообщения: Re: Поинтеры и глобальные сдвиги |
|
|
АнС писал(а): |
Таак, а русские тогда при чём? Что, на русский язык перевод не планируется? |
Будет и русский, если будут заинтересованные сделать перевод с японского/аглийского на русский, как бы все нужные технические вопросы уже будут решены и нужен будет лишь переводчик. Просто игра не была популярна и ее желаемость русскими игроками пока под большим вопросом. Да и найти свободного переводчика, который мог бы сразу с японского (а не допустим по готовому английскому) сделать перевод... Такие люди обычно без дела не сидят. А тот, кто будет делать jap->eng (он американец), увлекается этой игрой и за ним большой список фансаб проектов.
P.S. Я извиняюсь, если на этом форуме не совсем уместно просить помощи, при том, что перевод не на русский. |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group
|