Автор Тема: Воздушные потоки в игре  (Прочитано 6305 раз)

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Воздушные потоки в игре
« : Сентябрь 10, 2014, 07:42:56 am »
Все замечали, как трепыхается рубашка у игрока на мотоцикле "на ветру" в зависимости от скорости. Такую фишку можно было бы применить и для других объектов, подверженных воздействию воздушных масс: флаги на зданиях, купол парашюта, что-то еще может быть. Даже просто к игроку применить, но не только на байке, а например на колесе обозрения, на крыше зданий, выглядело бы здорово.
Вроде бы задача в движении вершин модели объекта, или это просто анимация?

Оффлайн Sektor

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 521
  • Репутация: +34/-0
    • Просмотр профиля
Re: Воздушные потоки в игре
« Ответ #1 : Сентябрь 10, 2014, 03:25:12 pm »
А я думал это, игра с костями) когда кости перемешаются а модель тянется. Кстати  еще игрока можно сделать толстым/худым, были такие чит коды.

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Воздушные потоки в игре
« Ответ #2 : Сентябрь 10, 2014, 04:30:04 pm »
Хотя бы функцию эту посмотреть, может и на пешеходе будет работать. Если действительно кости, то жаль, тогда только к педам.

Оффлайн Sektor

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 521
  • Репутация: +34/-0
    • Просмотр профиля
Re: Воздушные потоки в игре
« Ответ #3 : Сентябрь 10, 2014, 05:09:51 pm »
По идее в RWG все есть) так как море же, вершинами двигается это раз. Два обрати внимание на пальмы, когда вертолет прилетает...

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Воздушные потоки в игре
« Ответ #4 : Сентябрь 11, 2014, 05:04:56 am »
Да, заметил еще, что от вертолета рубашку тоже колбасит.

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Воздушные потоки в игре
« Ответ #5 : Сентябрь 11, 2014, 02:46:48 pm »
Это точно не кости, т.к. анима костей замедляется, если замедлить время, а тряска рубашки - нет.
Также хочу заметить, что одежда трясется у всех педов, а не только у игрока, и на всём транспорте, а не только на мотаках.

Оффлайн FrogByte

  • Призрак
  • Сообщений: 13
  • Репутация: +7/-0
    • Просмотр профиля
Re: Воздушные потоки в игре
« Ответ #6 : Сентябрь 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

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Воздушные потоки в игре
« Ответ #7 : Сентябрь 12, 2014, 02:11:50 pm »
Хм, любопытно. Можно значит "зарегистрировать" точки (или источники) обдувания. Работает однако.
« Последнее редактирование: Сентябрь 12, 2014, 02:14:01 pm от xanser »

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Воздушные потоки в игре
« Ответ #8 : Сентябрь 12, 2014, 04:09:34 pm »
А звук "обдувания" воспроизводится?
И возможно ли увидеть код на CLEO?

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Воздушные потоки в игре
« Ответ #9 : Сентябрь 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, если ей нужно.

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Воздушные потоки в игре
« Ответ #10 : Сентябрь 13, 2014, 07:19:53 am »
К сожалению остальные объекты типа деревьев сделаны по-тупому, просто искажается их матрица от ветра, растягивая весь объект. Что-то типа флага не получится так сделать, а вот движение воды дает надежду.

Оффлайн Sektor

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 521
  • Репутация: +34/-0
    • Просмотр профиля
Re: Воздушные потоки в игре
« Ответ #11 : Сентябрь 13, 2014, 07:48:27 am »
Довольно не легкая задача стоит, возиться с морем. Я по крайне мере еще там не копался, но есть догадки что все будет не так просто.

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Воздушные потоки в игре
« Ответ #12 : Сентябрь 13, 2014, 10:48:38 am »
Блин я не знаю, как это сделать на CLEO, поэтому и спросил.
Я вообще с функциями не умею работать.
Просто код C++ мало кому понадобится, а CLEO вариант  реально поможет многим вещам: будь то скрипт стрельбы из авто, либо трюков... да парашюта в конце концов...

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Воздушные потоки в игре
« Ответ #13 : Сентябрь 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.  

Оффлайн Sektor

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 521
  • Репутация: +34/-0
    • Просмотр профиля
Re: Воздушные потоки в игре
« Ответ #14 : Сентябрь 13, 2014, 03:55:15 pm »
Хреново то, что в CLEO для ВС, не реализована sdk для регистрации своих собственных опкодов, очень хреново! Представь сколько можно было бы, внедрить полезных опкодов для личного мода. Однако CLEO для SA, имеет регистрацию опкодов и прогеру не составить труда врезать свои штучки и затем юзать их в скриптинге.