Блин, я чуть на инглише не написал мануал %)

Описание

Для начала, первый вполне адэкватный вопрос: "Чо за нах?! Кому оно надо?"

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

А теперь, причём тут хекс? При том что прога и предназначена для того, чтобы избавиться от хекс редактирования самого рома. Предназначена для того чтобы управление памятью (местом в роме) ложилось не на ваши плечи. Прога сама всё разложит по "полочкам" и по максимуму упакует.

Система

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

Приемущества

Какие приемущества появляются?

Первое и главное, я считаю, приемущество: конфиг на котором основана сборка - является шаблоном сборки. Только изменяй ресурсы, и ничего исправлять не надо, копаться в хексе не надо, новый ром - готов!.

Второе приемущество - многие тестирования становятся мнгновенными.

Третье приемущество - достаточно сделать редакторы для ресурсов, т.к. ресурсы уже все выдернуты, и в автоматическом режиме внедряются.

Четвёртое приемущество - старые части сборки можно легко удалять, можно части складывать отдельно...

Пятое приемущество - все ресурсы именованы, что упрощает поиск нужного.

Наверно можно ещё выделить какие-то приемущества, но я на этом остановлюсь

Какие минусы появляются?

Надо помнить некоторые зависимости.

Не все наверно хаки можно так собрать, но кто запрещал добавить дополнительный шаг обработки?

Процесс сборки

Загружается conf.txt, по описанию которое находится в нём, собирается ром. Текущее состояние не выводится. Ошибки выводятся в консоли (окошками - если msgbox сборка), и не все. Некоторые ошибки просто игнорируются.

Конфиг сборки

Это будет самый жирный раздел :)

Первыми идут несколько основных (глобальных) настроек сборки.

Все параметры буду заключать в "<" ">", которые НУЖНО опускать (не писать).

Все параметры разделяются любыми пробельными символами (т.е. переводы строк, табуляции пробелы...). Рекомендую разделять табами, для читабельности.

Глобальные парамерты(пишутся в начале, ОБЯЗАТЕЛЬНО): <(адрес в хекс виде)начало пустого места в роме> <адрес (в хекс виде) таблицы архивов> <(путь)исходный ром> <(путь)результирующий ром>

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

Типы параметров

Путь - либо путь если путь не содержит пробельных символов, или путь заключённый в ковычки.

Адрес - <тип адреса> <параметры адреса>.

Тип адреса A <номер архива> (от слова Archive) означает адрес в табице архивов адреса данного архива. Используется для фиксов адресов архивов :)

Тип адреса D <путь> (от слова Data) означает адрес на который был залит данный файл.

Тип адреса P <адрес в хекс виде> (от слова Pointer) означает точный адрес

Тип адреса N (без параметров, от слова New) означает пустое место. Я не гарантирую что пустое место всегда в конце рома, это только на текущей версии.

Модификатор адреса "+" если написать "+" перед типом адреса, то добавляется ещё один в конце параметр адреса - сколько прибавить (в хексе). Для того чтобы указать отрицательное значение используйте например -1 это FFFFFFFF

Команда "D"

На основе слова Data - данные.

Загружает (записывает) файл, по адресу

D <путь> <адрес> <сжатие>

Сжатие - одна буква.

Z - голый LZSS.

A - как архив хака LZSS (т.е. с ведущим размером (перед данными идёт размер)).

любой другой символ (я использую N от слова Normal) - без сжатия - точная копия.

Команда "O"

На основе слова Offset.

Используется для фиксов указателей.

O <адрес где произвести фикс> <размер в байтах указателя> <адрес который записать>

Команда "P"

На основе слова Patch.

Используется для патчей на подобии в hexpatcher(от меня).

P <адрес где произвести патч> <(путь) патч>

На путь смотрится как на патч. Тип параметра путь для того чтобы можно было пробелы писать в патче. Все не хекс символы выкидываются, а оставшаяся строчка рассматривается как патч в hexpatcher.

Команда "#"

Название выбрано на основе коментариев в языке Perl, но работает не так.

Используется для коментариев.

# <путь>

Эта команда вообще ничего не делает, но параметр обязательный, да и вообще все параметры обязательны.

Параметр типа путь, чтобы можно было использовать пробельные символы (в частности переводы строк!)

Пример Конфига

100000 6B000
"Rock n' Roll Racing (U) [!].gen"
"Rock n' Roll Racing (U) [ololo].gen"

D	archives\000.bin	N	A
O	A 0	4	+D archives\000.bin FFF95000

# "LZSS patch"
# "jmp"
P	P E38	"4EF9"
# "new code as data"
D	lzss.asmb	N	N
# "jmp offset correction"
O	P E3A	4	D lzss.asmb
# "archive table offset correction"
O	+D lzss.asmb 6	4	A 0

# "code patching"
P	P E66	"4E B8 0E 74 42 80 30 3C 06 60 4E 75"

Если указать все 221 архивы то можно получить полностью рабочий ром :). Или нужно поправить размеры архивов для того чтобы LZSS hack работал. Т.е. этот пример не доконца рабочий.

Заключение

Эта программа получилась некой эволюцией hexpatcher-а. Наконец появилась возможность заливать целые файлы, и хитро вычислять адреса.

Можно ипользовать не только для RRR если немножко подправить исходник, но исходник нужно просить у меня :), да и не исправляя тоже можно использовать.

Автор

r57shell@uralweb.ru