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


Фотография

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


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

#21 Lego

Lego

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

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


Отправлено 27 October 2011 - 16:36

UPD: Замечательные новости! Вместе с Дагероном только что разблокировали меню отладки в LCS на PS2!
Если память мне не изменяет этого раньше не делали, собственно на данный момент работает такая конфигурация активации функций:


годно, давно уже пора.
алсо, я на VCS разблокировал ещё 2 года назад, правда я не особо тестил (да и возможно разблокировал не всё)

Сообщение отредактировал Lego: 27 October 2011 - 16:37


#22 SILENT_Pavel

SILENT_Pavel

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

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


Отправлено 27 October 2011 - 16:57

Lego
Хха! Молодцом. У тебя по моим коомбинациям тоже все работало в дополнение к кар спавнеру? Я все кроме выбора погоды нашел, погоду в GTX дагерон где-то видел, но коомбинацию на нее не набрал.

#23 Dageron

Dageron

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

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


Отправлено 27 October 2011 - 17:01

Lego
VCS я пока что не тестировал, только LCS).

Суть в том, что есть несколько отдельных потоков с отладочными функциями (@debmenu и прочие), ссылки на каждый из которых несложно поставить в любую часть скрипта - хоть в миссию какую, хоть куда... Однако чтобы все эти функции заработали комплексно, нужно править код инициализации основных потоков в @main. Там среди прочих было несколько проверок с неизвестными опкодами, после которых стояли ссылки на @rndebug - их-то я и убрал.

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

Например, в коде есть такой поток @wetimch. Я точно помню, как когда-то правил main.scm под перевод LCS и интереса ради поставил ссылку на него, после чего получил некоторое подобие меню смены погоды (и оно работало, хоть и не без глюков). Тогда я всего лишь экспериментировал и тестировать особо не стал, но, тем не менее, такое меню есть и это факт. Судя по своему содержимому этот поток отвечает не только за выбор погоды, но и еще и времени.
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#24 Lego

Lego

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

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


Отправлено 28 October 2011 - 15:26

> У тебя по моим коомбинациям тоже все работало в дополнение к кар спавнеру? не знаю, тогда "твоих комбинаций" ещё не было. так-то комбинации можно в мейне поискать. в коде была инициализация потока, похожкго на devmenu, которая блокировалась неизвестной функцией (что-то типа is_dev_mode(), я бы сказал) - ну я просто обошёл эту функцию добавив "8" в начало опкода и запустил поток, который пропустил первую миссиию и добавил карспавнер. по идее ещё, должен быть редактор бизнеса, но, АФАЙК, его нужно запускать отдельно и тоже вручную.

Сообщение отредактировал Lego: 28 October 2011 - 20:13


#25 SILENT_Pavel

SILENT_Pavel

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

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


Отправлено 29 October 2011 - 18:00

"твоих комбинаций"

Очевидно что я имел ввиду - комбинаций разработчиков, которые я нашел вслепую - писать долго развернуто. Те комбинации что находил Дагерон весьма нестандартного вида "pad=1" что не всегда понятно.
UPD: Приобрел видео кабель для псп, заснял некоторые мои простенькие мап-моды, или что-то вроде трека по крышам:

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


#26 Dageron

Dageron

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

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


Отправлено 03 November 2011 - 13:26

Между делом набросал шаблон 010 Editor для работы с опкодами main.scm в Stories.

