Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ключевые механики v0.2 #134

Open
kreghek opened this issue Dec 18, 2018 · 3 comments
Open

Ключевые механики v0.2 #134

kreghek opened this issue Dec 18, 2018 · 3 comments
Assignees
Labels
question Further information is requested

Comments

@kreghek
Copy link
Owner

kreghek commented Dec 18, 2018

Сделать упор на глобальную карту.
И доработка механик из v0.1.

Концептуальное описание глобальной карты

Это описание будет дополняться по мере выполнения задач этапа 0.2.

  1. Глобальная карта будет в виде направленного графа.
  2. Узел может содержать: один сектор (город, просто дикая природа), несколько секторов (система подземелий).
  3. Сектор может быть как фиксированный (по схеме, города, квестовые локации), так и генерируемый процедурно (подземелья для фарма, дикая природа).
  4. Состояние процедурных секторов должно храниться, пока пользователь не выйдет из системы подземелий. То есть поднявшись со 2 уровня обратно на первый должен открыться тот же уровень с оставленными там монстрами, лутом, объектами (часть которых может быть разрушена или открыта).
  5. Механика голода/жажды. Эти параметры должны пересчитываться не внутри сектора, а при переходах по глобальной карте. Поглощение провианта возможно только на глобальной карте. Объясняется тем, что в лютых подземельях или при разведке в дикой природе персонажи не могут накрыть поляну и поесть.
  6. Глобальная карта состоит из нескольких частей. Условно, одна провинция - это один граф. Есть узлы для перехода в другие провинции. Обычно переход на границах провинции. Провинции произвольной формы, но совпадают друг с другом, как паззлы.
  7. При переходе из одного узла в другой по глобальной карте возможны случайные встречи. Вероятность встреч и тип противников зависят от узлов перехода.
  8. Глобальная карта будет генерироваться каждый раз в начале новой игры.

Генерация глобальной карты

Это описание будет дополняться по мере выполнения задач этапа 0.2.

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

Основные сущности

Государство. Абстракция, которая представляет политическую силу высшего порядка на глобальной карте. Обладает следующими параметрами:

  • Наименование. На ранних этапах выбирать произвольное наименование. Позже можно тоже пробовать генерировать по шаблону.
  • Отношения с другими государствами. Словарь Государство-Отношения (Война, Содружество, Холодная война).
  • Правитель. Служит для ограничения действий.
  • Армия. Количество единиц вооружённых сил.

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

  • Наименование. На ранних этапах выбирать произвольное наименование. Позже можно пробовать генерировать по шаблону.
  • Население. Единицы населения. Условно, одна единица населения равна 100 жителей.
  • Отрасли. Показывает, в какую сторону город движется. Представлены словарём Отрасль-Значение. Отрасли могут быть: Культура, Духовность, Легкая промышленность (товары широкого потребления), Тяжёлая промышленность (сырьё, переработка), Оборонка, Туризм, Сельхоз, Политика, Торговля.
  • Голод, Мор. Две шкалы непотребства. Если больше 0, то каждый ход вырастают на 1. Каждые 3 единицы -1 население города каждый ход.

Гильдия
Объединение персонажей. Гильдии влияют доступность на события персонажей.
Параметры:

  • Наименование. На ранних этапах выбирать произвольное наименование. Позже можно пробовать генерировать по шаблону.

Деятель. Какой-то персонаж, который может влиять на мир.
Параметры:

  • Имя. На ранних этапах выбирать произвольное наименование. Позже можно пробовать генерировать по шаблону.
  • Местоположение. Где сейчас находится персонаж. Это ячейка карты.
  • Специализации. Аналогичны специализациям города.

Стартовое состояние

На старте создаём матрицу. В произвольных местах располагаем произвольное количество городов определённых государств. Население городов первоначально 1-3. В каждом городе создаём 1-3 деятеля со случайными параметрами.

Итерации

Выполняем 10к итераций.

За одну итерацию может быть выполнено 1-3 событий.

  1. События карты.
  2. События государства.
  3. События городов.
  4. События деятелей.

События города

Увеличение населения
Происходит случайно.
+1 населения

Мор/Голод
-1 населения
Увеличивает шкалу мора/голода
Малый - к одной из специализаций

ЧП
-1 населения
Средний - к одной из специализаций

Деятель
+1 деятель в данном городе
Вероятность выше, если шкала мора/голода больше 0.
Вероятность выше, если война. Специализация "Оборонка/Политика" выше остальных.

События деятелей

Смена города
Переместиться в другой город (произвольный).
Если не правитель.

Перебежка
Редкое событие.
Переместиться в другой город (произвольный) другой государства.
Если не правитель.

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

Отставка/Смерть
Текущий деятель убирается из системы.

