Stellaris

8.9
()

Дневник разработчиков Stellaris #172

Всем бонжур, с вами французский Paradox! Для тех, кто не знаком со мной, я присоединился к команде Stellaris в декабре после полутора лет работы программистом над Europa Universalis IV.
Сегодня мы поговорим об ИИ.

Пятьдесят оттенков ИИ

В Stellaris есть несколько модулей ИИ. В силу исторических причин мы называем их «министрами», поскольку каждый должен выполнять особую роль в ИИ-империи.

Хорошее введение для новичков в этой теме
Хорошее введение для новичков в этой теме

Существует три широких категории:

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

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

Как и практически всё в наших играх, мододелы могут настраивать ИИ в скриптах, хотя я не вполне уверен, что случится, если назначить караванщикам военный ИИ космического монстра.

В качестве приветственного подарка в честь присоединения к команде мне поручили переделать военного министра…

Военный ИИ

Немного истории. В Stellaris было несколько поколений военных ИИ. Обычный вариант (используемый большинством «классических» империй) в прошлом году переделал великий sidestep, тогда как специализированные (кризис, космические монстры) оставались примерно такими же, как и в релизной версии игры. В разгар унылой и тёмной шведской зимы я смог привнести в них часть изменений, которые и покажу сегодня.

В первую очередь я поработал над визуализацией, чтобы нам проще было видеть, как ИИ «думает». Забавно, но даже в таком виде он стал выглядеть «лучше», хотя его поведение и осталось неизменным. В действительности, подобное наблюдалось в видео-играх: хороший ИИ рассказывает тебе, что он делает, а потому кажется умнее. Одним из моих излюбленных примеров этого являются враги в F.E.A.R.

Напечатав в консоли debug_ai и понаблюдав за ИИ-империей, вы увидите, что он задумал:

«Я даже не вижу код. Я вижу лишь блондинку, брюнетку и рыжую. Эй, эм, как насчёт выпить?»
«Я даже не вижу код. Я вижу лишь блондинку, брюнетку и рыжую. Эй, эм, как насчёт выпить?»

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

Черепа над каждой системой показывают военные задания, которые ИИ (военный министр) рассматривает в данный момент. Красные соответствуют выбранным и назначенным флотам, а зелёные — это прочие несохранённые варианты. И наконец, вы можете видеть, что делает каждый из флотов оперативной группы.

На скриншоте ИИ решил, что самой важной задачей является захват системы Тиралам, со значением 4500, и что по подсчётам для этого ему нужно не меньше 11,2К силы флота. Для этой задачи он выделил Kilik Armada, Jinki-Ki-Ti Armada и Grekki Armada. Поскольку с точки зрения тактики нет смысла атаковать разрозненной формацией, ИИ приказал перегруппироваться в системе Сингулярность Бруна, прежде чем приступать к атаке (улучшение из этого патча).

Для удобства итог можно также видеть в планировщике:

Как это выглядит с другой стороны баррикад
Как это выглядит с другой стороны баррикад

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

ИИ кризиса

Следующим шагом стала переработка различных кризисов под использование одного ИИ, чтобы каждое наше усилие, направленное на их улучшение, благоприятно влияло на всех. В патче 2.6 специальные ИИ для хана, преторианского роя, незваных гостей и контингенции будут использовать «стандартный» ИИ империй с некоторыми изменениями, чтобы он сохранил свою индивидуальность.

Чтобы не раскрывать все карты, вот несколько идей:

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

Самым сложным было назначение флотов на задания. Сопоставить Х флотов с Y из Z задач — не такая уж и простая задача. Пытаться ли нам выполнить как можно больше задач, рискуя слишком распылить свои силы или вообще не добиться ничего стоящего? Или нам стоит сфокусироваться на самой приоритетной задаче, что может вылиться в крупное сражение, которого можно было избежать? Как часто нам надо пересматривать наши возможности?

Обучение ИИ разделению флотов оказалось интересной задачей:

Что нам делать с этим знанием?
Что нам делать с этим знанием?

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

А поскольку некоторые из вас любят модифицировать наш ИИ, то вот вам немного новых переменных, с которыми вы сможете поиграть, когда всё это попадёт на полки магазинов.

