Как найти задачу на ровном месте?
Я очень люблю игры Paradox и должен отметить, что они мастера в деле создания глобальных стратегических игр. Когда-то давно, когда у меня было обилие времени, я буквально заигрывался в Victory и ее аддон Revolution. Затем у меня появилось очень-очень много важных дел и игры отошли на другой план, но иногда я возвращался к этой игре и с любопытством прокатывал одну-две каточки (так как на мой дедовский взгляд - это лучшее, что у них получилось из всей линейки по XIX веку).
В какой-то момент я внезапно вспомнил, что вообще-то я программист (хоть и с постфиксом “1С”:)) и реализовал парсер save-файлов этой замечательной игры. Вообще, это было задумано для того, чтобы написать классный AAR (after action report) с разными отсылками на экономическое состояние страны и мира, любопытными фактами из жизни армейских корпусов и изменения населения, но парсер и реализация расчета выпуска продукции RGO с анализом обошлись мне примерно в один месяц (или примерно 12-15 часов чистого времени), так что я слегка устал. Однако, чтобы все это не пропало втуне, то решил сделать пару заметочек об этой воистину прекрасной игре.
Что в черном ящике?
Как я уже упомянул, я реализовал расчета выпуска продукции RGO на основании данных из save-файлов. Давайте, вспомним официальную позицию с wiki (https://vic1.paradoxwikis.com/Production_Output):
POP RGO output = province_value * (culture * size) * building_efficiencies * max_working_hours * work_hour_eff * production_efficiency * {aristocrat} * resource / 5
В ходе исследований выяснилось, что вообще-то описание параметров формулы с wiki несколько не соответствует действительности (возможно потому, что все-таки это аддон revolution, а не vanilla). Пройдемся по параметрам формулы:
- province_value - 5 * коэффициент эффективности RGO, коэффициент эффективности указан в структурах province в свойстве amount в процентах (то есть цифра 25 означает коэффициент для формулы 0.25). ВАЖНО! В самой игре выводятся цифры с одним знаком после запятой, но для расчета судя по всему используется несколько больше знаков после запятой.
- culture - для признанных культур -1, для остальных - 0.5.
- size - как не трудно догадаться зависит от размера pop’а. До 499 - 0.33, до 20000 - 0.5, до 50000 - 0.75, после всегда равно 1.
- literacy - коэффициент появляется абсолютно внезапно и равен значению (0.5 + literacy / 2).
Маленькая ремарка, фактически зависимость производства от населения выражена формулой: (culture*size*literacy).
- building_efficiencies - эффективность производства данного строения (да, для целей игры RGO являются строениями, такие дела). Именно этот коэффициент чаще всего изменяется при выпадении каких-либо событий. Посмотреть можно в теле структуры country в свойстве building_efficiencies. Надо отметить, что на старте у большинства стран одинаковая эффективность строений. Например, эффективность grain_farm у 85 стран равна 0.25 (даже у РИ/ОИ), у 42 стран 1.05 и только у старушки Англии 1.65 (было бы, конечно, странно для игры с таким названием, если бы было наоборот).
- max_working_hours - лимитированность рабочего дня по социальным реформам. Социализм - это очень дорого, товарищи, надо отметить. При неограниченном размере рабочего дня используется коэффициент 1, при 14-часовом - 0.9, при 12-часовом - 0.85, при 10-часовом - 0.8, при 8-часовом - 0.75. То есть, игроку предлагается в добровольной форме отказаться от 25% промышленного потенциала. Любопытно, что со старта у США стоит 12-часовый рабочий день, а Бельгии (такая вот история) - 14-часовой рабочий день.
- work_hour_eff - эффективность рабочего часа, зависит от исследований в сфере промышленности. Посмотреть можно в теле структуры country в свойстве work_hour_eff. Интересно, что на старте 12 стран имеют эффективность 1.2 (угадайте кто). Все остальные, кроме ZUL имеющих на старте 1, имеют эффективность 1.1.
- production_efficiency - зависит от развития инфраструктуры в области (в wiki описано, что считается от развития инфраструктуры в провинции) и рассчитывается по формуле: 0.4 + 0.5 railroad_level в провинции + 0.5 * Σ railroad_level в области / количество провинций. На практике это означает, что если у вас область состоит из 4 провинций и при этом в одной уровень железных дорог равен 1, то производственная эффективность в провинции с железной дорогой эффективность будет равна 0.4625, а в остальных 0.4125.
- aristocrat - коэффициент считается по формуле: 1 + 0.1*size/100000*эффективность аристократов. Коэффициент применяется только для некоторых типов RGO. В wiki указано, что это зерно, фрукты, скот и рыба, но такое чувство, что аристократы также влияют на производство шерсти. В общем относительно этого коэффициента уверенности у меня нет, может быть когда-нибудь я проясню этот вопрос, но не сегодня. За значением коэффициента эффективности аристократов следует идти в save в тело структуры country за значением свойства aristocrat_bonus. Интересно, что на старте нет ни одной страны, которая имела бы этот коэффициент не равный единице.
Важно! Коэффициент рассчитывается от общего количества аристократов в области и влияет одинаково на каждую провинцию в области.
- resource - по wiki написано, что этот коэффициент варьируется от 0.6 до 1.5 в зависимости от спроса и предложения, но мой 12-летний эксперимент (методика пониже) показал, что никаких вариаций нет. Возможно дело в том, что это addon или в сложности, но факт остается фактом. Строго говоря, такое влияние на собственное производство может обречь игрока постоянно переключать некоторые пограничные производства ресурсов требуемых для собственного производства с закупки на продажу и наоборот.
Маленькие радости любителя “Виктории”.
Какие ваши доказательства?
Для того, чтобы выглядеть человеком, который провел серьезное исследование (а не просто натырил кусочки из разных источников) я запустил Викусю за Японию, промотал 12 лет (с ежеквартальным сохранением), распарсил каждую полученную сохраненку и сравнил расчетный и фактический выпуск товаров RGO по Японии и, в целом, по миру для каждой сохраненки.
Что важно, у меня практически идеально сходилось японское производство, однако мировое сходиться абсолютно не хотело. В итоге, я обнулил производство шелка во всех странах, кроме Франции. Производство Франции увеличил в 10000 раз и увидел, что в летопись выводится удвоенное производство. Собственно, как только я применил для сторонних стран удваивающий коэффициент - у меня сразу цифры стали очень близкими. Как я подозреваю, этот коэффициент связан со сложностью. Для игрока это значит, что забирая себе чужие провинции он параллельно уменьшает мировое производство, что ведет к повышению цен. Такая вот двойная выгода от агрессивной политики.
Очевидно, что даже если я не попал полностью, то попал очень близко. Существующие недостатки, как я предполагаю, связаны с влиянием оккупации и криминальных зданий.
Кроме того, уже когда я собирал эту статейку и обнаружил, что я считал коэффициент 0.33 для групп населения с численностью до 2000 человек, а правильно считать до численности 500 человек. Можно было бы исправить, но здесь я тоже сказал “не сегодня”, хотя задачка, конечно, улетела в инбокс.
Что в осадке?
Самые внезапные открытия связаны, конечно, с удвоенным производством у соперников и влиянием грамотности. Но я подозреваю, что так как я парсил савки целиком, то открытия далеко не последние.
К сожалению, все выявленные нюансы формулы в русскоязычном сегменте никто никогда не описывал, так что часть вопросов пришлось выявлять самому, что отняло время, а с другой стороны подарило мне удовольствие исследователя. Вообще, конечно, кого я обманываю, мне было классно от разгаданного секрета, а я подступался к нему не один год своей жизни (просто обычно побеждала лень:)).
Искренне надеюсь, что однажды, настанет день, когда я разберусь и с фабричным производством, и со спросом на товары у населения, и с ростом престижа, но не сегодня, не сегодня.
- #Victoria #Paradox #ИгровыеИсследования #ИгровыеМеханики #Геймдев #НостальгияПоИграм