GTA Builder Форум

GTA Vice City => Общие вопросы => Тема начата: SpitFire от Январь 09, 2016, 03:56:56 pm

Название: Лужи на улицах
Отправлено: SpitFire от Январь 09, 2016, 03:56:56 pm
У меня появилась идея сделать лужи для gta3/vc, на подобии тех, что в GTA 5. Для этого можно взять эффект растекающейся крови и просто изменить текстуру, затем через CLEO вызвать этот партикл. Проблема в том, что если изменить стандартную текстуру исчезнет кровь. Можно ли добавить аналог этого эффекта, с такими-же свойствами?
Название: Re: Лужи на улицах
Отправлено: Shagg_E от Январь 09, 2016, 04:09:16 pm
 По опыту знаю, что если, прямо "на ходу", в памяти менять название модели/текстуры для загрузки чего-либо, а потом(после загрузки) возвращать обратно - работать будет и стандартное, и новое. Иначе говоря: если перед загрузкой модели копа сменить в памяти id его модели, и, когда новый коп заспавнится, вернуть id на место - спавниться начнут снова старые копы, но новый никуда не денется и продолжит нормально функционировать вместе со старыми. Та же фишка прокатывает с подзагрузкой моделей, из чего я могу сделать вывод, что прокатит и с партиклом.
 ThirteenAG в своем худе в стиле 4ки постоянно менял в памяти имя текстуры обводки радара, так что он сможет подсказать, как "переименовать" текстуру крови в памяти игры на текстуру лужи, что также будет лежать в particle.txd. А, исходя из вышесказанного, если после отрисовки лужи вернуть название в памяти на место - и кровь и лужа будут одновременно нормально отображаться.
Название: Re: Лужи на улицах
Отправлено: SpitFire от Январь 09, 2016, 04:25:17 pm
Мне кажется, не вариант т.к если во время спавна лужи убить кого-то, то то кровь будет заменена на лужу. И так же и с дождём, если во время спавна лужи убить кого-то, то лужа будет заменена на кровь.
Название: Re: Лужи на улицах
Отправлено: xanser от Январь 09, 2016, 05:51:18 pm
Здесь имеется ввиду замена адреса текстуры по порядку следования кода, не в своем параллельном потоке, а там где это происходит в игре, т.е. изменил адрес, нарисовал и вернул обратно, параллельно в это время ничего не будет выполняться и никак не повлияет на остальное. Вот как раз вчера сделал тоже, о чем говорилось выше в примере, здесь не дополнительная возможность, а сама игра создает разных копов в том месте, где создавала одинаковых, при этом в остальных местах все как и было.

