Advanced Pointer Recalculator Help

От автора

Что необходимо для работы с программой

Интерфейс программы

Пример работы с программой

Что необходимо для работы с программой

Необходимые файлы, которые должны находиться в папке с программой:

------------
addr.txt
 ------------

Найденные адреса вручную записываются в файл addr.txt в таком виде:

TEXT10
$00001200 - abs
$009B1ED0 $009B1F27 - ptr
$009B1F28 $009B2165 - str

TEXT20
$00000010 - abs
$009B2168 $009B21DB - ptr
$009B22A2 $009B2811 - str

...и т. д., в зависимости от количества текстовых блоков в роме.

Здесь 1-я строчка (TEXT10, TEXT20 и т. д.) является комментарием, в ней можно писать всё, что угодно, она введена специально, для более удобной навигации по этому файлу.

2-я строка - т. н. "база" или абсолютный адрес. Он прибавляется (либо вычитается, это указывается в программе) к значению каждого поинтера, и в итоге получается реальный адрес строки в роме.
Обязательное условие: адрес должен начинаться со знака '$' и иметь длину 8 знаков. ' - abs' - просто комментарий, указывающий, что это базовый адрес. Вместо него вы можете написать что хотите, как вам будет удобнее.

3-я строка состоит из двух адресов. Первое значение - это начало блока поинтеров, второе - его конец.
Обязательное условие: первый адрес должен указывать на первый байт первого указателя, второй адрес должен указывать на последний байт последнего указателя. Вид адресов - такой же, как и для абсолютного адреса. ' - ptr' - комментарий, как и ' - abs'.

4-я строка тоже состоит из двух адресов. Первое значение - это начало блока строк, второе - его конец.
Обязательное условие: первый адрес должен указывать на первый символ первой строке (это вовсе не обязательно должна быть буква, вам придётся вручную посчитать точное значение, сложив базовый адрес и значение первого поинтера, чтобы убедиться в этом), второй адрес должен указывать на следующий байт за последним символом последней строки (здесь тоже будьте внимательны - часто в роме после текста идут дополнительные байты, на которые указывают поинтеры из текущей таблицы поинтеров, поэтому желательно перестраховаться и проверить адрес последней строки). Вид адресов - такой же, как и для абсолютного адреса. ' - str' - комментарий, как и ' - abs'.

Уфф... Нелегко, правда?;) Особенно если этих блоков несколько десятков... Но зато вы точно будете уверены, что дампиться будет именно то, что нужно, ничего лишнего.

------------------------
game_dump.tbl
 -----------------------

Обычная таблица общего фомата. Используется повсеместно, поэтому с её составлением сложностей не будет. Применяется для дампа текста.
Условия: она должна быть однобайтной, не содержать символов Unicode, после знака '=' может стоять один или несколько символов (DTE/MTE), символы и их hex-коды не должны повторяться.

------------------------
game_insert.tbl
 -----------------------

Требования те же самые (исключение - не поддерживается DTE/MTE), что и к game_dump.tbl. Используется для вставки текста обратно в ром.

----------------
game.rom
 ----------------

Задайте такое имя файлу с ромом игры, из которой будет извлекаться текст (в него же будет и вставляться при вставке).

--------
*.arp
 --------

Файлы с параметрами для дампа/вставки текста. Вы можете сохранять и загружать их.


Advanced Pointer Recalculator Help

От автора

Что необходимо для работы с программой

Интерфейс программы

Пример работы с программой

Интерфейс программы

Кнопка

Нажатие этой кнопки начнёт процесс извлечения текста. Но не забудьте сначала установить нужные параметры, иначе прога просто подвиснет либо извлечёт непонятно что.

Кнопка

Нажатие этой кнопки начнёт процесс обратной вставки текста. Как и для кнопки "Вынуть текст", необдуманное нажатие может привести к печальным последствиям для рома...

Поле

Количество вынимаемых текстовых блоков. Каждый блок записывается в отдельный файл. Порядок следования соответствует порядку следования в файле Addr.txt.

Поле

Количество вставляемых текстовых блоков. Каждый блок хранится в отдельном файле вида TextBlockN.txt, где N - порядковый номер. Должен обязательно соответствовать порядку в файле Addr.txt. Не вздумайте пропускать текстовые блоки, менять их порядок или писать в это поле большее значение, чем их количество. Я предупреждал;)

Флаг

Если необходимо только пересчитать и записать поинтеры, не вставляя сам скрипт, то поставьте этот флаг.

Поле

В приставочных играх встечаются два типа поинтеров, в которых байты идут либо в прямом (Motorola), либо в обратном (Intel) порядке. Мотороловский тип можно встетить на Sega Genesis, Neo-Geo и т. п. Интеловский - на NES, SNES, GBA, Nintendo 64 и т. п.

Поле

Размер поинтера. В этой версии программы он может быть 2-х, 3-х и 4-х байтным.

Флаг

По умолчанию (со снятым флажком) базовый адрес прибавляется к значению поинтера. Если поставить флажок, то наоборот, значение базы будет вычитаться (встречается в некоторых играх).

Флаг

Если в игре указатели в таблице расположены беспорядочно, нарушается порядок их следования, или они идут в обратном порядке, то поставьте этот флажок. В этом случае несколько замедлится скорость дампа/вставки.

