# MoonWell Client Sources

Исходники клиентских изменений MoonWell для World of Warcraft 3.3.5a (build 12340).

Клиент переведён на [WarcraftXL](https://github.com/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-битного клиента.

## Структура

```text
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:

```powershell
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-256
  `AA63A5750D60EF16746C686B3D5E26876D98953EAB08B1C026CD0FAF78E88CB8`.

После клонирования инициализируйте submodule:

```powershell
git submodule update --init --recursive
```

## Сборка WarcraftXL

Быстрое полное развёртывание клиента одной командой:

```powershell
.\deploy.ps1
```

Скрипт инициализирует зависимости, собирает MPQ-патчи, Win32 runtime, D3D9 proxy и x64 Host,
обновляет `dist`, устанавливает комплект в клиент и формирует `manifest.json`. Путь берётся из
`WOW_HOME`/`.env`, а при их отсутствии используется `C:\Program Files (x86)\World of Warcraft`.

Полезные варианты:

```powershell
# Явный путь и запуск клиента после установки
.\deploy.ps1 -ClientPath 'D:\Games\World of Warcraft' -StopClient -Launch

# Быстро обновить только WarcraftXL без пересборки MPQ
.\deploy.ps1 -SkipDataBuild

# Аварийный native D3D9 вместо D3D9On12
.\deploy.ps1 -NativeRenderer
```

Без установки в клиент:

```powershell
.\build-warcraftxl.ps1 -Configuration Release
```

С установкой:

```powershell
.\build-warcraftxl.ps1 -Configuration Release `
  -ClientPath 'C:\Program Files (x86)\World of Warcraft' -Deploy
```

При `-Deploy` скрипт:

1. проверяет хеш `Wow_Original.exe`;
2. сохраняет прежний модифицированный клиент как `Wow.moonwell-patched.backup.exe`;
3. восстанавливает оригинальный `Wow.exe`;
4. устанавливает `WarcraftXL.dll`, D3D9On12 proxy и `Utils\WarcraftXLHost.exe`;
5. монтирует шейдеры modern ADT как loose patch `Data\Patch-WXL.MPQ`;
6. при `-PackagePath` кладёт полный runtime-комплект в `dist` для launcher/S3.

Основной proxy использует D3D9On12, необходимый `wxl-modern-render`. Эффекты постобработки в самом
модуле по умолчанию выключены. Для диагностики или несовместимой видеосистемы можно собрать и
установить native-переходник без modern-render:

```powershell
.\build-warcraftxl.ps1 -Configuration Release -NativeRenderer `
  -ClientPath 'C:\Program Files (x86)\World of Warcraft' -Deploy
```

Резервная DLL всегда также сохраняется как `Utils\d3d9-native.dll`.

Полная сборка MPQ, установка WarcraftXL и запуск:

```powershell
$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`.
