Автор Тема: Прицепить звук к объекту.  (Прочитано 5300 раз)

Оффлайн aleks926820

  • Проверенный
  • *
  • Сообщений: 27
  • Репутация: +7/-0
    • Просмотр профиля
Прицепить звук к объекту.
« : Июль 11, 2018, 01:43:18 am »
Всем здрасьте.
Не так давно пустил по карте криминалки (а точнее по железке) тепловоз.
Вроде всё хорошо. Катается, радует глаз. Даже 2dfx освещение работает.
https://pp.userapi.com/c841333/v841333125/7a77f/9x4ow9Un9S8.jpg
https://pp.userapi.com/c830608/v830608411/98519/e6mW0LgGAb4.jpg
Но вот беда - не работает прикрепленный дым через 2dfx ( хотя на самом объекте он работает )
https://pp.userapi.com/c849328/v849328404/26c6e/bhfB_2qq44M.jpg
Так вот у меня 2 вопроса : как прицепить дым к движущемуся локомотиву и как прицепить к нему звук ?

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 710
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Прицепить звук к объекту.
« Ответ #1 : Июль 12, 2018, 06:13:34 pm »
Если в IDE ты прикрепил 2dfx дым, и он работает лишь тогда, когда ты ставишь объект в IPL, а через SCM - нет, то пока это никак не реализовать. У меня это записано в списке идей для новых опкодов, но когда это "случится" - пока сказать не могу(времени катастрофически не хватает).
Если ты кодер, то вот мои мысли, где копать:
1)2dfx-партиклы, как и зацикленные sfx-звуки(опкоды 018D и 018E) должны иметь свои массивы, по типу горящего огня(есть кстати подозрение, что для дыма есть отдельный массив, как у огня).
2)В этих массивах должны быть смещения с координатами партикла или звука.
3)Можно динамически менять эти координаты.
4)???
5)PROFIT!
Примерно на этом принципе я и планирую запилить аттач звуков и партиклов к entity или их частям, но я предлагаю не ждать меня, а попробовать своими силами, если спешишь.

Оффлайн kenking

  • Новичок
  • **
  • Сообщений: 237
  • Репутация: +16/-0
    • Просмотр профиля
Re: Прицепить звук к объекту.
« Ответ #2 : Июль 13, 2018, 10:30:14 am »
По дыму - посмотри этот скрипт https://gta.com.ua/file_details.phtml?id=2821, может пригодится.

Оффлайн aleks926820

  • Проверенный
  • *
  • Сообщений: 27
  • Репутация: +7/-0
    • Просмотр профиля
Re: Прицепить звук к объекту.
« Ответ #3 : Август 04, 2018, 11:34:21 pm »
Таки удалось прикрепить дымок к тепловозу.
https://pp.userapi.com/c847221/v847221805/afdfd/INQjRKhz4h0.jpg
https://pp.userapi.com/c847221/v847221805/afe4f/JX8GzcWRtC8.jpg
https://pp.userapi.com/c847221/v847221805/afdeb/j98oZXke_RQ.jpg
А делов-то на две строки ))
Последняя строка из скрипта kenking'а.

0400: create_coordinate $tepX $tepY $tepZ from_object $OBJECT_TEPLOVOZ offset 0.0 0.0 3.0
0437: scatter_particle 60 size 3.5 at $tepX $tepY $tepZ speed_XYZ 0.0 0.0 0.0

Оффсеты и размер поправить и будет валить прямиком из трубы)
« Последнее редактирование: Август 04, 2018, 11:36:54 pm от aleks926820 »

Оффлайн DK

  • Новичок
  • **
  • Сообщений: 234
  • Репутация: +328/-0
    • dk22pac
    • Просмотр профиля
Re: Прицепить звук к объекту.
« Ответ #4 : Август 05, 2018, 03:08:28 am »
Вчера на сервере plugin-sdk обсуждали крепление партиклов к транспорту, вот такой код получился.
Код: C++
  1. #include "plugin.h"
  2. #include "CClumpModelInfo.h"
  3. #include "CParticle.h"
  4.  
  5. using namespace plugin;
  6.  
  7. class ParticleTest {
  8. public:
  9.     static void CreateParticleOnVehicleNode(CVehicle *vehicle, char const *nodeName) {
  10.         RwFrame *node = CClumpModelInfo::GetFrameFromName(vehicle->m_pRwClump, nodeName); // получить компонент по названию
  11.         if (node) {
  12.             RwMatrix *m = RwFrameGetLTM(node); // получить матрицу компонента в глобальном пространстве
  13.             CParticle::AddParticle(PARTICLE_FLYERS, CVector(m->pos.x, m->pos.y, m->pos.z), CVector(0, 0, 0), nullptr, 0.4f, 0, 0, 0, 0);
  14.         }
  15.     }
  16.  
  17.     ParticleTest() {
  18.         Events::gameProcessEvent += [] {
  19.             if (CPed *player = FindPlayerPed(); player && player->m_bInVehicle && player->m_pVehicle && player->m_pVehicle->m_fGasPedal > 0) {
  20.                 CreateParticleOnVehicleNode(player->m_pVehicle, "wheel_lb_dummy");
  21.                 CreateParticleOnVehicleNode(player->m_pVehicle, "wheel_rb_dummy");
  22.             }
  23.         };
  24.     }
  25. } particleTest;
