- Автор темы
- #1
Приветствую! Сегодня я расскажу, как пришёл к созданию собственного бумершутера и что из этого вышло — на примере моей игры WARAG.
Актуальный арт WARAG в STEAM
Со временем мне захотелось не только играть, но и создавать. Я начал с карт для Half-Life, потом перешёл на Cube 2, можно было создавать свои уровни из готовых материалов. И конечно FPS Creator Classic, простой и кривоватый конструктор, в котором я делал свои первые играбельные шутеры. Прошла больше декады. Я ушёл развиваться совершенно в другой сфере, но со временем понял, что занимаюсь чем-то не тем, и нужно попробовать реализовать детскую мечту — создать шутер от первого лица по примеру любимых игр. О том, что это называется «бумершутер», я узнал не сразу.
Джон Ромерро создаёт карту для DOOM II
Не было этих бесконечных онлайн-курсов с обещаниями «стать разработчиком за 30 дней», после которых у тебя складывается искажённое представление о геймдеве. Где ты просто следуешь по чужим шаблонам. Никто не вёл за ручку, всё зависело только от твоего желания разбираться, учиться и доводить начатое до конца. Ты сам копался в движке, изучал, как он устроен, экспериментировал с каждым элементом. Такой подход — через ошибки, эксперименты и самостоятельное погружение, даёт глубину понимания, это не поверхностные знания, выученные ради галочки в резюме, а настоящий фундамент. Именно это и формировало настоящие навыки и творческое мышление, а не набор поверхностных знаний по чеклисту.
Разумеется, даже опенсурсные движки не идеальны. У них тоже случаются проблемы, конфликты и скандалы. Из недавнего — история вокруг Godot и его форка Redot. Даже в мире свободного ПО могут возникать разногласия в комьюнити и вопросы к управлению проектом. Однако такие ситуации лишь подчёркивают одну простую истину: Лучше выбирать не популярные, а по-настоящему свободные инструменты.
Я прекрасно понимаю, что такой подход и стремление близки не каждому. Не все готовы вникать в философию свободного ПО и разбираться в деталях архитектуры движка. Но для меня это неотъемлемая часть работы: понимать, чем я пользуюсь, иметь возможность исправить или доработать, и не зависеть от прихотей сторонних компаний или разработчиков.
В конце 2023 года свет увидел VKDoom, это форк исходного порта GZDoom. Он сохраняет весь функционал GZDoom, но расширяет его новыми технологиями, такими как лайтмапы с трассировкой лучей и динамические светотени с аппаратной поддержкой рейтрейсинга. Графическая система была переработана под Vulkan, что обеспечивает более высокую производительность по сравнению с GZDoom и позволяет реализовывать широкий диапазон визуальных эффектов. Уже в 2025 я перешёл на бета версия VKDoom.
Старая версия локации из WARAG с динамическими тенями и освещением
Одной из сильных сторон GZDoom и его производных является архитектура, сочетающая исходный код на C++ и мощные встроенные скриптовые языки, каждый из которых выполняет свою важную роль:
Работая с GZDoom, я понял что нужно погрузиться глубже и постепенно начал изучение С++, чтобы лучше понимать внутреннюю структуру и формировании более чёткого представления о коде и возможностей реализации. Также стоит отметить, что у сообщества есть множество полезных ресурсов: подробная документация на DoomWiki, гайды по ZScript и ACS, а также исходные коды самого GZDoom и VKDoom, открытые для изучения.
В конце 2024го начал с этой книги
WARAG появился не сразу, изначально у меня было две ветки разработки. Основная строилась вокруг мрачной, гримдарк-атмосферы в духе Quake и делала упор на 3D-модели. Стоит отметить, что движок поддерживает формат IQM с костной анимацией, и я потратил немало времени, чтобы разобраться с этим, хотя впоследствии WARAG перешёл на спрайтовую основу, этот опыт помог мне глубже понять как сам движок, так и работу с Blender(Именно благодаря этому я позже смог создать анимации для спрайтовых монстров).
Вторая ветка родилась спонтанно — как второстепенный проект для Ludum Dare 57, одного из крупнейших международных игровых джемов. Решил взять за основу около славянскую стилистику — она меня завлекла, быстро собрал базу: противники, оружие, механика. Но когда перешёл к созданию карт, понял, что именно эта «второстепенная» идея вдохновляет меня гораздо больше. Проект быстро развивался, и стало ясно, что это не просто заготовка для джема.
В итоге я принял волевое решение отказаться от участия в LD57, свернуть основную ветку разработки и полностью сосредоточиться на этом проекте. Так и появился WARAG — игра, начавшаяся как забавная идея для джема, а в итоге ставшая моим основным направлением
Полноценную разработку WARAG я начал с выбора визуальной составляющей и её корректировки относительно того, что уже было сделано для LD57. В качестве базовой стилистики я выбрал смесь славянских и готических элементов. Игровым референсом послужил Doom — прежде всего как источник цветовой палитры и образов монстров. А стиль текстур и архитектуру я заимствовал у Quake, Hexen и Heretic. Начал с референсов: составил коллаж из артов, скриншотов и текстур, чтобы представить, как должны выглядеть уровни, какие цвета будут доминировать, как будут выглядеть враги, оружие, интерфейс. Затем добавил текстовое описание.
Сначала я придумал монстров. Определил их базовые типы: ближний бой, дальняя атака, особенности поведения и способы атаки. После этого начал подбирать подходящие арты, компилировать их в образы и на этой основе формировать единый визуальный референс.
Привычное мне оформление диздока
Далее начал создавать модели в Blender и текстурировать их. Затем сделал модели оружия, после чего начался этап анимирования. С помощью специального плагина я начал конвертировать модели в спрайты и постепенно загружать их в проект.
Модель босса и плагин Palette Studio
Позже я занялся кодовой базой. Здесь стоит отметить, что у меня осталось много наработок с прошлых проектов, но об этом позже.
Для создания текстур, как уже говорил, основой послужили Quake, Hexen и Heretic, а также я просматривал изображения множества исторических замков. Постепенно собрав всё в тот же коллаж, дополнив его примерами уровней из других игр, я приступил к созданию собственных текстур.
Здесь всё было куда проще — я искал примеры как в интернете (в том числе на панорамах), так и в реальной жизни, фотографируя элементы интерьеров. Собрав критическую базу изображений, начал их обрабатывать: сначала в простом фотошопе (GIMP), создавая бесшовную основу, затем загружал в SLK_img2pixel для применения палитры и стилизации. После этого в Aseprite или всё том же GIMP производил финальную корректировку — при необходимости.
Финальный вид текстур
Теперь перейдём к построению уровней, написанию кода и общей логике. Как уже отмечал, у меня были наработки: я взял несколько экспериментальных, недоделанных проектов и объединил их в один. По большей части код тех же монстров уже был готов. Единственное, с чем мне действительно пришлось попотеть это создание карт(уровни).
К моменту активной разработки я провёл не так много времени за картостроением, хотя в целом имел представление о работе и возможностях дум-билдеров, а именно 3D-полы и гибкий скриптинг. Однако пришлось погружаться глубже, экспериментировать и потратить немало времени на изучение всех тонкостей, чтобы реализовать именно то, что задумал. Сейчас я уже неплохо прокачался в создании карт, посвятив этому не один месяц, но продолжаю совершенствоваться, и демоверсия в дальнейшем будет получать улучшения.
Главным открытием для меня стал ACS, и здесь мне отлично пригодились базовые знания C++. С его помощью в WARAG я реализовал множество интерактивных элементов - от платформинга с временно поднимающимися платформами до слива кислоты в одной из локаций. Кстати, стоит отметить, что кислота это на самом деле 3D-пол с возможностью плавать, который при активации кнопки уходит под карту. Помимо этого, через ACS я управляю спавном монстров, а также, например, босс-файтом: когда игрок пересекает определённую линию, телепорт перекрывается колоннами, и появляется босс.
Код acs для начала босс файта
Интересным образом я реализовал skybox — это отдельная локация с установленной камерой, внутри которой находятся плавающие текстуры, создающие эффект движущейся атмосферы. Дополнительно используются статичные 3D-полы с прозрачной текстурой, что усиливает ощущение глубины и объёма неба.
skybox
Под конец — хотел поделиться наблюдением о том, как некоторые игроки, раньше не сталкивавшиеся с классическими шутерами, воспринимают механику взаимодействия с окружением. Один из ярких примеров — стартовая локация WARAG, где нужно самому догадаться, что дверь открывается по нажатию E. Казалось бы, элементарная вещь. Но для некоторых это становится препятствием, ведь игра нигде не подсказывает, что нужно делать. Я сознательно отказался от всплывающих подсказок и «наглядного обучения». В оригинальных DOOM, Hexen или Quake этого не было — игрок сам исследовал окружение, пробовал, нажимал на всё подряд, в этом и был интерес.
Что ж, на этом, пожалуй, всё, что я хотел рассказать о своём пути создания бумершутера. WARAG всё ещё находится в активной разработке, но уже доступна демо-версия в Steam, в ней открытые исходники и любой желающий может посмотреть его.

