DECORATE. Создаем монстра(1).

Подготовка

Сначала, скачайте картинку монстра 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

Сохраняем и проверяем.

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

Пожалуйста отключи блокировщик рекламы, или внеси сайт в белый список!

Please disable your adblocker or whitelist this site!