# Значения задач
HORDE_INVASION_PLANNING_DEPTH = 5
# Насколько далеко ИИ Орды будет искать цели вторжения (в межсистемных прыжках)
SWARM_INVASION_PLANNING_DEPTH = 5
# Насколько далеко ИИ Роя будет искать цели вторжения (в межсистемных прыжках)
SWARM_POP_TARGET_MULT = 1.0
# Дополнительные очки цели для Роя (умножается на число съедобных поселений на планете)
CONTINGENCY_MEGASTRUCTURE_EXTRA_VALUE = 4
# Насколько привлекательны мегасооружения для Контингенции (прибавляется к базовому значению 1)
UNBIDDEN_PORTAL_EXTRA_VALUE = 20
# Насколько Незваные хотят защитить свой портал (в сравнении с базовым значением 1)
UNBIDDEN_BYPASSES_EXTRA_VALUE = 4
# Насколько обходные пути привлекательны для Незваных (прибавляется к базовому значению 1)
UNBIDDEN_RIVALS_EXTRA_VALUE = 10
# Дополнительные очки цели для вторгающихся соперников (Заблудшие и Неотступные)
UNBIDDEN_TARGET_EXTRA_VALUE = 10
# Дополнительные очки за случайно выбранного врага
UNBIDDEN_PSIONIC_CONQUER_DESIRE = 20
# Дополнительный вес псионическим империям при выборе врага (базовое 1 + количество контролируемых обходных путей) E
UNBIDDEN_CHOSEN_ONE_CONQUER_DESIRE = 50
# Дополнительный вес империи, возглавляемой избранным, при выборе врага (базовое 1 + количество контролируемых обходных путей)
# Размер флотилий
OFFENSE_VS_DEFENSE_STRATEGY_ALLOTMENT = 0.75
# Какую часть своего флота империя с агрессивностью 1,0 должна пытаться выделить для наступательных миссий
AVERAGE_FLEET_SIZE_FACTOR = 0.05
# Грубая оценка минимального размера флотилии относительно общей силы флота
OWN_FLEET_POWER_FACTOR = 1.0
# С каким фактором ИИ учитывает собственную силу флота при оценке сил
ALLY_FLEET_POWER_FACTOR = 0.5
# С каким фактором ИИ учитывает силу флота союзников при оценке сил
ENEMY_FLEET_POWER_FACTOR = 1.0
# С каким фактором ИИ учитывает силу вражеского флота при оценке сил
FLEET_SUPERIORITY_FACTOR = 1.5
# Во сколько раз ИИ должен быть сильнее, чтобы начать разделять флотилии (количество флотилий = относительная сила / этот фактор)
CRISIS_FLEET_SUPERIORITY_FACTOR = 1.0
# Аналогично предыдущему, но уже в сравнении с сильнейшим врагом во вселенной

Большинство этих изменений появятся в патче, который выйдет вместе с «Federations» (2.6.0), но не все. Как вы знаете, изменения боевого ИИ вносят существенные изменения в игру, и мы не хотим выпускать изменения без должного тестирования, так что некоторые из них появятся в патче 2.6.1

И на этом, я оставлю вас с sidestep в последний раз.

Что такое экономический ИИ и где такой купить?

Привет всем покорителям космоса! Зак, также известный как sidestep, снова здесь. Пока наш французский сотрудник усердно работал над военным ИИ, я был занят экономическим, так как все мы знаем, что кредиты правят мирами.

Так что же такое экономический ИИ и как он работает в Stellaris? Ну, этому можно посвятить целый отдельный дневник, отличающийся для каждой игры. Но если вкратце, то он решает, когда и как должны тратиться ресурсы и как раздобыть ещё. В Stellaris этот ИИ заведует такими вещами как торговля, добывающие станции, модули звёздных баз, политики, эдикты, приоритеты должностей и многое другое. Но пожалуй самым важным, чем руководит ИИ, является постройка зданий на планетах!

Строительство лежит в основе экономики Stellaris. Здания и районы подпитывают вашу экономику и помогают увеличить прирост поселений. Раньше экономический ИИ строил на каждой планете по отдельности, не имея какого-то долгосрочного плана. Через одинаковые промежутки времени он проверял все имеющиеся планеты и благодаря прописанным приоритетам решал построить что-нибудь «хорошее», ставил постройку в очередь и затем делал это для следующей планеты и так далее. Однако, с этим способом строительства существует фундаментальная проблема.

Проблемы

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

В итоге у нас получился огромный, сложный и очень подробный скрипт для каждого здания с достаточно сложными для понимания (и компьютерных вычислений) если/иначе условиями с разными приоритетами, за которыми в итоге никто не мог уследить. Ниже приведён пример скрипта для ИИ для одного здания.

Спойлер

Как соотносится приоритет 200, 400 и 500 с приоритетами зданий в других файлах? Понятия не имею.

Другой проблемой ИИ, работающего по такой схеме, является то, что он реагирует на нынешнюю ситуацию, но не думает наперёд. Если у него низкий прирост чего-либо, то это приведёт к тому, что скрипт выставит высокий приоритет определённому зданию и после его постройки всё станет хорошо. Но что если всё и так неплохо? Как часто нужно принимать решения о постройке? Понадобится добавить больше скриптов, которые будут указывать примерно следующее: «если с ресурсами всё хорошо, тогда нужно строить это, но не ставь этому слишком высокий приоритет, потому что тогда нам понадобятся дополнительные ресурсы, хмммм...». Теперь вы видите, как сложно написать скрипт, который не будет конфликтовать с другим скриптом. Ещё одной проблемой является то, что всё это нужно править и обновлять. Для каждого здания и для каждого скрипта.

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

Были ещё некоторые небольшие проблемы, но вот основные цели, которых я хотел достичь:

  • Менее запутанные и тяжёлые в работе с ними скрипты
  • Долгосрочное планирование для ИИ
  • Никакого строительства на планетах в отрыве друг от друга
  • Общее улучшение обращения ИИ с экономикой

Решение a.k.a. План™

Чудесные QA Stellaris составили перечень экономических показателей, которых, по их мнению, ИИ должен достичь в определённый момент времени. У них был набор для ранней игры и ещё один для поздней. Я начал с дизайна и планирования того, как провести эти изменения, и пришёл к выводу, что ИИ нужно научиться долгосрочному планированию, а не просто реагировать на экономические происшествия. Это отлично вписалось в собранные QA данные производительности, так что я просто подумал «эй, а почему бы не сделать это игровыми целями?!», и так родился Экономический План ИИ. Экономический план является ядром нового экономического ИИ; исходя из плана ИИ определяет, что ему требуется для достижения целей, и решает, как сделать это в долгосрочной перспективе. Планы являются полностью заскриптованными объектами, которые просто задают сами цели и сроки их достижения ИИ. Возможны планы на раннюю, среднюю и позднюю игру. У них также есть триггеры potential и веса ИИ, так что вы легко сможете заскриптовать, какой, когда и почему ИИ должен выбирать тот или иной план (планы заменяются только после их выполнения или при потере актуальности).

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

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

‘type = early’
Поле type определяет, на каком этапе игры этот план считается рабочим. Данный пример работает для ранней игры и будет учитываться только пока вы не достигните даты, определённой вами как начальный год середины игры в настройках.
‘income = {}’
Поле income содержит главные цели экономического плана, которые ИИ постарается достичь. Здесь вы можете задавать любые доступные стратегические ресурсы, указывая, какой чистый доход требуется ИИ, прежде чем он будет считать эту задачу выполненной. ВНИМАНИЕ: если ресурс не задан, то ИИ не будет пытаться активно строить здания, производящие этот ресурс, но может это делать, если здания производят ещё что-то, нужное ему.
‘focus = {}’
Поле focus можно использовать для задания важных целей (чистый доход) для ресурсов, которые ИИ должен пытаться достичь в первую очередь. Это поле отлично подходит для того, чтобы убедиться, что ИИ никогда не опустится ниже определённого дохода и что он будет стараться производить определённые ресурсы со старта, даже если они не в дефиците. Минералы и сплавы являются хорошим примером фокуса ранней игры, поскольку ИИ нужно производить их в значительных количествах, чтобы оставаться конкурентноспособным, простого профицита в данном случае недостаточно!
‘pops = 500’
Поле pops указывает желательное количество поселений, которого ИИ попытается достичь. Он не прекратит производство поселений по достижении этого числа, однако, по достижении цели приоритет прироста поселений и постройки сооружений для их производства снизится в пользу увеличенного производства ресурсов.
‘empire_size = 1.25’
Поле empire_size определяет, в процентах, пороговое значение, ниже которого ИИ попытается удерживать размер империи. В данном случае 1.25 означает, что ИИ попытается удерживать размер империи в ранней игре ниже 125%, чтобы не получать слишком много штрафов, но он может и слегка превысить его.
‘potential = {}’
Поле potential является стандартным для триггеров, со скоупом на ИИ-империю, и в нём вы можете задать, какие типы империй могут использовать этот план. В случае базового плана эти параметры служат лишь для того, чтобы различные типы империй производили только нужные им ресурсы, но вы можете также создавать особые экономические планы на случай войны, членства в федерации и т.д.
‘ai_weight = {}’
Поле ai_weight является стандартным полем весов, которое вы можете использовать для задания того, насколько сильно ИИ будет хотеть использовать определённый план. Поскольку в данный момент на тип империи и эпоху приходится только один возможный план, все веса выставлены на 1, но вы можете заскриптовать множество различных планов с разными весами для разных империй в зависимости от личности, принципов или иных свойств ИИ.

Исполнение Плана™

Так как же ИИ претворяет эти планы в действие? Хороший вопрос! В регулярные промежутки времени ИИ будет проверять текущую экономическую ситуацию (доход, дефицит, бюджет и т.д.) и сравнивать её с целями активного плана. Исходя из этого он будет определять, что именно ему требуется для достижения этих целей и исходя из этого создаст план строительства. План строительства по сути является списком приоритетов сооружений (или районов), которые ИИ хочет построить на разных планетах.

Этот план строительства можно увидеть в игре, наведя курсор на пустые или заблокированные ячейки сооружений при включённом debugtooltip, и выглядит он примерно так же, как на изображении выше (числа являются очками, вычисленными ИИ для этого сооружения). ИИ также будет пересчитывать этот план через равные интервалы времени, так что он не будет придерживаться устаревшего и потерявшего актуальность плана.

ИИ строит согласно плану, определяя, что именно он может строить, что эти сооружения будут производить после постройки (в том числе и ресурсы от должностей), а затем попытается создать оптимальное сочетание сооружений, чтобы как можно более эффективно выполнить цели, опеределённые в экономическом плане. Разумеется, при этом учитывается стоимость содержания и технологические ограничения. Преимущество этой системы в том, что вам больше не нужно непосредственно задавать, когда ИИ будет строить те или иные сооружения. Вместо этого он будет динамически определять в коде, что производит то или иное сооружение. Это также значит, что теперь стало куда проще добавлять новые сооружения, которые производят различные ресурсы, ведь больше не нужно вручную скриптами указывать ИИ, как с ними обращаться. Более того, строительный план также пытается учитывать, на какой планете сооружение будет наиболее продуктивным, и построит его там. Таким образом, ИИ с большей вероятностью будет создавать производственные планеты по типу «миров-кузниц». Он также ничего не будет строить на планете, где уже есть несколько вакантных должностей. Поскольку теперь это делается на уровне империи, а не на каждой планете поотдельности, ИИ может отслеживать это и стремиться к общей цели, и не будет рассматривать планеты изолированно друг от друга. ИИ всё ещё будет проверять все планеты на предмет нехватки жилья, благ или других планетарных ресурсов. Но эти сооружения всё ещё являются частью экономического плана, а потому, если вам ОЧЕНЬ нужен какой-то другой ресурс, то одной из ваших планет, возможно, придётся смириться с временной нехваткой благ.

Так как же ИИ в действительности определяет приоритеты сооружений в строительном плане? Ещё один хороший вопрос! Чтобы ответить на него, нам придётся посмотреть, как ИИ оценивает различные сооружения и районы. Оценка учитывает ряд параметров: доход, необходимый для достижения целей плана, доход, необходимый для достижения фокусов, текущие доход и дефицит, производимые ресурсы, общие ресурсы (блага, преступность, жильё и т.д.) и, наконец, влияние на рост или производство поселений. Перечисленные сооружения получают очки за каждый из параметров, которые затем домножаются на постоянный множитель и коэффициентом, зависящий от текущей нехватки в данной категории и того, насколько это сооружение поможет исправить ситуацию. Затем мы добавляем ещё больше очков, если сооружение производит ресурс, который в данный момент находится в дефиците, или если оно приближает нас к выполнению фокуса. ВНИМАНИЕ: система помнит все сооружения в очереди, так что если мы поставили в очередь 4 добывающих района, которые исправят дефицит минералов, то 5-й район не получит дополнительных очков за дефицит!