Предыстория
Всё началось ещё в детстве я играл в классические шутеры от первого лица — те самые, где не было ни обучения, ни долгих катсцен, ни обязательного сюжета. Ты запускал игру и сразу оказывался в действии. Никаких объяснений, всё интуитивно. Графика яркая, стилизованная, но простая и запоминающаяся. Это не псевдо фотореализм, как в трейлере «Ведьмак 4», собранный из анриловских ассетов и нарисованный ландшафтной кистью. Каждая текстура и уровень создавались вручную, с любовью, без процедурной генерации.
Со временем мне захотелось не только играть, но и создавать. Я начал с карт для Half-Life, потом перешёл на Cube 2, можно было создавать свои уровни из готовых материалов. И конечно FPS Creator Classic, простой и кривоватый конструктор, в котором я делал свои первые играбельные шутеры. Прошла больше декады. Я ушёл развиваться совершенно в другой сфере, но со временем понял, что занимаюсь чем-то не тем, и нужно попробовать реализовать детскую мечту — создать шутер от первого лица по примеру любимых игр. О том, что это называется «бумершутер», я узнал не сразу.
Желание создавать игры по канонам 90х
Меня всегда завораживал подход к разработке из 90-х, никаких обновлений сдк, авторизации с введением ключа подтверждения, лишних элементов в рабочей среде — в духе Unity Hub или громоздких ui Анрила. Как сказал геймдев-разработчик под ником xkoster про создателей DOOM:" все волосатые… Это будто бы то, чем я на самом деле хотел заниматься, но никогда не было возможности"
Не было этих бесконечных онлайн-курсов с обещаниями «стать разработчиком за 30 дней», после которых у тебя складывается искажённое представление о геймдеве. Где ты просто следуешь по чужим шаблонам. Никто не вёл за ручку, всё зависело только от твоего желания разбираться, учиться и доводить начатое до конца. Ты сам копался в движке, изучал, как он устроен, экспериментировал с каждым элементом. Такой подход — через ошибки, эксперименты и самостоятельное погружение, даёт глубину понимания, это не поверхностные знания, выученные ради галочки в резюме, а настоящий фундамент. Именно это и формировало настоящие навыки и творческое мышление, а не набор поверхностных знаний по чеклисту.
Опенсурс
Прежде чем говорить непосредственно о движке, сделаю интересное отступление и расскажу о взгляде на ПО. Опенсурс это основа, база моего представления о правильном устройстве мира информационных технологий, можно вспомнить слова Ричарда Столмана: «Пользователь должен контролировать софт, а не наоборот.» Я не просто не хочу платить за софт, я не хочу вообще зависеть от лицензирования или регистрации. Даже если мейнстримные движки сегодня предлагают «доступный» вход для инди-разработчиков, это всего лишь временная договорённость. Завтра условия могут измениться, как это произошло с Unity, когда владельцы движка внезапно попытались пересмотреть лицензионное соглашение и ввести плату за каждую установку. Отмечу, что поднявшаяся шумиха позволила отменить это нововведение, но это был громкий и показательный скандал, который ясно дал понять: ты не хозяин проекта, если не хозяин инструмента. Или возьмём пример с движком Game Maker — даже простая авторизация там может превратиться в квест из-за региональных ограничений или проблем.Разумеется, даже опенсурсные движки не идеальны. У них тоже случаются проблемы, конфликты и скандалы. Из недавнего — история вокруг Godot и его форка Redot. Даже в мире свободного ПО могут возникать разногласия в комьюнити и вопросы к управлению проектом. Однако такие ситуации лишь подчёркивают одну простую истину: Лучше выбирать не популярные, а по-настоящему свободные инструменты.
Я прекрасно понимаю, что такой подход и стремление близки не каждому. Не все готовы вникать в философию свободного ПО и разбираться в деталях архитектуры движка. Но для меня это неотъемлемая часть работы: понимать, чем я пользуюсь, иметь возможность исправить или доработать, и не зависеть от прихотей сторонних компаний или разработчиков.
Выбор движка
Мой выбор пал на GZDoom, а позднее я перешёл на VKDoom. GZDoom один из самых гибких и технически развитых портов классического Doom. Он вырос из проекта ZDoom созданного на базе id Tech 1 после открытия исходного кода DOOM, значительно расширив его возможности. Благодаря поддержке OpenGL, скриптовых языков, 3D-моделей, динамического освещения и других современных технологий, GZDoom превратился в полноценную платформу для создания не просто модов, а полноценных игр, сохраняя айдентику и подход к разработке старой школы.В конце 2023 года свет увидел VKDoom, это форк исходного порта GZDoom. Он сохраняет весь функционал GZDoom, но расширяет его новыми технологиями, такими как лайтмапы с трассировкой лучей и динамические светотени с аппаратной поддержкой рейтрейсинга. Графическая система была переработана под Vulkan, что обеспечивает более высокую производительность по сравнению с GZDoom и позволяет реализовывать широкий диапазон визуальных эффектов. Уже в 2025 я перешёл на бета версия VKDoom.

