Блин, я чуть на инглише не написал мануал %)
Для начала, первый вполне адэкватный вопрос: "Чо за нах?! Кому оно надо?"
Начну из далека. Вот допустим вы суперхацкер. И вы там и сям меняете ром, прыгаете по адресам, и вообще как рыба в воде в хексе. А я вот может быть не такой. Нинавижу копаться в хексе, и думаю это правильно.
А теперь, причём тут хекс? При том что прога и предназначена для того, чтобы избавиться от хекс редактирования самого рома. Предназначена для того чтобы управление памятью (местом в роме) ложилось не на ваши плечи. Прога сама всё разложит по "полочкам" и по максимуму упакует.
Программа основана на тупейшей идее: назвать все ресурсы именами (путями к файлам), залить их в ром подряд (без отступа), и потом некоторым "языком" описать где что поправить в роме (какие указатели куда направить).
Какие приемущества появляются?
Первое и главное, я считаю, приемущество: конфиг на котором основана сборка - является шаблоном сборки. Только изменяй ресурсы, и ничего исправлять не надо, копаться в хексе не надо, новый ром - готов!.
Второе приемущество - многие тестирования становятся мнгновенными.
Третье приемущество - достаточно сделать редакторы для ресурсов, т.к. ресурсы уже все выдернуты, и в автоматическом режиме внедряются.
Четвёртое приемущество - старые части сборки можно легко удалять, можно части складывать отдельно...
Пятое приемущество - все ресурсы именованы, что упрощает поиск нужного.
Наверно можно ещё выделить какие-то приемущества, но я на этом остановлюсь
Какие минусы появляются?
Надо помнить некоторые зависимости.
Не все наверно хаки можно так собрать, но кто запрещал добавить дополнительный шаг обработки?
Загружается conf.txt, по описанию которое находится в нём, собирается ром. Текущее состояние не выводится. Ошибки выводятся в консоли (окошками - если msgbox сборка), и не все. Некоторые ошибки просто игнорируются.
Это будет самый жирный раздел :)
Первыми идут несколько основных (глобальных) настроек сборки.
Все параметры буду заключать в "<" ">", которые НУЖНО опускать (не писать).
Все параметры разделяются любыми пробельными символами (т.е. переводы строк, табуляции пробелы...). Рекомендую разделять табами, для читабельности.
Глобальные парамерты(пишутся в начале, ОБЯЗАТЕЛЬНО): <(адрес в хекс виде)начало пустого места в роме> <адрес (в хекс виде) таблицы архивов> <(путь)исходный ром> <(путь)результирующий ром>
После глобальных параметров идут команды, пока файл не кончится.
Путь - либо путь если путь не содержит пробельных символов, или путь заключённый в ковычки.
Адрес - <тип адреса> <параметры адреса>.
Тип адреса A <номер архива> (от слова Archive) означает адрес в табице архивов адреса данного архива. Используется для фиксов адресов архивов :)
Тип адреса D <путь> (от слова Data) означает адрес на который был залит данный файл.
Тип адреса P <адрес в хекс виде> (от слова Pointer) означает точный адрес
Тип адреса N (без параметров, от слова New) означает пустое место. Я не гарантирую что пустое место всегда в конце рома, это только на текущей версии.
Модификатор адреса "+" если написать "+" перед типом адреса, то добавляется ещё один в конце параметр адреса - сколько прибавить (в хексе). Для того чтобы указать отрицательное значение используйте например -1 это FFFFFFFF
На основе слова Data - данные.
Загружает (записывает) файл, по адресу
D <путь> <адрес> <сжатие>
Сжатие - одна буква.
Z - голый LZSS.
A - как архив хака LZSS (т.е. с ведущим размером (перед данными идёт размер)).
любой другой символ (я использую N от слова Normal) - без сжатия - точная копия.
На основе слова Offset.
Используется для фиксов указателей.
O <адрес где произвести фикс> <размер в байтах указателя> <адрес который записать>
На основе слова 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 если немножко подправить исходник, но исходник нужно просить у меня :), да и не исправляя тоже можно использовать.