Этот урок был сделан по реквесту ‘Мансур Новиков‘, свои реквесты можете оставить в комментарях на сайте, или в группе ВК.
Данный урок является продолжением урока DECORATE. Делаем оружие.
Введение
В Doom есть 2 типа оружия, то что стреляет снарядами (ракеты, плазма), и то что стреляет пулями (пистолет, дробовик). Оружия стреляющие пулями, мгновенно попадают в цель, поэтому я их буду назвать hitscan оружиями.
Создаем BulletPuff.
При использовании пулемета, на месте выстрела появляется дымок, в коде его называют BulletPuff.
Сперва, создадим BulletPuff для нашего оружия. Для этого, скопируйте следующий код к себе в DECORATE.
actor myPuff
{
+NoBlockmap
+NoTeleport
+NOGRAVITY
states
{
Spawn:
IFOG AB 2
Melee:
IFOG CDE 4
Stop
}
}
Пробежимся по флагам.
- +NoBlockmap — отключает коллизию актора
- +NoTeleport — запрещает актору телепортироваться.
- +NoGravity — выключает гравитацию
Двигаемся дальше.
Добавляем bulletPuff к Hitscan оружию.
Добавьте следующий код к себе в 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:
SHTG A -1
Stop
Ready:
SHTG A 1 A_WeaponReady
Loop
Deselect:
SHTG A 1 A_Lower
Loop
Select:
SHTG A 1 A_Raise
Loop
Fire:
SHT2 I 1 A_FireBullets(10, 10, 1, 45, "myPuff")
SHT2 C 2
SHT2 DE 5 A_ReFire
Goto Ready
}
}
Среди всего этого, нас интересует эта строка:
Fire:
SHT2 I 1 A_FireBullets(10, 10, 1, 45, "myPuff")
А именно команда A_FireBullets, разберем её синтаксис:
A_FireBullets(разброс_по_оси_x, разброс_по_оси_y, количество_потребляемых_патронов, минимальный_урон, "BulletPuff")
- разброс_по_оси_x, разброс_по_оси_y — задают отклонение пуль, по осям x,y
- количество_потребляемых_патронов — задает количество потребляемых патронов за выстрел.
- минимальный_урон — задает урон от попадания по врагу (умножается на случайное число от 1 до 3)
- BulletPuff — задает название актора, который будет появляться, в месте выстрела.
Подробнее на вики.
Таким образом, в этой строке:
SHT2 I 1 A_FireBullets(10, 10, 1, 45, "myPuff")
Мы установили:
- разброс пуль в 10 градусов по осям x,y,
- урон в 45 единиц здоровья
- спавн актора myPuff, на месте выстрела.
В итоге, должно получится следующее.