Перейти к содержимому


Фотография

Скриптинг в LCS и VCS (PSP/PS2)


Сообщений в теме: 74

#1 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 08 July 2010 - 13:39

Все-таки самой интересной частью являются скрипты. В SannyBuilder реализована декомпиляция (хотя грамотнее наверное сказать - дизассембелирование). Но, как известно, формат main.scm скриптов LCS/VCS практически не изменился по сравнению с III/VC/SA, поэтому и с редактированием проблем никаких быть не должно. Поменялись опкоды, появилось несколько новшеств по переменными (например, packed floats) и некоторое число новых неизвестных параметров в заголовке. Но в подавляющем же большинстве своем формат не потерпел изменений. Я, например, легко редактировал скрипты через hex (при этом параллельно смотря дизассембелированный код в Sanny Builder). Написать новый дизассемблер (и даже ассемблер) при желании можно, если кто-нибудь подскажет по строению заголовка main.scm обычного Vice City (устройство указателей на все блоки, описания статики вроде количества переменных и т.п.). Интересно услышать мнение на этот счет.
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#2 Джамбо

Джамбо

    Активный участник

  • Пользователи
  • PipPipPip
  • 136 сообщений
  • Пол:Мужчина

Отправлено 08 July 2010 - 19:23

неужели можно будет увидеть полную версию для psp ? а то простой заменой файла main.scm не обходилось, игра висла при прохождении какой либо дополнительной миссии (ексклюзивной для PS2)

#3 Lego

Lego

    Активный участник

  • Пользователи
  • PipPipPip
  • 343 сообщений
  • Пол:Не определился


Отправлено 08 July 2010 - 23:57

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

#4 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 09 July 2010 - 12:02

Проблема зависания игры на PSP с main.scm от PS2-версии объясняется наличием новых опкодов и обновлении статистики. Я не смотрел внимательно код эксклюзивных для PS2 миссии, но, возможно, можно "отловить" тот участок кода, который вызывает зависание. Вопрос для тех, у кого под рукой на PSP игра с PS2 main.scm - когда именно игра зависает и отображается ли текст "Mission passed"?
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#5 Джамбо

Джамбо

    Активный участник

  • Пользователи
  • PipPipPip
  • 136 сообщений
  • Пол:Мужчина

Отправлено 11 July 2010 - 17:37

Dageron смотрел видео как запускалась ексклюзивная миссия на psp. при провале миссии всплывает табличка "мисиия провалена".

а хотя может вызывать зависание из-за того что gxt нет того текста который отвечает за пункт типа "миссиия кармагеддон пройдена"или какой-то другой дополнительной миссии, а ведь при провале пишет стандартную надпись "миссиия провалена", но не "миссиия кармагеддон провалена"

#6 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 12 July 2010 - 07:07

По поводу эксклюзивных PS2-миссий - важно не что происходит при провале миссии, а что происходит при ее выполнении (т.е. выводится ли текст "Mission Passed").
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#7 Джамбо

Джамбо

    Активный участник

  • Пользователи
  • PipPipPip
  • 136 сообщений
  • Пол:Мужчина

Отправлено 12 July 2010 - 09:34

По поводу эксклюзивных PS2-миссий - важно не что происходит при провале миссии, а что происходит при ее выполнении (т.е. выводится ли текст "Mission Passed").


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

#8 Джамбо

Джамбо

    Активный участник

  • Пользователи
  • PipPipPip
  • 136 сообщений
  • Пол:Мужчина

Отправлено 25 July 2010 - 17:38

Dageron я то нашел такого человека но он не помнит уже когда именно был висяк. тогда придется самому все проделывать. выкачивать образ от ps2 весом 3,2 гб ради одного мелочного файла для меня смысла (PS2 не имею).решил попросить тебя выложить этот файл "main.chm" (уже не помню его расширения)

#9 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 26 July 2010 - 12:07

Есть такая неофициальная модификация под названием "VCS PS2 to PSP". Прочитать про этот "мод" и скачать архив можно здесь (в архиве main.scm и american.gxt).
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#10 Джамбо

Джамбо

    Активный участник

  • Пользователи
  • PipPipPip
  • 136 сообщений
  • Пол:Мужчина

Отправлено 26 July 2010 - 14:56

Есть такая неофициальная модификация под названием "VCS PS2 to PSP". Прочитать про этот "мод" и скачать архив можно здесь (в архиве main.scm и american.gxt).

а висяки так же и остались ?

#11 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 26 July 2010 - 17:36

Это просто файлы, взятые с PS2-версии - скопированные напрямую без изменений. Если бы решение вопроса с зависаниями уже было найдено, сейчас разговор велся несколько иной. Кстати говоря, если ориентироваться на какой-нибудь серьезный язык высокого уровня... Delphi(Paskal)-синтаксис для декомпилятора/компилятора скриптов всех устроит? Если с преобразований конструкций все будет нормально, то, возможно, удастся отойти от низкоуровневого кода с метками к нормальным условиям/циклам. Опкоды же можно преобразовать к функциям (хотя это уже не столь важно), взяв имена с IV-natives.
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#12 Chipsman

