Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Shagg_E

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

2
Где то еще должен быть пункт который добавляет к источнику lens-flare
Это уже в 2dfx. PointLight - это чисто сам свет от источника. Т.е. то, что освещает педов, авто, катсценовые и динамические объекты.
Так же у источников есть тот самый 2dfx + "тень"(отрисовка текстуры света на горизонтальной поверхности). Это уже в другом массиве(ах).

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

3
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] - не используется(пустышка)

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

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

В общем, 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 - если нет, т.е. ты сразу можешь юзать функцию, как условие.

5
Я не внимательно прочел, и дал функцию для 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++), но главное - передать смысл(надеюсь, мне это удалось)

6
Общие вопросы / Re: Помощь с CLEO
« : Июнь 03, 2018, 02:10:03 am »
Попробуй при создании актера заменить 4 pedtype на другой(от полицейского или члена банды). Либо сделать "цель" не объектом, а актером.
Если второе сработает - сделай актера-цель невидимым, затем помести этого невидимого актера в невидимый(модель #NULL) или маленький(модель кастета) объект и отключи у этого объекта коллизию, чтобы этот летающий невидимый актер никому не мешал.

7
Общие вопросы / Re: Помощь с CLEO
« : Июнь 02, 2018, 11:45:22 pm »
Я планировал сделать свой режим стрельбы(в т.ч. - с выбором 3d точки цели для актера), но это будет еще очень не скоро... Пока же ничем с этим помочь не могу  :(

8
Общие вопросы / Re: Помощь с CLEO
« : Июнь 02, 2018, 10:49:11 pm »
к большому сожалению, что только не делал происходит вылет.

Я уже приводил пример работы с выводом переменных на экран. Для float вроде нужно писать %.1f
как заставить актера стрелять в определенную точку?

Хз, пока сам не разобрался... Думаю, где-то в исходниках VCMP лежит ответ...

9
Высчитать координаты экрана по мировым 3d координатам можно этой функцией:
70CE30                             ; CSprite::CalcScreenCoors(RwV3d const&, RwV3d*, float *, float *, bool, bool)

Первый RwV3d - указатель на твои мировые 3d координаты. Второй RwV3d - хз что.
В следующие два указателя float будут записаны координаты из расчета разрешения 640x480, так что их нужно еще будет перемножать на ширину экрана игрока/640(для ширины) и на высоту экрана игрока/480(для высоты, ессно).
Последние оба bool ставь на единицы.
В СА не тестил, в ВС аналогичная функция работает.

10
0x02 можно назвать m_bTargetExists

а 0x2D  _pad2D[3] - это просто пустышка, получается?


UPD: черт.. Оказывается, в марте для вайса уже всё разобрали. Я с лета не обновлял sdk ;D

UPD2: Вау, теперь есть удобный установщик sdk!

11
Shagg_E, структура, скорее всего, идентична той, что в GTA3.
https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_III/game_III/CFire.h
Да, скорее всего. Я доковырял - вроде совпадает

12
Горящий огонь(пожар в смысле):

0x97F8A0 - количество горящих огней
0x97F8A4 - начало массива огней (максимум - 40 элементов)
каждый огонь состоит из 48 байт. координаты по оффсетам

0x00 [byte] - тип1 огня(0 - потух, 1 - горит)
0x01 [byte] - тип2 огня(0 - самопотухаемый, 1 - вечный)
0x02 [byte] - тип3 огня(0 - обычный, 1 - пед, авто)
0x03 [byte] - тип4 огня (0 - беззвучный, 1 - со звуком)
0x04 [float] - x coord
0x08 [float] - y coord
0x0C [float] - z coord
0x10 [pointer] - указатель на горящий entity
0x14 [pointer] - указатель на "виновника"(если он есть) огня(только для горящих entity)
0x18 [integer] - время затухания(в мировом таймере)
0x1C [integer] - время следующего чего-то?
0x20 [integer] - время следующего отображения партикла огня
0x24 [float] - размер огня
0x28 [float] - всегда 1.0
0x2C [integer] - неизвестно, всегда 0


когда машина горит "своим огнем", т.е. "готовится ко взрыву" - этот огонь не "настоящий" и в пуле отсутствует

13
Общие вопросы / Re: Помощь с CLEO
« : Май 13, 2018, 01:57:40 pm »
Третий вариант неправильный, кстати. Там некорректное использование глобальной переменной.
А первые два - вроде норм

14
Общие вопросы / Re: Помощь с CLEO
« : Май 12, 2018, 01:25:17 pm »
У меня вылетает, если пробовать в сохранении, в котором пройдены все основные миссии. Если пробовать запустить где-нибудь на середине сюжета(когда пройдена где-то половина миссий), либо пробовать запустить после начала новой игры - всё работает.
Быть может, в миссии есть какой-то триггер, который приводит к крашу, если запустить его после прохождения какой-нибудь миссии ближе к концу сюжета.

Попробуй глянуть другие загрузчики миссий(1, 2 или 3, например), может там эту проблему решили...

15
Общие вопросы / Re: Помощь с CLEO
« : Май 09, 2018, 11:54:02 am »
Здравствуйте всем. Скажите пожалуйста, можно ли  через cleo двигать объекты?
Можно, но лишь те, что прописаны в data/object.dat

Страницы: [1] 2 3 ... 34