docs: update README and guides for multi-expansion direction

This commit is contained in:
Kelsi 2026-02-14 18:05:37 -08:00
parent 139a2f39fe
commit bdedab7c1b
7 changed files with 171 additions and 71 deletions

View file

@ -89,7 +89,7 @@ Wowee follows a modular architecture with clear separation of concerns:
- VAO/VBO/EBO management
**Texture** - Texture management
- Loading (will support BLP format)
- Loading (BLP via `AssetManager`, optional PNG overrides for development)
- OpenGL texture object
- Mipmap generation
@ -191,11 +191,14 @@ Wowee follows a modular architecture with clear separation of concerns:
### 6. Asset Pipeline (`src/pipeline/`)
**MPQManager** - Archive management
- Loads .mpq files (via StormLib)
- Priority-based file lookup (patch files override base files)
- Data extraction with caching
- Locale support (enUS, enGB, etc.)
**AssetManager** - Runtime asset access
- Loads an extracted loose-file tree indexed by `Data/manifest.json`
- Layered resolution via optional overlay manifests (multi-expansion dedup)
- File cache + path normalization
**asset_extract (tool)** - MPQ extraction
- Uses StormLib to extract MPQs into `Data/` and generate `manifest.json`
- Driven by `extract_assets.sh`
**BLPLoader** - Texture parser
- BLP format (Blizzard texture format)
@ -385,7 +388,7 @@ Window::swapBuffers()
```
World::loadMap(mapId)
MPQManager::readFile("World/Maps/{map}/map.adt")
AssetManager::readFile("World/Maps/{map}/map.adt")
ADTLoader::load(adtData)
├─ Parse MCNK chunks (terrain)
@ -394,7 +397,7 @@ ADTLoader::load(adtData)
└─ Parse MCNR chunks (normals)
For each texture reference:
MPQManager::readFile(texturePath)
AssetManager::readFile(texturePath)
BLPLoader::load(blpData)

View file

@ -9,9 +9,11 @@ Implemented today:
- SRP6a authentication + world connection
- Character creation/selection and in-world entry
- Full 3D rendering pipeline (terrain, water, sky, M2/WMO, particles)
- Core gameplay systems (movement, combat, spells, inventory, quests, vendors, loot, chat)
- Core gameplay plumbing (movement, combat/spell casting, inventory/equipment, chat)
- Transport support (boats/zeppelins) with active ongoing fixes
For a more honest snapshot of gaps and current direction, see `docs/status.md`.
## Build And Run
### 1. Clone
@ -34,9 +36,22 @@ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j"$(nproc)"
```
### 4. Provide WoW Data
### 4. Provide WoW Data (Extract + Manifest)
Put your legal WoW 3.3.5a data in `Data/` (or set `WOW_DATA_PATH`).
Wowee loads assets from an extracted loose-file tree indexed by `manifest.json`.
If you do not already have an extracted `Data/manifest.json`, extract from your WoW install:
```bash
# WotLK 3.3.5a example
./extract_assets.sh /path/to/WoW/Data wotlk
```
By default wowee uses `./Data/`. To override:
```bash
export WOW_DATA_PATH=/path/to/extracted/Data
```
### 5. Run
@ -80,5 +95,5 @@ Use `BUILD_INSTRUCTIONS.md` for distro-specific package lists.
### Missing assets (models/textures/terrain)
- Verify WoW data files exist under `Data/`
- Or export `WOW_DATA_PATH=/path/to/WoW/Data`
- Verify `Data/manifest.json` exists (or re-run `./extract_assets.sh ...`)
- Or export `WOW_DATA_PATH=/path/to/extracted/Data`

View file

@ -374,38 +374,39 @@ UPDATE realmlist SET address='your.server.ip' WHERE id=1;
## WoW Data Files
The client needs access to WoW 3.3.5a data files for terrain, models, and textures.
The client needs access to extracted WoW data (terrain, models, textures) indexed by `manifest.json`.
If you have a fresh WoW install (MPQs only), extract once with:
```bash
./extract_assets.sh /path/to/WoW-3.3.5a/Data wotlk
```
### Setting WOW_DATA_PATH
```bash
# Linux/Mac
export WOW_DATA_PATH="/path/to/WoW-3.3.5a/Data"
export WOW_DATA_PATH="/path/to/extracted/Data"
# Or add to ~/.bashrc
echo 'export WOW_DATA_PATH="/path/to/WoW-3.3.5a/Data"' >> ~/.bashrc
echo 'export WOW_DATA_PATH="/path/to/extracted/Data"' >> ~/.bashrc
source ~/.bashrc
# Run client
cd /home/k/Desktop/wowee/wowee
cd /path/to/wowee
./build/bin/wowee
```
### Data Directory Structure
Your WoW Data directory should contain:
Your extracted data directory should contain (example):
```
Data/
├── common.MPQ
├── common-2.MPQ
├── expansion.MPQ
├── lichking.MPQ
├── patch.MPQ
├── patch-2.MPQ
├── patch-3.MPQ
└── enUS/ (or your locale)
├── locale-enUS.MPQ
└── patch-enUS-3.MPQ
├── manifest.json
├── interface/
├── sound/
├── world/
└── expansions/
```
## Testing Features
@ -567,8 +568,8 @@ account set gmlevel demo 3 -1
3. **Start Client:**
```bash
cd /home/k/Desktop/wowee/wowee
export WOW_DATA_PATH="/path/to/WoW-3.3.5a/Data"
cd /path/to/wowee
export WOW_DATA_PATH="/path/to/extracted/Data"
./build/bin/wowee
```

37
docs/status.md Normal file
View file

@ -0,0 +1,37 @@
# Project Status
**Last updated**: 2026-02-15
## What This Repo Is
Wowee is a native C++ World of Warcraft client experiment focused on connecting to real emulator servers (online/multiplayer) with a custom renderer and asset pipeline.
## Current Code State
Implemented (working in normal development use):
- Auth flow: SRP6a auth + realm list + world connect with header encryption
- Rendering: terrain, WMO/M2 rendering, water, sky system, particles, minimap/world map, loading video playback
- Core gameplay plumbing: movement, targeting, action bar basics, inventory/equipment visuals, chat (tabs/channels, emotes, item links)
- Multi-expansion direction: Classic/TBC/WotLK protocol variance handling exists and is being extended (`src/game/packet_parsers_classic.cpp`, `src/game/packet_parsers_tbc.cpp`)
In progress / incomplete (known gaps):
- Quests: some quest UI/markers exist, but parts of quest log parsing are still TODOs
- Transports: functional support exists, but some spline parsing/edge cases are still TODOs
- Audio: broad coverage for events/music/UI exists, but 3D positional audio is not implemented yet
- Warden: crypto + module plumbing are in place; full module execution and server-specific compatibility are still in progress
## Near-Term Direction
- Keep tightening packet parsing across server variants (especially Classic/Turtle and TBC)
- Keep improving visual correctness for characters/equipment and M2/WMO edge cases
- Progress Warden module execution path (emulation via Unicorn when available)
## Where To Look
- Entry point: `src/main.cpp`, `src/core/application.cpp`
- Networking/auth: `src/auth/`, `src/network/`, `src/game/game_handler.cpp`
- Rendering: `src/rendering/`
- Assets/extraction: `extract_assets.sh`, `tools/asset_extract/`, `src/pipeline/asset_manager.cpp`