Plugin-SDK https://github.com/DK22Pac/plugin-sdk

Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 710
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Прицепить звук к объекту.
« Ответ #5 : Август 05, 2018, 04:52:36 am »
А делов-то на две строки ))

 ;D Я не так тебя понял: думал, что ты это уже пробовал и тебя это не устраивает из-за сильного разброса партиклов, как огненный пердеж в этом видео.
Вариант DK делает по сути то же самое(только без скриптовой задержки), так что проблема разброса партиклов сохраняется. Горящий автомобиль имеет ту же проблему, к сожалению, так что мой вариант тоже не айс. В то же время, при сокращении "времени жизни"(кол-ва кадров) у партикла подобный "аттач" будет выглядеть более-менее нормально(если вспомнить дым из выхлопной трубы автомобиля).

P.S. Эх, в SA такой проблемы нет: там партиклы реализованы на порядок лучше...

P.P.S. Есть еще вариант: помимо сокращения кол-ва кадров, можно задавать партиклам скорости движения, идентичные скоростям движения "родительского" entity, либо исходя из разницы положения партикла из текущего и предыдущего игрового фрейма, тогда итоговоый "дым" или "огонь" будет выглядеть очень близко к идеальному даже на больших скоростях.
« Последнее редактирование: Август 05, 2018, 04:58:31 am от Shagg_E »

Оффлайн aleks926820

  • Проверенный
  • *
  • Сообщений: 27
  • Репутация: +7/-0
    • Просмотр профиля
Re: Прицепить звук к объекту.
« Ответ #6 : Август 05, 2018, 05:10:46 pm »
Попробовал прицепить звуки к тепловозу.
Вот что вышло:
https://www.youtube.com/watch?v=0WTh7ragHQg
Звук идет с какими-то перерывами, это хреново.
Без unload_wav звук циклиться не хочет.

:RAILWAV
03CF: load_wav 'MOB_02B' as 1
03CF: load_wav 'MOB_02A' as 2
03CF: load_wav 'MOB_01A' as 3
03CF: load_wav 'MOB_01B' as 4
03CF: load_wav 'MOB_01C' as 5

:RAIL2
wait 0
if and
03D0:   wav 1 loaded
03D0:   wav 2 loaded
03D0:   wav 3 loaded
03D0:   wav 4 loaded
03D0:   wav 5 loaded
jf @RAILWAV

0400: create_coordinate $wavX $wavY $wavZ from_object $OBJECT_TEPLOVOZ offset 0.0 0.0 0.0
03D7: set_wav 1 location $wavX $wavY $wavZ
03D7: set_wav 2 location $wavX $wavY $wavZ
03D7: set_wav 3 location $wavX $wavY $wavZ
03D7: set_wav 4 location $wavX $wavY $wavZ
03D7: set_wav 5 location $wavX $wavY $wavZ

03D1: play_wav 1
03D1: play_wav 2
03D1: play_wav 3
03D1: play_wav 4
03D1: play_wav 5

if
03D2:   wav 1 ended
jf @RAIL2
040D: unload_wav 1

if
03D2:   wav 2 ended
jf @RAIL2
040D: unload_wav 2

if
03D2:   wav 3 ended
jf @RAIL2
040D: unload_wav 3

if
03D2:   wav 4 ended
jf @RAIL2
040D: unload_wav 4


if
03D2:   wav 5 ended
jf @RAIL2
040D: unload_wav 5



jump @RAIL2
« Последнее редактирование: Август 05, 2018, 05:14:55 pm от aleks926820 »

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 710
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Прицепить звук к объекту.
« Ответ #7 : Август 05, 2018, 08:41:21 pm »
Звук идет с какими-то перерывами, это хреново.

