DECORATE. Делаем оружие.

Подготовка

Сначала, скачайте спрайты оружия с MEGA. Затем поместите эти спрайты в свой wad. И задайте спрайтам правильное смещение. Для спрайтов оружия это делается так:

А именно, выбирается смещение(Offsets) в режиме HUD. В этом режиме удобней перетаскивать изображение так как виден HUD.

У CWEPF0 чуть поднимите оружие.

Теперь приступим к коду.

Создание оружия.

Скопируйте данный код к себе в DECORATE.

ACTOR coolGun : Weapon
  {
     Weapon.SelectionOrder 350
     Inventory.PickupSound "misc/usgpickup"
     Weapon.AmmoGive 200
     Weapon.AmmoUse 1
     Weapon.SlotNumber 3
     Weapon.AmmoType "Cell"
     +Floatbob
     AttackSound "weapons/ubersgf" 
     States
     {
     Spawn: 
        CWEP F -1
        Stop
     Ready: 
        CWEP A 1 A_WeaponReady
        Loop 
     Deselect: 
        CWEP A 1 A_Lower
        Loop 
     Select: 
        CWEP A 1 A_Raise
        Loop 
     Fire: 
        CWEP B 1 A_FireCustomMissile("blueProj")
	CWEP C 1
	CWEP DE 5 A_ReFire
        Goto Ready
     }
  }

Разберем по порядку:

ACTOR coolGun : Weapon

Все оружия дума наследуются от Weapon, таково правило декорейта.

Weapon.SelectionOrder 350

Weapon.SelectionOrder — задает номер, который учитывается при выборе оружия. Когда у тебя кончаются патроны у оружия, игра автоматически меняет твое оружие на другое. Так вот, игра меняет оружие основываясь на числе Weapon.SelectionOrder.

Inventory.PickupSound "misc/usgpickup"

Inventory.PickupSound — задает звук поднятия оружия.

Weapon.AmmoGive 200

Weapon.AmmoGive — задает изначальное количество патронов, которое ты получаешь когда поднимаешь оружие.

Weapon.AmmoUse 1

Weapon.AmmoUse — указывает, сколько патронов тратит оружие за выстрел.

Weapon.SlotNumber 3

Weapon.SlotNumber — указывает, какую кнопку надо нажать чтобы выбрать оружие.

Weapon.AmmoType "Cell"

Weapon.AmmoType — указывает тип патронов, которое использует данное оружие.

+Floatbob

+Floatbob — флаг, заставляет актор(оружие) летать в воздухе перемещаясь вверх/вниз. Спрайт оружия(CWEPF0) должен быть слега приподнят(я имею ввиду смещение), чтобы было достаточно места на перемещение.

AttackSound "weapons/ubersgf" 

AttackSound — указывает звук выстрела

Теперь разберем стейты. Со стейтом Spawn вы уже знакомы, поэтому перейдем к стейту Ready.

Стейт Ready.

Ready: 
        CWEP A 1 A_WeaponReady
        Loop 

Разберем функцию A_WeaponReady.

  • A_WeaponReady — функция которая проверяет нажатие кнопки стрельбы и переключения между оружиями. Эта функция является обязательной и должна вызываться в стейте Ready.

Стейт Deselect.

Deselect: 
        CWEP A 1 A_Lower
        Loop 

Стейт Deselect вызывается в момент, когда ты переключаешь это оружие на другое. Рассмотрим новые функции.

  • A_Lower — это функция, которая перемещает спрайт оружия под экран.

Стейт Select.

Select: 
        CWEP A 1 A_Raise
        Loop 

Стейт Select вызывается в момент переключения на наше оружие. Рассмотрим новые функции.

  • A_Raise — функция, которая поднимает оружие из под экрана(перемещает спрайт оружие вверх).

Стейт Fire.

Fire: 
        CWEP B 1 A_FireCustomMissile("blueProj")
	CWEP C 1
	CWEP DE 5 A_ReFire
        Goto Ready

Стейт Fire вызывается когда игрок стреляет. Рассмотрим новые функции.

  • A_FireCustomMissile (название_актора_снаряда) — это функция, которая выстреливает снарядом (название_актора_снаряда) из оружия.

Функция A_FireCustomMissile очень похожа на A_CusstomMissile. Запомните, A_FireCustomMissile используется для выстрела из оружия, A_CusstomMissile используется для выстрела монстра.

Еще, в качестве аргумента A_FireCustomMissile я выбрал «blueProj«, это снаряд сделанный в прошлой статье. По желанию, можете заменить «blueProj» на «Rocket«.

Далее идет функция A_ReFire. Она возвращает к началу стейта Fire, если нажата кнопка выстрела. В нашем случае, если игрок нажимает кнопку выстрела, то происходит следующее.

Fire: 
    CWEP B 1 A_FireCustomMissile("blueProj")
    CWEP C 1
    loop

Проигрываются, по кругу, 2 спрайта оружия.

1ый спрайт
2ой спрайт

Но когда игрок отжимает кнопку выстрела, проигрываются все 4 спрайта.

Fire: 
        CWEP B 1 A_FireCustomMissile("blueProj")
	CWEP C 1
	CWEP DE 5
        Goto Ready
3ий спрайт
4ый спрайт

Последняя комманда:

Goto Ready
  • Goto — комманда безусловного перехода. В нашем случае, актор перепрыгивает на стейт Ready.

Перепрыгивание на стейт Ready является обязательным, если этого не сделать, то оружие зависнет.

Ну вот и все, мы разобрали оружия в DECORATE. Тема получилась объемной, если есть вопросы, задавайте их в комментариях.

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