Последние сообщения

Страницы: [1] 2 3 ... 10
1
Скриптинг / Re: Прицепить звук к объекту.
« Последний ответ от kenking Июль 13, 2018, 10:30:14 am »
По дыму - посмотри этот скрипт https://gta.com.ua/file_details.phtml?id=2821, может пригодится.
2
Скриптинг / Re: Прицепить звук к объекту.
« Последний ответ от Shagg_E Июль 12, 2018, 06:13:34 pm »
Если в IDE ты прикрепил 2dfx дым, и он работает лишь тогда, когда ты ставишь объект в IPL, а через SCM - нет, то пока это никак не реализовать. У меня это записано в списке идей для новых опкодов, но когда это "случится" - пока сказать не могу(времени катастрофически не хватает).
Если ты кодер, то вот мои мысли, где копать:
1)2dfx-партиклы, как и зацикленные sfx-звуки(опкоды 018D и 018E) должны иметь свои массивы, по типу горящего огня(есть кстати подозрение, что для дыма есть отдельный массив, как у огня).
2)В этих массивах должны быть смещения с координатами партикла или звука.
3)Можно динамически менять эти координаты.
4)???
5)PROFIT!
Примерно на этом принципе я и планирую запилить аттач звуков и партиклов к entity или их частям, но я предлагаю не ждать меня, а попробовать своими силами, если спешишь.
3
Скриптинг / Прицепить звук к объекту.
« Последний ответ от aleks926820 Июль 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 вопроса : как прицепить дым к движущемуся локомотиву и как прицепить к нему звук ?
4
Где то еще должен быть пункт который добавляет к источнику lens-flare
Это уже в 2dfx. PointLight - это чисто сам свет от источника. Т.е. то, что освещает педов, авто, катсценовые и динамические объекты.
Так же у источников есть тот самый 2dfx + "тень"(отрисовка текстуры света на горизонтальной поверхности). Это уже в другом массиве(ах).

Это насколько я это всё понимаю(могу ошибаться, но вроде всё верно).
5
CPointLights:

0x9751B0 - количество PointLights
0x7E4FE0 - начало пула PointLights (максимум - 32 элемента)
каждый PointLight состоит из 44(0x2С) байт.

Структура совпадает с GTA3, я просто добавлю пояснения.

0x00 [float] - x coord
0x04 [float] - y coord
0x08 [float] - z coord
0x0С [float] - x direction
0x10 [float] - y direction
0x14 [float] - z direction
0x18 [float] - дальность света
0x1С [float] - red(0.0-1.0)
0x20 [float] - green(0.0-1.0)
0x24 [float] - blue(0.0-1.0)
0x28 [byte] - тип света(0 - светит во все стороны из центра, 1 - фары, светят строго по вектору, 3-4 - хз, не освещают динамику, скорее всего нужны для источников, которые кроме 2dfx никак не проявляют себя)
0x29 [byte] - тип "дымки" вокруг света(0 - нет "дымки", 1 и 2 - есть)
0x2A [bool] - генерация дополнительной тени авто игрока вблизи тени(0 - нет, 1 - да)
0x2B [byte] - не используется(пустышка)

Продолжаю разбор каждого элемента, пост будет обновляться.


Где то еще должен быть пункт который добавляет к источнику lens-flare
6
CPointLights:

0x9751B0 - количество PointLights
0x7E4FE0 - начало массива PointLights (максимум - 32 элемента)
каждый PointLight состоит из 44(0x2С) байт.

Структура совпадает с GTA3, я просто добавлю пояснения.

0x00 [float] - x coord
0x04 [float] - y coord
0x08 [float] - z coord
0x0С [float] - x direction
0x10 [float] - y direction
0x14 [float] - z direction
0x18 [float] - дальность света
0x1С [float] - red(0.0-1.0)
0x20 [float] - green(0.0-1.0)
0x24 [float] - blue(0.0-1.0)
0x28 [byte] - тип света(0 - светит во все стороны из центра, 1 - directional(фары), светят строго по вектору, 2 - не используется(вроде), становятся слабее, если источников этого типа много, 3-4 - хз, не освещают динамику, скорее всего нужны для источников, которые кроме 2dfx никак не проявляют себя)
0x29 [byte] - тип "дымки" вокруг света(0 - нет "дымки", 1 и 2 - есть)
0x2A [bool] - генерация дополнительной тени авто игрока вблизи источника света(0 - нет, 1 - да), работает только для типа света 0, при параметре LightShd в timecyc.dat больше 0
0x2B [byte] - не используется(пустышка)