1. В VC юзабельны только 2 слота wav(1 и 2)
2. Указывать положение wav можно только перед его воспроизведением. Если поменять положение во время воспроизведения - ничего не произойдет.
3. Wav продолжает проигрываться с той громкостью и в тех каналах, в каких он начал проигрываться. Т.е. если звук начинает воспроизводиться "с правой стороны вдалеке"(в правом канале с уменьшенной громкостью) - он таким и останется, даже если повернуть камеру в другую сторону(т.е. будет "вечно" звучать "справа").
4. Для поезда лучше заменить один из sfx звуков и воспроизводить их:
Vice City
Id Enum SFX[3] Range Notes
1 SOUND_PART_MISSION_COMPLETE 364-366 unlimited blip
3 SOUND_POLICE_CELL_DOOR_CLUNK 143 40.0 metal gate
5 SOUND_GARAGE_DOOR_CLUNK 102 80.0 garage door finished open/close
7 SOUND_RACE_START_3 364-366 unlimited blip
8 SOUND_RACE_START_2 364-366 unlimited blip
9 SOUND_RACE_START_1 364-366 unlimited blip
10 SOUND_RACE_START_GO 367-369 unlimited high pitch blip
12 SOUND_SHOOTING_RANGE_TARGET_HIT 162-164 50.0 bullet hit ground, random selection between 162 and 164
13 SOUND_AMMUNATION_BUY_WEAPON 361-363 unlimited successful select
14 SOUND_AMMUNATION_BUY_WEAPON_DENIED 361-363 unlimited unsuccessful select
16 SOUND_IMRAN_ARM_BOMB 178 unlimited "Demolition Man" and "Trojan Voodoo" arm bomb
18 SOUND_WILLIE_CARD_SWIPE 334 40.0 "No Escape?" card swipe
19 SOUND_MALE_AMBULANCE_OUCH intermittent male pain
20 SOUND_FEMALE_AMBULANCE_OUCH intermittent female pain
35 SOUND_SEAPLANE_LOW_FUEL 465 1000.0 "Dildo Dodo" Skimmer low fuel ping
52-54 162-164 50.0 bullet hit ground, random selection between 162 and 164
56 267 80.0 ringing phone
57 147 60.0 glass breaking
58 147 60.0 glass breaking
59 146 60.0 glass breaking
60 148-151 55.0 glass breaking, random selection between 148 and 151
61 327 60.0 boxes destroyed
62 328 60.0 boxes destroyed
63 136-140 60.0 metal sheet explosion, random selection between 136 and 140
64 33 60.0 tire hit ground
65 339 60.0 beach ball
66 156-157 20.0 gun shell drop, dependent on what collision the player is currently standing on

Либо можно попробовать юзать зацикленные sfx:
Vice City
Id Enum SFX Range Notes
0 SOUND_BANK_ALARM_LOOP 470 80.0 alarm
2 SOUND_POLICE_CELL_DOOR_SLIDING_LOOP 176 80.0 gate open/close
4 SOUND_GARAGE_DOOR_SLIDING_LOOP 176 80.0 gate open/close
6 SOUND_SNORING_LOOP 471 6.0 "No Escape?" snoring
11 SOUND_SHOOTING_RANGE_TARGET_MOVING_LOOP 331 40.0 Moving shooting range target
36 SOUND_NEW_BUILDING_BAR_1 472 80.0 Greasy Choppers "Alloy Wheels of Steel"
37 SOUND_NEW_BUILDING_BAR_2 473 80.0 Greasy Choppers "Messing with the Man"
38 SOUND_NEW_BUILDING_BAR_3 474 80.0 Greasy Choppers "Hog Tied"
39 SOUND_NEW_BUILDING_BAR_4 475 80.0 Greasy Choppers (unused)
40 SOUND_NEW_BUILDING_MALIBU_1 476 80.0 Malibu Club night, will not play if Malibu.mp3 is playing in the background
41 SOUND_NEW_BUILDING_MALIBU_2 477 80.0 Malibu Club day, same behavior as index 40
42 SOUND_NEW_BUILDING_MALIBU_3 478 80.0 Malibu Club evening, same behavior as index 40
43 SOUND_NEW_BUILDING_STRIP_1 479 80.0 Pole Position night, will not play if Strip.mp3 is playing in the background
44 SOUND_NEW_BUILDING_STRIP_2 480 80.0 Pole Position day, same behavior as index 43
45 SOUND_NEW_BUILDING_STRIP_3 481 80.0 Pole Position evening, same behavior as index 43
46 SOUND_NEW_BUILDING_CHURCH 482 80.0 South Washington Beach church
51 SOUND_NEW_WATERFALL 316 80.0 Fountain

НО! Там тоже нельзя менять положение звука, когда он уже начал воспроизводиться, так что для такого варианта нужно расковырять массив зацикленных звуков, как я описал в первом сообщении в этой теме.