Подготовка
Сначала, скачайте спрайты оружия 1, 2, 3. Затем, поместите эти спрайты в свой 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 спрайта оружия.
Но когда игрок отжимает кнопку выстрела, проигрываются все 4 спрайта.
Fire:
CWEP B 1 A_FireCustomMissile("blueProj")
CWEP C 1
CWEP DE 5
Goto Ready
Последняя комманда:
Goto Ready
- Goto — комманда безусловного перехода. В нашем случае, актор перепрыгивает на стейт Ready.
Перепрыгивание на стейт Ready является обязательным, если этого не сделать, то оружие зависнет.
Ну вот и все, мы разобрали оружия в DECORATE. Тема получилась объемной, если есть вопросы, задавайте их в комментариях.