Автор Тема: Лужи на улицах  (Прочитано 4682 раз)

Оффлайн SpitFire

  • Прохожий
  • *
  • Сообщений: 55
  • Репутация: +0/-0
    • Просмотр профиля
Лужи на улицах
« : Январь 09, 2016, 03:56:56 pm »
У меня появилась идея сделать лужи для gta3/vc, на подобии тех, что в GTA 5. Для этого можно взять эффект растекающейся крови и просто изменить текстуру, затем через CLEO вызвать этот партикл. Проблема в том, что если изменить стандартную текстуру исчезнет кровь. Можно ли добавить аналог этого эффекта, с такими-же свойствами?

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Лужи на улицах
« Ответ #1 : Январь 09, 2016, 04:09:16 pm »
 По опыту знаю, что если, прямо "на ходу", в памяти менять название модели/текстуры для загрузки чего-либо, а потом(после загрузки) возвращать обратно - работать будет и стандартное, и новое. Иначе говоря: если перед загрузкой модели копа сменить в памяти id его модели, и, когда новый коп заспавнится, вернуть id на место - спавниться начнут снова старые копы, но новый никуда не денется и продолжит нормально функционировать вместе со старыми. Та же фишка прокатывает с подзагрузкой моделей, из чего я могу сделать вывод, что прокатит и с партиклом.
 ThirteenAG в своем худе в стиле 4ки постоянно менял в памяти имя текстуры обводки радара, так что он сможет подсказать, как "переименовать" текстуру крови в памяти игры на текстуру лужи, что также будет лежать в particle.txd. А, исходя из вышесказанного, если после отрисовки лужи вернуть название в памяти на место - и кровь и лужа будут одновременно нормально отображаться.

Оффлайн SpitFire

  • Прохожий
  • *
  • Сообщений: 55
  • Репутация: +0/-0
    • Просмотр профиля
Re: Лужи на улицах
« Ответ #2 : Январь 09, 2016, 04:25:17 pm »
Мне кажется, не вариант т.к если во время спавна лужи убить кого-то, то то кровь будет заменена на лужу. И так же и с дождём, если во время спавна лужи убить кого-то, то лужа будет заменена на кровь.

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Лужи на улицах
« Ответ #3 : Январь 09, 2016, 05:51:18 pm »
Здесь имеется ввиду замена адреса текстуры по порядку следования кода, не в своем параллельном потоке, а там где это происходит в игре, т.е. изменил адрес, нарисовал и вернул обратно, параллельно в это время ничего не будет выполняться и никак не повлияет на остальное. Вот как раз вчера сделал тоже, о чем говорилось выше в примере, здесь не дополнительная возможность, а сама игра создает разных копов в том месте, где создавала одинаковых, при этом в остальных местах все как и было.



Но лучше все-таки найти функцию, которая делает лужи, и вызывать ее с нужной текстурой и при нужных условиях уже независимо от тектуры крови.

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Лужи на улицах
« Ответ #4 : Январь 10, 2016, 08:42:10 am »
если во время спавна лужи убить кого-то, то то кровь будет заменена на лужу
Здесь имеется ввиду замена адреса текстуры по порядку следования кода, не в своем параллельном потоке, а там где это происходит в игре, т.е. изменил адрес, нарисовал и вернул обратно, параллельно в это время ничего не будет выполняться и никак не повлияет на остальное. Вот как раз вчера сделал тоже, о чем говорилось выше в примере, здесь не дополнительная возможность, а сама игра создает разных копов в том месте, где создавала одинаковых, при этом в остальных местах все как и было.
Ну, я делал параллельно: просто делал скрипт, в котором кажое мгновение менялся id модели копа по адресу 4ED762, и копы то и дело спавнились в разных местах с разными скинами.
Однако, если, допустим, тебе нужно было заспавнить копа с новой моделью вручную(как Tommi4kaVar4etti хочет спавнить лужи), то главное - чтобы между изменением id и спавном не было задержки(тогда за это время ничего другого спавниться не будет, в том числе - луж вместо крови). И сразу после спавна нужно возвращать id(в случае с лужами - название текстуры) на место.
Всё, что я хотел сказать: в вайсе, что отрисовано - то отрисовано, и изменения на уже отрисованное не влияют, так что проще копать тут.

Но лучше все-таки найти функцию, которая делает лужи, и вызывать ее с нужной текстурой и при нужных условиях уже независимо от тектуры крови.
Это всегда лучше, но кто и как это будет делать?

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Лужи на улицах
« Ответ #5 : Январь 10, 2016, 03:14:23 pm »
Например так, есть функция 0x56EC50, которая рисует на земле, можно нарисовать ей любую текстуру



Пример и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); // в цикле

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Лужи на улицах
« Ответ #6 : Январь 12, 2016, 09:25:45 am »
Шикарно  :D
Пора бы мне уже всерьез взяться за C++, а то на CLEO далеко не уеду  ;D

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Лужи на улицах
« Ответ #7 : Январь 12, 2016, 11:36:37 am »
В данном случае можно и на Cleo сделать, использование этой функции можно посмотреть в моде GTA Vice City Landed Pickups от ThirteenAG

Оффлайн Sektor

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 521
  • Репутация: +34/-0
    • Просмотр профиля
Re: Лужи на улицах
« Ответ #8 : Январь 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);
« Последнее редактирование: Январь 12, 2016, 07:23:50 pm от Sektor »

Оффлайн ilufir

  • Прохожий
  • *
  • Сообщений: 73
  • Репутация: +2/-0
  • Я пытался
    • Просмотр профиля
Re: Лужи на улицах
« Ответ #9 : Сентябрь 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.
Это очень интересно
(Правда я так и не разобрался что происходит в этой строке кроме цвета и размера, но это ладно)

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 598
  • Репутация: +92/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Лужи на улицах
« Ответ #10 : Сентябрь 20, 2016, 03:23:47 pm »
Ты прав, но я бы сказал наоборот, можно и без Cleo плагина использовать функции в своем независимом ASI моде, кому как.

Оффлайн DK

  • Новичок
  • **
  • Сообщений: 234
  • Репутация: +328/-0
    • dk22pac
    • Просмотр профиля
Re: Лужи на улицах
« Ответ #11 : Сентябрь 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 будешь управлять этими "лужами". Создавать, удалять, менять размеры.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk

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