Сообщество Империал: Hearts of Iron IV Dev Diary - Обновления патча 1.3.3 №2 - Hearts of Iron IV (День Победы IV) - Paradox Interactive - Библиотека - Сообщество Империал

  • Поиск
  • Законы
  • Сообщество
  • Репутация
  • Экономика
  • Больше

Информация об авторе

  • Автор: Tempest

Информация по статье

  • Добавлено: 17 Фев 2017, 23:30
  • Просмотры: 935

Дополнительно


Репутация: 2
Hearts of Iron IV Dev Diary - Обновления патча 1.3.3 №2

Описание: Дневник разработчиков Hearts of Iron 4
Дневник разработчиков — 17 февраля 2017
Обновление патча 1.3.3 №2


Привет всем. Добро пожаловать в последний апдейт по патчу 1.3.3 перед тем, как он уйдёт на финальное тестирование. Это будет большой дневник с гостями, @SteelVolt (ИИ) и @ TomaszKowalczyk (техлид), которые также напишут свою часть. Берите чашку наичернейшего кофе и наслаждайтесь!

Промышленность - изменения в нехватке ресурсов
Завершая тему промышленности, которую мы поднимали в последние недели: Сейчас из-за нехватки ресурсов максимальным штрафом линий производства является -80%. Фактически с этой проблемой можно было справиться, просто построив больше фабрик. Мы поняли, что это было нереалистично и к тому же делало ресурсы недостаточно важными для больших стран. Теперь штраф от нехватки ресурсов рассчитывается между всеми линиями за каждый недостающий ресурс. Постепенно этот штраф может вырасти до -100%.



Удобства!
Как обычно, в патчах мы не только правим баги и баланс, но и добавляем всякие приятные улучшения, которые хоть и не слишком большие, зато сильно заметны в игре. Поехали:
Нужно начать строительство с наивысшим приоритетом? Без проблем. Если зажать Ctrl при строительстве, новый запрос появится сразу наверху очереди.
А теперь то, что давно пора было сделать. При нажатии на дивизию в списке дивизий окно прокрутится до выбранной.



У вас возникали трудности с нахождением всех своих отрядов в мешанине войск? Теперь есть кнопка (в нижнем правом углу экрана), которая вызывается также на кнопку 'M', которая прячет ВСЕ значки, кроме ваших юнитов.



Так как иногда проблематично строить планы насчёт регионов, о которых у вас мало сведений, мы добавили кнопку для выключения тумана войны, если вам понадобится получше разглядеть местность и т.п.
Мы изобрели революционную вещь, которую было решено назвать "полоса загрузки"



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



Обновление ИИ!
Несколько человек на форумах попросили поподробнее разобрать улучшения ИИ, как мы это делали перед релизом TfV, и они были услышаны. Вот новости от @SteelVolt:

Приветствую всех! Ненадолго оторвавшись от очень кропотливой роботы над улучшением HoI4 (не считая последнюю неделю, когда я слёг от гриппа), я прибыл сюда с небольшим набором новостей о том, что происходит в моей сфере.

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

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

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

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

Первым на очереди идёт печально известный спам юнитами:
- ИИ лучше подсчитывает снабжение, когда решает, сколько дивизий выставить
- Добавлена стратегия equipment_stockpile для ИИ, которая позволяет влиять на то, сколько запасов он будет делать
- Страны ИИ с большим количеством дивизий будут пытаться сделать запасы побольше на всякий случай.
Кроме исправления пары небольших багов также было место для улучшения кода там, где ИИ оценивал, сколько дивизий он сможет поддерживать. Теперь он делает это получше. Также ИИ теперь более осторожен с запасами снаряжения, особенно если это касается большой страны со множеством дивизий.
- ИИ развёртывания улучшен, чтобы лучше справляться с линиями тренировки; улучшен расчёт желаемого количества дивизий.
Частично связанно с предыдущим пунктом. ИИ любил сразу поставить на потом много линий дивизий, а потом при определённых обстоятельствах просто удалял их и начинал заново. Это всё было переработано и теперь ИИ умереннее действует как при планировании, так и при реакции на изменении.
- Теперь ИИ будет убирать линии тренировки, если он уже имеет достаточное количество юнитов.
Говорит само за себя. Раньше ИИ предпочитал оставлять уже начатые линии, будучи очень негибким при смене ситуации.

Идём дальше. Я удивлён, что этот баг не отловили раньше:
- Исправлена серьёзная проблема, когда ИИ никогда не пытался справиться с сопротивлением при помощи приказов по защите региона, полностью игнорируя захваченную территорию.
Хоть ранее и упоминалось, что ИИ сможет лучше бороться с сопротивлением, оказалось, что он этого вообще никогда и не делал. Это произошло из-за одной ошибки в одном операторе "if", из-за которого ИИ считал нужной бороться с сопротивлением только на СВОЕЙ территории, в противоположность КОНТРОЛИРУЕМОЙ.


Ужесточения и изменения в плане промышленности означали и изменения ИИ в этой области:
- Улучшена логика для целей и времени отправки ленд-лиза
- ИИ теперь может оправлять ленд-лизом не только самое новое снаряжение, но и старое
- Также ИИ отменяет ленд-лиз, если не может себе его позволить или если нет смысла отправлять его определённым странам.
- ИИ больше не должен предпочитать морское строительство военному, если у него есть много гражданской промышленности
С первой парой всё довольно просто: теперь вы должны видеть более эффективный ленд-лиз. От последней проблемы страдали многие страны (но по большей части США). Когда у страны было много гражданской промышленности, она считала, что нужно строить меньше военных заводов в пользу верфей.

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

