Скриптинг в LCS и VCS (PSP/PS2)
#1
Отправлено 08 July 2010 - 13:39
#3
Отправлено 08 July 2010 - 23:57
#4
Отправлено 09 July 2010 - 12:02
#5
Отправлено 11 July 2010 - 17:37
а хотя может вызывать зависание из-за того что gxt нет того текста который отвечает за пункт типа "миссиия кармагеддон пройдена"или какой-то другой дополнительной миссии, а ведь при провале пишет стандартную надпись "миссиия провалена", но не "миссиия кармагеддон провалена"
#7
Отправлено 12 July 2010 - 09:34
По поводу эксклюзивных PS2-миссий - важно не что происходит при провале миссии, а что происходит при ее выполнении (т.е. выводится ли текст "Mission Passed").
сегодня поспрашиваю людей на форумах, может кто нибудь пробовал такое. если не найду результат то придется самому все проделывать с заменой файлов
#8
Отправлено 25 July 2010 - 17:38
#11
Отправлено 26 July 2010 - 17:36
#13
Отправлено 27 July 2010 - 14:33
нашёл доп. миссию на квадроцикле за магазином аммуниции. сел на него, в нижнем левом углу на фоне чёрного экрана надпись wikd bike time trial (или что-то типа этого), висяк и псп вырубилась
и напоследок еще одна цитата
"есть! она зависла
висяк происходит перед появлением надписи."
тоесть игра зависает после прохождения миссии перед появлением надписи "миссия пройдена"
Сообщение отредактировал Джамбо: 27 July 2010 - 16:40
#14
Отправлено 30 July 2010 - 08:50
Итак, кажется, я понял, почему именно Seemann в SannyBuilder не реализовал компилирование/ассембелирование скриптов LCS/VCS). Packed floats (дробные числа, занимающие нестандартное число байт), null-значения (определители типа, которые автоматически выдают ноль) и прочие новшества, которые касаются типов - все это, в принципе, можно обработать. Не взирая даже на то, что около половины опкодов (а возможно и больше) не разобрано и по возможности их надо разбирать, остается много непонятного даже среди имеющихся разобранных операций.
Обратите внимание на большое количество опкодов, которые отвечают за безусловные переходы (взято из SannyBuilder, комментарии мои). p% - указатель (адрес, который в SB преобразовывается в метку).
Liberty City Stories:
0002=1,jump %1p% //jmp - обычный безусловный переход 004C=1,%1p% //jmpt (в SB был не разобран) - переход в случае true-условия 004D=1,jump_if_false %1p% //jmpf - переход в случае false-условия 004F=-1,create_thread %1p% //создать поток 0050=1,gosub %1p% //call, вызов, подразумевающий return-возврат 00DC=1,create_thread %1p% //создать поток 025E=1,%1p%//тоже call-вызов, подразумевающий return-возврат? (gosub) 02D2=2,gosub %1p% unknown %2p% //call(gosub) с двумя параметрами. Насколько я смотрел эти параметры - это адреса перехода, оба одинаковые. 05AE=4,constant_params %1d% variable_params %2d% unknown %3d% call_with_params %4p% 05AF=4,constant_params %1d% variable_params %2d% unknown %3d% call_with_params %4p%Vice City Stroies:
0002=1,jump %1p% //jmp - обычный безусловный переход 0021=1,jump_if_true %1p% //jmpt - переход в случае true-условия 0022=1,jump_if_false %1p% //jmpf - переход в случае false-условия 0024=-1,create_thread %1p% //создать поток 0025=1,gosub %1p% //call, вызов, подразумевающий return-возврат 0079=1,create_thread %1p% //создать поток 01BA=2,gosub %1p% unknown %2p% //call(gosub) с двумя параметрами. Насколько я смотрел эти параметры - это адреса перехода, оба одинаковые. 037A=4,constant_params %1d% variable_params %2d% unknown %3d% call_with_params %4p% 037B=4,constant_params %1d% variable_params %2d% unknown %3d% call_with_params %4p%
Для декомпилирования скриптов необходимо за счет анализа безусловных переходов выводить высокоуровневые констукции. В IV в этом плане, оказывается, все просто, если сравнивать с LCS/VCS. В IV были только jmp, jmpf и call (а так же jmpt, который нигде не использовался). Зато в LCS/VCS switch-а нет, что очень радует.
Исходя из jmp/jmpf вполне можно анализировать код, выявляя if-условия и while-циклы. С gosub так же все просто - это вызов процедуры, в конце которой должен находиться return (в sco-опкодах IV его назвали правильнее - call).
Но кроме этих процедур в scm еще есть jmpt и create thread, с которыми я не имею никакого представления, как работать. По идее jumpt - дает не инвертированное условие в if-statement или while-statement (jumpf дает инвертированное). Create thread - создает поток, но вот как это высокоуровнево реализовать я не представляю. Возможно, что это некий аналог call, но только без return, а с end thread (т.е. возврата не происходит, поток выполняется параллельно основному скрипту).
Но самое веселое из приведенного списка это опкоды 05AE/05AF в LCS и 037A/037B в VCS. Мне вообще пришлось писать для них отдельный обработчик, поскольку по стандартному шаблону прочитать их с параметрами не удастся (там есть специальные определители, которые задают число параметров). Но речь сейчас не об этом, а о том, что эти опкоды так же содержат и адрес перехода. Предположительно, это некий call (или create thread), который передает в функцию параметры.
Трансформировать же адреса в метки и опять идти по стандартной схеме дизассемблера/ассемблера мне ой как не хочется...
Если у кого-то есть идеи по поводу выше написанного, самое время их высказать (хотя я сомневаюсь, что кто-либо из тех, кто читают эту тему, понял хотя бы половину написанного - за исключением двух-трех человек).
Джамбо
Если надпись о выполнении миссии не выдается, то отловить тот код, который на psp исполняется не правильно, на самом деле сложнее... Пока что я этим конкретно не занимался, но по скриптам могу сказать много интересного.
#16
Отправлено 23 October 2011 - 10:54
Если память мне не изменяет этого раньше не делали, собственно на данный момент работает такая конфигурация активации функций:
HOLD R1 + R2 + ... + /\ + LEFT = смена одежды + O + DOWN = активировать меню отладки, игра ставится на паузу - LEFT, RIGHT = смена пунктов меню - /\ = выход из меню - X = активировать пункт - Toggle Player Coordinates * ничего не происходит, после актив. дебаг не раб. - Level Skip Menu * нельзя во время миссии - Analog: UP, DOWN = выбрать линию сюжета - Analog: LEFT, RIGHT = выбрать миссию - L, R = выбрать остров - X = телепортироваться и начать миссию - /\ - выход
Сообщение отредактировал SILENT_Pavel: 18 September 2012 - 05:43
#17
Отправлено 23 October 2011 - 17:26
#19
Отправлено 26 October 2011 - 17:14
Пока что SILENT_Pavel все тестирует, скриншоты будут позднее.
Вообще отладочные функции очень даже интересные .
Сейчас вот спаун авто внезапно обнаружили.
#20
Отправлено 26 October 2011 - 19:40
Обновленный список опций (еще не все, найду, напишу)
HOLD R1 ... + /\ + LEFT = смена одежды + O + DOWN = активировать меню отладки, игра ставится на паузу - LEFT, RIGHT = смена пунктов меню - /\ = выход из меню - X = активировать пункт - Toggle Player Coordinates * ничего не происходит, после актив. дебаг не раб. - Level Skip Menu * нельзя во время миссии - Analog: UP, DOWN = выбрать линию сюжета - Analog: LEFT, RIGHT = выбрать миссию - L, R = выбрать остров - X = телепортироваться и начать миссию - /\ - выход HOLD L1 ... + DOWN = Cheat mode ON - OFF + LEFT, RIGHT = выбор и мгновенный спаун транспорта + О = Writing coordinates to the file...
Сообщение отредактировал SILENT_Pavel: 18 September 2012 - 05:44
Ответить
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных