Дневник разработчиков Stellaris №253 — Список изменений 3.4 «Цефей» и другое!
Так как чейнджлог слишком большой и джой не позволяет выложить всё одним постом, конкретные изменения будут выложены в комментариях.
Update: така как на джое нет команды pre для корректной вставки кода в текст, если кому интересно рассматривать коды модификаторов и прочего снизу, рекомендую сделать это в удобной форме по ссылке прямо под этим текстом. Если у нас есть хоть один человек, который делает моды для стеллариса и которому не поебать.
"Всем привет!
Надеюсь, вы все сгораете от нетерпения поиграть в наше новое дополнение Overlord, которое выйдет на следующей неделе! Расширение отношений между субъектам и сюзереном — это то, чего многие из вас (и нас) ожидали на протяжении долгого времени, и мы рады, что это ожидание дало свои плоды!
Поэтому, чтобы вам было чем заняться до выхода Overlord, представляем этот дневник разработчиков, который, как обычно, содержит список изменений!
Но для начала мы должны рассказать о важном событии сообщества:
7 и 8 мая в 15:00 МСК присоединяйтесь к нам, чтобы посмотреть на показ мультиплеера нашими известными членами сообщества. Мы будем проводить с ними стрим Overlord все выходные на Twitch и YouTube! Изменения моддинга в 3.4 «Цефей» от Caligula Caesar
Буду краток, по своим меркам. Недавние обновления дали мододелам много чего, во что можно вцепиться зубами, и 3.4 не является исключением. Мы уже описывали систему инцидентов несколько недель назад, которая несомненно будет перекручена мододелами, поэтому я сосредоточусь на других изменениях языка скрипта.
Наибольшим улучшением, которое приходит на ум, это поле модификаторов. В условных модификаторах вы можете указать значение mult, которое позволит вам применить модификатор или скриптовое значение на этот условный модификатор:
triggered_pop_modifier = {potential = {NOT = { is_same_species = owner }}modifier = { pop_citizen_happiness = 1 }mult = modifier:non_main_species_happiness_mult}Как вы можете заметить, я указав модификатор, которого нет в игре. Это потому что сейчас можно указать свои собственные модификаторы в скрипте, например:
non_main_species_happiness_mult = {icon = mod_planet_happiness_multpercentage = yesgood = yescategory = pop}Этот модификатор, разумеется, будет что-то делать только если он где-то применён, но сегодня есть ряд мест, где его можно применить (в любом месте, где значения этого скрипта действительны). Например, для использования этой системы мы перенесли бонусы от признаков и торговую ценность от должностей, благодаря чему изменить эти значения стало проще (и позволило отследить нам несколько связанных с этим ошибок).
В качестве маловажного, но довольно приятного улучшения вы больше не будете получать ошибок порядка загрузки когда определённые модификаторы не работали в определённых контекстах (например, модификаторы этик в признаках).
Но это ещё не всё. Разумеется разработка Overlord дала нам возможности переработать старые системы. К примеру, тысячи строк сохранялись в скриптах анклавов используя новую систему «наследия событий». Благодаря ей события могут унаследовать свойства других событий через "base = <some_event_id>". Затем, различные свойства могут быть переписаны через “desc_clear”, “option_clear”, “picture_clear” и “show_sound_clear”. Проще говоря, это позволяет нам передавать поведение определённого момента, меняя его атмосферу.
Идём дальше. Новая папка common/tradable_actions позволяет вам определять действия, которыми вы можете торговать с другими государствами. Например, субъекты могут присягнуть новому сюзерену в обмен на бонусы. Также эта папка подробно задокументирована:
# trade_action_my_example_action = {# # If this is set to 'yes', then the action will be fired and then removed from the trade deal.# # If 'no', then the trade deal will be treated as a treaty that lasts for at least 10 years.# fire_and_forget = no## # Determines if the action will show up in the list in the trade deals view.# # SCOPE: Country "giving" the action# # FROM: Country "receiving" the action# potential = {# has_overlord = from# is_specialist_subject_type = { TYPE = bulwark }# }## # If this trigger returns 'no', then the trade deal will be cancelled. Checked on daily tick. Only relevant if fire_and_forget is 'no'.# # SCOPE: Country "giving" the action# # FROM: Country "receiving" the action# active = {# has_overlord = from# is_specialist_subject_type = { TYPE = bulwark }# }## # Effect that fires when the trade deal is accepted.# # SCOPE: Country "giving" the action# # FROM: Country "receiving" the action# on_traded_effect = {# from = {# set_galactic_custodian = yes# }# }## # Effect that fires when the trade deal ends. Only relevant if fire_and_forget is 'no'.# # SCOPE: Country "giving" the action# # FROM: Country "receiving" the action. Not guaranteed to be valid, since a trade deal is cancelled if one of the countries dies.# on_deal_ended_sender_effect = {# }## # Effect that fires when the trade deal ends. Only relevant if fire_and_forget is 'no'.# # SCOPE: Country "receiving" the action# # FROM: Country "giving" the action. Not guaranteed to be valid, since a trade deal is cancelled if one of the countries dies.# on_deal_ended_recipient_effect = {# set_galactic_custodian = no# }## # Used to determine how much the AI will value the action in a trade deal.# ai_weight = {# weight = 1## modifier = {# weight = 2# from = {# is_galactic_custodian = no# }# }# }# }Касательно ИИ и дипломатии, теперь дипломатические действия более управляемые через скрипты. Хотя они (и окружающая их логика ИИ) всё ещё в значительной степени зависят от кода, теперь можно заскриптовать дополнительные причины для принятия или отклонения ИИ предложений в поле “ai_acceptance”, а поле “should_ai_propose” позволит вам запретить ИИ предлагать это.
И наконец мододелы должны знать об изменениях синхронизированной локализации. Точнее о том, что мы её полностью убрали. Это значит, что там, где она использовалась, она заменена на обычную систему локализации. У этого есть ряд преимуществ:
— Теперь мультиплеер будет работать даже если один игрок играет на китайском, а другой на английском (сейчас это невозможно).
— Теоретически можно перевести все названия на любой язык. (Однако к сожалению я не могу обещать, что мы это сделаем, потому что у всех европейских языков сложные грамматические правила, и нам всё ещё нужно найти приемлемый способ чтобы справиться с ними. Но возможность — это всё ещё круто).
К сожалению есть также сложности, которые можно свести к следующему: нам нужно сохранить свойство таким, каким оно есть когда оно получает название (например, свойство может измениться позже, но от этого его название не должно меняться), а также убедиться в том, что название правильное, вне зависимости от локализации.
Проще говоря, если вы используете команду в скобках в настройке названий, вам нужно зарегистрировать его в том месте, где вы регистрируете название, например:
set_name = {key = "NAME_Absorbed_Species"variable_string = "[Root.GetSpeciesNamePlural]"}NAME_Absorbed_Species:0 "Absorbed [Root.GetSpeciesNamePlural]"У названий государств в папке random_names есть новые строки «поиска» чтобы служить своей цели:
# Imperial Spiritualist 2empire_name_format = {random_weight = {factor = 0modifier = {add = 1has_government = "gov_theocratic_monarchy"is_pirate = nois_primitive = noNOT = { is_country_type = fallen_empire }NOT = { is_country_type = awakened_fallen_empire }}}lookups = "<imperial_spi> [This.Capital.GetName]"format = format.imp_spi.2 # <imperial_spi> of [This.Capital.GetName]noun = format.homeworld # [This.Capital.GetName]prefix_format = format_prefix.imp_spi.2 # [This.Capital.GetName] <imperial_spi># Empire of Earth}В тех случаях, когда названия определены напрямую в скрипте, что не редкость для модов, оно будет работать так, как оно должно (до тех пор пока команды в скобках не используются). Я не могу поручиться за это, поскольку мы не использовали эту функцию, поскольку она ломает китайскую (а теперь и корейскую с японской) локализации, поскольку у них всегда переведённые названия. Также могут возникнуть проблемы, если указанное название является локализованным ключом, который вы не хотите использовать... (на заметку: теперь списки названий также используют ключи локализации).
В качестве предостережения, каждая доступная команда в квадратных скобках должна работать в C++. Мы пытались покрыть все возможные случаи, но наверняка мы что-то упустили (в этом случае в журнале ошибок может быть жалоба на недопустимое свойство“GetXPersistent”). Если есть какие-то вопиющие случаи, которые мы пропустили, пожалуйста, оставьте сообщение на форуме, посвящённому ошибкам, и мы посмотрим, что мы можем сделать!
Но подождите, есть кое-что ещё!
На этой неделе Nivarias показал последнее происхождение!
«Улей-прародитель».
В самом начале был прародитель.
Жизнь на нашем родном мире была суровой и враждующей, но несмотря на это могучий прародитель расширил свои владения. Управлять такими обширными владениями вскоре стало невозможно, и тогда прародитель создал первого отпрыска. Со временем стало очевидно, что отпрыск не справлялся в одиночку. Тогда он создал трутней, чтобы помочь ему покорять наш дом.
Когда вы сделали свой первый шаг навстречу звёздам, прародитель уединился в своём особом гнезде. Теперь когда вы одарены большим, прямым контролем, вы готовы распространить влияние прародителя на все звёзды галактики — потому что прародитель был, есть и будет.
Происхождения «Улей-прародитель» — это новое происхождение коллективного разума в Overlord, а посему он также нуждается в дополнении Utopia.
Улей сильно зависит от присутствия мощных отпрысков. Когда они рядом, улей расцветает и работает усерднее.
Вы можете добавить в свой флот судна отпрысков с аурой, которая отменяет присущие вашим кораблям штрафы и даёт им небольшой бонус. Количество содержимых кораблей отпрысков ограничено вместимостью вашего флота, подобно лимиту титанов. Судна отпрысков разделяют свои бонусы из ограниченного запаса, большие корабли получают больше очков из запаса.
Также есть модуль на космической базе для защиты пространства вашего государства, который даёт больше бонусов, чем корабли.
Гнездо отпрыска заменяет собой резервуары для выведения обычных ульев, предоставляя дополнительные бонусы. Вы наверняка захотите обзавестись таким на каждой планете.
Убедитесь в том, что кто-то занимает должность дрона-отпрыска, иначе у других ваших бесцельных трутней возникнут трудности.
Все нанятые лидеры улья-прародителя пассивно получают опыт, повышая уровень значительно быстрее лидеров других государств. В среднем, без бонусов к опыту и других источников опыта, они пассивно получают уровень примерно каждые (1.5 * достигаемый уровень) лет.
В отличии от других ульев, прародитель может освобождать сектора в качестве вассалов, передавая судьбу сектора в щупальца повышенного до прародителя отпрыска, который становится правителем нового государства. Субъекты прародителя наследуют происхождение «Улей-прародитель», со всеми сопутствующими бонусами и штрафами.
Если у вас есть субъект без происхождения «Улей-прародитель», вы можете построить на его планетах гнездо отпрыска, которое даёт столь необходимый надзор над их тру... Кхм, рабочими. Это в принципе одно и то же, правда?
Также у нас есть другое (не связанное с «Ульем-прародителем») владение!
Сюзерены с гражданской моделью «Защита окружающей среды» могут построить заставу рейнджеров, которая снижает потребление товаров массового спроса на планете субъекта, но также создаёт непригодный квадрат «Природный заповедник», который нельзя убрать пока существует ложа.
Заставу рейнджеров можно построить только на природных планетах, на которых есть свободные районы для блокировки, поэтому её нельзя построить на экуменополисах, мирах-ульях, машинных или реликтовых мирах.
Банан для сравнения.
Отличный комментарий!