Продолжаю разбор каждого элемента, пост будет обновляться.
7
Ой, я олень, сори - говорю же: давно не юзал это.

В общем, OutCoords - это нужные тебе координаты экрана(высчитывать разрешение экрана игрока дополнительно не надо), а вот width и height уже хз что такое. Меня спутала база idb, которую я сейчас юзаю.

Короче - как-то так:
Код: C++
  1.                 float MyCoords[3]; // наши 3d координаты
  2.                 float OutCoords[3]; // будущие X и Y координаты экрана, а также расстояние до 3d точки от камеры
  3.                 float width; // хз что
  4.                 float height; // хз что
  5.                 MyCoords[0] = 1245.0; // записываем свой X(просто пример)
  6.                 MyCoords[1] = 657.0; // записываем свой Y(просто пример)
  7.                 MyCoords[2] = 33.0; // записываем свой Z(просто пример)
  8.                 _CalcScreenCoors(&MyCoords[0], &OutCoords[0], &width, &height, 1);
  9.                 // теперь в переменных OutCoords[0] и OutCoords[1] уже записаны действительные координаты экрана игрока, юзаем их по надобности
Также эта функция может возвращать bool значение, которое true, если 3d точка примерно в зоне видимости экрана, и false - если нет, т.е. ты сразу можешь юзать функцию, как условие.

благодарю, разобрался.
8
Ой, я олень, сори - говорю же: давно не юзал это.

В общем, OutCoords - это нужные тебе координаты экрана(высчитывать разрешение экрана игрока дополнительно не надо), а вот width и height уже хз что такое. Меня спутала база idb, которую я сейчас юзаю.

Короче - как-то так:
Код: C++
  1.                 float MyCoords[3]; // наши 3d координаты
  2.                 float OutCoords[3]; // будущие X и Y координаты экрана, а также расстояние до 3d точки от камеры
  3.                 float width; // хз что
  4.                 float height; // хз что
  5.                 MyCoords[0] = 1245.0; // записываем свой X(просто пример)
  6.                 MyCoords[1] = 657.0; // записываем свой Y(просто пример)
  7.                 MyCoords[2] = 33.0; // записываем свой Z(просто пример)
  8.                 _CalcScreenCoors(&MyCoords[0], &OutCoords[0], &width, &height, 1);
  9.                 // теперь в переменных OutCoords[0] и OutCoords[1] уже записаны действительные координаты экрана игрока, юзаем их по надобности
Также эта функция может возвращать bool значение, которое true, если 3d точка примерно в зоне видимости экрана, и false - если нет, т.е. ты сразу можешь юзать функцию, как условие.
9
всё равно оно как-то не верно работает


даже если использовать стандартную функцию https://msdn.microsoft.com/en-us/library/windows/desktop/dd162498(v=vs.85).aspx
10
Я не внимательно прочел, и дал функцию для SA.
Для вайса вот:
Код: C++
  1. 5778B0           ; char __cdecl CSprite::CalcScreenCoors(const RwV3d *posn, RwV3d *out, float *w, float *h, bool checkMaxVisible)

пример использования?

Ну, объявляешь функцию как-то так:
Код: C++
  1. auto            _CalcScreenCoors        = (unsigned int (__cdecl*)(float*, float*, float*, float*, bool))0x5778B0;

затем юзаешь так:
Код: C++
  1.                 float MyCoords[3]; // наши 3d координаты
  2.                 float OutCoords[3]; // хз зачем, не особо ковырял функцию и не разобрался
  3.                 float width; // будущая x координата экрана
  4.                 float height; // будущая y координата экрана
  5.                 MyCoords[0] = 1245.0; // записываем свой X(просто пример)
  6.                 MyCoords[1] = 657.0; // записываем свой Y(просто пример)
  7.                 MyCoords[2] = 33.0; // записываем свой Z(просто пример)
  8.                 _CalcScreenCoors(&MyCoords[0], &OutCoords[0], &width, &height, 1);
  9.                 // теперь в переменных width и height уже записаны координаты экрана, если бы разрешение было бы 640x480
  10.                 width = width/640*(*(signed int *)(0xA0FD04));
  11.                 height = width/480*(*(signed int *)(0xA0FD08));
  12.                 // теперь в переменных width и height уже записаны действительные координаты экрана игрока, юзаем их по надобности

Следует отметить 2 вещи:
1) Я говнокодер, и можно сделать лучше
2) Этот код я не тестировал(я тестил эту функцию давно и на CLEO, а не в C++), но главное - передать смысл(надеюсь, мне это удалось)
Страницы: [1] 2 3 ... 10