Chipsman

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 786 сообщений
  • Пол:Не определился


Отправлено 26 July 2010 - 18:02

как по мне, то лучше си-подобный синтаксис) хотя это не столь важно

#13 Джамбо

Джамбо

    Активный участник

  • Пользователи
  • PipPipPip
  • 136 сообщений
  • Пол:Мужчина

Отправлено 27 July 2010 - 14:33

Dageron , вот цитата одного человека который вчера опробовал эту версию.


нашёл доп. миссию на квадроцикле за магазином аммуниции. сел на него, в нижнем левом углу на фоне чёрного экрана надпись wikd bike time trial (или что-то типа этого), висяк и псп вырубилась

и напоследок еще одна цитата
"есть! она зависла
висяк происходит перед появлением надписи."

тоесть игра зависает после прохождения миссии перед появлением надписи "миссия пройдена"

Сообщение отредактировал Джамбо: 27 July 2010 - 16:40


#14 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 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 исполняется не правильно, на самом деле сложнее... Пока что я этим конкретно не занимался, но по скриптам могу сказать много интересного.
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#15 GHOST

GHOST

    Активный участник

  • Пользователи
  • PipPipPip
  • 75 сообщений
  • Пол:Мужчина
  • Город:Тамбов


Отправлено 30 July 2010 - 13:58

Людей разбирающихся в програмировании и вещах связанных с этим. На это форуме наверно не очень много.. Тем не менее все равно интересно что кто-то разбирает моддинг для LCS/VCS :rolleyes:

#16 SILENT_Pavel

SILENT_Pavel

    Активный участник

  • Пользователи
  • PipPipPip
  • 937 сообщений


Отправлено 23 October 2011 - 10:54

Замечательные новости! Вместе с Дагероном только что разблокировали меню отладки в LCS на PS2!
Если память мне не изменяет этого раньше не делали, собственно на данный момент работает такая конфигурация активации функций:
HOLD R1 + R2 + ...
	+ /\ + LEFT = смена одежды
	+ O + DOWN = активировать меню отладки, игра ставится на паузу
		- LEFT, RIGHT = смена пунктов меню
		- /\ = выход из меню
		- X = активировать пункт
			- Toggle Player Coordinates		
				* ничего не происходит, после актив. дебаг не раб.
			- Level Skip Menu
				* нельзя во время миссии
				- Analog: UP, DOWN = выбрать линию сюжета
				- Analog: LEFT, RIGHT = выбрать миссию
				- L, R = выбрать остров		
				- X = телепортироваться и начать миссию
				- /\ - выход

Прикрепленные изображения

  • 7.png
  • 3.jpg
  • 10.png

Сообщение отредактировал SILENT_Pavel: 18 September 2012 - 05:43


#17 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 23 October 2011 - 17:26

Рад, что отладочное меню работает, это очень хорошо). Спасибо за тестирование. Я внедрял ссылку на создание потока @debmenu прямо в загрузчик первой миссии (ее куда угодно можно внедрить), так что из-за этого, быть может, часть отладочных функций пока недоступна. Судя по строкам в *.gxt их гораздо больше и они весьма разнообразны, вплоть до выбора погоды, времени и даже просмотрщика каких-то моделей. По идее не отладочное меню должно активироваться отдельным образом, а сама игра должна загружаться в отладочном режиме (то есть меню - это лишь следствие, одна из отладочных функций). Загрузчик пока изучаю, может быть удастся найти еще что-нибудь интересное или активировать режим отладки корректным образом.
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#18 GHOST

GHOST

    Активный участник

  • Пользователи
  • PipPipPip
  • 75 сообщений
  • Пол:Мужчина
  • Город:Тамбов


Отправлено 25 October 2011 - 16:30

заманчиво :cookie: Побольше бы скринов.. :rolleyes:

#19 Dageron

Dageron

    Активный участник

  • Пользователи
  • PipPipPip
  • 1130 сообщений
  • Пол:Мужчина
  • Город:Пермь


Отправлено 26 October 2011 - 17:14

Наконец-то мне удалось разблокировать полноценный запуск игры в отладочном режиме.
Пока что SILENT_Pavel все тестирует, скриншоты будут позднее.

Вообще отладочные функции очень даже интересные ;) .
Сейчас вот спаун авто внезапно обнаружили.
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#20 SILENT_Pavel

SILENT_Pavel

    Активный участник

  • Пользователи
  • PipPipPip
  • 937 сообщений


Отправлено 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




Ответить



  


Количество пользователей, читающих эту тему: 3

0 пользователей, 3 гостей, 0 анонимных