DECORATE. Добавляем гильзы.

Предисловие

Гильза — это обычный Projectile (снаряд) который имеет гравитацию, и может отскакивать от пола. Мы будем создавать гильзу в 2 этапа:

  1. Создадим гильзу.
  2. Создадим снаряд который пролетает небольшое расстояние, а затем «умирает» спавня за собой гильзу.

2ой этап нужен чтобы гильза спавнилась на некотором расстоянии от игрока.

Ладно, приступим к созданию.

1. Создание гильзы.

Перед началом скачайте спрайты гильзы с MEGA.

Напишите следующий код к себе в DECORATE:

actor GunSleeve {
	Scale 0.1
	Speed 6
	radius 3
	height 3
	Projectile
	+DoomBounce
	-NoBlockMap
	-NoGravity
	states
	{
		Spawn:
			SLEE ABCDEFGH 3 
			loop
		Death:
			SLEE CCCCCCCCCCCC 35
			stop
	}
}
  • Scale — задает масштаб актора (гильзы). В данном случае, гильза уменьшена в 10 раз.
  • Speed — задает изначальную скорость гильзы, потом, разумеется, скорость гильзы упадет под действием гравитации -NoGravity.
  • +DoomBounce — флаг включающий отталкивание, скорость при таком отталкивании снижается.
  • NoGravity — задает включение гравитации

Наша гильза это актор (снаряд), который в стейте Spawn проигрывает анимацию кручения:

Актор имеет гравитацию (-NoGravity), поэтому он падает и отталкивается от земли (+DoomBounce). Когда он потеряет скорость, он перейдет на стейт «Death«, в котором застынет на картинке SLEEC0. И, через некоторое время, исчезнет.

SLEEC0

Теперь перейдем ко второму этапу.

Создание спавнера гильзы.

Добавьте следующий код, к себе в DECORATE:

actor GunSleeveSpawner {
	Speed 20
	Projectile
	radius 1
	height 1
	states
	{
		spawn:
			TNT1 A 1
			Goto Death
		Death:
			TNT1 A 0 A_CustomMissile("GunSleeve",-5,5,random(-80,-100),2,random(40,60))
			stop
	}
}

В нашем спавнере, снаряд живет 1 тик (TNT1 A 1), и затем умирает, оставляя за собой потомство. Регулировать расстояние спавнера от игрока, можно в атрибуте Speed.

Кстати, TNT1 это спрайт встроенный в zdoom, он обозначает пустой спрайт. Таким образом, наш спавнер становится — невидимым.

Остановимся на комманде A_CustomMissile, синтаксис у неё следующий:

A_CustomMissile("название_снаряда", высота_спавна_снаряда, смещение_x, yaw, флаг, pitch)
  • название_снаряда — задает название снаряда
  • высота_спавна_снаряда — задает относительную высоту спавна, если 0 то снаряд спавнится в том месте, где умер GunSleeveSpawner.
  • смещение_x — задает смещение по оси x, если «-5» то смещение влево, если «5» то вправо.
  • yaw— значение от 0 до 360, указывающий угол полета.
  • флаг — задает то, относительно чего рассчитываются углы.
  • pitch — задает вертикальный угол.

yaw/pitch/roll— в 3D пространстве — 3 угла. Когда мы смотрим влево/вправо, мы меняем yaw. В тот момент, когда мы смотрим вверх/вниз, мы меняем pitch. А когда наклоняем голову, мы меняем roll.

Для простоты, представьте что стрелка идущая вверх, это ты.

В нашем случае:

TNT1 A 0 A_CustomMissile("GunSleeve",-5,5,random(-80,-100),2,random(40,60))
  • название_снаряда — «GunSleeve», наша гильза
  • высота_спавна_снаряда — «-5», это значит что снаряд спавнится ниже, того места куда ты смотришь.
  • смещение_x — «5», снаряд спавнится на растоянии 5 пикселей вправо.
  • yaw— random(-80,-100), мы задаем случайный угол, от -80 до -100.
  • флаг — 2
  • pitch — random(40,60)

Спавнер создан, теперь осталось привязать его к нашему оружию. В качестве оружия, я буду использовать coolGun, из урока DECORATE. Делаем оружие.

Привязываем спавнер, к оружию.

Я переписал стейт Fire, теперь он выглядит так.

Fire:
	NULL A 0 A_FireCustomMissile("GunSleeveSpawner",0,0,0)
        CWEP B 1 A_FireCustomMissile("blueProj")
	CWEP C 1
	CWEP DE 5 A_ReFire
        Goto Ready

Теперь, вместе со снарядом, будет вылетать гильза.

Итоговый результат.

Пожалуйста отключи блокировщик рекламы, или внеси сайт в белый список!

Please disable your adblocker or whitelist this site!