новая структура проекта

This commit is contained in:
2026-04-20 21:04:25 +04:00
parent 1fe2a72ef1
commit 1a56b22e38
1932 changed files with 1886 additions and 22779 deletions
+170 -25
View File
@@ -7,7 +7,7 @@
Сейчас проект уже умеет:
- открывать MPQ-архивы клиента через editor plugin;
- извлекать файлы из MPQ в `res://extracted`;
- извлекать файлы из MPQ в `res://data/extracted`;
- читать `BLP2` текстуры;
- читать `ADT`-тайлы terrain;
- рендерить terrain из `ADT` с текстурными слоями `MCLY/MCAL`;
@@ -71,17 +71,26 @@
- `sources/`
- исходный клиент WoW 3.3.5a, без модификаций.
- `extracted/`
- `data/extracted/`
- извлечённые из MPQ файлы, с которыми работает Godot.
- `data/cache/`
- generated/offline cache: baked terrain, M2 GLB cache, WMO scene cache. Эти файлы не являются исходниками проекта и игнорируются git.
- `addons/mpq_extractor/`
- editor plugin и GDScript-сборщики сцен.
- `gdextension/`
- `src/native/`
- C++ GDExtension: MPQ, BLP, ADT, WMO.
- `maps/`
- `src/scenes/`
- готовые сцены для просмотра мира.
- `scenes/`
- скрипты streaming/preview/camera.
- `thirdparty/`
- `src/tools/`
- bake/conversion scripts.
- `src/resources/`
- Godot resources, generated GLB assets and runtime resource scripts.
- `reference/`
- external reference sources/tools: Blender WoW Studio, wow.export and Noggit RED. Runtime-project must not depend on this directory.
- `reference/noggit-red/`
- Noggit RED source reference for WoW 3.3.5 map editing, ADT/WMO/M2 placement behavior and UID workflows.
- внешние reference sources и tools для сверки форматов. Runtime-проект не должен зависеть от этой директории.
- `third_party/`
- `godot-cpp`, `StormLib` и другие зависимости.
## Требования
@@ -97,7 +106,7 @@
Собрать GDExtension:
```bat
cd gdextension
cd src\native
build.bat Release
```
@@ -107,6 +116,8 @@ build.bat Release
addons/mpq_extractor/bin/
```
VS Code/CMake использует `src/native` как `cmake.sourceDirectory`.
## Подготовка данных
По умолчанию plugin смотрит на клиент в:
@@ -118,7 +129,7 @@ res://sources
И извлекает файлы в:
```text
res://extracted
res://data/extracted
```
### Через editor plugin
@@ -188,6 +199,140 @@ res://extracted
Это уже можно использовать вручную, но в world streaming оно пока не подключено.
## Export/bake scripts
Все проектные скрипты экспорта и запекания лежат в `src/tools/`. Скрипты с расширением `.gd` запускаются через Godot headless и требуют собранный GDExtension, потому что используют `ADTLoader`, `M2Loader` и `WMOLoader`. Перед запуском данные клиента должны быть извлечены в `res://data/extracted`.
Если `godot` не добавлен в `PATH`, используй путь из `.vscode/settings.json`, например:
```powershell
& 'c:\Godot 4.6\Godot_v4.6.1-stable_win64.exe' --headless --path . --script res://src/tools/bake_all.gd -- --map Azeroth --force
```
### `src/tools/bake_all.gd`
Запекает terrain, M2 doodads и WMO objects за один проход.
```powershell
godot --headless --path . --script res://src/tools/bake_all.gd -- --map Azeroth --force
```
Основные аргументы:
- `--map Azeroth`
- `--extracted res://data/extracted`
- `--terrain-output res://data/cache/baked_terrain_v2`
- `--m2-output res://data/cache/m2_glb`
- `--wmo-output res://data/cache/wmo_tscn`
- `--full-texture-size 2048`
- `--coarse-texture-size 512`
- `--skip-terrain`, `--skip-m2`, `--skip-wmo`
- `--force`
### `src/tools/bake_adt_terrain_cache.gd`
Запекает terrain tiles в `.res` ресурсы `BakedADTTile`. Runtime streaming читает их из `baked_tile_cache_dir`.
```powershell
godot --headless --path . --script res://src/tools/bake_adt_terrain_cache.gd -- --map Azeroth --output res://data/cache/baked_terrain_v2 --force
```
Основные аргументы:
- `--map Azeroth`
- `--extracted res://data/extracted`
- `--output res://data/cache/baked_terrain_v2`
- `--tile-x 32`, `--tile-y 48` для одного тайла
- `--full-texture-size 2048`
- `--coarse-texture-size 512`
- `--texture-size N` legacy alias для обоих размеров
- `--force`
### `src/tools/bake_m2_cache.gd`
Сканирует ADT tiles, собирает уникальные M2 paths и запекает M2 doodads в `PackedScene` `.tscn`.
```powershell
godot --headless --path . --script res://src/tools/bake_m2_cache.gd -- --map Azeroth --output res://data/cache/m2_glb --force
```
Основные аргументы:
- `--map Azeroth`
- `--extracted res://data/extracted`
- `--output res://data/cache/m2_glb`
- `--force`
### `src/tools/bake_wmo_cache.gd`
Сканирует ADT tiles, собирает уникальные WMO paths и запекает WMO world objects в `PackedScene` `.tscn`.
```powershell
godot --headless --path . --script res://src/tools/bake_wmo_cache.gd -- --map Azeroth --output res://data/cache/wmo_tscn --force
```
Основные аргументы:
- `--map Azeroth`
- `--extracted res://data/extracted`
- `--output res://data/cache/wmo_tscn`
- `--force`
### `src/tools/collect_world_m2_list.gd`
Сканирует ADT tiles и сохраняет список уникальных M2 paths. Полезно перед массовой конвертацией или для оценки объема M2 cache.
```powershell
godot --headless --path . --script res://src/tools/collect_world_m2_list.gd -- --map Azeroth --output res://data/cache/m2_glb/Azeroth_m2_list.txt
```
Основные аргументы:
- `--map Azeroth`
- `--extracted res://data/extracted`
- `--output res://data/cache/m2_glb/Azeroth_m2_list.txt`
### `src/tools/m2_to_gltf.py`
Python converter для WoW 3.3.5 M2 v264 в GLTF 2.0 `.glb`. Также экспортирует texture layers рядом с GLB. Для DXT BLP decoding нужен `Pillow`.
Один M2:
```powershell
python src/tools/m2_to_gltf.py data/extracted/Character/BloodElf/Female/BloodElfFemale.M2 src/resources/characters/BloodElf/Female
```
Рекурсивная конвертация:
```powershell
python src/tools/m2_to_gltf.py --all data/extracted/Character --out src/resources/characters
```
Аргументы:
- `input` путь к одному `.M2`
- `output_dir` директория вывода для одного `.M2`
- `--all SEARCH_DIR` рекурсивно конвертирует все `.M2` под директорией
- `--out OUT_ROOT` root вывода для `--all`; по умолчанию `src/resources`
### Reference-only export scripts
В `reference/` лежат внешние скрипты и исходники для сверки форматов, включая Blender/WoW export tools из `reference/` и `reference/wow.export/`. Они не являются частью project pipeline, не вызываются runtime-кодом и не должны использоваться как источник project cache без явного переноса в `src/tools/`.
Найденные reference scripts, связанные с export/conversion:
- `reference/blender-wow-studio-3.4-1.1.0_Experimental/io_scene_wmo/m2/export_m2.py`
- `reference/blender-wow-studio-3.4-1.1.0_Experimental/io_scene_wmo/m2/operations/convert_m2_bones.py`
- `reference/blender-wow-studio-3.4-1.1.0_Experimental/io_scene_wmo/m2/operations/m2_export_validation.py`
- `reference/blender-wow-studio-3.4-1.1.0_Experimental/io_scene_wmo/wmo/export_wmo.py`
- `reference/wow.export/addons/blender/io_scene_wowobj/animation_processor.py`
- `reference/wow.export/addons/blender/io_scene_wowobj/import_wowobj.py`
- `reference/wow.export/addons/blender/io_scene_wowobj/__init__.py`
`toolbar.py` files в reference UI directories относятся к Blender UI этих внешних tools и не являются самостоятельными export/bake entrypoints.
`reference/noggit-red/` is not an export script collection. It is a source reference for WoW 3.3.5 map editing behavior: ADT/WMO/M2 placement, UID handling, map editing workflows and related editor code.
## GDScript-сборщики
### `ADTBuilder`
@@ -214,13 +359,13 @@ res://extracted
## Сцены просмотра
### `maps/test.tscn`
### `src/scenes/streaming/test.tscn`
Файл: `maps/test.tscn`
Файл: `src/scenes/streaming/test.tscn`
Тестовая сцена, которая грузит квадрат тайлов вокруг центра карты.
Скрипт: `scenes/test_world_loader.gd`
Скрипт: `src/scenes/streaming/test_world_loader.gd`
Подходит для:
@@ -228,13 +373,13 @@ res://extracted
- отладки парсинга `ADT`;
- проверки AABB и координат.
### `maps/adt_tile_preview.tscn`
### `src/scenes/preview/adt_tile_preview.tscn`
Файл: `maps/adt_tile_preview.tscn`
Файл: `src/scenes/preview/adt_tile_preview.tscn`
Preview одного `ADT` прямо в editor.
Скрипт: `scenes/adt_tile_preview.gd`
Скрипт: `src/scenes/preview/adt_tile_preview.gd`
Полезно для:
@@ -249,13 +394,13 @@ Preview одного `ADT` прямо в editor.
- `tile_y`
- `reload_now`
### `maps/eastern_kingdoms_streaming.tscn`
### `src/scenes/streaming/eastern_kingdoms_streaming.tscn`
Файл: `maps/eastern_kingdoms_streaming.tscn`
Файл: `src/scenes/streaming/eastern_kingdoms_streaming.tscn`
Главная сцена для стриминга мира.
Скрипт: `scenes/streaming_world_loader.gd`
Скрипт: `src/scenes/streaming/streaming_world_loader.gd`
Умеет:
@@ -306,7 +451,7 @@ Preview одного `ADT` прямо в editor.
## Управление камерой
Файл: `scenes/fly_camera.gd`
Файл: `src/scenes/camera/fly_camera.gd`
Управление:
@@ -356,18 +501,18 @@ Preview одного `ADT` прямо в editor.
2. Собрать расширение:
```bat
cd gdextension
cd src\native
build.bat Release
```
3. Извлечь данные в `res://extracted` через `MPQ Extractor`.
3. Извлечь данные в `res://data/extracted` через `MPQ Extractor`.
4. Открыть одну из сцен:
- `maps/adt_tile_preview.tscn`
- `maps/test.tscn`
- `maps/eastern_kingdoms_streaming.tscn`
- `src/scenes/preview/adt_tile_preview.tscn`
- `src/scenes/streaming/test.tscn`
- `src/scenes/streaming/eastern_kingdoms_streaming.tscn`
Если нужен именно просмотр мира в editor по движению камеры, используй:
- `maps/eastern_kingdoms_streaming.tscn`
- `src/scenes/streaming/eastern_kingdoms_streaming.tscn`
- `editor_preview_enabled = true`
- `editor_follow_view_camera = true`