Одной из сильных сторон GZDoom и его производных является архитектура, сочетающая исходный код на C++ и мощные встроенные скриптовые языки, каждый из которых выполняет свою важную роль:
- ZScript — основной инструмент для создания логики. Он даёт доступ к внутренним элементам по типу меню и акторам, поддерживает полноценные пользовательские классы, структуры, виртуальные методы и наследование. С помощью ZScript реализуются практически все игровые элементы: логика врагов, оружие, визуальные эффекты, интерфейс, и т. д.
- ACS (Action Code Script) — более узконаправленный скриптовый язык, отвечающий за события на уровне карты: открытие дверей, ловушки, кат-сцены, управление триггерами, поведением монстров и другие интерактивные элементы.

Работая с GZDoom, я понял что нужно погрузиться глубже и постепенно начал изучение С++, чтобы лучше понимать внутреннюю структуру и формировании более чёткого представления о коде и возможностей реализации. Также стоит отметить, что у сообщества есть множество полезных ресурсов: подробная документация на DoomWiki, гайды по ZScript и ACS, а также исходные коды самого GZDoom и VKDoom, открытые для изучения.

Разработка
Около года я глубоко погружался в работу с движком — много экспериментировал, шаг за шагом открывая для себя всё больше его возможностей. В 2024 году начал осваивать Blender и постепенно прокачивался в создании собственных 3D-моделей.WARAG появился не сразу, изначально у меня было две ветки разработки. Основная строилась вокруг мрачной, гримдарк-атмосферы в духе Quake и делала упор на 3D-модели. Стоит отметить, что движок поддерживает формат IQM с костной анимацией, и я потратил немало времени, чтобы разобраться с этим, хотя впоследствии WARAG перешёл на спрайтовую основу, этот опыт помог мне глубже понять как сам движок, так и работу с Blender(Именно благодаря этому я позже смог создать анимации для спрайтовых монстров).
Вторая ветка родилась спонтанно — как второстепенный проект для Ludum Dare 57, одного из крупнейших международных игровых джемов. Решил взять за основу около славянскую стилистику — она меня завлекла, быстро собрал базу: противники, оружие, механика. Но когда перешёл к созданию карт, понял, что именно эта «второстепенная» идея вдохновляет меня гораздо больше. Проект быстро развивался, и стало ясно, что это не просто заготовка для джема.
В итоге я принял волевое решение отказаться от участия в LD57, свернуть основную ветку разработки и полностью сосредоточиться на этом проекте. Так и появился WARAG — игра, начавшаяся как забавная идея для джема, а в итоге ставшая моим основным направлением

