00071. Визуальные эффекты в GTA San Andreas
Визуальные эффекты в GTA San Andreas|Всем привет! Пришло время рассмотреть визуальные эффекты в GTA San Andreas. Сами эффекты реализуются при помощи систем частиц ( particles ). Но что бы не путать всё распределим эффекты на три группы: эффекты, короны и проекции.|wmysterio|wmysterio||||Эффекты.
Думаю вы замечали в игре их, например взять эффект нитро из выхлопной трубы? или взять даже той огонь, что присутствует в игре. Эффекты никак не могут влиять на игрока. Тоесть, если СЖ в эффекте огня, то он не будет получать урон. Рассмотрим опкоды:
064B: 0@ = create_particle "EXHALE" at 2490.4514 -1674.7673 13.3359 type 1
Здесь:
0@ - переменная ффекта
"EXHALE" - имя самого эффекта ( см.Эффекты частицы )
2490.4514 -1674.7673 13.3359 - координаты создания
1 - какой то тип. Я не знаю за что он отвечает, так что оставляем как есть
064C: make_particle 0@ visible
Делает эффект видимым. Начинает воспроизведения. А опкод
064E: stop_particle 0@
останавливает воспроизведения системы частиц.
064F: remove_references_to_particle 0@ // Выгружает из памяти эффект
0976: destroy_particle 139@ // mission version
0650: destroy_particle 0@ // Опкоды 0976 и 0650 уничтожают эффект
Также есть возможность прицепить эффект к сущностям:
0669: 0@ = attach_particle "EXHALE" to_actor $PLAYER_ACTOR with_offset 0.0 0.116 0.048 flag 1
066A: 0@ = attach_particle "EXHALE" to_actor $PLAYER_ACTOR with_offset 0.0 0.116 0.048 rotation 90.0 90.0 90.0 flag 1
066B: 0@ = attach_particle "EXHALE" to_car $CAR with_offset 0.0 0.116 0.048 flag 1
066C: 0@ = attach_particle "EXHALE" to_car $CAR with_offset 0.0 0.116 0.048 rotation 90.0 90.0 90.0 flag 1
066D: 0@ = attach_particle "EXHALE" to_object $OBJECT with_offset 0.0 0.116 0.048 flag 1
Здесь:
0@ - переменная для эффекта
"EXHALE" - имя самого эффекта
$PLAYER_ACTOR, $CAR, $OBJECT - переменные субъектов ( актёра, транспорта и объекта )
0.0 0.116 0.048 - координаты относительно субъекта
90.0 90.0 90.0 - ротация эффекта ( разворот на угол по осям X, Y и Z )
1 - флаг. Зачем он я не знаю, так что ставим 1.
Можно так же прицепить эффект определённой части тела актёра:
0883: attach_particle 0@ to_actor $PLAYER_ACTOR mode 5
Здесь:
5 - режим. Почему назвали именно режимом не знаю
Чем ниже число, тем ниже относит ельно актёра будет прицеплен к актёру. Чем больше - тем выше.

Вот Вам простейший пример использования:
{$cleo}
0000:
:A
thread 'a'
wait 5000
0669: 0@ = attach_particle "EXHALE" to_actor $PLAYER_ACTOR with_offset 0.05 0.12 0.0 flag 1
0883: attach_particle 0@ to_actor $PLAYER_ACTOR mode 5
064C: make_particle 0@ visible
0A93: end_custom_thread
Эффект дыма будет прицеплен ко рту СЖ. Вот скрин:

Плюсы: ничего не нужно загружать. Минусы: не все эффекты воспроизводятся постоянно. Много из них проигрываются только 1 раз. Возможно это связано как то с типом или флагом.
Короны.
Думаю, в большинства новичков это ассоциируется с какой-то драгоценностью, которую носят на голове короли. Однако в гта это иной термин. К коронам можно отнести всякие блики, геометрические фигуры, которые постоянно "смотрят" в камеру. Есть всего два опкода для создания корон ( хотя здесь лучше сказать "для рисования корон" ):
024F: create_corona_with_radius 2.0 type 9 lensflares 0 with_color 0 255 0 at 2490.4514 -1674.7673 13.3359
04D5: create_corona_at 2490.4514 -1674.7673 13.3359 radius 2.0 type 9 flare 0 RGB 0 255 0
Здесь:
2490.4514 -1674.7673 13.3359 - координаты появления короны
2.0 - радиус короны. Чем больше, тем громаднее она будет
9 - тип короны ( см. Короны→типы корон )
lensflares 0 = flare 0 - блик короны ( см. Короны→типы lensflares )
with_color 0 255 0 и RGB 0 255 0 - указывает цвет в цветовой схеме ( R - красный, G - зелёный, B - синий ). Диапазон значений от 0 до 255
Как видите в переменную короны не заносятся. Что бы их было видно нужно поставить опкод в цикл. Давайте напишем пример для корон:
{$cleo}
0000:
while 8AB0: not key_pressed 49 // 1
04D5: create_corona_at 2490.4514 -1674.7673 13.3359 radius 2.0 type 9 flare 0 RGB 0 255 0
wait 0
end
0A93: end_custom_thread
Пока игрок на нажмёт кнопку 1` на Гроув будет рисоваться корона. Скрин, как всегда:

Плюсы: опять ничего дополнительно загружать не нужно. Можно указывать цвет короне, что может делать гта необычной, например можно создать скрипт, когда в СЖ есть броня, то вокруг него будет корона. Чем то будет смахивать на щит мага из игры WoW. Минусы: корону нельзя создать. Её нужно рисовать в цикле. Особенность: корона будет "смотреть" в камеру под любым углом.
Проекции.
Это те же эффекты. Отличие в том, что они не имеют анимации и их можно отредактировать. К примеру можно привести тени. Рассмотрим опкод для рисования проекции:
016F: create_particle 6 rotation_factor 180.0 size 7.0 intensity 255 flags 255 0 0 at 2490.4514 -1674.7673 13.3359
Здесь:
6 - тип проекции ( см. Типы проекций )
180.0 - угол поворота проекции по оси Z
7.0 - размер. чем больше, тем громаднее будет проеция
255 - интенсивность. Если простыми словами, то прозрачность в диапазоне от 0 до 255. Если поставить 0, то проекцию не будет видно вообще
flags 255 0 0 - цветовая схема RGB. Выше указано что это
2490.4514 -1674.7673 13.3359 - точка рисования
Давайте сделаем огромное пятно крови на Гроув-стрит:
{$cleo}
0000:
while 8AB0: not key_pressed 49 // 1
016F: create_particle 6 rotation_factor 180.0 size 7.0 intensity 255 flags 255 0 0 at 2490.4514 -1674.7673 13.3359
wait 0
end
0A93: end_custom_thread
А вот и лужа крови:

Плюсы и минусы такие же как и в корон. Если нечем заняться, то вот вам задание: Сделать проекцию зелёного цвета ( как бы имитируя лужу кислоты ) и когда СЖ ( или какой то другой пед ) попадает в неё у него отнимается какое-то количество жизни.|4137|1|0|71905228
png
600360
400240``\|25623464
png600
360400
240``|96756408png
362`286`\||vizualnye_ehffekty_v_gta_san_andreas|1499706891