Перед тем как начать

Прежде чем углубиться в разработку, мы разберем что такое roguelike-игры, откуда они берутся и какую игру мы в этом жанре собираемся сделать в этой книге. Большинство людей согласны с тем, что все началось с игры Rogue, созданной в начале 1980-х годов. Эта игра объединила в себе ранние элементы 1970-х годов, такие как Colossal Cave Adventure, которая была текстовой приключенческой квестовой игрой, в которой использовалась интерактивная фантастика для представления текстовых описаний сцен и ввод текстовых команд и настольной ролевой игры вроде Dungeons & Dragons, в которой игроки исследуют подземелья, наполненные монстрами и сокровищами. Основой игры Rogue служило исследование подземелий, все элементы которых, включая игрового персонажа и монстров, изображались буквами и символами (как показано на рисунке 1-1). Игра Rogue всегда была уникальной, так как использовалась случайная генерация лабиринтов и подземелий. Рисунок 1-1. Как игра Rogue выглядела на IBM PC Поэтому компьютерные игры схожего жанра с Rogue начали называть Roguelike («rogue-подобные» или иногда «рогалик»). С того периода были выпущены сотни игр в жанре roguelike. Roguelike - один из немногих игровых жанров 1980-х годов, который по-прежнему популярен и в нем постоянно появляются свежие релизы и инновации. Проблема с жанрами-долгожителями в том, что они в конечном итоге накапливают такой большой объем контента и их становится действительно трудно определить. Сообщество рогаликов по-прежнему ведет изрядную долю войн, пытающихся решить, является ли игра рогаликом или нет. Имейте в виду, что многие функции, которые мы считаем основными для жанра, отсутствовали в первые дни и что этих первых разработчиков не волновало, была ли их игра roguelike или нет. Все что они хотели делать — это выпускать хорошие игры. В свое время многие из этих игр сошлись на общем наборе функций, которые стали краеугольными камнями жанра.

В 2008 году люди, присутствовавшие на Международной конференции по разработке roguelike, придумали то, что стало известно как Берлинская интерпретация, которая представляет собой попытку определить, что такое рогалик. Они выбрали канон игр, и определение того, что такое roguelike из общего набора функций, присутствующих в этих играх. Играми в каноне были Rogue, NetHack, Angband и ADOM. Этот набор характеристик разделили на факторы высокой и низкой ценности, которые можно просмотреть в таблицах 1-1 и 1-2. Игра не обязательно должна иметь все эти факторы, чтобы быть roguelike, но этот список помогает нам понять, что это сообщество ценило в то время.

Таблица 1-1. Важные факторы в рогаликах согласно Берлинской интерпретации.

Фактор Объяснение
Случайная генерация Мир генерируется случайным образом, поэтому каждая игра уникальна.
Перманентная смерть Смерть в игре заставляет начинать все сначала.
Пошаговая игра Игра реагирует на ввод пользователя. Каждая команда соответствует одному действию. Игрок может ждать и планировать свой ход, не опасаясь, что что-то происходит за его спиной.
На основе сетки Игра представлена в виде сетки плиток. Как игроки, так и все другие игровые объекты (например, враги) занимают одну плитку независимо от размера.
Немодальный Все действия, которые возможны в игре, возможны на одном экране. Нет необходимости переключаться на разные режимы игры. Каждое действие должно быть доступно в любой момент игры. Нарушением этого правила являются магазины во многих играх.
Сложность Игра сложна и достаточно гибка, чтобы позволить множество решений проблем, возникающих во время игрового процесса. Это достигается за счет предоставления достаточного количества взаимодействий предмет/монстр и предмет/предмет и тесно связано с наличием только одного режима.
Управление ресурсами Вы должны управлять своими ограниченными ресурсами (например, едой, лечебными зельями) и находить способы использования получаемых ресурсов — это часть удовольствия.
«Режь и руби» Несмотря на то, что в игре может быть гораздо больше, убийство большого количества монстров — очень важная часть рогалика. Игра ведется по принципу «игрок против мира»: здесь нет отношений монстр/монстр (например, вражды или дипломатии).
Исследование и открытие Игра требует тщательного исследования уровней подземелий и обнаружения использования неопознанных предметов. Это нужно делать заново каждый раз, когда игрок начинает новую игру.

Таблица 1-2. Факторы низкой ценности в рогаликах согласно Берлинской интерпретации.