(http://s6.postimg.org/z6pcepg75/scr_20160109144006984.jpg)

Но лучше все-таки найти функцию, которая делает лужи, и вызывать ее с нужной текстурой и при нужных условиях уже независимо от тектуры крови.
Название: Re: Лужи на улицах
Отправлено: Shagg_E от Январь 10, 2016, 08:42:10 am
если во время спавна лужи убить кого-то, то то кровь будет заменена на лужу
Здесь имеется ввиду замена адреса текстуры по порядку следования кода, не в своем параллельном потоке, а там где это происходит в игре, т.е. изменил адрес, нарисовал и вернул обратно, параллельно в это время ничего не будет выполняться и никак не повлияет на остальное. Вот как раз вчера сделал тоже, о чем говорилось выше в примере, здесь не дополнительная возможность, а сама игра создает разных копов в том месте, где создавала одинаковых, при этом в остальных местах все как и было.
Ну, я делал параллельно: просто делал скрипт, в котором кажое мгновение менялся id модели копа по адресу 4ED762, и копы то и дело спавнились в разных местах с разными скинами.
Однако, если, допустим, тебе нужно было заспавнить копа с новой моделью вручную(как Tommi4kaVar4etti хочет спавнить лужи), то главное - чтобы между изменением id и спавном не было задержки(тогда за это время ничего другого спавниться не будет, в том числе - луж вместо крови). И сразу после спавна нужно возвращать id(в случае с лужами - название текстуры) на место.
Всё, что я хотел сказать: в вайсе, что отрисовано - то отрисовано, и изменения на уже отрисованное не влияют, так что проще копать тут.

Но лучше все-таки найти функцию, которая делает лужи, и вызывать ее с нужной текстурой и при нужных условиях уже независимо от тектуры крови.
Это всегда лучше, но кто и как это будет делать?
Название: Re: Лужи на улицах
Отправлено: xanser от Январь 10, 2016, 03:14:23 pm
Например так, есть функция 0x56EC50, которая рисует на земле, можно нарисовать ей любую текстуру

(http://s6.postimg.org/o91iclrgh/scr_20160110105055171.jpg)

Пример иcпользования (во вложении адреса других текстур):

Код: C++
  1. auto VC_CreateShadow = (void (__cdecl *)(char, DWORD* Texture, RwV3d* pos, float lenght, float, float, float width, BYTE alpha, BYTE R, BYTE G, BYTE B, float, int ms))0x56EC50;
  2.  
  3. RwV3d pos;
  4. pos.x = -673.8f;
  5. pos.y = 576.8f;
  6. pos.z = 11.0f;
  7. auto newspaper02_64 = (DWORD *) 0x77E8C8;
  8. VC_CreateShadow(1,newspaper02_64,&pos,2,0,0,2,255,255,255,255,4.0f,10); // в цикле
  9.  
  10. pos.y = 566.8f;
  11. auto bloodpool_64 = (DWORD **) 0xA0DAC8;
  12. VC_CreateShadow(1,*bloodpool_64,&pos,2,0,0,2,255,255,255,255,4.0f,10); // в цикле
Название: Re: Лужи на улицах
Отправлено: Shagg_E от Январь 12, 2016, 09:25:45 am
Шикарно  :D
Пора бы мне уже всерьез взяться за C++, а то на CLEO далеко не уеду  ;D
Название: Re: Лужи на улицах
Отправлено: xanser от Январь 12, 2016, 11:36:37 am
В данном случае можно и на Cleo сделать, использование этой функции можно посмотреть в моде GTA Vice City Landed Pickups от ThirteenAG
Название: Re: Лужи на улицах
Отправлено: Sektor от Январь 12, 2016, 07:06:42 pm
Надо по быстрей выздоравливать и еще находить время для творчества) а то меня уже дразнят подобные темы на моддинг  :)
Там кстати можно по искать оригинальное название для этого статичного метода:

Код: C++
  1. auto VC_CreateShadow = (void (__cdecl *)(char, DWORD* Texture, RwV3d* pos, float lenght, float, float, float width, BYTE alpha, BYTE R, BYTE G, BYTE B, float, int ms))0x56EC50;

А именно вот что это такое:

Код: C++
  1. CShadows::AddPermanentShadow(unsigned char, RwTexture *, CVector *, float, float, float, float, short, unsigned char, unsigned char, unsigned char, float, unsigned int, float)

Иначе говоря, есть статичный класс CShadows, который соответственно содержит статичные методы. Это сделано для более удобного коддинга.

Было бы как то так:
Код: C++
  1. CShadows::AddPermanentShadow(1,newspaper02_64,&pos,2,0,0,2,255,255,255,255,4.0f,10);
Название: Re: Лужи на улицах
Отправлено: ilufir от Сентябрь 20, 2016, 01:46:44 pm
Ого. Покопался тут в скрипте LandedPickups и нашел эту строку:
05E1: call 0x56E6C0 num_params 16 pop 16  unknown 2 unknown 0 unknown 1.0 unknown 0 unknown 4.0 blue 0 green 0 red 0 alpha 255 size -0.45 0.0 0.0 0.45 RwTexture*ptr 13@ pos*RwV3D 14@ blending_type 1
А значит, можно и без использования ASI плагина передавать те же функции через Cleo.
Это очень интересно
(Правда я так и не разобрался что происходит в этой строке кроме цвета и размера, но это ладно)
Название: Re: Лужи на улицах
Отправлено: xanser от Сентябрь 20, 2016, 03:23:47 pm
Ты прав, но я бы сказал наоборот, можно и без Cleo плагина использовать функции в своем независимом ASI моде, кому как.
Название: Re: Лужи на улицах
Отправлено: DK от Сентябрь 20, 2016, 07:25:46 pm
05E1: call 0x56E6C0 num_params 16 pop 16  unknown 2 unknown 0 unknown 1.0 unknown 0 unknown 4.0 blue 0 green 0 red 0 alpha 255 size -0.45 0.0 0.0 0.45 RwTexture*ptr 13@ pos*RwV3D 14@ blending_type 1
А значит, можно и без использования ASI плагина передавать те же функции через Cleo.
Один лишь вызов ничего не меняет. В CLEO можно вызвать практически любую функцию.
Ты мне лучше расскажи, как в CLEO будешь управлять этими "лужами". Создавать, удалять, менять размеры.