Dwarf Fortress не является открытым исходным кодом, и, хотя существует множество догадок и реверс-инжиниринга, которые могут помочь понять, как все это работает, я вместо этого остановлюсь на некоторых базовых методах оптимизации трехмерной (не трехмерной графики, трехмерного мира) разновидности того же типа.
Как и во всех видеоиграх, много дыма и зеркал создают иллюзию сложности из простых правил и систем. Они варьируются от использования простых случайных чисел для бесцельного перемещения на всем пути до предварительной выпечки высокоуровневой сетки узлов для поиска пути.
движение
Говоря о нахождении пути, это часто может быть очень трудной проблемой для больших пространств, таких как карта DF (например, 768x768x64 IIRC), однако проблему можно упростить и ускорить следующими способами:
- Предварительно запеченная сеть узлов: когда карта создана, мир можно разбить на куски, и каждому куску можно сопоставить свои выходы и входы. При обновлении чанка, например при возведении стены, требуется обновление только сети этого чанка.
- Поэтапное нахождение пути: Выполнение пути по всей карте, ячейка за ячейкой, заняло бы много времени, вместо этого вам нужно было бы найти путь по большой сети чанков, которая отображает все соединения между чанками, и затем запускать только внутренний чанк, когда переходя от куска к куску. Это делает 2 вещи для вас. Он ускоряет поиск пути, разбивая его на множество более мелких фрагментов, а также позволяет устройству менять направление на части пути вдоль пути при обновлении фрагмента. Он будет перенаправлен через большую сеть, если какой-либо из узлов будет нуждаться в перекрестном обновлении.
- Случайное рулевое управление: когда объект не движется к цели, ему нужно только ходить бесцельно. Многие мошенники просто перемещают юнит в случайном направлении, что кажется неестественным. Можно использовать различные техники рулевого управления, простые из которых предпочитают двигаться по прямой линии и имеют все меньше и меньше шансов двигаться в направлениях, идущих назад, что может составлять всего около 1%. Таким образом, устройство иногда полностью изменяет направление, но редко.
Я не буду раскрывать основы поиска пути. Большинство roguelikes используют A *, но есть и другие способы снятия кожи с кошки. Мммм кошачьей кожи ..
Личные Задачи
Одна из главных вещей, которая заставляет бойцов DF появляться и чувствовать себя живыми, это их личный список целей. По правде говоря, во многих похожих играх есть это на базовом уровне. По сути, у каждого юнита есть список желаний (и для ваших любимых, задач, которые они могут решить, которые вы просите выполнить), и они будут выбирать из них, основываясь на своей индивидуальности (статистике).
Некоторые задачи имеют требования. Изготовление кожаной юбки требует, чтобы dorf находился в таком-то магазине, где есть X предметов. Так что все они проверяются и добавляются в качестве задач в свой список. Просто как тот.
Поскольку большую часть времени единица будет в пути, проверки того, что делают юниты, могут быть очень быстрыми, только несколько юнитов будут делать выбор в любой данный момент, и поэтому в целом нет замедления даже для сотен или тысячи единиц. И помните, в DF все от пчел до троглодитов и деревьев - это единицы.
Проведя некоторые дополнительные исследования, становится ясно, что DF весело работает с поиском пути в целом. Она не разбивает карту на куски, она разбивает карту на сегменты или области, которые связаны между собой (что лучше, чем ничего наверняка), так что моя оценка выше является еще менее примером того, как работает DF, чем я думал. :) Что не означает, что DF - это не что иное, как удивительный по миллиону других причин.
Это говорит о том, что в игре важен игровой процесс. Не графика, не отличное программирование, не отличное написание, не отличная музыка, даже не интерфейс; ничто иное не важнее, чем сама игра.