Фактор Объяснение
Одиночный персонаж Игра ориентирована на игрока, управляющего одним персонажем на протяжении всего игрового процесса.
Монстры похожи на игроков Правила, применимые к игроку, применимы и к монстрам. У них есть инвентарь, оборудование, предметы для использования, заклинания и т. д.
Тактический вызов Вы должны изучить тактику, прежде чем сможете добиться значительного прогресса. Этот процесс повторяется, т. е. знаний на раннем этапе игры недостаточно, чтобы победить в поздней игре. (Из-за случайного окружения и постоянной смерти рогалики бросают вызов новым игрокам.) Игра сосредоточена на предоставлении тактических задач (в отличие от стратегической работы над общей картиной или решения головоломок).
Отображение ASCII Для рогаликов принято использовать ASCII для построения интерфейса.
Подземелья В рогаликах есть подземелья, например уровни, состоящие из комнат и коридоров.
Числа Цифры, используемые для описания персонажа (очки жизни, атрибуты и т. д.) намеренно показаны.

Даже в выбранном каноне игр эти факторы не всегда присутствуют. Так, например, Angband и ADOM имеют различные режимы.

Есть много критики в адрес Берлинской интерпретации. Многие считают, что это определение устарело и не отражает текущее состояние рогаликов. Мы включили его в эту книгу, чтобы помочь нам задуматься об этих факторах и о том, какие из них для нас важны. Отнесение игр к постоянно развивающимся жанрам довольно сложно, и нам не следует тратить слишком много времени на беспокойство о том достаточно ли похожа создаваемая нами игра на рогралик.

Разбираясь с категориями рогаликов, стоит упомянуть еще один вид игр — roguelite ("слегка rogue"). Обычный рогалик — это игра, в которой нужно потратить время на учебу. Чтобы добиться успеха в такой игре, как NetHack , вам нужно потратить много времени на изучение тактики и функций и быть готовым играть в нее снова и снова. Такая фантастическая игра, как Dwarf Fortress, которую по многим устаревшим правилам категоризации едва ли можно квалифицировать как roguelike, но которая, по мнению многих является действительно превосходной roguelike. Это игра, в которую практически невозможно играть эффективно без ее вики и связанных статей.

Как вы уже догадались, существует целая ниша казуальных игроков, которые не играют в обычные рогалики. С появлением смартфонов и других небольших мобильных устройств произошел всплеск казуальных игр. Люди хотят поиграть в дороге. Простые игры, которые не требуют времени на изучение, - самые распространенные игры в наши дни. Roguelite — ответ на эту потребность. Это игры, в которые легко играть и в них не нужно изучать сложные механизмы. Они часто содержат полностью графический интерфейс с небольшим количеством возможных действий, чем более традиционные рогалики, и очень популярны.

Проблема с категоризацией в том, где вы проводите черту. Какую дополнительную функцию вы добавляете в roguelite, чтобы он превратился в рогалик? Стоит ли вообще проводить такое различие? Это риторические вопросы, которые активно обсуждаются сообществом. Этот вид более простых рогаликов известен под другими названиями, такими как roguelike-like ("подобные Rogue-подобным"), roguelike-ish ("как бы rogue-подобные") и так далее. На самом деле это не имеет значения. Важно то, что некоторые люди хотят различать, когда игра в жанре roguelike проще и ориентирована на казуальные игры.

В этой книге мы определяем roguelike как игру, которая:

  • использует процедурную генерацию для создания своего тайлового мира;
  • имеет необратимость смерти персонажа;
  • использует пошаговую систему действий;
  • имеет несколько уровней для изучения.

Разработка игр в целом — это не только развлечение, но и обучение многим методам и подходам к общим задачам программирования, которые применимы не только к играм. Рогалики особенно понравится тем, кто любит информатику, поскольку позволяет им сосредоточиться на алгоритмах, структурах данных и их взаимодействиях. Это также будет прекрасным средством для тех из нас, кто любит рассказывать истории и строить свой мир, поскольку рогалик живет и умирает в силу своей механики, темы и игрового процесса. По сути, рогалики предоставят богатую и увлекательную платформу для разных сторон вашего мозга. Вам есть над чем поразмышлять и поэкспериментировать с аналитической стороной, и еще больше для вашей творческой стороны.

Roguelite — один из немногих игровых жанров, в которых индивидуальные разработчики и небольшие команды не находятся в таком невыгодном положении по сравнению с крупными студиями. Ваш рогалик может оставить след в индустрии и понравиться игрокам и другим разработчикам. Сообщество рогаликов очень гостеприимно и в нем интересно участвовать. Есть много стимулов делиться знаниями и расти вместе.

