Предисловие
Мина — это всего-лишь декорация, которая при соприкосновении с игроком взрывается, нанося урон. Создание мины важная тема, в ней мы впервые столкнемся с наследованием.
Написание кода
Для начала, скачайте спрайты мины с MEGA.
Напишите следующий код в DECORATE:
actor mine : SwitchingDecoration
{
height 10
radius 25
+Solid
Activation THINGSPEC_ACTIVATE
+BUMPSPECIAL
states
{
Spawn:
MINE AB 5
Loop
Active:
MISL B 0 A_PlaySound("weapons/rocklx")
MISL B 6 A_Explode
MISL CD 6
stop
}
}
Сразу бросается в глаза первая строка:
actor mine : SwitchingDecoration
В данной строке актор mine, наследуется от актора SwitchingDecoration.
Что такое наследование.
Наследование — это полное копирование кода одного актора, в другой. Имеет следующий синтаксис.
actor куда_копировать : откуда_копировать
Где:
- Куда_копировать — название актора который получает весь код (свойства, стейты, флаги и т.д.).
- Откуда_копировать — название актора с которого берется копия кода, и помещается в куда_копировать.
Зачем же это нужно? А затем что, порой, бывают случаи когда хочется изменить 1-2 свойства объекта не меняя всего остального кода.
Например, я хочу создать нового пинки, который бегает быстрее и имеет больше здоровья. Вместо того чтобы копипастить код с вики, и менять его под себя.
ACTOR MyDemon
{
Health 500
PainChance 180
Speed 100
Radius 30
Height 56
Mass 400
Monster
+FLOORCLIP
SeeSound "demon/sight"
AttackSound "demon/melee"
PainSound "demon/pain"
DeathSound "demon/death"
ActiveSound "demon/active"
Obituary "$OB_DEMONHIT" // "%o was bit by a demon."
States
{
Spawn:
SARG AB 10 A_Look
Loop
See:
................и так далее...................
Я унаследую код актора Demon(Пинки). И изменю свойства Health и Speed, чтобы сделать пинки быстрее, и увеличить ему здоровье.
ACTOR MyDemon : Demon
{
Health 500
Speed 100
}
Вот таким образом работает наследование. Наследование есть всех языках программирования, так что, вы не раз с ним столкнетесь в будущем.
Хорошо, так что насчет актора SwitchingDecoration?
SwitchingDecoration — это специальный актор, он встроен в ZDoom/GZDoom. Если ты хочешь чтобы актор мог стать активным, т.е. поменять свой стейт на Active, в зависимости от кода в ACS(Thing_Activate), или при соприкосновении с актором, или даже при нажатии кнопки USE(это название кнопки, которую ты нажимаешь чтобы открыть дверь) то тебе нужно наследоваться от этого актора(SwitchingDecoration), просто так устроен DECORATE.
С этой строкой разобрались:
actor mine : SwitchingDecoration
Продолжаем разбираться в коде.
Теперь разберем эту строку:
Activation THINGSPEC_ACTIVATE
- Activation задает, условия активации.
- THINGSPEC_ACTIVATE — значит, что во время активации, актор перепрыгнет на стейт Active.
Подробнее об Activation на вики.
+BUMPSPECIAL
Этот флаг(+BUMPSPECIAL) обозначает, что активация(переход на стейт Active) произойдет когда игрок прикоснется к актору.
Теперь разберем что происходит в стейте Active.
Стейт Active.
Код у него следующий.
Active:
MISL B 0 A_PlaySound("weapons/rocklx")
MISL B 6 A_Explode
MISL CD 6
stop
В этой строке:
MISL B 0 A_PlaySound("weapons/rocklx")
Задержка в 0 тиков, обозначает что действие будет выполнено мгновенно т.е. эти две комманды будут выполненны одновременно.
MISL B 0 A_PlaySound("weapons/rocklx")
MISL B 6 A_Explode
Я бы сделал так(ошибочный вариант):
MISL B 6 A_PlaySound("weapons/rocklx") A_Explode
Но, к сожалению, декорейт не позволяет выполнять две функции в одной строке, так что вариант выше приведет к ошибке.
Далее, разберем функции:
- A_PlaySound() — проигрывает звук указанный в скобках.
- A_Explode — создает урон по области(splash damage) такой же, как у ракеты после взрыва.
Со стейтом Active разобрались. Вообще, стейт Active является немного измененной версией стейта Death у ракеты, т.е взрыва ракеты.
Теперь, если вы заспавните мину(«summon mine» в консоли) то при соприкосновении с ней вы получите огромный урон.