Эскиз кода (вывод не оформлен, может не хватать нескольких проверок, но логика выдержана):
typedef struct Opcode{
	byte btOpcodeByte;	
	local string sOpcode_1, sOpcode_2, sOpcode;
	SPrintf (sOpcode_1, "%x", btOpcodeByte);
		if (Strlen(sOpcode_1) == 1) sOpcode_1="0"+sOpcode_1;
	byte btOpcodeByte;
	SPrintf (sOpcode_2, "%x", btOpcodeByte); 
		if (Strlen(sOpcode_2) == 1) sOpcode_2="0"+sOpcode_2;
	sOpcode=sOpcode_1+sOpcode_2;
	local int iParamsCount;
	iParamsCount = OpcodeParamsCount_read(sOpcode);
	if (iParamsCount!=-1) {
			local int i;
			for(i=0; i<iParamsCount; i++){	
				ubyte btParamType;
				switch (btParamType){
					case 0x01: break; //null
					case 0x02: break; //null
					case 0x0B: break; //null
					case 0x03:		//Packed float (1 byte)
							   <... some code skipped ...>
							   break; 
					case 0x04:		//Packed float (2 byte)
							   <... some code skipped ...>
							   break; 
					case 0x05:		//Packed float (3 byte)
							   <... some code skipped ...> 
							   break; 
					case 0x06:		//label (4 byte)
							   <... some code skipped ...>  
							   break;
					case 0x07:		//Byte
							   <... some code skipped ...> 
							   break;
					case 0x08:		//Integer (4 bute)
							   <... some code skipped ...>
							   break;
					case 0x09:		//Float (4 byte)
							   <... some code skipped ...> 
							   break;   
					case 0x0A:		//String (null-terminated)	
							   <... some code skipped ...> 
							   break;													  
				}
				if ((btParamType>=0x0C)&(btParamType<=0x6B)){  //Local Variable
					<... some code skipped ...>
				}
				if ((btParamType>=0xCC)&(btParamType<=0xE5)){  //Global Variable
					<... some code skipped ...>
				}
				if ((btParamType>=0xE6)&(btParamType<=0xFF)){  //Array
					<... some code skipped ...>
				} 
			}
	}
}
Суть примерно в следующем: сперва читаются два байта опкода (например, 0x01 и 0x00), из них формируется соответствующая строка ("0001"), передаваемая в процедуру получения количества параметров опкода, после чего исходя из полученного значения читаются все параметры - сначала каждый соответствующий байт-определитель типа, а затем и сами величины.

Пример кода:
шестнадцатиричный код	 | опкод	 | число параметров | определитель типа				 | значение	  | эквивалентный код
01 00 01				  | 0x01 0x00 | 1				| 0x01 - автоматически возвращает 0 | auto   - 0	| 0001: wait 0
01 00 07 01			   | 0x01 0x00 | 1				| 0x07 - целое число, 1 байт		| 0x01   - 1	| 0001: wait 1
01 00 08 E8 03 00 00	  | 0x01 0x00 | 1				| 0x08 - целое число, 4 байта	   | 0x03E8 - 1000 | 0001: wait 1000
Процедуру OpcodeParamsCount_read я перенес в отдельный *.bt, поскольку вид она имеет достаточно внушительный. Пример для LCS:
byte OpcodeParamsCount_read (string s){
  switch (s) {
	 case "0001": return 1; break;
	 case "0002": return 1; break;
	 case "0003": return 1; break;
	 case "0004": return 2; break;
	 case "0005": return 2; break;
	 <...>
	 /* ~ 1200 opcodes skipped */
	 <...> 
	 case "0671": return 3; break;
	 case "0674": return 1; break;
	 case "0676": return 1; break;
	 case "0677": return 2; break;
	 case "0678": return 2; break;
	 default: return -1;
  };
Раньше мне приходилось действовать методом проб и ошибок, все время дополнительно сверяясь с декомпилированным через Sanny Builder кодом, теперь же работать стало гораздо проще. Достаточно просто запустить чтение структур на конкретном участке кода и можно редактировать.

Тривиальный пример чтения структуры opcode:
FSeek(<оффсет>);
Opcode m_Opcode[<число опкодов>] <optimize=false>;
Можно сделать и что-то чуть более интересное - например, циклически обойти какой-либо поток руководствуясь оффсетом его начала и проверкой на end_thread (0x4E00).
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#27 LEX SAFONOV

LEX SAFONOV

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

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

Отправлено 05 November 2011 - 19:27

SILENT_Pavel прикольно выглядит, кстати не думал, что в ЛСС крыши допилены)

#28 SILENT_Pavel

SILENT_Pavel

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

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


Отправлено 05 November 2011 - 19:59

LEX SAFONOV
Там странное дело, они моментами такие же как в трешке, моментами действительно вроде как чуток допилены.

#29 LEX SAFONOV

LEX SAFONOV

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

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

Отправлено 06 November 2011 - 10:00

я заметил, особенно с коализией прогоны)

#30 Sweet

Sweet

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

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


Отправлено 06 November 2011 - 11:09

Павел, что за музыка в твоём ролике играет? Я знаю, что она с одной радиостанции ЖТА 3, только не помню названия.

#31 Chipsman

Chipsman

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

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


Отправлено 06 November 2011 - 13:19

Slyder - Score (Original mix)

#32 Lego

Lego

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

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


Отправлено 07 November 2011 - 08:27

2Dageron
Заманчиво, конечно, но таким редактором много-то ненапишешь, т.к. нельзя нарушать смещения мейна... ну можно делать jump'ы и в конец дописывать, но всё равно не айс.
<...>
	 /* ~ 1200 opcodes skipped */
	 <...>