Во многих AAA-играх (высокобюджетные компьютерные игры) используются методы, пропагандируемые при разработке roguelike, такие как процедурная генерация, улучшающая воспроизводимость игр и сокращающая время, затрачиваемое на создание контента. Недавние инди-бестселлеры полагались на процедурную генерацию не только для дизайна уровней, но также для сюжета и врагов. Перманентная смерть добавляет уровень сложности тем играм, которые привлекают нишевую, но преданную базу хардкорных пользователей. Наблюдается некоторая тенденцию, когда все больше принципов разработки roguelike не только включается во многие игры, но и оказывается в центре внимания как причина того, почему эти игры хороши.

Мы уверены, что рогалики помогут вам приобрести технические навыки, которые не только напрямую применимы в игровой индустрии, но и пригодятся вам в других разработках. Ваши творческие навыки также улучшатся, если вы усовершенствуете свое кодирование, чтобы оно соответствовало вашему игровому миру, и наоборот. Рассказывание историй — это важный навык, который будет служить вам всю оставшуюся жизнь. Причины, которые мы привели помогут вам объяснить всем вашим друзьям и семье, почему вы это делаете, и оправдать ваши затраты времени на это ремесло, но основная причина разработки рогаликов — это то, что вы хотите разрабатывать рогалики. Это увлекательное занятие, и у вас есть идея, которые вы хотите изучить. Внутри вашего разума есть небольшое подземелье, в нем спрятаны ваши идеи, и вы хотите пригласить туда больше людей. Да, вы можете оправдать изучение разработки в стиле roguelike, используя множество рациональных аргументов относительно карьеры и знаний, но лучший аргумент — эмоциональный: вы делаете это, потому что хотите это сделать.

Очень сложно заставить кого-то установить какое-то приложение, которое вы разработали, даже если это замечательная игра. Каждую неделю на популярных торговых площадках приложений появляются тысячи игр. Очень сложно быть замеченным, и студии тратят огромные деньги на маркетинг только для того, чтобы убедить людей попробовать свою игру. Чем меньше усилий требуется от ваших потенциальных пользователей для тестирования вашей игры, тем выше шансы, что они действительно это сделают.

Веб-технологии позволяют нам выпускать игры, в которые можно играть на широком спектре устройств, без необходимости установки. Ваша веб-игра потенциально будет работать на смартфонах, планшетах, ноутбуках, настольных компьютерах и т. д. Вы по-прежнему можете подготовить эти сетевые игры к распространению на популярных игровых площадках, сохранив при этом возможность распространять их самостоятельно через Интернет. Это максимально широкий охват с наименьшим усилием. Все, что нужно будет сделать вашим пользователям — это открыть веб-страницу и начать игру.

Есть еще один важный аспект использования веб-технологий, который заключается в том, что они могут сократить время между отправкой новых версий вашей игры вашим пользователям. Это особенно важно, если вы открыто разрабатываете игру, постоянно обновляя бета-версии и получая отзывы от тестировщиков. Вам не нужно присылать новые установщики игр и ждать, пока обновятся тестеры; вы обновите одну онлайн-страницу, и все они получат и протестируют последнюю версию. Эта быстрая итерация окажется полезной не только для игроков, но и для вас, а также для всего, что сэкономит ваше время.

В этой книге мы сосредоточимся в основном на JavaScript и очень мало будем использовать HTML и CSS. JavaScript — очень доступный язык для новых разработчиков, которые только изучают его в первый раз, и очень мощный в руках опытных разработчиков. Начинающий ученик сможет использовать его и создать что-то полезное без особых проблем. Не все языки позволяют новым разработчикам легко создавать что-то, что они могут показать, пока они находятся на начальной стадии, и все еще могут быть полезны для выпуска первоклассных игр в будущем. Улучшение навыков JavaScript с помощью разработки в жанре roguelike — отличный способ повысить уровень разработчика.

Есть и другие языки, которые быстрее и обеспечивают больший контроль над использованием ресурсов, чем JavaScript. Если вы хотите работать в игровой отрасли, было бы неплохо изучить их, но не думайте ни на секунду, что JS — плохое вложение вашего времени. Как сказал Брендан Эйх: «Всегда делайте ставку на JS!». Сегодняшние движки JavaScript — это очень мощные виртуальные машины, которые в полной мере расширят возможности ваших roguelike-проектов. В этой книге вы не найдете момента, когда язык и среда выполнения будут для нас ограничением. JS всегда будет преимуществом, а не ограничением в нашем путешествии по жанрам рогаликов.

