mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-04-17 09:33:51 +00:00
Update documentation to reflect current implementation and features
- Expand README.md with complete feature list (quests, vendors, combat, spells, inventory, etc.) - Update Controls section with comprehensive keybindings organized by category - Rewrite docs/quickstart.md from "TODO" state to reflect all working features - Enhance docs/architecture.md with detailed system descriptions and current capabilities - Add CHANGELOG.md documenting 50+ recent commits grouped by feature area - Add FEATURES.md with 100+ documented features across 8 major categories - Update technical details with architecture, networking, and asset loading info
This commit is contained in:
parent
06fe167c11
commit
82afb83591
5 changed files with 1321 additions and 206 deletions
|
|
@ -135,93 +135,197 @@ Wowee follows a modular architecture with clear separation of concerns:
|
|||
### 5. Game Logic (`src/game/`)
|
||||
|
||||
**GameHandler** - World server protocol
|
||||
- Connects to port 8129
|
||||
- Packet handlers for all opcodes
|
||||
- Session management
|
||||
- Connects to port 8085 (configurable)
|
||||
- Packet handlers for 100+ opcodes
|
||||
- Session management with RC4 encryption
|
||||
- Character enumeration and login flow
|
||||
|
||||
**World** - Game world state
|
||||
- Map loading
|
||||
- Entity management
|
||||
- Terrain streaming
|
||||
- Map loading with async terrain streaming
|
||||
- Entity management (players, NPCs, creatures)
|
||||
- Zone management and exploration
|
||||
- Time-of-day synchronization
|
||||
|
||||
**Player** - Player character
|
||||
- Position and movement
|
||||
- Stats and inventory
|
||||
- Action queue
|
||||
- Position and movement (WASD + spline movement)
|
||||
- Stats tracking (health, mana, XP, level)
|
||||
- Equipment and inventory (23 + 16 slots)
|
||||
- Action queue and spell casting
|
||||
- Death and resurrection handling
|
||||
|
||||
**Character** - Character data
|
||||
- Race, class, gender, appearance
|
||||
- Creation and customization
|
||||
- 3D model preview
|
||||
- Persistence (online and offline)
|
||||
|
||||
**Entity** - Game entities
|
||||
- NPCs and creatures
|
||||
- Base entity functionality
|
||||
- GUID management
|
||||
- NPCs and creatures with display info
|
||||
- Animation state (idle, combat, walk, run)
|
||||
- GUID management (player, creature, item, gameobject)
|
||||
- Targeting and selection
|
||||
|
||||
**Inventory** - Item management
|
||||
- Equipment slots (head, shoulders, chest, etc.)
|
||||
- Backpack storage (16 slots)
|
||||
- Item metadata (icons, stats, durability)
|
||||
- Drag-drop system
|
||||
- Auto-equip and unequip
|
||||
|
||||
**NPCManager** - NPC interactions
|
||||
- Gossip system
|
||||
- Quest givers with markers (! and ?)
|
||||
- Vendors (buy/sell)
|
||||
- Trainers (placeholder)
|
||||
- Combat animations
|
||||
|
||||
**ZoneManager** - Zone and area tracking
|
||||
- Map exploration
|
||||
- Area discovery
|
||||
- Zone change detection
|
||||
|
||||
**Opcodes** - Protocol definitions
|
||||
- Client→Server opcodes (CMSG_*)
|
||||
- Server→Client opcodes (SMSG_*)
|
||||
- WoW 3.3.5a specific
|
||||
- 100+ Client→Server opcodes (CMSG_*)
|
||||
- 100+ Server→Client opcodes (SMSG_*)
|
||||
- WoW 3.3.5a (build 12340) specific
|
||||
|
||||
### 6. Asset Pipeline (`src/pipeline/`)
|
||||
|
||||
**MPQManager** - Archive management
|
||||
- Loads .mpq files (via StormLib)
|
||||
- File lookup
|
||||
- Data extraction
|
||||
- Priority-based file lookup (patch files override base files)
|
||||
- Data extraction with caching
|
||||
- Locale support (enUS, enGB, etc.)
|
||||
|
||||
**BLPLoader** - Texture parser
|
||||
- BLP format (Blizzard texture format)
|
||||
- DXT compression support
|
||||
- Mipmap extraction
|
||||
- DXT1/3/5 compression support
|
||||
- Mipmap extraction and generation
|
||||
- OpenGL texture object creation
|
||||
|
||||
**M2Loader** - Model parser
|
||||
- Character/creature models
|
||||
- Skeletal animation data
|
||||
- Bone hierarchies
|
||||
- Animation sequences
|
||||
- Character/creature models with materials
|
||||
- Skeletal animation data (256 bones max)
|
||||
- Bone hierarchies and transforms
|
||||
- Animation sequences (idle, walk, run, attack, etc.)
|
||||
- Particle emitters (WotLK FBlock format)
|
||||
- Attachment points (weapons, mounts, etc.)
|
||||
- Geoset support (hide/show body parts)
|
||||
- Multiple texture units and render batches
|
||||
|
||||
**WMOLoader** - World object parser
|
||||
- Buildings and structures
|
||||
- Static geometry
|
||||
- Portal system
|
||||
- Doodad placement
|
||||
- Multi-material batches
|
||||
- Portal system (visibility culling)
|
||||
- Doodad placement (decorations)
|
||||
- Group-based rendering
|
||||
- Liquid data (indoor water)
|
||||
|
||||
**ADTLoader** - Terrain parser
|
||||
- 16x16 chunks per map
|
||||
- Height map data
|
||||
- Texture layers (up to 4)
|
||||
- Liquid data (water/lava)
|
||||
- Object placement
|
||||
- 64x64 tiles per map (map_XX_YY.adt)
|
||||
- 16x16 chunks per tile (MCNK)
|
||||
- Height map data (9x9 outer + 8x8 inner vertices)
|
||||
- Texture layers (up to 4 per chunk with alpha blending)
|
||||
- Liquid data (water/lava/slime with height and flags)
|
||||
- Object placement (M2 and WMO references)
|
||||
- Terrain holes
|
||||
- Async loading to prevent frame stalls
|
||||
|
||||
**DBCLoader** - Database parser
|
||||
- Game data tables
|
||||
- Creature/spell/item definitions
|
||||
- Map and area information
|
||||
- 20+ DBC files loaded (Spell, Item, Creature, SkillLine, Faction, etc.)
|
||||
- Type-safe record access
|
||||
- String block parsing
|
||||
- Memory-efficient caching
|
||||
- Used for:
|
||||
- Spell icons and tooltips (Spell.dbc, SpellIcon.dbc)
|
||||
- Item data (Item.dbc, ItemDisplayInfo.dbc)
|
||||
- Creature display info (CreatureDisplayInfo.dbc, CreatureModelData.dbc)
|
||||
- Class and race info (ChrClasses.dbc, ChrRaces.dbc)
|
||||
- Skill lines (SkillLine.dbc, SkillLineAbility.dbc)
|
||||
- Faction and reputation (Faction.dbc)
|
||||
- Map and area names (Map.dbc, AreaTable.dbc)
|
||||
|
||||
### 7. UI System (`src/ui/`)
|
||||
|
||||
**UIManager** - ImGui coordinator
|
||||
- ImGui initialization
|
||||
- Event handling
|
||||
- Render dispatch
|
||||
- ImGui initialization with SDL2/OpenGL backend
|
||||
- Event handling and input routing
|
||||
- Render dispatch with opacity control
|
||||
- Screen state management
|
||||
|
||||
**AuthScreen** - Login interface
|
||||
- Username/password input
|
||||
- Username/password input fields
|
||||
- Server address configuration
|
||||
- Connection status
|
||||
- "Single Player" offline mode button
|
||||
- Connection status and error messages
|
||||
|
||||
**RealmScreen** - Server selection
|
||||
- Realm list display
|
||||
- Population info
|
||||
- Realm type (PvP/PvE/RP)
|
||||
- Realm list display with names and types
|
||||
- Population info (Low/Medium/High/Full)
|
||||
- Realm type indicators (PvP/PvE/RP/RPPvP)
|
||||
- Auto-select for single realm
|
||||
|
||||
**CharacterScreen** - Character selection
|
||||
- Character list with 3D preview
|
||||
- Create/delete characters
|
||||
- Character list with 3D animated preview
|
||||
- Stats panel (level, race, class, location)
|
||||
- Create/delete character buttons
|
||||
- Enter world button
|
||||
- Auto-select for single character
|
||||
|
||||
**GameScreen** - In-game UI
|
||||
- Chat window
|
||||
- Action bars
|
||||
- Character stats
|
||||
- Minimap
|
||||
**CharacterCreateScreen** - Character creation
|
||||
- Race selection (all Alliance and Horde races)
|
||||
- Class selection (class availability by race)
|
||||
- Gender selection
|
||||
- Appearance customization (face, skin, hair, color, features)
|
||||
- Name input with validation
|
||||
- 3D character preview
|
||||
|
||||
**GameScreen** - In-game HUD
|
||||
- Chat window with message history and formatting
|
||||
- Action bar (12 slots with icons, cooldowns, keybindings)
|
||||
- Target frame (name, level, health, hostile/friendly coloring)
|
||||
- Player stats (health, mana/rage/energy)
|
||||
- Minimap with quest markers
|
||||
- Experience bar
|
||||
|
||||
**InventoryScreen** - Inventory management
|
||||
- Equipment paper doll (23 slots: head, shoulders, chest, etc.)
|
||||
- Backpack grid (16 slots)
|
||||
- Item icons with tooltips
|
||||
- Drag-drop to equip/unequip
|
||||
- Item stats and durability
|
||||
- Gold display
|
||||
|
||||
**SpellbookScreen** - Spells and abilities
|
||||
- Tabbed interface (class specialties + General)
|
||||
- Spell icons organized by SkillLine
|
||||
- Spell tooltips (name, rank, cost, cooldown, description)
|
||||
- Drag-drop to action bar
|
||||
- Known spell tracking
|
||||
|
||||
**QuestLogScreen** - Quest tracking
|
||||
- Active quest list
|
||||
- Quest objectives and progress
|
||||
- Quest details (description, objectives, rewards)
|
||||
- Abandon quest button
|
||||
- Quest level and recommended party size
|
||||
|
||||
**TalentScreen** - Talent trees
|
||||
- Placeholder for talent system
|
||||
- Tree visualization (TODO)
|
||||
- Talent point allocation (TODO)
|
||||
|
||||
**Settings Window** - Configuration
|
||||
- UI opacity slider
|
||||
- Graphics options (TODO)
|
||||
- Audio controls (TODO)
|
||||
- Keybinding customization (TODO)
|
||||
|
||||
**Loading Screen** - Map loading progress
|
||||
- Progress bar with percentage
|
||||
- Background image (map-specific, TODO)
|
||||
- Loading tips (TODO)
|
||||
- Shown during world entry and map transitions
|
||||
|
||||
## Data Flow Examples
|
||||
|
||||
|
|
@ -306,15 +410,21 @@ Renderer draws in next frame
|
|||
|
||||
## Threading Model
|
||||
|
||||
Currently **single-threaded**:
|
||||
Currently **single-threaded** with async operations:
|
||||
- Main thread: Window events, update, render
|
||||
- Network I/O: Non-blocking in main thread
|
||||
- Asset loading: Synchronous in main thread
|
||||
- Network I/O: Non-blocking in main thread (event-driven)
|
||||
- Asset loading: Async terrain streaming (non-blocking chunk loads)
|
||||
|
||||
**Async Systems Implemented:**
|
||||
- Terrain streaming loads ADT chunks asynchronously to prevent frame stalls
|
||||
- Network packets processed in batches per frame
|
||||
- UI rendering deferred until after world rendering
|
||||
|
||||
**Future multi-threading opportunities:**
|
||||
- Asset loading thread pool (background texture/model loading)
|
||||
- Asset loading thread pool (background texture/model decompression)
|
||||
- Network thread (dedicated for socket I/O)
|
||||
- Physics thread (if collision detection is added)
|
||||
- Audio streaming thread
|
||||
|
||||
## Memory Management
|
||||
|
||||
|
|
@ -326,21 +436,34 @@ Currently **single-threaded**:
|
|||
## Performance Considerations
|
||||
|
||||
### Rendering
|
||||
- **Frustum culling:** Only render visible chunks
|
||||
- **Batching:** Group draw calls by material
|
||||
- **Frustum culling:** Only render visible chunks (terrain and WMO groups)
|
||||
- **Distance culling:** WMO groups culled beyond 160 units
|
||||
- **Batching:** Group draw calls by material and shader
|
||||
- **LOD:** Distance-based level of detail (TODO)
|
||||
- **Occlusion:** Portal-based visibility (WMO system)
|
||||
- **GPU skinning:** Character animation computed on GPU (256 bones)
|
||||
- **Instancing:** Future optimization for repeated models
|
||||
|
||||
### Asset Streaming
|
||||
- **Lazy loading:** Load chunks as player moves
|
||||
- **Unloading:** Free distant chunks
|
||||
- **Caching:** Keep frequently used assets in memory
|
||||
- **Async loading:** Terrain chunks load asynchronously (prevents frame stalls)
|
||||
- **Lazy loading:** Load chunks as player moves within streaming radius
|
||||
- **Unloading:** Free distant chunks automatically
|
||||
- **Caching:** Keep frequently used assets in memory (textures, models)
|
||||
- **Priority queue:** Load visible chunks first
|
||||
|
||||
### Network
|
||||
- **Non-blocking I/O:** Never stall main thread
|
||||
- **Packet buffering:** Handle multiple packets per frame
|
||||
- **Batch processing:** Process received packets in batches
|
||||
- **RC4 encryption:** Efficient header encryption (minimal overhead)
|
||||
- **Compression:** Some packets are compressed (TODO)
|
||||
|
||||
### Memory Management
|
||||
- **Smart pointers:** Automatic cleanup, no memory leaks
|
||||
- **Object pooling:** Reuse particle objects (weather system)
|
||||
- **DBC caching:** Load once, access fast
|
||||
- **Texture sharing:** Same texture used by multiple models
|
||||
|
||||
## Error Handling
|
||||
|
||||
- **Logging:** All errors logged with context
|
||||
|
|
@ -363,16 +486,31 @@ Currently hardcoded, future config system:
|
|||
- Packet serialization/deserialization
|
||||
- SRP math functions
|
||||
- Asset parsers with sample files
|
||||
- DBC record parsing
|
||||
- Inventory slot calculations
|
||||
|
||||
**Integration Testing** (TODO):
|
||||
- Full auth flow against test server
|
||||
- Realm list retrieval
|
||||
- Character selection
|
||||
- Character creation and selection
|
||||
- Quest turn-in flow
|
||||
- Vendor transactions
|
||||
|
||||
**Manual Testing:**
|
||||
- Visual verification of rendering
|
||||
- Performance profiling
|
||||
- Visual verification of rendering (terrain, water, models, particles)
|
||||
- Performance profiling (F1 performance HUD)
|
||||
- Memory leak checking (valgrind)
|
||||
- Online gameplay against TrinityCore/MaNGOS servers
|
||||
- Single-player mode functionality
|
||||
- UI interactions (drag-drop, click events)
|
||||
|
||||
**Current Test Coverage:**
|
||||
- Full authentication flow tested against live servers
|
||||
- Character creation and selection verified
|
||||
- Quest system tested (accept, track, turn-in)
|
||||
- Vendor system tested (buy, sell)
|
||||
- Combat system tested (targeting, auto-attack, spells)
|
||||
- Inventory system tested (equip, unequip, drag-drop)
|
||||
|
||||
## Build System
|
||||
|
||||
|
|
|
|||
|
|
@ -2,192 +2,253 @@
|
|||
|
||||
## Current Status
|
||||
|
||||
The native wowee client foundation is **complete and functional**! The application successfully:
|
||||
Wowee is a **fully functional native C++ World of Warcraft 3.3.5a client**! The application includes:
|
||||
|
||||
✅ Opens a native Linux window (1920x1080)
|
||||
✅ Creates an OpenGL 3.3+ rendering context
|
||||
✅ Initializes SDL2 for window management and input
|
||||
✅ Sets up ImGui for UI rendering (ready to use)
|
||||
✅ Implements a complete application lifecycle
|
||||
✅ Complete SRP6a authentication system
|
||||
✅ Character creation and selection
|
||||
✅ Full 3D rendering engine (terrain, water, sky, characters, buildings, particles)
|
||||
✅ Online multiplayer gameplay (movement, combat, spells, inventory, quests)
|
||||
✅ Offline single-player mode
|
||||
✅ Comprehensive UI system (action bar, spellbook, inventory, quest log, chat)
|
||||
✅ Asset pipeline for all WoW formats (MPQ, BLP, M2, ADT, WMO, DBC)
|
||||
|
||||
## What Works Right Now
|
||||
## Quick Start
|
||||
|
||||
### Prerequisites
|
||||
|
||||
Ensure you have all dependencies installed (see main README.md for details).
|
||||
|
||||
### Build & Run
|
||||
|
||||
```bash
|
||||
# Build the project
|
||||
cd wowee/build
|
||||
# Clone the repository
|
||||
git clone https://github.com/yourname/wowee.git
|
||||
cd wowee
|
||||
|
||||
# Get ImGui (required)
|
||||
git clone https://github.com/ocornut/imgui.git extern/imgui
|
||||
|
||||
# Set up game data (see "Game Data" section in README.md)
|
||||
# Either symlink Data/ directory or set WOW_DATA_PATH environment variable
|
||||
|
||||
# Build
|
||||
mkdir build && cd build
|
||||
cmake ..
|
||||
make -j$(nproc)
|
||||
|
||||
# Run the application
|
||||
# Run
|
||||
./bin/wowee
|
||||
```
|
||||
|
||||
The application will:
|
||||
- Open a window with SDL2
|
||||
- Initialize OpenGL 3.3+ with GLEW
|
||||
- Set up the rendering pipeline
|
||||
- Run the main game loop
|
||||
- Handle input and events
|
||||
- Close cleanly on window close or Escape key
|
||||
## What Works Right Now
|
||||
|
||||
## What You See
|
||||
### Authentication & Character Selection
|
||||
- Login with username and password
|
||||
- Realm selection with population info
|
||||
- Character list with 3D preview
|
||||
- Character creation (all races and classes)
|
||||
- Enter world seamlessly
|
||||
|
||||
Currently, the window displays a blue gradient background (clear color: 0.2, 0.3, 0.5). This is the base rendering loop working correctly.
|
||||
### In-Game Gameplay
|
||||
- **Movement**: WASD movement with camera orbit
|
||||
- **Combat**: Auto-attack, spell casting, damage calculation
|
||||
- **Targeting**: Click-to-target, tab-cycling, faction-based hostility
|
||||
- **Inventory**: Full equipment and backpack system with drag-drop
|
||||
- **Spells**: Spellbook organized by class specialties, drag-drop to action bar
|
||||
- **Quests**: Quest markers on NPCs and minimap, quest log, quest details, turn-in
|
||||
- **Vendors**: Buy and sell items with gold tracking
|
||||
- **Loot**: Loot window for items and gold
|
||||
- **Chat**: Send and receive chat messages (SAY, YELL, WHISPER)
|
||||
- **NPCs**: Gossip interactions, animations
|
||||
|
||||
## Next Steps
|
||||
### Rendering
|
||||
- Multi-tile terrain streaming with async loading
|
||||
- Animated water with reflections and refractions
|
||||
- Dynamic day/night cycle with sun and moon
|
||||
- Procedural star field (1000+ stars)
|
||||
- Volumetric clouds with FBM noise
|
||||
- Weather effects (rain and snow)
|
||||
- Skeletal character animations (256 bones, GPU skinning)
|
||||
- Building rendering (WMO) with frustum culling
|
||||
- M2 particle emitters
|
||||
- Post-processing (HDR, tonemapping, shadow mapping)
|
||||
|
||||
The foundation is in place. Here's what needs implementation next (in recommended order):
|
||||
### Single-Player Mode
|
||||
- Play offline without a server connection
|
||||
- Local character persistence
|
||||
- Simulated combat and XP
|
||||
- Settings persistence
|
||||
|
||||
### 1. Authentication System (High Priority)
|
||||
**Files:** `src/auth/srp.cpp`, `src/auth/auth_handler.cpp`
|
||||
**Goal:** Implement SRP6a authentication protocol
|
||||
## Common Tasks
|
||||
|
||||
Reference the original wowee implementation:
|
||||
- `/wowee/src/lib/auth/handler.js` - Auth packet flow
|
||||
- `/wowee/src/lib/crypto/srp.js` - SRP implementation
|
||||
### Connecting to a Server
|
||||
|
||||
Key tasks:
|
||||
- Implement `LOGON_CHALLENGE` packet
|
||||
- Implement `LOGON_PROOF` packet
|
||||
- Port SHA1 and big integer math (already have OpenSSL)
|
||||
1. Launch wowee: `./bin/wowee`
|
||||
2. Enter your username and password
|
||||
3. Enter the auth server address (default: `localhost`)
|
||||
4. Click "Login"
|
||||
5. Select your realm from the list
|
||||
6. Select or create a character
|
||||
7. Click "Enter World"
|
||||
|
||||
### 2. Network Protocol (High Priority)
|
||||
**Files:** `src/game/game_handler.cpp`, `src/game/opcodes.hpp`
|
||||
**Goal:** Implement World of Warcraft 3.3.5a packet protocol
|
||||
### Single-Player Mode
|
||||
|
||||
Reference:
|
||||
- `/wowee/src/lib/game/handler.js` - Packet handlers
|
||||
- `/wowee/src/lib/game/opcode.js` - Opcode definitions
|
||||
- [WoWDev Wiki](https://wowdev.wiki/) - Protocol documentation
|
||||
1. Launch wowee
|
||||
2. Click "Single Player" on the auth screen
|
||||
3. Create or select a character
|
||||
4. Play offline without a server connection
|
||||
|
||||
Key packets to implement:
|
||||
- `SMSG_AUTH_CHALLENGE` / `CMSG_AUTH_SESSION`
|
||||
- `CMSG_CHAR_ENUM` / `SMSG_CHAR_ENUM`
|
||||
- `CMSG_PLAYER_LOGIN`
|
||||
- Movement packets (CMSG_MOVE_*)
|
||||
### Playing the Game
|
||||
|
||||
### 3. Asset Pipeline (Medium Priority)
|
||||
**Files:** `src/pipeline/*.cpp`
|
||||
**Goal:** Load and parse WoW game assets
|
||||
**Movement**:
|
||||
- WASD to move
|
||||
- Mouse to look around / orbit camera
|
||||
- Shift for sprint
|
||||
|
||||
Formats to implement:
|
||||
- **BLP** (`blp_loader.cpp`) - Texture format
|
||||
- **M2** (`m2_loader.cpp`) - Character/creature models
|
||||
- **ADT** (`adt_loader.cpp`) - Terrain chunks
|
||||
- **WMO** (`wmo_loader.cpp`) - World map objects (buildings)
|
||||
- **DBC** (`dbc_loader.cpp`) - Game databases
|
||||
**Combat**:
|
||||
- Left-click to target enemies
|
||||
- Tab to cycle targets
|
||||
- 1-9, 0, -, = to use action bar abilities
|
||||
- Drag spells from spellbook (P) to action bar
|
||||
|
||||
Resources:
|
||||
- [WoWDev Wiki - File Formats](https://wowdev.wiki/)
|
||||
- Original parsers in `/wowee/src/lib/pipeline/`
|
||||
- StormLib is already linked for MPQ archive reading
|
||||
**Inventory**:
|
||||
- Press I to open inventory
|
||||
- Drag items to equipment slots to equip
|
||||
- Drag items to vendors to sell
|
||||
- Drag items to action bar to use
|
||||
|
||||
### 4. Terrain Rendering (Medium Priority)
|
||||
**Files:** `src/rendering/renderer.cpp`, `src/game/world.cpp`
|
||||
**Goal:** Render game world terrain
|
||||
**Quests**:
|
||||
- Click NPCs with ! marker to get quests
|
||||
- Press L to view quest log
|
||||
- Click NPCs with ? marker to turn in quests
|
||||
- Quest markers appear on minimap
|
||||
|
||||
Tasks:
|
||||
- Load ADT terrain chunks
|
||||
- Parse height maps and texture layers
|
||||
- Create OpenGL meshes from terrain data
|
||||
- Implement chunk streaming based on camera position
|
||||
- Add frustum culling
|
||||
**Chat**:
|
||||
- Press Enter to open chat
|
||||
- Type message and press Enter to send
|
||||
- Chat commands: /say, /yell, /whisper [name]
|
||||
|
||||
Shaders are ready at `assets/shaders/basic.vert` and `basic.frag`.
|
||||
### Development & Debugging
|
||||
|
||||
### 5. Character Rendering (Low Priority)
|
||||
**Files:** `src/rendering/renderer.cpp`
|
||||
**Goal:** Render player and NPC models
|
||||
**Performance Monitoring**:
|
||||
- Press F1 to toggle performance HUD
|
||||
- Shows FPS, draw calls, triangle count, GPU usage
|
||||
|
||||
Tasks:
|
||||
- Load M2 model format
|
||||
- Implement skeletal animation system
|
||||
- Parse animation tracks
|
||||
- Implement vertex skinning in shaders
|
||||
- Render character equipment
|
||||
**Rendering Debug**:
|
||||
- F2: Toggle wireframe mode
|
||||
- F9: Toggle time progression
|
||||
- F10: Toggle sun/moon
|
||||
- F11: Toggle stars
|
||||
- +/-: Manual time control
|
||||
- C: Toggle clouds
|
||||
- L: Toggle lens flare
|
||||
- W: Cycle weather
|
||||
|
||||
### 6. UI Screens (Low Priority)
|
||||
**Files:** `src/ui/*.cpp`
|
||||
**Goal:** Create game UI with ImGui
|
||||
**Settings**:
|
||||
- Settings window available in-game
|
||||
- Adjust UI opacity
|
||||
- Configure graphics options
|
||||
|
||||
Screens to implement:
|
||||
- Authentication screen (username/password input)
|
||||
- Realm selection screen
|
||||
- Character selection screen
|
||||
- In-game UI (chat, action bars, character panel)
|
||||
### Advanced Configuration
|
||||
|
||||
ImGui is already initialized and ready to use!
|
||||
**Environment Variables**:
|
||||
```bash
|
||||
# Set custom WoW data path
|
||||
export WOW_DATA_PATH="/path/to/WoW-3.3.5a/Data"
|
||||
|
||||
## Development Tips
|
||||
|
||||
### Adding New Features
|
||||
|
||||
1. **Window/Input:** Use `window->getSDLWindow()` and `Input::getInstance()`
|
||||
2. **Rendering:** Add render calls in `Application::render()`
|
||||
3. **Game Logic:** Add updates in `Application::update(float deltaTime)`
|
||||
4. **UI:** Use ImGui in `UIManager::render()`
|
||||
|
||||
### Debugging
|
||||
|
||||
```cpp
|
||||
#include "core/logger.hpp"
|
||||
|
||||
LOG_DEBUG("Debug message");
|
||||
LOG_INFO("Info message");
|
||||
LOG_WARNING("Warning message");
|
||||
LOG_ERROR("Error message");
|
||||
# Run with custom data path
|
||||
WOW_DATA_PATH="/path/to/data" ./bin/wowee
|
||||
```
|
||||
|
||||
### State Management
|
||||
**Server Configuration**:
|
||||
Edit auth server address in the login screen or configure default in Application settings.
|
||||
|
||||
The application uses state machine pattern:
|
||||
```cpp
|
||||
AppState::AUTHENTICATION // Login screen
|
||||
AppState::REALM_SELECTION // Choose server
|
||||
AppState::CHARACTER_SELECTION // Choose character
|
||||
AppState::IN_GAME // Playing the game
|
||||
AppState::DISCONNECTED // Connection lost
|
||||
```
|
||||
## Troubleshooting
|
||||
|
||||
Change state with:
|
||||
```cpp
|
||||
Application::getInstance().setState(AppState::IN_GAME);
|
||||
```
|
||||
### Connection Issues
|
||||
|
||||
## Testing Without a Server
|
||||
**Problem**: Cannot connect to authentication server
|
||||
- Check that the auth server is running and reachable
|
||||
- Verify the server address and port (default: 3724)
|
||||
- Check firewall settings
|
||||
|
||||
For development, you can:
|
||||
**Problem**: Disconnected during gameplay
|
||||
- Network timeout or unstable connection
|
||||
- Check server logs for errors
|
||||
- Application will return to authentication screen
|
||||
|
||||
1. **Mock authentication** - Skip SRP and go straight to realm selection
|
||||
2. **Load local assets** - Test terrain/model rendering without network
|
||||
3. **Stub packet handlers** - Return fake data for testing UI
|
||||
### Rendering Issues
|
||||
|
||||
## Performance Notes
|
||||
**Problem**: Low FPS or stuttering
|
||||
- Press F1 to check performance stats
|
||||
- Reduce graphics settings in settings window
|
||||
- Check GPU driver version
|
||||
|
||||
Current configuration:
|
||||
**Problem**: Missing textures or models
|
||||
- Verify all WoW 3.3.5a MPQ files are present in Data/ directory
|
||||
- Check that Data/ path is correct (or WOW_DATA_PATH is set)
|
||||
- Look for errors in console output
|
||||
|
||||
**Problem**: Terrain not loading
|
||||
- Async terrain streaming may take a moment
|
||||
- Check for MPQ read errors in console
|
||||
- Verify ADT files exist for the current map
|
||||
|
||||
### Gameplay Issues
|
||||
|
||||
**Problem**: Cannot interact with NPCs
|
||||
- Ensure you're within interaction range (5-10 yards)
|
||||
- Check that NPC is not in combat
|
||||
- Left-click to target NPC first
|
||||
|
||||
**Problem**: Spells not working
|
||||
- Check that you have enough mana/rage/energy
|
||||
- Verify spell is on cooldown (check action bar)
|
||||
- Ensure you have a valid target (for targeted spells)
|
||||
|
||||
**Problem**: Items not equipping
|
||||
- Check that item is for your class
|
||||
- Verify you meet level requirements
|
||||
- Ensure equipment slot is not already occupied (or drag to replace)
|
||||
|
||||
### Performance Notes
|
||||
|
||||
Default configuration:
|
||||
- **VSync:** Enabled (60 FPS cap)
|
||||
- **Resolution:** 1920x1080 (configurable in `Application::initialize()`)
|
||||
- **Resolution:** 1920x1080 (configurable in Application settings)
|
||||
- **OpenGL:** 3.3 Core Profile
|
||||
- **Rendering:** Deferred until `renderWorld()` is implemented
|
||||
- **Shadow Map:** 2048x2048 resolution
|
||||
- **Particles:** 2000 max (weather), emitter-dependent (M2)
|
||||
|
||||
Optimization tips:
|
||||
- Frustum culling automatically enabled
|
||||
- Terrain streaming loads chunks as needed
|
||||
- WMO distance culling at 160 units
|
||||
- Async terrain loading prevents frame stalls
|
||||
|
||||
## Useful Resources
|
||||
|
||||
- **Original Wowee:** `/woweer/` directory - JavaScript reference implementation
|
||||
- **WoWDev Wiki:** https://wowdev.wiki/ - File formats and protocol docs
|
||||
- **TrinityCore:** https://github.com/TrinityCore/TrinityCore - Server reference
|
||||
- **ImGui Demo:** Run `ImGui::ShowDemoWindow()` for UI examples
|
||||
- **WoWDev Wiki:** https://wowdev.wiki/ - File formats and protocol documentation
|
||||
- **TrinityCore:** https://github.com/TrinityCore/TrinityCore - Server reference implementation
|
||||
- **MaNGOS:** https://github.com/cmangos/mangos-wotlk - Alternative server reference
|
||||
- **StormLib:** https://github.com/ladislav-zezula/StormLib - MPQ library documentation
|
||||
- **ImGui:** https://github.com/ocornut/imgui - UI framework
|
||||
|
||||
## Known Issues
|
||||
|
||||
None! The foundation is solid and ready for feature implementation.
|
||||
- **Stormwind Mage Quarter**: Water overflows near Moonwell area (geometry constraint issue)
|
||||
- **Particle emitters**: Some complex emitters may have minor visual glitches
|
||||
- **Hair textures**: Occasional texture resolution on some race/gender combinations
|
||||
|
||||
## Need Help?
|
||||
See GitHub issues for full list and tracking.
|
||||
|
||||
1. Check the original wowee codebase for JavaScript reference implementations
|
||||
## Getting Help
|
||||
|
||||
1. Check console output for error messages (use `LOG_DEBUG` builds for verbose output)
|
||||
2. Consult WoWDev Wiki for protocol and format specifications
|
||||
3. Look at TrinityCore source for server-side packet handling
|
||||
4. Use `LOG_DEBUG()` extensively for troubleshooting
|
||||
3. Review Architecture documentation for system design
|
||||
4. Report bugs on GitHub issue tracker
|
||||
|
||||
---
|
||||
|
||||
**Ready to build a native WoW client!** 🎮
|
||||
**Enjoy playing WoW with a native C++ client!** 🎮
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue