Дневник разработчиков №372. Модифицирование: группы населения и рабочие места
Всем привет!
На этой неделе Gruntsatwork обсудит технические особенности скриптинга групп населения. Вероятно, наиболее популярной эта тема будет у сообщества мододелов.
Системы, которые мы сейчас внедряем, — это лишь начало желаемого нами результата. Нам не терпится увидеть, что мы сможем сделать благодаря им в будущем, а также то, что сможете сделать с ними вы.
Как и всегда в подобных дневниках, всё, что вы видите, ещё может измениться в рамках дальнейшей разработки и бета-тестирования.
Группы населения и рабочие места
Всем привет, на связи Gruntsatwork! Давайте поговорим об изменениях скриптов населения и рабочих мест, которые появятся в обновлении 4.0.
Как Eladrin уже отметил в дневнике №370, мы меняем представление населения и группируем его вместе в группы населения. Эти группы определяются видом, признаками, принципами и фракциями, но никак не своими должностями. Вполне возможно, что население в группе будет работать на разных должностях.
Цель этого изменения в том, что зачастую мы будем ссылаться на группу населения, а не на конкретную единицу, что должно избавить нас от необходимости проходить по всем поселениям государства, когда нужно пересчитать модификатор.
Это позволяет нам снизить или полностью убрать отдельные наиболее ресурсо-затратные действия, использовавшиеся раньше, и заменить их более дружелюбными к производительности аналогами.
К примеру, это значит, что расчёт random_owned_pop или any_owned_pop теперь можно убрать и забыть, а вместо него использовать random_owned_pop_group и any_owned_pop_group.
То же можно сделать и со множеством других эффектов для населения, вроде create_pop или move_pop. В будущем мы теперь создаём, перемещаем и убиваем группы населения — либо полностью, либо определённый их процент. И скажу самым зорким из вас — да, это значит, что больше не нужно проходиться по каждому поселению, чтобы сделать с ними что-то немыслимое, теперь можно удобно выбрать конкретную группу населения, и математику она сделает за вас.
Благодаря безустальному труду наших программистов, которые предоставили новый функционал для скриптовых условий вроде компараторов, другие старые инструменты, вроде num_pops, вернутся в роли скриптового условия. Мы надеемся, и даже немножко побаиваемся того, что любители модификаций найдут им много хороших применений.
Это также означает, как это отметил Eladrin, что у населения и рабочих мест больше не будет постоянного контакта.
Вместо этого будет разовое назначение, при котором группа населения получит данные о своей должности и предоставляемой ей рабочей силе. После этого должность будет знать, что у неё есть рабочая сила, и она должна производить соответствующий ресурс. Пока назначение активно, нет необходимости проверять население повторно.
Всё это приводит нас к одному из крупнейших изменений: удалению всех производственных модификаторов у признаков рас и их замена на бонусную рабочую силу. Проще говоря, так как рабочая сила, назначенная на должность, не проверяет свою расу в большинстве проверок, то производственные бонусы от расы (модификаторы вроде +10% науки от должностей у признака псиоников) не применяются. Вместо этого расовые признаки теперь предоставляют модификаторы в духе «+10% бонусной рабочей силы для должностей исследователей», означающий, что 100 псионических поселений работающих на 100 должностях физиков будут требовать поддержания и производить ресурсов как 110 должностей. Другими словами, мы платим за содержание только 100 поселений, а получаем производство 110 исследователей! Косвенный эффект от такой подхода также в том, что модификаторы производства от признаков рас теперь перемножаются с другими модификаторами.
Например, в версии 3.14 если у нас есть одно поселение псиоников (+10% науки от должностей), работающее исследователями, в государстве с гражданской моделью «Меритократия» (+10% производительности специалистов) на реликтовом мире с центральным шпилем (+15% науки от должностей), итоговое производство будет равно 3 × (1 + 0.1 + 0.1 + 0.15) = 3 × 1.35 = 4.05 единицы науки каждого типа.
В версии 4.0 если у нас есть 100 псионических поселений (+10% бонусной рабочей силы для должностей исследователей), работающих на 100 должностей физиков, в государстве с гражданской моделью «Меритократия» (+10% производительности специалистов) на реликтовом мире с центральным шпилем (+15% науки от должностей), итоговое производство будет равно 3 × (1 + 0.1) × (1 + 0.1 + 0.15) = 3 × 1.1 × 1.25 = 4.125 единиц физических исследований.
Эти изменения позволяют нам создавать замечательные новые записи в скрипте, вроде этой для признака псиоников:
Запись не обязательно должна была выглядеть именно так. Но она именно такая. Таков выбор Grunts. — EВыглядит вполне сносно — GНадеюсь, у этого всего будет рефакторизация — AS
Запись не обязательно должна была выглядеть именно так. Но она именно такая. Таков выбор Grunts. — E
Выглядит вполне сносно — G
Надеюсь, у этого всего будет рефакторизация — AS
Отмечу, что отдельные проверки всё ещё могут запрашивать должность поселения, но только не напрямую, выбрав областью должность и определив, какая группа населения её занимает. Это значит, что мы можем сохранить функциональность культов смерти и других направленных эффектов kill_pop.
В отличие от них, производственные бонусы от планеты или государства всё ещё доступны, так как они просто влияют на всех.
Так что для признаков рас рекомендуем использовать следующие новые модификаторы:
pop_job_bonus_workforce_mult
для увеличения бонусной рабочей силы, создаваемой поселением для отдельного рабочего места;
pop_job_workforce_mult
для увеличение рабочей силы, создаваемой поселением для отдельного рабочего места, не считающегося бонусным;
job_max_workforce_mult
для увеличения максимума рабочей силы, принимаемой рабочим местом.
Напомню, что рабочая сила у каждой должности заполняется до разрешённого предела, но не выше. Если население производит рабочей силы больше обычного, то для заполнения должности на максимум потребуется меньше поселений, но больше оно принимать не будет. Если поселение производит бонусную рабочую силу, то оно может превышать максимум должности и увеличивать производительность дальше.
Помимо этого, мы также отделили довольно много экономических категорий, полагавшихся на проверки признаков рас. В их число также входят использование условий для создания видимости наследования у экономических классов, большинство которых мы убрали, оставив только самые надёжные по нашему мнению.
Для наследования рекомендуем использовать обычную родительско-дочернюю структуру экономических категорий, либо же использовать static_modifiers для предоставления модификаторов любой комбинации economic_categories.
Большинство, если не все, подобных изменений были сделаны для улучшения производительности: для снижения запросов, циклов и каскадных модификаторов, которые бы иначе вызывали перерасчёт для каждой планеты и поселения в государстве на случай, если в этот момент была необходимость в проверке дефицита.
Мы видим отличный потенциал у механик рабочей силы, как для нас, так и для мододелов. Мы намекали на автоматизацию — отделение рабочей силы от поселений, — и кто-то из вас уже наверняка подумал про новые применения для виртуализации. Кто знает, какие ещё радикальные типы и объёмы населения теперь будут возможны?
Проще говоря, теперь у нас есть рабочая сила, которая будет работать на Stellaris ещё долгие годы. Надеюсь, шутку оценили.
Что дальше?
Запланированная нами трансляция немножко задержится и скорее всего пройдёт вместе с началом бета-тестирования. Сейчас наша основная цель — разработка.
На следующей неделе мы поделимся ходом нашей работы.
До встречи!