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

Внутри моей головы бытует мнение, что абсолютно все люди, решившие создать рогалик, начинали с генератора карт (и, чаще всего, зарывшись в эту бездонную пропасть, им же и заканчивали). Мысль, в принципе, понятна: сначала надо сделать интересное пространство, а потом уже наполним его кошками и топорами!

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

У нас будет плоская игра, сиречь 2D. Это означает, что даже если мы захотим представить, скажем, планету целиком, мы на экране создадим квадрат, который будет являться искаженной разверткой поверхности шара на плоскость. Мы можем упростить себе задачу и не вводить никаких искажений, т.к. все равно не будем оборачивать нашими картами шары планет. Итак, миры плоские и квадратные.


Предположим, что у нас вселенная состоит из планет. Совсем как наша любимая реальность. Чем планеты отличаются друг от друга (и почему их так интересно исследовать в No Mans Sky)? Конечно же, каждая планета — это уникальное сочетание множества разных факторов. Таких, как: размер (диаметр), близость к звезде, наклон ее оси, состав атмосферы, наличие океанов и так далее. Если добавить к этому условие, что любая планета в нашей вселенной должна быть населена, а живность мы можем придумать любую, то нас устроит как землеподобная планета-рай, так и маленький сухой каменистый планетоид, покрытый лавовыми озерами.

Давайте попробуем составить точный список параметров миров, который не будет слишком коротким и в то же время не будет пытаться моделировать пространство с точностью суперкомпьютера.

  • Размер — нам нужны несколько разных размеров, сильно отличающихся друг от друга, так мы сможем создать разную степень замкнутости миров (и их обитателей);
  • Рельеф — где будут горы, какой высоты, сколько их будет. Низины — это, как известно, перевернутые горы (ох уж эти программисты). Иными словами, какой формы будет поверхность мира;
  • Тематика — об этом чуть ниже, отдельно;
  • Климат — что именно будет в точке с координатами Х и У, пустыня или тайга;
  • Обитатели — кто будет пытаться выжить в описанном выше мире, и к чему это приведет.

Размер и рельеф

Вы, наверное, думаете, а что говорить о размерах? Ведь понятно же: сделай маленькие, средние и большие миры. Для разнообразия.

Не все так просто.

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


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

Нельзя ударяться в крайности, но нужно и разнообразие. Поиск баланса между этими двумя вещами и есть вопрос размеров карт. А ведь на самом размере все не заканчивается. Мир может быть гигантским, и все же интересным, если дать вам возможность свободно телепортироваться из одного конца в другой. А может быть, вы бегаете быстрее гепарда?

Посвятим проработке этого вопроса отдельную статью, когда начнем писать генератор карт. А сейчас остановимся на том, что, во-первых, размер зависит от контента, который мы будем создавать. А во-вторых, разные размеры миров должны появляться с разной вероятностью: чем мир ближе к среднему размеру, тем чаще такие миры будут создаваться.

Тематики миров

Тематика мира — это как разные типы планет в Вархаммере, или как разные классические темы игровых карт, например: некрополис, ад, вулкан, пустынный мир и т.д. Иными словами, это тема мира в буквальном смысле; то, что сразу скажет игроку, с чем ему предстоит столкнуться. Наша родная планета — это тоже своего рода тема, Earth-like. И если мы скажем, что мир похож на Венеру, это значит, что там очень горячо, а по закоулкам бродят всяческие огненные монстры.

Тематики очень часто являются в играх основным полем для воображения. Карты, посвященные целиком и полностью конфетам из Trove тому яркий пример. В World of Warcraft можно было побродить по грибному лесу.

Но в вышеперечисленных играх такими разнообразными были лишь области миров. В нашем случае тема будет применяться ко всему миру сразу, не исключая внутритематического разнообразия ландшафтов в нем.

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

Представили? Вот, это и есть тема мира «металл».

Климат

Зачем нам вообще климат нужен? Наверняка многие из вас ездили в отпуск. И вы либо уезжали из весьма холодной страны в весьма теплую (как это обычно делаю я), либо наоборот, проживая в теплом климате, вы испытывали желание покататься на лыжах в Альпах или поплавать по фьордам Норвегии. Это очень естественное желание, которое заключается в смене климатических условий, что влечет за собой смену картинки перед глазами: вместо замороженных елок вы смотрите на пальмы. То, что определяет, будет вот тут расти елка или пальма, и есть климат. А елки и пальмы — это разные виды леса, а это уже называется биом (единая растительно-животная среда).

Чтобы в наших мирах были различные области (и с елками, и с пальмами), нам нужно решить (а точнее, объяснить машине), где их расположить на картах. Чтобы это сделать, проще всего (ха-ха) взять за основу климат Земли с его правилами.

Многие ученые до сих пор ломают голову над тем, как смоделировать климат Земли. И проблем здесь две.

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


Вторая проблема засела внутри современных компьютеров. Они слабые для таких задач. В стакане воды содержится 66 * 10 в 23 степени молекул воды. Представьте, сколько в Тихом океане стаканов воды? Как смоделировать с реальной точностью течение, которое пересекает этот океан? Верно, никак. Даже если собрать оперативную память со всех компьютеров в мире, такое количество чисел в нее не поместится. И ладно бы я был крупным ученым в Массачусетском Университете и у меня был бы доступ к вычислительным мощностям, сравнимым с Гуглом. Так ведь нет, сервер, на котором я могу вести разработку, слабее машины, на которой я пишу этот пост.

Но хочется сделать хороший генератор карт. Такой, чтобы за него было не стыдно перед Тарном Адамсом (создатель Dwarf Fortress — прим. автора). А значит, есть задача: повторить климат Земли. А потом еще и, оттолкнувшись от него, породить многие новые виды миров, еще неизведанные и манящие. Ок, начнем решать эту задачу.

Что же делать?

Мы благополучно придумали себе две большие проблемы, с которыми не справляются мировые ученые. Блеск.

Но путь есть.

Обе проблемы решаются за один присест. Нужно упростить модель климата до такого уровня, чтобы было интересно играть, и чтобы простая машина могла это обработать за приемлемое время. Не будем создавать миры, размером с Землю, ведь вы точно не хотите пешком прогуляться по экватору (это… долго). Сделаем поменьше. Температурный диапазон возьмем не от -273 градусов Цельсия до плюс бесконечности, а от -50 до +50. Мы же не собираемся играть за инопланетных амеб, способных выжить при миллионе градусов.


И вот конечный набор факторов, которые мы будем учитывать при генерации:

  • Наклон оси вращения мира относительно источника солнечной радиации
  • Скорость вращения мира
  • Физический размер мира
  • Карта высот (рельеф)
  • Пояса давления
  • Само давление
  • Воздушные течения (ветры)
  • Морские течения
  • Влажность
  • Осадки
  • Расположение пресноводных водоемов (реки и озера)
  • Расположение соленых водоемов (океаны)
  • Температура

Но таким набор станет тогда, когда у нас будет чуть больше времени на разработку, а наше железо будет состоять не из одного слабенького сервера. Начнем мы с простого, и будем постепенно усложнять.

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

И нашим следующим шагом будет начать учиться, как же таки определить это чертово дерево под нашим носом.

А как же обитатели?

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

Удачи вам и не переключайтесь!