Давайте присмотримся к скриншоту, от которого я становлюсь счастливым: Япония не объявляет войну Советскому Союзу до того, как достаточно обезопасить китайский фронт.




Производительность и Оптимизация
Эта часть для тех, кто заинтересован в подробностях кода и всяких технических деталях. Просто предупреждение! Мы поняли, что фанатов могут заинтересовать технические подробности и углубление в работу кодеров. Потому дайте нам знать, если текст был интересным или расплавил ваши мозги (уж во время перевода точно расплавит). Теперь я дам слово нашему техлиду проекта, @TomaszKowalczyk:

Привет всем, я собираюсь поговорить о всей работе над оптимизацией, которую я сделал для патча. Конечно же, мы собираемся улучшать её и в следующих патчах, но в 1.33 общая скорость увеличилась примерно на 14-18%. Хоть звучит и не слишком впечатляюще, но основной упор был на решении проблем с "шипами" производительности. Это моменты, когда игра буквально зависает в определённые моменты (обычно каждый 24й час, в начале нового дня). В очень поздней игре они раздражают больше всего. Я сильно улучшил ситуацию с ними. Я сравнивал очень позднее сохранение на 1.3.2 и 1.3.3. Первый дневной тик после снятия паузы в 1.3.2 занимал 4 секунды, а в 1.3.3 — менее 0.4 секунды.


Обычно мы не делимся рутинными техническими подробностями, но в этот раз я напишу, что и как замедляло игру:
- Я немного переработал код мирной конференции, который считал, что каждая страна может получить. В огромной войне, где проиграла большая страна, нажатие "Пропустить" снова и снова всё замедляло и замедляло игру, пока она практически не зависала. Такое было во всех мирных конференциях. В маленьких войнах это просто было трудно заметить. Проблема была в неудачной петле кода. После его перезаписи всё пошло как по маслу.
- Каждый раз, когда игрок нажимает на флот и назначает ему миссию в каком-то регионе, игра делает "нахождение пути для флота" и посылает флот в нужную область. У ИИ была логика, которая должна была убеждаться, что его флоты делают нужные задания, и оказалось, что эта логика спамила "иди туда", "иди туда", "иди туда", хотя достаточно было просто сказать один раз. Всё, что связанно с нахождением пути, довольно сложно и сильно влияет на производительность, но, к счастью, хватило одной строчки кода, которая и решила проблему со спамом!

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

Другой проблемой системы снабжения было большое количество отрядов. В очень поздней игре обладание множеством дивизий — настоящая проблема, и она требует большие вычислительные мощности. В этот раз это почти убило систему снабжения. Я сделал множество штучек, чтобы улучшить ситуацию. Мне пришлось переписать способ вычисления потребления припасов в каждой зоне. Вместо того, чтобы просматривать каждую провинцию и перебирать все отряды, спрашивая у каждого "какое у тебя потребление припасов?", я зашёл с другой стороны. Каждый час каждый юнит "докладывает" о потреблении ресурсов в своём месторасположении, составляя общее значение в регионе. По правде сказать, это была лучшая оптимизация в мире. Как оптимизировать функцию? Уберите её :)
В системе снабжения было так много улучшений, что их все просто нет смысла перечислять. Вместо этого в качестве итога я скажу, что раньше система снабжения занимала примерно 65% времени вычислений в ежедневных "шипах", а теперь — меньше 6%.

- Ещё одна оптимизация ежедневных "шипов" связана с тем, как ИИ играется дизайнером дивизий, чтобы получить желаемые шаблоны. Фикс был довольно простым. Я обнаружил, что, когда мы пытаемся добавить/убрать/заменить дивизию в любом слоте, общие статы шаблона повторно вычисляются. Это тяжко. Ну, может не настолько тяжко, но становится "настолько", когда все страны мира пытаются перебрать все возможные комбинации в одном фрейме. Оказалось, что достаточно обновлять статы шаблона только после того, как ИИ заполнил все слоты.
- Было много оптимизировано в плане: планирования морских вторжений; кода ИИ, ответственного за распределение юнитов по фронту; вычисление флотами бонусов от радаров; конвои, проверяющие, как можно пройти, если определённые каналы перекрыты и многие другие улучшения, которые сложно объяснить.
- Ну и последнее, моё любимое. В нашем движке Clausewitz была старая петля кода, к которой никто не смел прикасаться. Она обрабатывала все элементы пользовательского интерфейса в "плоском стиле" вместо древовидной иерархии. Это значило, что чем больше окон и кнопок мы добавляли, тем тяжелее и тяжелее становилась петля. И окна даже не должны были при этом отображаться, чтобы тормозить игру. Мы все знали об этом печально известном месте, но его переработка без крушения всех интерфейсов была практически невозможной. До этого момента. Мне это удалось! Раньше код проходил примерно 120 000 раз в каждом фрейме, а сейчас их меньше 700, обрабатывается только необходимые элементы интерфейсы. Я имею в виду, что когда вы смотрите на древа технологий, мы не обрабатываем скрытые окна производства, кнопки и т.д.

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

Оригинал
Copyright © «Империал». Копирование информации с этой страницы возможно только при указании прямых ссылок на эту страницу.

Будем благодарны, если Вы поделитесь этой публикацией:





    Воспользуйтесь одной из социальных сетей для входа на форум:


    Внимание: Реклама отключена для зарегистрированных посетителей

    Сообщество Империал > Библиотека > Paradox Interactive > Hearts of Iron IV (День Победы IV) > Hearts of Iron IV Dev Diary - Обновления патча 1.3.3 №2 Обратная Связь
      Стиль:
        26 Май 2017, 12:25
    © 2017 «Империал». Условия предоставления. Ответственность сторон. Рекрутинг на Империале. Лицензия зарегистрирована на: «Империал». Счётчики