[моё] Postmortem on HoI IV SD modification
A few megabytes of text about a 500‑kilobyte game modification.
If you don’t plan to get into IT as a game developer or tester, you’re better off skipping this text.
The idea of cutting down and lightening the Hearts of Iron IV game files has been gnawing at me for quite a while.
The last big patch, with its “optimisations”, where I covered three in‑game years (1936‑1939) in just over three real hours at maximum speed, was the last straw.
I rolled up my sleeves and… sat down to think.
Because without a plan you can only succeed by accident.
What do we know about this game’s resources?
200+ countries (more accurately, “country tags”, since every sovereign administrative unit, from the left rear leg quartered in the Spanish Civil War to the North American Confederation, is a potential player).
About 5 flags × 3 flag sizes = 15 flags per country, plus about a dozen advisors of various kinds per country.
Out of those 200 tags, probably around a hundred have a unique focus tree. About 30‑50 icons each.
Roughly half a hundred have their own vehicle models/textures and other non‑political niceties.
Let’s say on average about ten each.
All in all something like 5 000 + 4 000 + 500 = just shy of ten thousand files related only to states and units.
Plus all the tree textures, cloud sprites and other junk from the world map that get disabled when performance suffers.
And I’ll miss or not notice 90 % of this visual fluff during a playthrough, which means it can be stripped to the maximum.
I needed to check what takes up the most space, then start thinking what to do about it, preferably without touching the game code.
Fortunately (!!!), I completely forgot that the lion’s share of this junk is packed into atlases on the first load, so looking for “as is” was obviously useless.
I should have looked at the sizes of the resulting atlases, not weighed files one by one.
But I dove into the gfx folder, slapped the command
Следующим кандидатом на вынос вперёд ногами оказался всплывший где-то в середине списка mip_debug.dds .
Тоже вжух.
5.6 мегабайт > 144 байта.
Что бы это ни было, скучать по нему мы вряд ли будем.
На душе в этот момент уже очень сильно полегчало, поэтому дальше я только быстренько подёргал и обрезал текстуры с 3D моделей - и партиклов.
В число которых затесались эти самые четыреждыблядские текстуры стреляных винтовочных гильз.
Ну и 16 мегабайт рекламы месячной подписки на DLC попали под горячую руку (отчего - сюжетный спойлер - главное меню прикольно покорёжило).
Не то, чтобы это было 100% необходимо, но мне как-то надо было проверить догадку, что:
1. При первом прогоне игра всё-таки пытается закэшировать или хотя бы проверить на наличие даже те ресурсы, которые в принципе не использует.
Типа текстур для отключенных 3D моделей.
2. От обрезания этих бесполезных ресурсов к худшему не изменится ничего.
Тут я, кстати, ошибся во второй раз.
Даже с отключенными 3D моделями на глобальной карте:
1. Игра всё равно использует 3D модели техники в редакторе шаблонов дивизий и модульной техники.
2. Некоторым landmarks типа Великой Китайской Стены как-то насрать на отключение 3D моделей и они всё равно продолжают стоять и жрать ресурсы.
Раз-два, ножки врозь - модификация готова, можно играть...
...фигушки!
Во-первых, надо провести смоук-тест.
После такого варварского вмешательства игра может не завестись.
Может завестись, но из монитора Гитлер полезет.
Или ещё чего.
Во-вторых, надо как-то проверить влияние на производительность.
Причём, сделать это быстро, но достоверно.
Что в игре со средней продолжительностью сессии от 5 часов - мягко говоря, затруднительно.
Да и без нормальных инструментов для замеров с этим беда.
После пары кофе нарисовалось какое-то подобие сценария тестирования.
Поскольку при первой загрузке изменённых файлов игра занята кэшированием чего попало и сверкой контрольной суммы (а то утибожемой кто-нибудь хакнет Достижения Steam... Будто СЭМ не существует и не позволяет добиться того же результата без правок файлов игры), грузиться надо два раза.
Куда-нибудь в центр континента.
За страну, в которой в первые дни партии не происходит абсолютно ничего.
1. Грузимся в игру.
2. Создаём новую Ironman Ahistorical партию на средней сложности за Польшу.
3. Проматываем время на 1 игровые сутки.
4. Закрываем игру штатно (через кнопку "выйти на рабочий стол").
5. Грузимся в игру.
6. Создаём новую Ironman Ahistorical партию на средней сложности за Польшу. В тот же файл сохранения, что и в шаге 2.
7. Проматываем время на 1 игровые сутки.
8. Смотрим потребление ресурсов игрой через amdgputop.
Повторить один раз без мода, один раз с модом.
VRAM 1562 > 1563
GTT 903 > 887
CPU 255 > 246
GFX 97 > 98
GPU Edge Temp 82 > 76
Из того, что в кадр не попало, но всплыло благодаря моему навыку QA's Hunch:
При первой загрузке с модом игра впала в глубокую задумчивость минут на десять (против обычных 2-5), что в принципе подтвердило мою догадку, что даже бесполезные ресурсы где-то кэшируются или как минимум опрашиваются на наличие.
Парадоксы немного намутили воды тем, что в тот же день перед началом сборки моего мода выкатили патч-хотфикс.
Что в принципе даже хорошо для достоверности тестирования: после патча игра как минимум должна попытаться пересчитать чексуммы (кококо ачивки) и как минимум посмотреть, не изменились ли файлы с графикой.
По показателям потребления ресурсов, вроде бы, ничего не изменилось, все отклонения в пределах погрешности.
Но.
Моё железо в этой игре и так работает на пределе возможностей, так что отсутствие изменений в лучшую сторону по показателям - это ОЖИДАЕМЫЙ результат.
Если изменений нет - всего-то, нужны более длительные тесты, чтобы оценить выхлоп в затяжной партии.
И ещё одно Но.
Полный прогон теста занимает что-то около 14-20 минут по максимуму.
Другими словами, я дохожу до этапа "снимаем показания" не настолько быстро, чтобы железо не успело нагреться после запуска игры.
В т. ч. потому, что железо моё - полное дерьмо :3
Более того.
Из-за того, что какой-то мудила впилил предварительные обсчёты игромеха, игра даже на паузе продолжает какое-то время вертеть такты CPU как на полной скорости.
(зачем-то. Зачем точно - пока без понятия, видел краем глаза в чейнджлогах упоминание)
Т. е. моя микропечка в ходе теста должна была одинаково быстро нагреться.
Либо сильнее, поскольку следующую итерацию мы по определению начинаем с остатками нагрева от предыдущей.
Но по факту температура, с которой я подошёл к концу второй итерации теста (читай: с модом), оказалась на 6 градусов ниже, чем в конце первой итерации (без мода).
При абсолютно одинаковых условиях проверки (минус влияние мода).
Нагрев был меньше = меньше энергии потреблено = меньше вычислений произведено = порезанные модом ресурсы всё-таки были как-то задействованы.
(памятка начинающему QA:
Вы можете возразить, что на второй запуск игры что-то уже было закэшировано в оперативке с прошлых раз и потому вывод о положительном влиянии мода - невалидный.
Обращаю внимание, что в том числе именно поэтому каждая итерация теста состоит из двух запусков игры.
Первый запуск - прогревочный, чтобы все текстуры легли в атласы, все куски ресурсов легли в оперативную память.
А вот уже на втором запуске, с подготовленной оперативкой и (если движку не перемкнёт) атласами, меряем фактический результат.
Отдельно оба прогона без мода.
И потом всё-таки оба прогона с модом.
По-хорошему, между итерациями комп всё-таки НАДО перезапускать или иным способом чистить оперативку + кэши.
Но... это сраный мод для игры, а не ААА проект стартапа из Силиконовой Промежности, и я обычный игрок, а не Project Support Specialist (World of Tanks) from Wargaming.net .
Вот если бы отклонения по потреблению ресурсов превышали 10% - тогда вопрос об очистке оперативы и прочем усилении стерильности тестового окружения имел бы место быть)
В принципе, на этом этапе мод уже можно было публиковать.
Смоук пройден, хуже не стало.
А проводить пробную партию было бесполезно потому, что после моей последней партии за Австрию разработчики накатили хотфиксик, который МОГ повлиять на ресурсоёмкость игры.
А играть две партии подряд (без и с модом) мне было тотально влом.
Но я решился покатать пару часиков за Уругвай!
Так, чисто поразмяться и убедиться, что игра не крэшнется, если я в ходе игрового процесса куда не туда полезу...
...я не знаю, из-за мода это или из-за хотфикса, но за те же три часа я пулей влетел чуть ли не в 1941 год, успел от души пофлексить под Гондурасом и повозиться с конструктором самолётов.
Это при том, что в целом по плотности событий и боевых действий в мире партия за Уругвай была даже интенсивнее, чем за Австрию.
И на этот раз я даже оказался вовлечён в долгосрочные боевые действия.
Почти ничего не тормозило, не проседало и не крэшилось.
И - за вычетом откровенно пластиковых 3D моделей и слегка всратого главного меню игры - никаких артефактов.
По метрике "фан на единицу времени" с модификацией однозначно веселее.
Да, это почти чисто психологический эффект - знать, что огромная куча бесполезного дерьма была вырезана абсолютно без потерь для геймплея.
Ради этого стоило испортить себе выходной и заняться приведением в порядок чужого проекта, который по уровню общего качества мне совершенно отвратителен.
Хоть мозги размял.
(а теперь пора пожинать плоды своего труда...
Душа требует гонок по пустыне на бронеавтомобилях!
За Южную Африку порофлить, что ли, хмммм...)
Ratio of positive and negative votes: 3/0