Полноценную разработку WARAG я начал с выбора визуальной составляющей и её корректировки относительно того, что уже было сделано для LD57. В качестве базовой стилистики я выбрал смесь славянских и готических элементов. Игровым референсом послужил Doom — прежде всего как источник цветовой палитры и образов монстров. А стиль текстур и архитектуру я заимствовал у Quake, Hexen и Heretic. Начал с референсов: составил коллаж из артов, скриншотов и текстур, чтобы представить, как должны выглядеть уровни, какие цвета будут доминировать, как будут выглядеть враги, оружие, интерфейс. Затем добавил текстовое описание.
Сначала я придумал монстров. Определил их базовые типы: ближний бой, дальняя атака, особенности поведения и способы атаки. После этого начал подбирать подходящие арты, компилировать их в образы и на этой основе формировать единый визуальный референс.

Далее начал создавать модели в Blender и текстурировать их. Затем сделал модели оружия, после чего начался этап анимирования. С помощью специального плагина я начал конвертировать модели в спрайты и постепенно загружать их в проект.

Позже я занялся кодовой базой. Здесь стоит отметить, что у меня осталось много наработок с прошлых проектов, но об этом позже.
Для создания текстур, как уже говорил, основой послужили Quake, Hexen и Heretic, а также я просматривал изображения множества исторических замков. Постепенно собрав всё в тот же коллаж, дополнив его примерами уровней из других игр, я приступил к созданию собственных текстур.
Здесь всё было куда проще — я искал примеры как в интернете (в том числе на панорамах), так и в реальной жизни, фотографируя элементы интерьеров. Собрав критическую базу изображений, начал их обрабатывать: сначала в простом фотошопе (GIMP), создавая бесшовную основу, затем загружал в SLK_img2pixel для применения палитры и стилизации. После этого в Aseprite или всё том же GIMP производил финальную корректировку — при необходимости.

