PZO Launcher 1.1: оптимизации и исправления совместимости, 23–24 октября
Опубликовано
23–24 октября 2026 года вышла ветка PZO Launcher 1.1: предварительная V1.1-unstable, стабильная V1.1.1 и последующие исправления до V1.1.4.5. Это отдельный проект оптимизаций PZO, а не PZOptimized/xD3I и не официальный патч Project Zomboid. Релиз-ноты сообщают об ускорении анимации зомби, AI, дальнего окружения и ряда игровых операций, а затем описывают регрессии и исправления совместимости и графики. Все FPS, измерения и утверждения о совместимости ниже принадлежат автору и независимо не воспроизводились; версия 1.1 — историческая, не последняя версия проекта.
V1.1-unstable и V1.1.1: производительность
Stable V1.1.1 включает изменения V1.1-unstable и построена на 1.0.2.1. В обоих release body приведены одинаковые функции, числа, ограничения и исправления; ниже они изложены один раз. Три нативные библиотеки Windows, Linux и universal macOS сообщали версию соответствующего релиза, совпадающую с Java engine.
Автор описывает тест Louisville Horde (несколько тысяч зомби) как A/B-сравнение с vanilla в одной сессии при активном окне игры: около двукратной средней частоты кадров на маршруте орды. На городском маршруте длиной 200 тайлов он указывает 400+ / 300+ FPS против 235 / 199 FPS при масштабе 1 / 2; минимальные 1% кадров, по его словам, почти удвоились. Это результаты автора, а не независимый тест.
Анимация и AI зомби
- Расчёты весов смешивания, углов и движения каждого зомби остаются в игровом потоке, как в vanilla. Расчёты по костям (bone, twist, model и skin transforms) после завершения цикла зомби распределяются максимум на 8 frame worker threads. Ragdolls, записанные игроки и игроки с родительской привязкой остаются на vanilla-пути. Автор указывает для маршрута орды +12% / +13% средней частоты кадров, а для 1% lows — до +26%.
- Компонент state machine кэшируется отдельно для персонажа вместо поиска в HashMap при каждой проверке состояния.
- Проверки видимости автомобиля используют снимок машин за кадр, spatial grid и вариант vanilla box test без выделения памяти. Автор сообщает, что сверил его с vanilla: 0 несовпадений в 164 727 проверках.
- Удешевлены поиск классов ECS-компонентов, проверки потока profiler и проверки списка замеченных объектов.
Дальние спрайты и растительность
- Цепные ограждения, строительные леса, уличные декорации и другие спрайты с флагом translucent раньше отрисовывались по одному каждый кадр. Дальше 24 тайлов от игрока их теперь запекают в текстуру чанка; вблизи ничего не меняется. При включённом колыхании от ветра так же запекаются дальние деревья и растения.
- Для городского маршрута автор приводит уменьшение translucent draw calls с 355 до 182 за кадр и +23% средней частоты кадров при отдалённом масштабе.
- Автор благодарит автора Atmospherics за указание на высокую стоимость полупрозрачных спрайтов. Оптимизация автоматически отключается при активном Atmospherics, поскольку мод сам выполняет эту работу.
Рендеринг
- Палитры матриц копируются одним блоком, а не по одному float; skin transforms предварительно рассчитываются на worker threads.
- Количество mip-уровней цепочек текстур чанков ограничено теми уровнями, которые реально выбирает мир.
- Частицы погоды рисуются тайлами; увеличены пакеты спрайтов; для луж применяется ранняя проверка глубины; косметические повторные запекания распределены по кадрам.
- Сокращена обработка анимации дальних зомби и автомобилей, когда их не видно.
Загрузка чанков, добыча и Lua
- Результаты поиска предметов при расчёте добычи сохраняются до перезагрузки скриптов; автор приводит для FindItem снижение доли времени расчёта добычи с 46% до 24%.
- Текстуры чрезмерного размера уменьшаются в file worker, а не в игровом потоке.
- При вызове каждого Lua-события больше не создаётся новая строка profiler label на каждый callback и не пересканивается список callback после каждого вызова.
Исправления и ограничения совместимости
- Устранено сообщение ошибки при появлении зомби “Forward Direction cannot be zero length vector”, вызванное, по описанию, vanilla-состоянием гонки на общем векторе направления между игровым и render-потоками.
- Мухи у трупов больше не вызывают повторное запекание чанка рядом с игроком каждые несколько кадров, когда vanilla очищал и повторно устанавливал ту же клетку.
- Lua globals PZO и интерфейс главного меню теперь привязаны к игровому потоку, а не к фоновой задаче; автор предположил, что это устраняет периодический сбой Vehicles.Init.Default при появлении автомобиля.
- Исправлено зависание пригоревшего здания.
- Исправлены предыдущие игровые изменения: ключи зданий и автомобиля снова размещаются в бардачках (пропускаются только бардачки без контейнера); у новых персонажей снова случайные скины; предел болезни от трупа и туман возвращены к vanilla.
- Ошибки CRC/длины чанков снова отображаются, а не подавляются.
- PZO отключается и предупреждает, если в папке игры установлены переопределения классов PZ_Optimization: одновременно эти два проекта работать не могут. Если другой Java agent (например, ZombieBuddy) повторно трансформирует класс, уже изменённый PZO, патч PZO накладывается заново вместо отклонения такой трансформации.
Безопасность, диагностика и лицензия
- Доступ Lua-файлов ограничен папкой пользователя Zomboid, папкой игры и папками Steam Workshop; доступ ко всем корням дисков убран.
- Добавлен встроенный игровой benchmark harness: A/B-прогоны vanilla и PZO, маршруты орды, шторма и быстрого перемещения, замеры времени Lua по обработчикам, разбивка translucent draw и отслеживание фокуса окна.
- Неудачные обращения Vehicles.* из Lua записываются вместе с потоком и stack trace.
- Начиная с V1.1 код доступен по PZO Source-Available License (см. LICENSE). Версии до 1.0.2.1 включительно остаются под GPL-3.0.
Установка для ветки 1.1
- Windows: распаковать PZO-Optimizer-Windows.zip в папку Project Zomboid и запустить install.bat.
- macOS/Linux: распаковать PZO_Optimizer_macOS_Linux.zip в папку игры; запустить pzo_optimizer.sh на Linux или pzo_optimizer.command на macOS.
- Для серверов использовать PZO-Server-Windows.zip или PZO-Server-Linux.zip.
Исправления после выпуска 1.1
В выбранных релизах 1.1.2–1.1.4.5 развивались исправления, связанные с изменениями ZombieBuddy и рендерингом. Условия отдельных фиксов различались; ниже сохранены их версии и ограничения.
V1.1.2 — 23 октября
Исправлен отказ левого щелчка в игре при установленных ZombieBuddy и ViewpointFPS+ (или других модах Viewpoint). По описанию автора, ViewpointFPS+ повторно патчил класс персонажа после PZO; два патча PZO добавляли поля и методы во второй раз, из-за чего Java отклоняла класс (ClassFormatError), терялись хуки прицеливания и атаки Viewpoint, хотя он продолжал перехватывать курсор. PZO теперь распознаёт класс, уже содержащий его патч, и оставляет его без повторного изменения. Это охватывает патчи PZO, добавляющие что-либо в игровые классы: персонажи, выключатели света, анимация и погода.
V1.1.2.1 — 23 октября
Исправление для ZombieBuddy и любых ZombieBuddy-модов. ZombieBuddy загружал класс персонажа до того, как PZO мог его патчить; позднее PZO уже не мог добавить поля. Оптимизация AI зомби для чтения переходов действий в worker threads требовала три новых поля; эта часть пропускалась, но вторая часть применялась. В результате каждый кадр возникала ошибка главного обновления игры: с некоторыми модами игрока возвращало в меню, с другими проявлялись неработающие щелчки и задержка ввода. Оптимизация больше не добавляет поля в класс персонажа, поэтому при установленном ZombieBuddy она применяется и ускорение AI зомби доступно так же, как остальным. Если в будущей версии игры её не удастся настроить, вместо ошибки будет выполняться исходный код игры без этой оптимизации.
V1.1.2.2 — 23 октября
Hotfix для игроков Project Viewpoint; остальное совпадает с 1.1.2.1. Установленный Viewpoint вызывал неработающие щелчки мыши после загрузки игры и в собственном окне настройки. Поскольку ZombieBuddy применяет изменения Viewpoint пакетами, Java отклоняла пакет класса с полями или методами из оптимизаций 1.1, и остальная часть пакета не устанавливалась: не работали рендерер, окно настроек и обработка мыши. Пока включён Viewpoint, PZO оставляет структуру всех игровых классов без изменений. Для этих игроков отключаются три оптимизации: расчёты костей зомби в worker threads, кэш питания выключателей и пакетная обработка погодных тайлов. Поиск state machine зомби использует вариант без дополнительных полей; остальное остаётся включённым. Игроки без Viewpoint, в том числе с другими ZombieBuddy-модами, не затронуты. Если часть пакетной обработки погоды не удаётся применить, частицы дождя и снега возвращаются к отрисовке самой игры вместо ошибки.
V1.1.3 — 24 октября
Исправлено мерцание текстур и освещения, замеченное некоторыми игроками после 1.1. Все три native library (Windows, Linux и universal macOS) сообщают версию 1.1.3, соответствующую Java engine.
- Заборы, перила и столы с точечными артефактами: с 1.1 дальние прозрачные тайлы (цепные ограждения, перила, леса, уличный декор, столы для пикника) запекались в кэшированную текстуру чанка. Слабые полупрозрачные пиксели ошибочно скрывали зомби и игроков за ограждением. Теперь такие тайлы запекаются в два прохода, и скрывают объекты только своими непрозрачными частями.
- Рядом с водой слабые пиксели отображались чёрными. Тайлы с водой на фоне, включённые светильники, зеркала, стекло и декали на полу больше не запекаются и рисуются каждый кадр, как в немодифицированной игре.
- Порог расстояния, на котором тайл переключается между запеканием и отрисовкой каждый кадр, теперь следует за камерой (что лучше при Viewpoint) и имеет более широкий запас; тайлы около границы больше не переключаются туда-сюда при движении.
- Мерцание освещения при движении: раньше при изменении освещения множества чанков в один кадр обновлялась лишь часть, всегда одни и те же чанки первыми, а остальные могли до половины секунды показывать старый свет. Поскольку движение меняет освещение соседних клеток каждый кадр, рядом могли временно различаться освещённые чанки. Теперь обновления планируются каждый кадр: если помещаются — обновляются все сразу как в немодифицированной игре; иначе первыми идут чанки, ожидавшие дольше, затем ближайшие к камере. Ни один чанк не должен ждать более 33 мс. Вспышки молний по-прежнему распределены на несколько кадров, чтобы избежать сильного рывка.
V1.1.4 — 24 октября
Исправлена работа ZombieBuddy-модов и редкое мерцание деревьев. Все три native library (Windows, Linux и universal macOS) сообщают версию 1.1.4, соответствующую Java engine.
- Некоторые ZombieBuddy-моды — Knox Inventory, Knox Event Expanded, ShadowZ и Peek a View — могли терять Java-часть: появлялась ошибка “Java class missing”, ломалось главное меню либо мод не действовал. После удаления PZO проблема исчезала. ZombieBuddy устанавливал изменения модов пакетами; если класс с новыми полями или методами от оптимизации 1.1 попадал в пакет, Java отклоняла его, и остальная часть пакета пропускалась. В 1.1.2.2 это исправлялось только для Viewpoint.
- Теперь при включённом любом ZombieBuddy Java-моде PZO не меняет структуру ни одного игрового класса. Расчёт костей зомби в потоках, кэш питания выключателей и пакетная обработка погодных тайлов перестроены так, чтобы не менять классы; они остаются включены и у игроков с ZombieBuddy. Игроки Viewpoint потеряли эти оптимизации в 1.1.2.2. Только кэш state machine зомби для них работает в немного более медленном варианте. Игроки без ZombieBuddy Java-модов не затронуты.
- Деревья иногда несколько раз мерцали при приближении и затем отображались нормально. Если рядом загружался чанк или дерево начинало/заканчивало затухать около персонажа, PZO мог отложить перерисовку чанка на несколько кадров, из-за чего деревья временно исчезали. Теперь перерисовка происходит сразу, как в немодифицированной игре; отложенными всё ещё могут быть только обновления крови, трупов и освещения.
V1.1.4.5 — 24 октября
Улучшена совместимость с ZombieBuddy-модами: теперь PZO проверяет изменения каждого мода и уступает только там, где это необходимо. Все три native library (Windows, Linux и universal macOS) сообщают 1.1.4.5, соответствующую Java engine.
- При запуске PZO читает непосредственно из файлов список игровых методов, изменённых ZombieBuddy и каждым включённым ZombieBuddy-модом. PZO не запускает и не загружает код этих модов.
- В 1.1.4 любой включённый ZombieBuddy Java-мод переводил все игровые классы в совместимый режим. Теперь это делается только для классов, которые моды действительно изменяют. Например, кэш state machine зомби сохраняет полную скорость, если мод не меняет игровых персонажей.
- Если мод изменяет тот же игровой метод, который переписывает оптимизация PZO, отключается только эта оптимизация; остальные остаются активными. Изменённый модом метод работает так, как проверил его автор.
- Отчёт Zomboid/PZO_mod_compat.txt рядом с console.txt перечисляет найденные ZombieBuddy-моды, изменённые ими классы и методы, а также каждую отключённую оптимизацию PZO с причиной. Издатель рекомендует прикладывать отчёт к сообщению об ошибке. Игроков без ZombieBuddy это не затрагивает.
Установка версий исправлений 1.1.2–1.1.4.5
- Windows: распаковать PZO-Optimizer-Windows.zip в папку Project Zomboid и запустить install.bat.
- macOS/Linux: распаковать PZO_Optimizer_macOS_Linux.zip в папку игры и запустить pzo_optimizer.sh на Linux либо pzo_optimizer.command на macOS.
- Для сервера использовать PZO-Server-Windows.zip или PZO-Server-Linux.zip.
Текущая совместимость и сохранение этих результатов в более поздних версиях в этих релиз-нотах не устанавливаются. Описанные FPS и исправления — сведения издателя; независимых тестов игры, сервера или пакетов не проводили.