Подготовка
Сначала, скачайте картинку монстра MEGA
И закиньте эту картинку в свой wad, не забывайте про маркеры S_START и S_END, а также, про смещение.
Пишем код
Скопируйте данный код к себе в DECORATE.
actor randMonster 10004
{
SpawnID 1000
Health 200
Radius 20
Height 56
Mass 100
Speed 20
Monster
+FLOORCLIP
States
{
Spawn:
RANF A 10 A_Look
loop
See:
RANF A 4 A_Chase
loop
Missile:
RANF A 5 A_FaceTarget
RANF AAAAAAAAA 3 A_CustomMissile("Rocket")
goto See
Death:
RANF A 1
stop
}
}
А теперь разберем этот код. Сперва, обратите внимание на приписку Monster.
Monster
Эта приписка говорит декорейту о том, что данный актор является монстром.
Так чем же монстр отличается от декорации, ну…:
- В отличии от декорации, монстр может умереть(выражается это наличием стейта Death, в блоке states)
- После своей смерти, монстр теряет коллизию(сквозь него можно пройти).
- Он имеет атрибут Health(здоровье)
- Может стрелять, в игрока, и так далее.
Ладно, разберем остальные комманды:
- SpawnID — указывает id, который используется в ACS, чтобы заспавнить монстра.
- Health — здоровье монстра.
- Mass — масса монстра (чем выше масса, тем сложнее оттолкнуть монстра).
- Speed — скорость с которой монстр двигается.
- +FLOORCLIP — активирует флаг, позволяющий монстру подниматься по ступенькам.
Разбираем стейты
Теперь, поговорим о блоке states. В этом блоке 4 стейта:
- Spawn — это основной стейт, он всегда вызывается самым первым.
- See — вызывается когда монстр увидел игрока.
- Missile — вызывается когда монстр стреляет по игроку.
- Death — вызывается когда монстр умирает.
Стейт Spawn.
Для начала, разберем стейт Spawn:
Spawn:
RANF A 10 A_Look
loop
Здесь может вызвать вопросы эта комманда:
RANF A 10 A_Look
Я об этом не говорил ранее, но в декорейте, также есть функции(они как комманды/функции в ACS). Функций много и они все разные, но ваша задача как программиста, найти среди всего этого хлама, самое нужное.
Посмотреть полный список функций можно на вики
У этой строки:
RANF A 10 A_Look
Такой синтаксис:
первые_4_буквы_спрайта название_кадра задержка_в_тиках название_функции
Функция A_Look ищет игрока, и если находит, то монстр(актор) переходит к стейту See. Если не находит, то ничего не происходит. В следующей строке написано loop. Эта комманда зацикливает действие стейта Spawn.
Spawn:
RANF A 10 A_Look
loop
Таким образом монстр(актор) бесконечно проверяет, находится ли поблизости игрок или нет.
Стейт See.
Разберем стейт See:
See:
RANF A 4 A_Chase
loop
A_Chase — заставляет монстра двигаться в направлении цели(игрока). И после задержки(4 тика, как в примере), актор меняет свой стейт на Missile.
Стейт Missile
Разберем стейт Missile:
Missile:
RANF A 5 A_FaceTarget
RANF AAAAAAAAA 3 A_CustomMissile("Rocket")
goto See
А теперь по порядку:
- A_FaceTarget — заставляет монстра смотреть на цель(игрока).
- A_CustomMissile(«Rocket») — делает так, чтобы монстр стрельнул ракетой.
- goto See — актор переходит к стейту See.
По поводу этой комманды:
RANF AAAAAAAAA 3 A_CustomMissile("Rocket")
Здесь в качестве кадра, выбрано это «AAAAAAAAA«. Данный прием позволяет сделать 1 действие множество раз.
В нашем случае, выпустить ракету 9 раз, с интервалом в 3 тика.
Вот это:
RANF AAAAAAAAA 3 A_CustomMissile("Rocket")
В декорейте, ничем не отличается от этого:
RANF A 3 A_CustomMissile("Rocket")
RANF A 3 A_CustomMissile("Rocket")
RANF A 3 A_CustomMissile("Rocket")
RANF A 3 A_CustomMissile("Rocket")
RANF A 3 A_CustomMissile("Rocket")
RANF A 3 A_CustomMissile("Rocket")
RANF A 3 A_CustomMissile("Rocket")
RANF A 3 A_CustomMissile("Rocket")
RANF A 3 A_CustomMissile("Rocket")
Еще по поводу функции A_CustomMissile. Синтаксис у неё такой:
A_CustomMissile("название_актора")
- Название актора — задает имя актора(да это то название что задается в декорейте).
Список всех акторов, можно посмотреть на вики.
Стейт Death.
Разберем стейт Death:
Death:
RANF A 1
stop
Этот стейт проигрывает кадр RANFA0 в течении 1 тика, а потом актор исчезает(stop).
Ну все, разобрали, время тестить.
Проверяем.
Монстр оказался, слишком маленьким. Исправим это!
Добавьте, в декорейте, свойство Scale(Масштаб). И сделайте его равным 3, таким образом изображение монстра увеличится в 3 раза.
Scale 3
Сохраняем и проверяем.