GTA Builder Форум

GTA Vice City => Идеи => Тема начата: xanser от Сентябрь 10, 2014, 07:42:56 am

Название: Воздушные потоки в игре
Отправлено: xanser от Сентябрь 10, 2014, 07:42:56 am
Все замечали, как трепыхается рубашка у игрока на мотоцикле "на ветру" в зависимости от скорости. Такую фишку можно было бы применить и для других объектов, подверженных воздействию воздушных масс: флаги на зданиях, купол парашюта, что-то еще может быть. Даже просто к игроку применить, но не только на байке, а например на колесе обозрения, на крыше зданий, выглядело бы здорово.
Вроде бы задача в движении вершин модели объекта, или это просто анимация?
Название: Re: Воздушные потоки в игре
Отправлено: Sektor от Сентябрь 10, 2014, 03:25:12 pm
А я думал это, игра с костями) когда кости перемешаются а модель тянется. Кстати  еще игрока можно сделать толстым/худым, были такие чит коды.
Название: Re: Воздушные потоки в игре
Отправлено: xanser от Сентябрь 10, 2014, 04:30:04 pm
Хотя бы функцию эту посмотреть, может и на пешеходе будет работать. Если действительно кости, то жаль, тогда только к педам.
Название: Re: Воздушные потоки в игре
Отправлено: Sektor от Сентябрь 10, 2014, 05:09:51 pm
По идее в RWG все есть) так как море же, вершинами двигается это раз. Два обрати внимание на пальмы, когда вертолет прилетает...
Название: Re: Воздушные потоки в игре
Отправлено: xanser от Сентябрь 11, 2014, 05:04:56 am
Да, заметил еще, что от вертолета рубашку тоже колбасит.
Название: Re: Воздушные потоки в игре
Отправлено: Shagg_E от Сентябрь 11, 2014, 02:46:48 pm
Это точно не кости, т.к. анима костей замедляется, если замедлить время, а тряска рубашки - нет.
Также хочу заметить, что одежда трясется у всех педов, а не только у игрока, и на всём транспорте, а не только на мотаках.
Название: Re: Воздушные потоки в игре
Отправлено: FrogByte от Сентябрь 11, 2014, 06:17:41 pm
CWindModifiers::FindWindModifier(CVector,float *,float *)    00629C90
CWindModifiers::RegisterOne(CVector,int)    00629E90
CWindModifiers::Array    007FFD38
CWindModifiers::Number    00A0D1F0
CPed::PreRender(void) -- > flt_691E0C
Название: Re: Воздушные потоки в игре
Отправлено: xanser от Сентябрь 12, 2014, 02:11:50 pm
Хм, любопытно. Можно значит "зарегистрировать" точки (или источники) обдувания. Работает однако.
Название: Re: Воздушные потоки в игре
Отправлено: Shagg_E от Сентябрь 12, 2014, 04:09:34 pm
А звук "обдувания" воспроизводится?
И возможно ли увидеть код на CLEO?
Название: Re: Воздушные потоки в игре
Отправлено: xanser от Сентябрь 12, 2014, 05:01:33 pm
Про звук не знаю, хотя есть ли он вообще, я сейчас без звука на работе.
Код я сделал так, на клео попробуй сам

Код: C++
  1. struct RwV3d // точка
  2. {
  3.     float x, y, z;
  4. };
  5.  
  6. auto CreateWind = (void (__cdecl*)(RwV3d, int active)) 0x629E90; // функция создания точки ветра
  7. // auto CreateWind = (void (__cdecl*)(float x, float y, float z, int active)) 0x629E90; // вариант без RwV3d, если удобнее
  8. auto WindCount = (DWORD *) 0x4A44B5; // количество точек ветра, нужное нам в этом адресе
  9. RwV3d Wind; // точка ветра

