Как перемещать карты модов в Project Zomboid с Zomboid Map Mover
Zomboid Map Mover — настольное приложение для модов карт Project Zomboid Build 42. Оно показывает карты из списка модов на сетке клеток поверх ванильного Кентукки. Карты, конфликтующие за одни клетки, можно перетащить на свободное место, затем нажать Apply: приложение создаёт перемещённые копии модов и направляет список модов на них.

Зачем нужен Map Mover
Большинство карт Кентукки рассчитаны на одно место в мире; многие популярные моды выбрали одни и те же свободные клетки. Когда две карты занимают клетку, игра загружает только одну, из-за чего может пропасть часть города. Иногда новый мир вообще не загружается. Перемещение карты означает сдвиг координат во всех её файлах: lot-файлах, данных карты мира, изображении ландшафта, map.info и Lua-скриптах, которые создают объекты в заданных местах. Делать это вручную для десятков модов неудобно.
Возможности
- Перетаскивание по сетке клеток. Каждая карта отображается по собственному изображению ландшафта, а если его нет — по lot-файлам. Красным отмечены клетки, где на одном участке пересекаются две карты. Стрелки сдвигают карту на одну клетку, Ctrl+Z отменяет действие.
- Слои. Если карты должны перекрываться, разместите одну выше другой: она будет занимать все клетки, где у неё есть данные. Apply сортирует блок maps { } в соответствии с этим порядком.
- Проверка сбоя при загрузке. В Build 42 новый мир аварийно завершается, если первая папка карты, покрывающая чанк, не содержит эту клетку. Приложение пересобирает порядок папок игры, перечисляет такие места и сообщает, как исправить каждое.
- Связи дорог. Выберите конец дороги на одной карте и дорогу на другой; приложение проложит соединение в обход зданий и по узким участкам воды. Apply выкладывает дорогу отдельным небольшим модом, загружаемым сверху.
- Включение и отключение карт. У каждой карты есть флажок. Выключенная карта исключается из списка модов при следующем Apply, но её позиция и перемещённая копия сохраняются на случай повторного включения.
- Пробная загрузка. Запускает скрытый выделенный сервер игры и просит его создать новый мир из списка модов. По утверждению автора, успешная пробная загрузка указывает, что новый мир должен загрузиться; это не гарантия для каждой конфигурации. Проверка работает в отдельной папке, поэтому сохранения и настройки пользователя остаются вне неё.
- Сохранение порядка карт. Кнопка Accept в игровом меню модов сбрасывает порядок maps { }, когда карты не занимают общие клетки — что после перемещения происходит всегда; порядок самой игры может привести к сбою нового мира. Apply добавляет небольшой мод mapmover_orderkeeper, который восстанавливает порядок до того, как игра сохранит или использует список.
- Изображение мира. Сохраняет весь мир в PNG — один пиксель на игровой тайл — так, как, по описанию, его формирует игра после последнего Apply, с названиями карт поверх. Для большого списка модов получается изображение примерно 26 000 × 37 000 пикселей.

Папки Workshop не изменяются. Перемещённые копии записываются в пользовательскую папку Zomboid/mods под именами <id>_moved. Перед каждым Apply создаётся резервная копия default.txt.


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


Весь мир, уменьшенный в 24 раза:

Фрагмент изображения примерно в треть от полного размера:

Первый запуск считывает клетки всех карт и занимает несколько минут. Последующие запуски — около минуты. Для отрисовки полного размера требуется примерно 6 ГБ памяти; на менее мощном компьютере выберите Half или Quarter. Инструмент также запускается отдельно от приложения командой: python -m mapmover.worldpng out.png --scale 2.
Запуск
Требуются Windows, Python 3 (приложение собрано на 3.12) и Project Zomboid Build 42 из Steam. README предлагает установить зависимости командой pip install -r requirements.txt, затем создать ярлык командой python -m mapmover.shortcut или запустить приложение через python -m mapmover.desktop.
Приложение открывается как локальная веб-страница в отдельном окне (pywebview на WebView2). Без pywebview она открывается в браузере. run.bat запускает консольную версию. Сервер слушает только 127.0.0.1. Pillow и numpy нужны только для изображения мира; остальная часть приложения работает без них.
Приложение автоматически ищет Steam, игру и папку Zomboid. Чтобы задать их вручную, положите config.json рядом с run.bat. Пример из README: {"game_dir":"D:/SteamLibrary/steamapps/common/ProjectZomboid","workshop_dir":"D:/SteamLibrary/steamapps/workshop/content/108600","mods_dir":"C:/Users/you/Zomboid/mods","testload_dir":"D:/ZomboidMapMoverTest"}.
Для пробной загрузки создаётся зеркало активных модов в testload_dir. По умолчанию оно находится в папке на верхнем уровне диска Workshop, поскольку зеркало использует жёсткие ссылки на файлы Workshop, а они работают только на одном диске.
Ограничения
- Связи дорог выкладывают обычные дорожные клетки на уровне земли. Бордюры, разметка и тротуары не включены; внутриигровая карта мира их не показывает.
- Координаты Lua, жёстко заданные вне файлов карты, не сдвигаются. В каждой перемещённой копии есть заметка о сборке со списком пропущенных изменений.
- Когда карта из Workshop обновляется, её перемещённая копия обновляется при следующем Apply.
Проект Zomboid Map Mover на GitHub