Коронация
Возможно, если текущий персонаж имеет макс политики среди всех остальных.
Текущий персонаж становится правителем и перемещается в столицу.

Перенос столицы
Возможно выполнить только правителем.
Другой город с максимальной Политикой становится столицей.
Большой - к текущему городу к Политике.

Объявление войны
Возможно выполнить только правителем.
Изменение отношений на Война с одним из государств с отношениями Холодная война.

Мир
Возможно выполнить только правителем.
Изменение отношений на Война с одним из государств с отношениями Холодная война.

Содружество
Возможно выполнить только правителем.
Аналогично Объявлению войны и Миру.
С холодная война на содружество.

Захват города
Если специализация "Оборонка".
-1 армия
-1 население произвольного города

  • 1 из пограничных (1-3 ячеек от границы) городов государства, с кем война.
    Шкала: оккупация.

Поселенец
Создание нового города в радиусе 1-3 ячеек карты, если там нет влияния других государств.
Сам деятель перемещается в этот город.
У города специализация близка к специализациям деятеля.

Посыпать пеплом
Выполняется, если специализация "Политика".
Выполняется, если население города 0.
Текущий город уничтожается.
Все деятели города перемещаются в произвольные города.
+1 население в произвольный город.

Расстрел/враг народа/репрессии
Возможно выполнить правителем или деятелями с Политикой/Оборонкой выше порогового значения.
-1 произвольный деятель в данном городе

Развитие отрасли

  • к определённой отрасли
  • ко всем остальным

Вклад в город

  • к определённой отрасли
  • ко всем остальным

Мобилизация
Если специализация "Политик/Оборонка"
+1 армия к государству
-1 населения

Устранить голод/мор
Доступно только эти шкалы города не равны 0.
1 Средний + к доминирующей специализации деятеля.
2 малых + к произвольной специализации деятеля (больше шанс к доминирующей).

Участие в войне
Доступно, если с кем-то война
3 малых + к произвольной специализации деятеля (больше шанс к доминирующей).

Обмен опытом
Доступно, если с кем-то содружество.
Для инициатора.
2 малых + к произвольной специализации деятеля (больше шанс к доминирующей).
Для произвольного деятеля дружественного государства.
1 малый + к доминирующей специализации инициатора.

Генерация итоговой карты

Как используем результат в итоге.

Каждая ячейка матрицы - это провинция. Провинция генерируется, как произвольный граф. Если в ячейке был город, то, начиная от произвольного узла провинции, узлы размечаются как город. Размер города равен количеству населения в городе.

В произвольном узле провинции генерируется подземелье (обновляемое каждый раз при прохождении). В зависимости от отраслей города в подземелье будет соответствующий дроп.

Если два государства находятся в состоянии войны, то в пограничных провинциях вероятность случайных встреч выше. Генерировать в них монстров-военных.

Игровой процесс

Предполагается такой сценарий. Первоначально персонаж появляется "голым" в небольшом 1-2 уровневом секторе с крысами или другими низкоуровнемыи монстрами.
Достигнув выхода, он перемещается на глобальную карту. Начинает генерироваться глобальная карта. Это может занять время. Поэтому лог генерации будет выглядеть как книга/свиток, в котором появляются строки истории. Строки истории - это лог генерации мира. Можно выводить только некоторые, значимые события, вроде войн, появления/смертей влиятельных деятелей.
В конце эта книга истории остаётся у персонажа игрока в инвентаре. Можно дальше развить в артефакт, который бы показывал все последующие события мира и всю карту мира.

@kreghek kreghek added the question Further information is requested label Dec 18, 2018
@kreghek kreghek added this to the 0.2 milestone Dec 18, 2018
@kreghek kreghek self-assigned this Dec 18, 2018
@kreghek
Copy link
Owner Author

kreghek commented Jan 10, 2019

  1. Глобальная карта будет в виде направленного графа.
  2. В каждом узле генеруем один (город) или несколько секторов (система подземелий).
  3. Сектор может быть как фиксированный (по схеме), так и генерируемый процедурно.
  4. Состояние процедурных секторов должно храниться, пока пользователь не выйдет из системы подземелий.
  5. Механика голода/жажды. Эти параметры должны пересчитываться не внутри сектора, а при переходах по глобальной карте.
  6. Глобальная карта состоит из нескольких частей. Условно, одна провинция - это один граф. Есть узлы для перехода в другие провинции.
  7. При переходе из одного узла в другой по глобальной карте возможны случайные встречи.

@kreghek
Copy link
Owner Author

kreghek commented Jun 6, 2019

Некоторые задачи этого этапа будут решены в рамках подготовки к GameDev ShowCase.

@kreghek
Copy link
Owner Author

kreghek commented Aug 20, 2019

Dwarf Fortress

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

1 participant