Существует множество замечательных веб-фреймворков для разработки игр. В этой книге я выбрал Phaser 3, потому что это, вероятно, самая популярная среда разработки игр, доступная для JavaScript. Работа с ванильным JavaScript заставит нас заново реализовать множество низкоуровневых шаблонов программирования игр. Вместо этого мы собираемся использовать не зависящую от жанра структуру для разработки игр общего назначения. Часть нашего кода roguelike будет реализована нами, но мы будем стоять на плечах гигантов и использовать всю тяжелую работу, которая была вложена в эту структуру для общих функций программирования игр, которые нам понадобятся.

Phaser легко изучить и он испытан тысячами игроков и геймеров. Это настоящая структура, которая используется в отрасли, и изучение ее поможет вам стать ближе к тому, что используют профессионалы в этой области. Эта структура используется как любителями, так и профессионалами. По нему есть много учебных материалов, доступных в Интернете для дальнейшего изучения.

Phaser упрощает разработку игр, работающих в различных форм-факторах. Это важно для увеличения охвата нашей игры, поскольку люди, использующие как небольшие устройства, такие как смартфоны, так и более крупные устройства, такие как ноутбуки, смогут играть в нашу roguelike.

Общий жизненный цикл и рабочий процесс игры Phaser аналогичен другим фреймворкам, как веб, так и нативным. Многие из понятий, которые вы изучите, можно будет перенести, если вы решите использовать что-то другое в будущем.

Важно отметить, что Phaser — это общий фреймворк для разработки игр, он не принуждает и не ограничивает вас каким-либо жанром или типом игры. Таким образом, он очень гибкий, и вы сможете использовать его в других будущих проектах. При этом мы могли бы использовать специальную библиотеку для разработки roguelike, и это сэкономило бы нам огромное количество работы, предоставив готовые и протестированные функции, которые являются общими и важными для большинства roguelike. Мы решили не использовать одну из этих библиотек по двум причинам.

Первое и самое важное: изучение Phaser важно для всех, кто занимается веб-играми. Это делает эту книгу полезной не только для roguelike, но и для тех, кто уже знаком с Phaser и хочет узнать больше о рогаликах.

Вторая причина заключается в том, что, реализуя с нуля некоторые из этих функций, мы в конечном итоге получаем их более глубокое и значимое понимание, чем просто используя готовые пакеты. Это имеет положительный побочный эффект, заставляя нас больше ценить тех разработчиков, которые пытаются создать эти готовые библиотеки roguelike. Если вы попробуете их в будущем, вы будете лучше подготовлены, чтобы разобраться в их внутреннем устройстве.

Еще один важный аспект использования Phaser: он позволяет нам начать разработку с минимальным набором инструментов. Для начала нам не нужны сложные шаблоны и инструменты. Существуют и другие движки, в которых используются сложные инструменты, и да, вы можете использовать любую сложную настройку Phaser, но для этой книги это будет слишком отвлекать. Мы сосредоточимся на создании рогалика с Phaser — мы добавим только минимальный набор инструментов, который нам понадобится для выполнения этой задачи.

Наш проект для этой книги представляет собой небольшой веб-roguelite. Мы создаем ровно столько функций, чтобы его можно было определить как roguelike, но эта книга не превратилась бы в библию на тысячу страниц. Этот проект является начальным уровнем разработки roguelike; вы можете пойти глубже, если хотите.

Одно решение, которое мы приняли относительно организации содержания этой книги, может быть спорным, поэтому лучше объяснить его сейчас, прежде чем мы начнем. Большинство обучающих программ в жанре roguelike начинаются с процедурной генерации и подземелий. Мы оставим процедурную генерацию для следующей главы книги. К тому времени, когда мы доберемся до нее, мы уже будем знать, как нарисовать подземелье и заполнить его монстрами и сокровищами, а также как устроен игровой процесс. Это позволит нам поиграть с процедурной генерацией и понять, как она влияет на игровой процесс, потому что у нас уже есть статический геймплей. Становится намного легче увидеть, как различные подземелья или более сильные монстры с более разумным поведением меняют игру, если эти части игры уже работают. Так что даже хоть процедурная генерация - это важная часть рогаликов, мы перейдем к этой теме только во второй половине книги.

Сначала мы познакомимся с библиотекой Phaser и воспользуемся ею, чтобы нарисовать подземелье. Затем мы добавляем в него игрока и напишем сценарий игрового цикла. Как только это заработает, мы добавим монстров, сокровища и несколько уровней. Когда все эти части будут задействованы, мы перейдем к процедурной генерации.