Теперь перейдём к построению уровней, написанию кода и общей логике. Как уже отмечал, у меня были наработки: я взял несколько экспериментальных, недоделанных проектов и объединил их в один. По большей части код тех же монстров уже был готов. Единственное, с чем мне действительно пришлось попотеть это создание карт(уровни).
К моменту активной разработки я провёл не так много времени за картостроением, хотя в целом имел представление о работе и возможностях дум-билдеров, а именно 3D-полы и гибкий скриптинг. Однако пришлось погружаться глубже, экспериментировать и потратить немало времени на изучение всех тонкостей, чтобы реализовать именно то, что задумал. Сейчас я уже неплохо прокачался в создании карт, посвятив этому не один месяц, но продолжаю совершенствоваться, и демоверсия в дальнейшем будет получать улучшения.
Главным открытием для меня стал ACS, и здесь мне отлично пригодились базовые знания C++. С его помощью в WARAG я реализовал множество интерактивных элементов - от платформинга с временно поднимающимися платформами до слива кислоты в одной из локаций. Кстати, стоит отметить, что кислота это на самом деле 3D-пол с возможностью плавать, который при активации кнопки уходит под карту. Помимо этого, через ACS я управляю спавном монстров, а также, например, босс-файтом: когда игрок пересекает определённую линию, телепорт перекрывается колоннами, и появляется босс.


Интересным образом я реализовал skybox — это отдельная локация с установленной камерой, внутри которой находятся плавающие текстуры, создающие эффект движущейся атмосферы. Дополнительно используются статичные 3D-полы с прозрачной текстурой, что усиливает ощущение глубины и объёма неба.

Под конец — хотел поделиться наблюдением о том, как некоторые игроки, раньше не сталкивавшиеся с классическими шутерами, воспринимают механику взаимодействия с окружением. Один из ярких примеров — стартовая локация WARAG, где нужно самому догадаться, что дверь открывается по нажатию E. Казалось бы, элементарная вещь. Но для некоторых это становится препятствием, ведь игра нигде не подсказывает, что нужно делать. Я сознательно отказался от всплывающих подсказок и «наглядного обучения». В оригинальных DOOM, Hexen или Quake этого не было — игрок сам исследовал окружение, пробовал, нажимал на всё подряд, в этом и был интерес.
Что ж, на этом, пожалуй, всё, что я хотел рассказать о своём пути создания бумершутера. WARAG всё ещё находится в активной разработке, но уже доступна демо-версия в Steam, в ней открытые исходники и любой желающий может посмотреть его.