новая структура проекта
This commit is contained in:
@@ -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`
|
||||
|
||||
Reference in New Issue
Block a user