MoonWell Client Sources
Исходники клиентских изменений MoonWell для World of Warcraft 3.3.5a (build 12340).
Клиент переведён на WarcraftXL: Wow.exe больше не содержит
MoonWell-патчей. Неподписанный оригинальный executable загружается как обычно, локальный
d3d9.dll proxy подхватывает WarcraftXL.dll, а модуль MoonWell применяет проверенные изменения
только к памяти запущенного процесса.
Что перенесено из модифицированного Wow.exe
- разблокировка пользовательского
GlueXML; CreateCharacter(name, modeId)и поле режима вCMSG_CHAR_CREATE;- одиннадцатое значение
GetCharacterInfo—charFlags, включая флаг предателя0x40000000; - загрузка WarcraftXL без import-table patch и без отдельного injector.
Large Address Aware намеренно не включён: Windows читает этот PE-флаг до загрузки DLL, поэтому сохранить его и одновременно оставить файл байт-в-байт оригинальным невозможно. Это означает стандартный 2-ГБ лимит адресного пространства для 32-битного клиента.
Структура
modules/moonwell/ MoonWell runtime-модуль WarcraftXL
vendor/warcraftxl/ закреплённый upstream git submodule
vendor/modules/ закреплённые модули WarcraftXL
src/Data/ исходники MPQ-патчей
tool/ сборщик MPQ
build-warcraftxl.ps1 сборка Win32 runtime/proxy и x64 asset host
run.ps1 полная сборка, установка и запуск клиента
Wow_Original.exe локальный оригинал build 12340 (не хранится в Git)
Подключены модули wxl-modern-assets, wxl-modern-render, wxl-unit-outline и
wxl-modern-adt. Их точные ревизии вместе с ревизией ядра закреплены git submodule.
Для обновления всех зависимостей WarcraftXL:
git submodule update --remote vendor/warcraftxl vendor/modules/*
После обновления обязательно пересоберите и проверьте вход/создание персонажа: API WarcraftXL пока развивается.
Требования
- Visual Studio 2022 с C++ toolchain для Win32 и x64;
- CMake 3.20+;
- Rust/Cargo для существующего MPQ-сборщика;
- локальный оригинальный
Wow_Original.exeс SHA-256AA63A5750D60EF16746C686B3D5E26876D98953EAB08B1C026CD0FAF78E88CB8.
После клонирования инициализируйте submodule:
git submodule update --init --recursive
Сборка WarcraftXL
Быстрое полное развёртывание клиента одной командой:
.\deploy.ps1
Скрипт инициализирует зависимости, собирает MPQ-патчи, Win32 runtime, D3D9 proxy и x64 Host,
обновляет dist, устанавливает комплект в клиент и формирует manifest.json. Путь берётся из
WOW_HOME/.env, а при их отсутствии используется C:\Program Files (x86)\World of Warcraft.
Полезные варианты:
# Явный путь и запуск клиента после установки
.\deploy.ps1 -ClientPath 'D:\Games\World of Warcraft' -StopClient -Launch
# Быстро обновить только WarcraftXL без пересборки MPQ
.\deploy.ps1 -SkipDataBuild
# Аварийный native D3D9 вместо D3D9On12
.\deploy.ps1 -NativeRenderer
Без установки в клиент:
.\build-warcraftxl.ps1 -Configuration Release
С установкой:
.\build-warcraftxl.ps1 -Configuration Release `
-ClientPath 'C:\Program Files (x86)\World of Warcraft' -Deploy
При -Deploy скрипт:
- проверяет хеш
Wow_Original.exe; - сохраняет прежний модифицированный клиент как
Wow.moonwell-patched.backup.exe; - восстанавливает оригинальный
Wow.exe; - устанавливает
WarcraftXL.dll, D3D9On12 proxy иUtils\WarcraftXLHost.exe; - монтирует шейдеры modern ADT как loose patch
Data\Patch-WXL.MPQ; - при
-PackagePathкладёт полный runtime-комплект вdistдля launcher/S3.
Основной proxy использует D3D9On12, необходимый wxl-modern-render. Эффекты постобработки в самом
модуле по умолчанию выключены. Для диагностики или несовместимой видеосистемы можно собрать и
установить native-переходник без modern-render:
.\build-warcraftxl.ps1 -Configuration Release -NativeRenderer `
-ClientPath 'C:\Program Files (x86)\World of Warcraft' -Deploy
Резервная DLL всегда также сохраняется как Utils\d3d9-native.dll.
Полная сборка MPQ, установка WarcraftXL и запуск:
$env:WOW_HOME = 'C:\Program Files (x86)\World of Warcraft'
.\run.ps1
Диагностика запуска находится в Logs\wxl-core.log, Logs\d3d9proxy.log и
Utils\WarcraftXLHost.log внутри клиента.
MPQ-пакеты
Распакованные изменяемые слои уже находятся в src/Data/; полный набор базовых MPQ для сборки
WarcraftXL не требуется и в объектное хранилище не загружается.
Основные пакеты:
patch-4— ресурсы внутриигрового магазина;patch-ruRU-4— экран входа и GlueXML;patch-ruRU-5— русская локализация и интерфейс;patch-Z— Mythic+ ресурсы и клиентские данные.
Лицензирование
WarcraftXL распространяется по GPL-3.0 и подключён как отдельный upstream submodule. MoonWell-модуль,
скомпонованный в WarcraftXL.dll, должен распространяться с соблюдением GPL-3.0 и доступным
соответствующим исходным кодом. Репозиторий не должен публиковать Blizzard assets или Wow.exe.