Дневник разработчиков Hearts of Iron 4 от 22 мая 2019 года

Дневник разработчиков Hearts of Iron IV от 22 мая 2019 года.


HOI4 Dev Diary – Обновление 1.7, часть вторая – Технический бугалу!

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

Обновление 1.7 «Гидра» — это наш шанс переписать и улучшить некоторые назойливые системы, перейти на новый уровень и на 64-бит, поэтому этот дневник будет немного техническим.

64-битная версия

Обновление 1.6.2 будет последним 32-битной сборкой Hearts of Iron 4, и мы оставим его (и другие старые версии, как обычно) в Steam для тех, кто всё ещё хочет получить к ней доступ (и не забудьте отметить нужную сборку). Также мы не будем конвертировать старые версии в 64-битные. Это слишком большой объём работы. Поэтому мы решили увеличить большое десятичное число в номере нашей новой версии до 1.7. Обновление 1.7 «Гидра» будет полностью поддерживать 64-битные версии Linux, Mac и Windows, и это было большим началом. Есть много причин для этого изменения. Некоторые платформы, например Mac, довольно агрессивно прекращают поддержку 32-битной версии, и мы не хотим, чтобы люди не могли играть на этих платформах. 64-битная версия позволяет нам использовать более новые возможности компилятора и в будущем даст гораздо больше возможностей для кода. Также речь идёт о соответствии времени, потому что кажется, что множество компаний сделали это больше пяти лет назад.

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

Мы уже видели некоторые из них внутри, где за время этой работы мы могли заменить множество базовых структур кода, восходящих к 2003 году от рождества Христова.

Система конвоев

Старая система скриптов, которая отслеживала ваши любимые маленькие кораблики, долгое время отягощала разработку игры, и после 1.6, когда мы всё ещё имели кое-какие проблемы, мы решили, что будет лучше всего просто взять её и выбросить куда подальше. С обновлением 1.7 приходит новая система, переписанная с нуля. Старая система конвоев работала таким образом, что каждый мог ею управлять, и, к тому же, каждый мог её сломать когда угодно. Она также могла менять конвои между поставкой припасов стране и иными задачами на каждом тике, меняя их всё время, и за кноваями становилост тяжело следить, так как не было никакого чувства контроля за ними и обладания ими. Это был кошмар.

Новая система централизирована: каждая страна имеет один экземпляр класса, который обладает полным контролем над конвоями, и любые другие части кода, которым требуются конвои, могут отправлять запрос этой системе, но никогда не получают контроля над ней. Это “магически” чинит баги с исчезающими конвоями, потому что так написать код больше просто невозможно. Эта система стабильна по своей сути и прекрасно дополняет остальные улучшения стабильности, которые мы принесём вам в новом патче.

Изменения баланса флота

Мы рассмотрели сопровождение конвоев, подводные лодки, обнаружение, рейды и внесли ряд изменений:

  • Подлодки теперь могут вести огонь при отступлении

Миссия сопровождения конвоев имела лишь два возможных исхода: вы либо защищали конвой вовремя, либо нет. Своевременное прибытие давало эскортам слишком большое преимущество и делало рейды субмаринами менее эффективными. Теперь у подлодок будет 1-2 дополнительных залпа в большинстве сражений, что делает более эффективными рейды качественными подлодками против слабого эскорта.

  • Мы повысили шанс обнаружения подлодок от пассивного обнаружения (привет, bitmode) и снизили шанс обнаружения при пуске торпед. Шанс обнаружения от пассивного наблюдения теперь меняется квадратично, так что значительная разница между обнаружением и видимостью теперь будет играть более значимую роль.
  • Мы добавили авианосцам пассивное обнаружение подлодок, а также его рост с доктринами. Это сделает их более ценными для их исторической роли в Атлантике.
  • Мы также увеличили параметры обнаружения для поздних радаров и немного у сонаров, чтобы сделать поимку подлодок чуть проще.

Мы также взялись за множество проблем, связанных с конвоями и тем, как они защищаются от морских бомбардировщиков. Здесь сразу несколько проблем:

  • Транспорты слишком уязвимы для морских бомбардировщиков, что ещё сильнее усугублялось для ИИ, который, в отличие от игрока, постоянно на это попадался.
  • Если же морских бомбардировщиков было мало и они также атаковали транспорты, то уже потери самолётов были слишком высоки (или это всё же потери ОТ самолётов?).
  • Из-за того, что конвои не были “реальными” единицами флота, они могли чиниться прямо после боя, так что нанести какой-то урон можно было только потопив их.

Чтобы разобраться с этим, мы внесли ряд правок:

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

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

Улучшение производительности со стороны скриптов

Обновление 1.6 добавило ряд новых особенностей для скриптов, чтобы улучшить производительность целевых решений. Ранее эти решения ежедневно проверяли все страны мира, используя сложные триггеры с обработкой больших объёмов числовых данных. С новыми особенностями мы можем заранее ограничить список целей, чтобы снизить необходимое число проверок. Увы, новые скриптовые особенности появились на слишком позднем этапе разработки, и мы не смогли использовать их в релизной версии, а затем приоритет был отдан другим ошибкам.

К счастью, участник сообщества по имени Энтони Баум (известный также как Yard1) предпринял попытку просмотреть все скрипты и исправить случаи, в которых новые особенности могли бы на что-то повлиять (а также несколько триггеров, для которых небольшая перестановка проверок скриптов привела к улучшению производительности). С разрешения автора его работа влилась в версию 1.7. И хотя сложно оценить непосредственное влияние на производительность, мы наблюдали улучшение на 5-10% в зависимости от общего статуса игры, количества войн и т.д.

Мы планировали выпустить 1.7 сегодня вечером в виде опциональной беты, но столкнулись с неожиданными трудностями (из-за чего дневник и вышел так поздно), но мы считаем, что сможем выпустить бету и полный список изменений к ней завтра, для тех храбрецов, кто не побоится помочь нам протестировать её.


Источник – https://vk.com/pdxint