Перевод Spyro 3: Взлом и программы
|
|
aleksusklim | Сообщение # 1 Воскресенье, 26.06.2011, 14:19 |
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
|
Работа с текстовой частью перевода введётся на code.google.com/p/spyro3-rus, обсуждение перевода (а не взлома) В темеПеревод Spyro 3: Текст В этой теме происходит обсуждение перевода, а также создание софта для потрошения игры. Важные сообщения: Структура WAD-файлов Спец. символы и File Paint 1 | Извлечение и добавление текста | О звуке | В продолжение о звуке | Вариант перевода Buzz's Dungeon и Midday Gardens
Сообщение отредактировал aleksusklim - Среда, 29.04.2015, 19:51 |
|
| |
aleksusklim | Сообщение # 556 Суббота, 12.11.2016, 16:33 |
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
|
http://klimaleksus.narod.ru/Files/4/SpyroTAS0V1.rar
Можете считать, что начало для Spyro: Tool Assistant Speedrun официально положено!
Это пробный очень бесполезный, но с огромным нераскрытым потенциалом плагин для Epsxe v1.7.x. Разумеется, под остальные эмуляторы и игры это дело можно доработать. Проверял только на XP.
Короче, всё что он может – «записать» последовательность нажатий клавиш (пока что только стрелок направления) в игре, и в точности воспроизвести её. Работает покадрово, и по идее должен восстанавливать историю игры ПОЛНОСТЬЮ, это очень важно.
На данный момент он очень глупый и ограниченный, но мне важен сам факт, что он пашет как надо.
Установка: – вытащить из архива «gpuroute.dll» и положить его в папку «plugins\» эмулятора. – скопировать файл «plugins\gpuPeteD3D.dll» (или «gpu.dat», или любой другой видеоплагин) в корневую папку эмулятора (рядом с epsxe.exe), переименовать его в «gpuroute_gpuplugin.dll» – открыть эмулятор, выбрать в настройках графическим плагином тот, что начинается словами «gpuroute.dll: » – настроить в управлении на клавиши-стрелки движение (либо, если хотите, пусть две из них будут крестом и квадратом, например…), ну то есть записываются только четыре стрелки. Также, пусть на кнопки «WASD» и «Enter» НЕ будет ничего забиндено.
Использование: – откройте в эмуляторе игру (она будет идти примерно в 30 fps). – перейдите в нужный уровень, встаньте в желаемое место и сохраните savastate в нулевой (по умолчанию) слот через F1. – перезапустите эмулятор, отключите кадровый лимит (F4), и загрузитесь через F3; – теперь! Теперь нажимайте W-A-S-D – это будут те кнопки, которые забиндены на стрелочки. Пройдите куда-нибудь, сделайте что-то весёлое. Не управляйте игрой никак, кроме WASD. – наконец, нажмите Enter, и плагин полностью воспроизведёт все записанные действия.
Ну, проверяйте ^^
Далее планируется всё по фен-шую: возможность настроить, выбрать клавиши, запись до 15 кнопок контроллера, откат по истории, ограничение запоминаемых и воспроизводимых действий (то есть многократная запись одного участка), окно с управлением.
Как это работает: Плагин ставится как графический, и перехватывает функцию GPUupdateLace, которая вызывается эмулятором примерно на каждый VSync. Но на деле она работает 2-3 раза за кадр, правда, я это просто игнорирую, и притворяюсь, что один вызов равен одному кадру. Ещё плагин читает нажатые клавиши (особенно во время своей же задержки), и умеет симулировать нажатие и отпускание других. Когда он хочет симулировать кнопку, он посылает keydown событие, но при следующем кадре – сделает keyup (и может быть, опять же keydown). То есть эмулятор (или может быть в будущем – любой существующий плагин контроллера) когда пытается ответить игре, какие клавиши нажаты – получает симулированные события. А поскольку он также делает его покадрово – последовательность всегда та же самая, если конечно пользователь сам не прикасался к симулируемым клавишам.
А чтобы отследить, когда там сделана загрузка, и не промахнуться ни на кадр (оказалось, что симулирование F3 загружает игру не мгновенно, а через примерно 7 кадров спустя), плагин трогает 4 байта в RAM памяти игры, записывая в них и постоянно увеличивая номер текущего кадра, нагло и по своей воле. Тогда, savastate и loadstate сохранят и это число. А значит, если его новый номер вдруг стал меньше текущего (хотя у меня пока даже это не проверяется – он тупо записывает всё в массив, и помечает как «прошедшая история»), то клавиши надо не считывать, а воспроизводить.
Насколько я смог протестировать – это РАБОТАЕТ.
Возможности открываются ну просто безграничные, и всё это без нужды разбираться в бесконечных PADpoll в попытке сразу сделать кастомный плагин контроллера…
but nobody came
|
|
| |
devdoki | Сообщение # 557 Понедельник, 14.11.2016, 14:33 |
Яйцо
Житель Города
«47»
Где: Не в городе Драконов
|
Всем доброго времени суток. Проекту еще нужны программисты? Увидела пост в ВК и захотелось попробовать принять участие.
P.S. Имеются базовые знания языка C++
P.P.S Ну и давно же меня тут не было, хех. Кто-нибудь помнит меня? :D
|
|
| |
aleksusklim | Сообщение # 558 Пятница, 09.12.2016, 18:55 |
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
|
http://www.gamasutra.com/view....bay.php
– Мы как бы об этой статье просто не знали? Или «забыли»? Или меня за всё время никто не просвещал?..
|
|
| |
steeldragon | Сообщение # 559 Воскресенье, 17.05.2020, 00:34 |
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
|
Н-да, тема взлома тут совсем брошена... Ну перепишу сюда про goldmod.
Автор оригинального сообщения - aleksusklim: ------------------------------------------------------------------------
Я подогнал программу для декодирования (XOR) «следующих» субфайлов (где код логики уровней) под SHL. В сущности, в алгоритме ничего не поменялось: (ключ ксора – число 4 байта со смещения 4, я обрабатываю им все данные от следующего такого же числа до конца файла; импорт симметричен, поэтому достаточно провести ту же операцию над раскодированным файлом, чтобы закодировать его обратно) http://klimaleksus.narod.ru/Files/6/SpyroCodeCrypt1V1.rar (также в этом архиве дополнительное есть все изменённые файлы – EXE и четыре мира, о которых речь пойдёт ниже)
Я попробовал выгрузить копию названий миров в ту шапку, которая «Library Programs». И нифига! Видать, права на неё всё же у Sony… Если повредить самое начало, то игра перестаёт грузиться, а если поместить любые данные в середину – то они сотрутся нулями (или просто не скопируются с диска) после запуска игры.
Пришлось пока что использовать основную шапку. Но с ней уж точно всё хорошо, и я скопировал таблицу указателей на названия уровней на смещение 400 (dec), что в памяти – 8001B200. После них вкопировал сами названия (сделав их в верхнем регистре, потому что буквам без разницы, а нам потом ещё отличать от основных). Теперь как бы сдвинут весь блок, и каждый указатель нужно изменить на разницу между старым и новым размещением – хотел уже писать свою программу, но оказалось, что WinHex умет прибавлять 32-битными блоками (ещё б ксорить так умел, вообще бы класс, а то только байтами…), и отнять 23092 (dec) было очень легко.
Для обновления «следующих» субфайлов я сделал вот что. Исходный текст «Sunrise Spring Home» находится по адресу 80010F28, указатель на него – по адресу 80069DD8. Поскольку это первый уровень, именно относительно него считается смещение к нужному уровню.
Этот указатель фигурирует в коде логики появления золотых букв, в дизассемблированном исходнике декодированного следующего субфайла домашних: lui a0, $8007 addiu a0, a0, $9dd8
Повезло, и во всех четырёх мирах используется тот же самый регистр. В двоичном виде эти строки выглядят вот так: 0780043CD89D8424
Мне нужно, чтобы указатель показывал на мою новую таблицу указателей, которая теперь по адресу 8001B200. Код такой: lui a0, $8001 addiu a0, a0, $b200 Двоичный – 0180043C00B28424
Теперь достаточно просто заменить единственное вхождение оригинала на вот это, и декодировать все четыре «следующих» субфайла обратно!
Изменённые файлы в папке \goldmod\ в архиве по ссылке выше. Проверял, прожигая в образ, и затронув новые названия, чтобы убедиться, что на порталах они изменяются, а в атласе и при перелётах – нет.
Сообщение отредактировал steeldragon - Понедельник, 25.05.2020, 13:25 |
|
| |
steeldragon | Сообщение # 560 Понедельник, 25.05.2020, 13:24 |
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
|
Ещё одна важная вещица в пару goldmod:
Автор оригинального сообщения - aleksusklim: -----------------------------------------------------------------------
Ну, кажись, получилось!
Собрал модели так, чтобы русские буквы попали на кириллицу win-1251, которая в WinHex по умолчанию на русской винде.
Буква Ё на своём (кривом) месте. На буквах «З», «О», «Ъ» – пустышки. Цифры на месте, яйцо и крест оригинальные, запятая-апостроф на всякий случай тоже где надо, но без задней стенки.
Только верхний регистр! А любой другой символ вызовет вылет эмулятора.
Ссылка на обновлённую программу (поддержка количества кадров до 254) и сами русские модели – и в .obj, и в бинарном формате: http://klimaleksus.narod.ru/Files/6/Goldenfont2V1.rar
В папке «\1\» – модели с одной стороной, в папке «\2\» – полноценные. В папке «\0\»: orig.sp3_265.mdl_g3 – исходные английские буквы, 19.9 Кб; rus.sp3_265.mdl_g3 – мои собранные русские, 19.1 Кб (можно заливать прямо поверх); empty.obj – модель-пустышка (ой, там «f 1//1 1//1 1//1», разумеется – вершины же с единицы нумеруются); rus.gf.gf_000.txt … rus.gf.gf_128.txt – сконвертированные текстовые кадры. Отдельно копией – просто потому что некоторые из них пропущены, и этот набор не получится обратным экспортом результата.
Если применять вкупе с моим патчем для выделения названий миров в шапку, то их можно там сразу поменять на русские, и пойти смотреть порталы. (Но если не поменять – на оригинальных названиях вылетит!)
|
|
| |
steeldragon | Сообщение # 561 Суббота, 10.10.2020, 10:49 |
Старейшина Драконов
Редактор
«422»
Где: Не в городе Драконов
|
...Оказывается, Spyro 3 всё еще может переподносить сюрпризы. Меню полёта в другой мир (на шаре и т.д.) использует свой набор указателей на текст. Всё бы ничего, но названия арен боссов берутся из общего списка названий уровней... В общем, адреса дополнительных указателей в SCUS:
buzz's dungeon - 370520 spike's arena - 370528 scorch's pit - 370536
Сообщение отредактировал steeldragon - Суббота, 10.10.2020, 11:02 |
|
| |