Введение
DECORATE — это язык программирования, представленный в ZDoom, позволяющий создавать декорации, монстров, снаряды, менять свойства игрока, и многое другое. Также существует ZSCRIPT, который является улучшенной версией DECORATE, скрипт у него похожий. Как нибудь изучим его, но позже.
Подготавливаем изображения
- Сначала, скачайте пак_картинок(UPD ссылка обновлена), он понадобится для создания декораций.
- Далее закиньте, эти картинки в ваш wad файл.
- Потом нажмите «New Entry«, как показано на рисунке.

Передаю благодарность пользователям под ником McMare и илья стриго с дискорд сервера -=[Doom]=- Comminity, за информационную помощь в создании этого гайда.
И создайте 2 маркера S_START и S_END, изображения должны находится между этими двумя маркерами. Перемещать маркеры можно стрелочками, как это показано на рисунке.

Должно получится так

Работать мы будем с изображением BUNNA0.
То пересечение двух линий что я выделил красной точкой, в будущем я буду называть смещением. Чтобы поменять смещение(Offset), нужно выбрать режим «Sprite» как показано на рисунке.

Задаем правильное смещение
Смещение изображения задает ту точку, относительно которой строится изображение. Например:

Если задать смещение в этой точке, то у кролика будут видны только уши.

Если задать смещение в этой точке, то изображение кролика будет находится не в том месте, где должно находится.


Нужно задать правильное смещение и тогда все будет хорошо.


Ладно, смещение задали, теперь перейдем к главному.
Разбираемся в DECORATE.
Синтаксис у DECORATE следующий:
actor имя_актора номер_предмета_в_редакторе
{
...
}
- Имя актора(имя класса) — задает название предмета в думе. Введя в консоли «summon название_актора» можно заспавнить актор(предмет, монстр, бочка, декорация).
- Номер предмета в редакторе — задает уникальный номер(id), его можно и не задавать, но лучше задать, чтобы можно было ставить акторы прямо в редакторе(Ultimate Doom Builder).
Напишите этот код в DECORATE:
actor bunny 10000
{
radius 10
height 64
+SOLID
states
{
Spawn:
BUNN A -1
stop
}
}
А теперь разберем.
actor bunny 10000
С этой строчкой все понятно:
- Имя актора — bunny
- Номер предмета в редакторе — 10000
radius 10
height 64
Это свойства, подробнее на вики
- radius — задает ширину актора, например кибердемон шире имба, потому-что у него радиус больше. Из-за этого он не может протиснуться в узкие проходы.
- height — задает высоту актора.
+SOLID
Это флаг, делающий актор твердым(через него невозможно пройти). Также можно написать -SOLID, тогда ты сможешь проходить сквозь этот актор. Подробнее о флагах на вики.
Блок States
states
{
Spawn:
BUNN A -1
stop
}
Это блок states, в нем описываются события, что делать во время спавна актора или во время смерти актора, или во время атаки если это монстр. Кстати, синтаксис у states следующий:
states
{
название_события:
первые_4_буквы_названия_спрайта название_кадра длительность_в_тиках
....
}
- Название события может быть любым, но есть и предустановленные события такие как Spawn, Death, Raise, Use и многие другие. Главное помните что событие Spawn, есть во всех акторах.
- Первые 4 буквы названия спрайта — например POSS.
- Название кадра — 5я буква названия спрайта, задающая кадр анимации, например A для первого кадра, если хочешь второй кадр анимации то B. Разумеется в директории должны иметься изображения POSSA0 и POSSB0.
- Длительность в тиках — это длительность кадра в тиках(1 сек = 35 тиков). Если длительность равна -1(как в нашем случае) то этот кадр будет проигрываться вечно.
По поводу названия спрайтов(для использования в DECORATE):
- Первые 4 буквы — задают название спрайта, они неизменны.
- 5я буква — задает кадр анимации.
- 6я цифра — задает как будет выглядеть актор, в зависимости от поворота камеры, сейчас я не буду объяснять это подробно, только лишь скажу что цифра 0 обозначает поворот актора на игрока, то-есть с какой бы стороны ты не посмотрел на актор, изображение не изменится. Подобное поведение заметно у аптечек, убитых импов, патронов, оружия и т.д.
Хорошо, с этим разобрались, осталось обьяснить что такое stop.
states
{
Spawn:
BUNN A -1
stop
}
stop — останавливает скрипт актора, на практике это значит актор(например аптечка) исчез из игры.
Ну вот и все, сохраните вадник, и поместите кролика на карту.

Продолжение следует…
Итоговый результат