AI_DEFICIT_SCORE_MULT = 50
# ИИ будет выдавать во столько раз больше очков сооружениям, производящим ресурсы, находящиеся в дефиците
AI_FOCUS_SCORE_MULT = 10
# ИИ будет выдавать во столько раз больше очков сооружениям, производящим ресурсы
AI_AMENITIES_SCORE_MULT = 2
# ИИ будет выдавать во столько раз больше очков сооружениям, производящим блага, а не другие общие ресурсы
AI_HOUSING_SCORE_MULT = 5
# ИИ будет выдавать во столько раз больше очков сооружениям, предоставляющим жильё, а не производящим другие общие ресурсы
AI_CRIME_REDUCTION_SCORE_MULT = 2
# ИИ будет выдавать во столько раз больше очков сооружениям, борющимся с преступностью, а не производящим другие общие ресурсы
AI_ADMIN_CAP_SCORE_MULT = 2
# ИИ будет выдавать во столько раз больше очков сооружениям, повышающим административный лимит, а не производящим другие общие ресурсы
AI_POPS_SCORE_MULT = 5 # ИИ будет выдавать во столько раз больше очков сооружениям, повышающим рост поселений или строящим поселения (у них уже довольно значительный вес в коде)
AI_UPGRADE_SCORE_MULT = 40
# ИИ будет выдавать во столько раз больше очков улучшению сооружений (поскольку они не занимают дополнительную ячейку)

Выше вы можете видеть множители, применяющиеся к этим параметрам счёта. Все они являются переменными, а потому модифицируемы.

Всё это кажется очень сложным и "математичным", поэтому давайте рассмотрим наглядный пример. Если у блоргов в данный момент есть стабильный доход по всем ресурсам, кроме минералов, чистый доход которых составляет -1, и если они используют вышеуказанный план, в котором прирост минералов равен 200, а фокус 30, то при оценке добывающих районов алгоритм сделает следующее:

  1. Увидит, что блоргам не хватает ~200 чистого дохода минералов, чтобы достигнуть цели, и даст им крайне высокий базовый счёт, поскольку относительный дефицит просто огромен;
  2. Увидит, что добывающие районы производят ресурсы, необходимые для фокуса, и домножит счёт заданным коэффициентом;
  3. Увидит, что у блоргов дефицит минералов и вновь домножит счёт на заданный коэффициент.

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

Оценка Плана™

Так исправляет ли эта система все обозначенные мной проблемы? Да!

Больше не нужно писать сложные скрипты для каждого сооружения — вместо этого можно просто настраивать общий план и менять значимость ресурсов для ИИ. План также гарантирует, что ИИ всегда будет смотреть в будущее и действовать заранее, а не просто реагировать на дефицит и определённые события. ИИ теперь воспринимает планеты не как нечто отдельное, но как часть целого, связанного Планом™.

Это всё звучит хорошо и круто, но вот серьёзный вопрос: стал ли экономический ИИ лучше? Ну... да!

В наших тестах мы видели куда более мощные экономики ИИ и в целом лучшее управление. И я просто счастлив от этого! Конечно, это не только моя заслуга, мне активно помогали QA и другие разработчики, и я очень благодарен им за это, поскольку без них результат был бы куда хуже. Конечно, теперь, с приближающимся выходом Federations, я очень хочу увидеть, что вы (сообщество) сумеете сделать со всем этим, и как вы сможете замодифицировать это всё до беспамятства лол.

И последнее: конечно, при написании этого я не забыл, сколько усилий вы вложили в ваши моды. Старый стиль записи скриптов и весов сооружений всё ещё будет работать, ЕСЛИ у ИИ нет экономических планов. Это значит, что если вы удалите все планы, или если ИИ удовлетворяет всем возможным планам, то он вновь вернётся к старой системе строительства на каждой планете и будет использовать старые веса.

Спасибо, что прочитали, и удачи вам среди звёзд!

Оригинал на английском

Источник
6
ЕЩЁ ПО ТЕМЕ Дневник разработчиков Stellaris #175 - Космическая фауна Дневник разработчиков Stellaris #174 - Дополнение Federations вышло. Что дальше? Вышел патч 2.6.2 [контрольная сумма e132]
Комментарии (1)
Авторизуйтесь, чтобы принять участие в обсуждении.