ахах, 1200+ кейсов... неужели в 010 нельзя никак воспользоваться готовым INI от СБ?

алсо, напрашивается вопрос: зачем делать поиск по строке, когда номер опкода лишь целое число? ну, считать сразу два байта 0x01 и 0x00, получить 0x0001=0x1 и передать в OpcodeParamsCount_read сразу целое.

Сообщение отредактировал Lego: 07 November 2011 - 08:28


#33 Dageron

Dageron

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

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


Отправлено 07 November 2011 - 17:02

Заманчиво, конечно, но таким редактором много-то ненапишешь, т.к. нельзя нарушать смещения мейна... ну можно делать jump'ы и в конец дописывать, но всё равно не айс.

На самом деле так можно сделать весьма не мало - и интересного, и достаточно важного... А jump-ы в конец как раз дописать, увы, не получится, поскольку в каждом потоке миссий можно ставить ссылки только в пределах его самого (там и указатель рассчитывается исходя из начала потока, а не начала самого main.scm).

ахах, 1200+ кейсов... неужели в 010 нельзя никак воспользоваться готовым INI от СБ?

Не уверен, что в 010 можно напрямую работать с *.ini стандартными средствами, во всяком случае в справке мне ничего такого на глаза не попадалось.

алсо, напрашивается вопрос: зачем делать поиск по строке, когда номер опкода лишь целое число? ну, считать сразу два байта 0x01 и 0x00, получить 0x0001=0x1 и передать в OpcodeParamsCount_read сразу целое.

Можно, конечно, но для этого придется полностью переделывать процедуру получения числа параметров, а поскольку я хотел по-старинке выводить опкод, то и по-другому додумывать вывод (при обработке фактически делать его обратное преобразование - из числового в строковое).
в проекте gtamodding.ru: декабрь 2008 - декабрь 2012

#34 SILENT_Pavel

SILENT_Pavel

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

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


Отправлено 01 January 2012 - 16:11

Заснял второй, более обширный тест-демо отладки лсс.

Сообщение отредактировал SILENT_Pavel: 07 January 2012 - 12:05


#35 SILENT_Pavel

SILENT_Pavel

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

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


Отправлено 28 April 2012 - 04:08

Несколько новых скриншотов Debug Menu.

ИзображениеИзображениеИзображениеИзображениеИзображение

Вообще было бы здорово, если бы кто-нибудь из знающих в main.scm попробовали активировать таинственные просмоторщики моделей и отладчик аи (в таблице мейн ну вы видели на нотабеноиде) наверняка они все работают, но похоже что одновременно их включить не получится насколько мы тестировали... Ибо заняты переводом все свободное время. Ну и просто протестировал новейшую ревизию эмулятора, скорость все растет, особенно помогает новый спидхак на 3+ процессора и галочка "включить 8-бит текстуры", что дает неплохую скорость даже с высоким сглаживанием да директе 10ом хардварном. Причем при полностью включенных каварных спидхаков и всяческих пропусков видео игра не показывает артефактов вовсе, что очень удивляет, разве что нельзя включать ускоренную загрузку, это крашит все.

ИзображениеИзображениеИзображение

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


#36 SILENT_Pavel

SILENT_Pavel

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

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


Отправлено 21 May 2012 - 04:45

На гтаф разлочили просмоторщик анимаций для всс из состава отладочных опций
Изображение

#37 XEPOMAHT007

XEPOMAHT007

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

  • LCSTeam
  • PipPipPip
  • 472 сообщений
  • Пол:Мужчина


Отправлено 21 May 2012 - 12:40

На гтаф разлочили просмоторщик анимаций для всс из состава отладочных опций
Изображение


Мощно. Для GTA3/ВС эту вещь так и не смогли разблокировать. Буржуи - молодцы.

a4ea86ab343c.gif
BETA 4.0 COMING SOON


#38 SILENT_Pavel

SILENT_Pavel

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

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


Отправлено 22 May 2012 - 02:21

Интересно за что может отвечать опция "color"...

#39 EcLipsE

EcLipsE

    Участник

  • Пользователи
  • PipPip
  • 20 сообщений
  • Пол:Мужчина
  • Город:Astrakhan
  • Интересы:IT,graffity,auto


Отправлено 22 May 2012 - 08:17

в сториесы не играл,но мне кажется что то типа такого

#40 SILENT_Pavel

SILENT_Pavel

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

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


Отправлено 22 May 2012 - 08:45

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



Ответить



  


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

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