И потом в процессе:
Код: C++
  1. Wind = PlayerPed->physical.entity.placeable.matrix.rwMatrix.pos; // ветер в координаты игрока, эти структуры я не буду описывать подробно
  2. Wind.x = PlayerPed->physical.entity.placeable.matrix.rwMatrix.pos.x-1;  // сдигаем ветер чуть вбок, иначе дуть на игрока не будет (хотя на деревья будет)
  3. if (Wind.x>700) // если игрок дальше 700 по х - восточное побережье у моря
  4. {
  5.     WriteDWORD(WindCount,1); // количество точек ветра = 1, иначе игра тут будет их обнулять
  6.     CreateWind(Wind,1); // создаем точку ветра
  7. //  CreateWind(x,y,z,1); // для варианта без RwV3d
  8. }
  9. else
  10.     WriteDWORD(WindCount,0); // отключаем тут ветер как по-умолчанию было, игра сама создаст нужные ей точки
  11.  

Вроде все корректно работает в сочетании с вертолетом и мотоциклом, одну точку ветра мы занимаем, потом освобождаем, а игра добавляет остальные в пределах 16, если ей нужно.
Название: Re: Воздушные потоки в игре
Отправлено: xanser от Сентябрь 13, 2014, 07:19:53 am
К сожалению остальные объекты типа деревьев сделаны по-тупому, просто искажается их матрица от ветра, растягивая весь объект. Что-то типа флага не получится так сделать, а вот движение воды дает надежду.
Название: Re: Воздушные потоки в игре
Отправлено: Sektor от Сентябрь 13, 2014, 07:48:27 am
Довольно не легкая задача стоит, возиться с морем. Я по крайне мере еще там не копался, но есть догадки что все будет не так просто.
Название: Re: Воздушные потоки в игре
Отправлено: Shagg_E от Сентябрь 13, 2014, 10:48:38 am
Блин я не знаю, как это сделать на CLEO, поэтому и спросил.
Я вообще с функциями не умею работать.
Просто код C++ мало кому понадобится, а CLEO вариант  реально поможет многим вещам: будь то скрипт стрельбы из авто, либо трюков... да парашюта в конце концов...
Название: Re: Воздушные потоки в игре
Отправлено: xanser от Сентябрь 13, 2014, 01:07:38 pm
Не уверен, что правильно напишу, но суть такая:

Код: C++
  1. 04C4: create_coordinate @0 @1 @2 from_actor $PLAYER_ACTOR offset  1.0  0.0  0.0
  2. if @0>700
  3.     05E1: call СreateWind 0x629E90 num_params 4 pop 4 x 0@ y 1@ z 2@ active 1
  4.     05DF: write_memory 0x4A44B5 size 1 value 1 virtual_protect 1
  5. else
  6.     05DF: write_memory 0x4A44B5 size 1 value 0 virtual_protect 1
  7.  
Название: Re: Воздушные потоки в игре
Отправлено: Sektor от Сентябрь 13, 2014, 03:55:15 pm
Хреново то, что в CLEO для ВС, не реализована sdk для регистрации своих собственных опкодов, очень хреново! Представь сколько можно было бы, внедрить полезных опкодов для личного мода. Однако CLEO для SA, имеет регистрацию опкодов и прогеру не составить труда врезать свои штучки и затем юзать их в скриптинге.
Название: Re: Воздушные потоки в игре
Отправлено: Shagg_E от Сентябрь 13, 2014, 08:23:35 pm
переписал в простецкий скрипт, звуки активации скрипта есть(в т.ч. - другой звук, если x > 700), а одежда не двигается.
Пробовал и когда игрок находится в мотоцикле(стоит на месте), и в вертолете.

:NONAME_2
wait 0
if and
   Player.Defined($PLAYER_CHAR)
05EE: key_pressed 84 // T
00E1:   key_pressed 0 17
jf @NONAME_2

:NONAME_26
wait 0
if and
05EE: key_pressed 84 // T
00E1:   key_pressed 0 17
jf @NONAME_61
wait 0
jump @NONAME_26