Флаг и поле

Количество специальных байтов в сложном поинтере, которые содержат не адрес, а иные параметры.
Например, имеется сложный 16-байтный поинтер:

7D34000000010400005F00C800000200h

Здесь 7D34 - адрес, а значит поинтер 2-х байтный, прямого порядка, межпоинтеровый интервал равен 14 байтов. Значение поля не учитывается, если флажок не поставлен.

Поле

Если в роме есть свободное место для всего вставляемого текста (либо ром предварительно расширен), то вы можете записывать его туда. В это поле вписывайте значение, равное разнице между начальным адресом первого текстового блока и начальным адресом пустого места в роме.

Поле

Шестнадцатеричное однобайтовое значение, которое используется в игре для переноса текста в диалоге на следующую строку.

Кнопка

Позволяет сохранить текущие параметры.

Кнопка

Позволяет загрузить определённые ранее параметры.


Advanced Pointer Recalculator Help

От автора

Что необходимо для работы с программой

Интерфейс программы

Пример работы с программой

Пример работы с программой

Возьмём игру Teenage Mutant Ninja Turtles Tournament Fighters (NES). Составим таблицу кодировки и дадим ей имя game_dump.tbl (она должна располагаться в одной папке с программой). После составления таблицы для дампа текста, откроем ром в шестнадцатеричном редакторе и найдём поинтеры к тексту, чтобы точно определить их вид и структуру. Часто указатели располагаются либо сразу перед текстом, либо после него.
Нашли таблицу поинтеров и определили первый байт первого поинтера:

Как видно, указатели 2-х байтные, обратного порядка (Intel). Также видно, что порядок следования поинтеров в таблице кое-где нарушается. Начало таблицы поинтеров - 100C7h, конец - 100100h (заметьте, конечный адрес должен указывать на последний байт последнего указателя в таблице!):

Найдём базовый адрес (далее базу) для данного текстового блока: 10101h-80F1h=8010h. Это и есть база (10101h - адрес, наиболее вероятное начало текстового блока, 80F1h - поинтер с наименьшим значением в таблице должен указывать на первый байт первой строки в роме (не F180h, т. к. порядок следования байтов - обратный!)). Теперь убедимся, что мы правильно определили базовый адрес. Для этого возьмём соседний поинтер и проверим, куда он указывает: 80F9h+8010h=10109h. Значение базы определили правильно. Заодно убедились, что 10101h - адрес, указывающий на первый байт первой строки в данном текстовом блоке, т. е. его начало:

Определим нижнюю границу текстового блока. Для этого в таблице поинтеров выберем указатель с наибольшим значением - 81F5h. Проверим куда он указывает, прибавив значение базы: 81F5h+8010h=10205h. Анализируя структуру текста в роме, приходим к выводу, что конечный адрес текстового блока - 10218h.

В итоге мы определили необходимые адреса и параметры:
8010h - базовый адрес
100C7h_100100h - таблица поинтеров
10101h_10218h - текстовый блок
Тип поинтеров: Intel
Кол-во байт в поинтере: 2
Код для переноса строки: $BD (байт переноса строки в тексте - BDh, но в этом текстовом блоке он не используется)
Указатели в таблице расположены неупорядоченно (несортированные поинтеры).

Заносим адреса в файл addr.txt в таком порядке:

some_text
$00008010 - abs
$000100C7 $00010100 - ptr
$00010101 $00010218 - str

Сохраняем файл с адресами в папке с программой. Открываем программу и проставляем определённые выше параметры (остальные параметры оставляем по умолчанию). Можете сохранить параметры в файл tmntt.arp.

Копируем в папку с программой ром игры и даём ему имя game.rom. Жмём кнопку "Вынуть текст" и получаем в папке с программой текстовый блок под имемен TextBlock1.txt. Редактируем его, составляем таблицу кодировки для вставки текста и даём ей имя game_insert.tbl.
Запускаем программу, загружаем параметры, жмём кнопку "Вставить текст".

Готово!


Advanced Pointer Recalculator Help

От автора

Что необходимо для работы с программой

Интерфейс программы

Пример работы с программой

От автора

Программа представляет собой продвинутый рекалькулятор поинтеров с возможностью дампа/вставки текста. Причём ориентирована в первую очередь именно на пересчёт указателей, а не на дамп/вставку текста. Программа не является "интеллектуальной", и ничего не ищет сама. Прежде всего вы сами должны отсыкать текст и таблицу поинтеров к нему, определить вид и структуру поинтеров, составить таблицу для дампа и вставки текста.

Текущая версия (0.8beta) позволяет:

  • пересчитывать указатели прямого (BigEndian) и обратного (LittleEndian) порядка (Motorola и Intel) длиной от 2-х до 4-х байтов
  • пересчитывать указатели как с прибавляемой, так и с вычитаемой базой
  • пересчитывать несортированные (неупорядоченные) указатели
  • пересчитывать указатели, идущие в обратном порядке
  • пересчитывать параметрические и составные сложные указатели
  • дампить и вставлять скрипт по указателям (с их пересчётом)
  • дампить скрипт с DTE/MTE

            •