Chief-NET

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Chief-NET » Переводы » Phantom 2040 (SNES)


Phantom 2040 (SNES)

Сообщений 241 страница 260 из 319

241

Процесс потихоньку пошел - удалось опознать около 10% кодов полностью и ещё у нескольких только количество байт с параметрами (ну это типа код h04 - вывод текста - имеет 4 байта папаметров: два на координаты надписи и два на адрес строки в памяти).
Работаем...

242

Это радует.
А я пока пытаюсь дос игру разобрать с псевдоархивами и прочей хренью.

243

Ридер (ну, или viewer, кому как нравится) для событий готов (по большей части): команды отображает, теперь нужно допилить отображение параметров команд, а потом можно будет и за редактирование браться :)  (когда все команды опознаю).

244

Супер! Я уже жду не дождусь)

245

Ну, вообще-то "стрижка только начата".

Я нашёл одну из причин, почему события висли при изменении:
в событиях есть команда, запускающая второй поток с "подпрограммой" события. Например: сцена, когда Фантом выходит из института после разговора с профессором, здесь:
- основной поток: на экран выводится текст и иконка с персонажем, и включается ожидание нажатия кнопки;
- вторым потоком: выводятся спрайты идущего Фантома, тут выполнение не зависит от нажатия кнопок (то есть он может уйти, а надпись на экране останется, пока не будет нажата кнопка и основной поток не продолжится).

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

246

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

247

Редактор, в принципе, готов.
Но (как всегда не одно):
1) автоматизация редактирования почти отсутствует (пока) - программа может только размер блоков корректно считать, строки доступны для редактирования в виде текста и на лету строится MTE-запись этих строк, но на этом всё - отслеживать подпрограммы (добавление/удаление команд) и учитывать длину MTE-записей для указателей пока приходится ручками;
2) генерация дерева событий для всех 620 блоков занимает уйму времени (я не дотерпел и вырубил прогу дебаггером), думаю, и обратная генерация машинного кода из дерева событий будет не намного быстрее.

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

248

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

249

Обнаружился интересный момент: можно протестировать все сценки без прохождения игры! Нужно просто интересующий блок поставить в начало (можно даже первым и единственным!) и игра вместо логотипа с заглавием покажет сценку, соответствующую перемещенному блоку.
Правда все 620 блоков так проверять можно довольно долго :) лучше штук по 9 за раз проверять (там 9 сценок в интро запускается перед показом главного меню).

Интересно, сколько же времени уйдет ещё на то, чтобы хотя бы количество параметров у всех команд выяснить? Я уже молчу про то, сколько понадобится на их идентификацию :(.
Пока только 54 кода более-менее опознано, и новые (неопознанные) появляются в событиях всё реже и реже :(

Отредактировано alex_231 (2013-03-29 16:30:05)

250

Я так тоже сценки в играх тестирую - тупо переношу в первую сценку всё из следующих и смотрю ;о)

251

2 Guyver: Это да, но такая возможность мне попалась впервые.

2 Mefistotel: Во время распознавания кодов выяснился нехороший баг - при регенерации нового машинного скрипта была потеряна часть кода :( (только кода, текста это не касается - там всё ровно :) ), а вызвано это было теми самыми строками, которые вынимались по неверным данным (те, про которые ты в заметках писал). Пришлось переписывать дампер, чтобы он работал с учетом таблицы кодов событий, но тут тоже есть одно "но" - для корректной работы нужна полная таблица кодов, так что буду утюжить скрипт, пока всё коды не найду.

Отредактировано alex_231 (2013-03-30 05:24:05)

252

ОК.
Весть про возможность просмотреть все события вначале - суперская yahoo
Не придётся проходить игру 16 раз подряд, чтобы все диалоги с концовками увидеть.

253

Автоматизировал поиск неопознанных кодов и оказалось, что команд-то всего 62, остальные если и запрограммированы, то в игре не использованы и отследить их будет практически нереально, но нам они без надобности - будем использовать те, что есть.
Теперь углублюсь в процедуры редактирования, чтобы по максимуму автоматизировать процесс, а то руками рассчитывать указатели на каждую строку и подпрограмму никакого терпения не хватит.

254

Ага, редактирование текста полностью готово: при изменении длины строк указатели на остальные строки блока рассчитываются автоматически.
Теперь осталось обработку подпрограмм запилить и, вроде, всё. Ттам, правда пока ещё конь не валялся, но, думаю сегодня-завтра доделаю.

255

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

256

Не, ну его нафиг... "Настоящие герои всегда идут в обход!" Отредактировал машинный скрипт так, чтобы он соответствовал скрипту.
Теперь можно полноценно работать со скриптером.
Но есть один вопрос: в игре (оригинале) для повторяющихся блоков используется один блок (в смысле в роме он один, а в игре встречается несколько раз), так вот, в скрипте эти блоки идут так, как встречаются в игре (идентифицировать их можно по строке "PACKET=..."), и если в скрипте они будут различаться, то в игре этого не будет, так как скриптер использует лишь первый (из идентичных в оригинале) блок, и при появлении в скрипте второго (с идентичным идентификатором) просто запишет поинтер первого пакета в ром, а сам второй блок проигнорирует.
Так вот, нужно ли убрать использование поинтеров на повторяющиеся блоки?
То есть, если ты планируешь делать сценки немного различными (те, которые изначально были идентичными), то скажи сейчас, чтобы я сразу исправил скриптер, пакер и сборщик рома.
Если же нет, то и бог с ними - выложу утилиты как есть, а пока пойду руководство писать :).

257

Не дожидаясь ответа отрезал использование повторов.
Пока отрезал оказалось, что скриптер почему-то перестал переваривать динамические массивы :blink: пришлось в срочном порядке переходить на статические.
Архив со всеми приблудами весит 2.4Мб (правда там больше половины архива промежуточная версия рома заняла).

Отредактировано alex_231 (2013-03-31 16:51:08)

258

Главное, чтобы оно только после такой кучи манипуляций всё корректно работало. :rolleyes: А так, чего тут скажешь: молодчага, Алекс. Герой. ) Сколько мучался и таки сделал. )

259

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

260

Такс. Сегодня заценю и напишу комментарии.


Вы здесь » Chief-NET » Переводы » Phantom 2040 (SNES)