:NONAME_61
04C4: create_coordinate 0@ 1@ 2@ from_actor $PLAYER_ACTOR offset 1.0 0.0 0.0
if
0@ > 700.0
jf @NONAME_101
018C: play_sound 1 at 0.0 0.0 0.0
05E1: call ÑreateWind 0x629E90 num_params 4 pop 4 x 0@ y 1@ z 2@ active 1
05DF: write_memory 0x4A44B5 size 1 value 1 virtual_protect 1
wait 1000
jump @NONAME_2

:NONAME_101
018C: play_sound 10 at 0.0 0.0 0.0
05DF: write_memory 0x4A44B5 size 1 value 0 virtual_protect 1
wait 1000
jump @NONAME_2
Название: Re: Воздушные потоки в игре
Отправлено: xanser от Сентябрь 14, 2014, 07:32:13 am
Посмотри вызов функций например в моде Vice City Pickup Landed, у меня тоже не сработал вызов, но я не спец в клео.
А пока сделай по-простому без функции, этот скрипт у меня точно работает, игрок мерзнет везде.
Доделай под свой.

Код: ASM
  1. {$CLEO .cs}
  2.  
  3. //-------------MAIN---------------
  4. 0000: NOP
  5.  
  6. :NONAME_1
  7. wait 0
  8. if and
  9.    Player.Defined($PLAYER_CHAR)
  10. jf @NONAME_1
  11.  
  12. :NONAME_2
  13. wait 0
  14. 04C4: create_coordinate 0@ 1@ 2@ from_actor $PLAYER_ACTOR offset 1.0 0.0 0.0
  15. 05DF: write_memory 0x7FFD38 size 4 value 0@ virtual_protect 1
  16. 05DF: write_memory 0x7FFD3C size 4 value 1@ virtual_protect 1
  17. 05DF: write_memory 0x7FFD40 size 4 value 2@ virtual_protect 1
  18. 05DF: write_memory 0x7FFD44 size 1 value 1 virtual_protect 1
  19. 05DF: write_memory 0x4A44B5 size 1 value 1 virtual_protect 1
  20. jump @NONAME_1
Название: Re: Воздушные потоки в игре
Отправлено: Shagg_E от Сентябрь 14, 2014, 12:37:53 pm
Работает, только жаль, что не действует на других прохожих :(
Название: Re: Воздушные потоки в игре
Отправлено: xanser от Сентябрь 14, 2014, 01:22:25 pm
В стандартном вайсе полицейский вертолет тоже не действует на прохожих. По сути тут работа только с источниками ветра, как они влияют на игровой мир это уже в других местах проверяется.
Я пробовал использовать функцию судороги на других педах, там даже параметр простой CPed, но выбрасывает в ошибку, только на игроке пока работает.
Название: Re: Воздушные потоки в игре
Отправлено: Shagg_E от Сентябрь 14, 2014, 02:40:08 pm
Видимо нужно использовать функцию ветра на мотаке и авто с открытым верхом - этот ветер действует на всех. К тому же - классный звук шелеста одежды.
Название: Re: Воздушные потоки в игре
Отправлено: Jak łaska za praca от Сентябрь 14, 2014, 05:15:47 pm
Хреново то, что в CLEO для ВС, не реализована sdk для регистрации своих собственных опкодов, очень хреново! Представь сколько можно было бы, внедрить полезных опкодов для личного мода. Однако CLEO для SA, имеет регистрацию опкодов и прогеру не составить труда врезать свои штучки и затем юзать их в скриптинге.

Или хотя бы #include и #define чтоб для функций можно было сделать макрос.
Название: Re: Воздушные потоки в игре
Отправлено: DK от Сентябрь 16, 2014, 01:32:34 am
Это просто двигаются кости.
В 3,ВС,СА можно сделать обьект с костями. В СА есть парашют, в 3 были головы с костями.
Название: Re: Воздушные потоки в игре
Отправлено: Sektor от Сентябрь 16, 2014, 04:13:48 am
Цитировать
Это просто двигаются кости.
Хм, все же интересно rockstar, придумал способ в своих gta-шках...