5.5 KiB
Quick Start Guide
Current Status
The native wowee client foundation is complete and functional! The application successfully:
✅ 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
What Works Right Now
# Build the project
cd wowee/build
cmake ..
make -j$(nproc)
# Run the application
./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 You See
Currently, the window displays a blue gradient background (clear color: 0.2, 0.3, 0.5). This is the base rendering loop working correctly.
Next Steps
The foundation is in place. Here's what needs implementation next (in recommended order):
1. Authentication System (High Priority)
Files: src/auth/srp.cpp, src/auth/auth_handler.cpp
Goal: Implement SRP6a authentication protocol
Reference the original wowee implementation:
/wowee/src/lib/auth/handler.js- Auth packet flow/wowee/src/lib/crypto/srp.js- SRP implementation
Key tasks:
- Implement
LOGON_CHALLENGEpacket - Implement
LOGON_PROOFpacket - Port SHA1 and big integer math (already have OpenSSL)
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
Reference:
/wowee/src/lib/game/handler.js- Packet handlers/wowee/src/lib/game/opcode.js- Opcode definitions- WoWDev Wiki - Protocol documentation
Key packets to implement:
SMSG_AUTH_CHALLENGE/CMSG_AUTH_SESSIONCMSG_CHAR_ENUM/SMSG_CHAR_ENUMCMSG_PLAYER_LOGIN- Movement packets (CMSG_MOVE_*)
3. Asset Pipeline (Medium Priority)
Files: src/pipeline/*.cpp
Goal: Load and parse WoW game assets
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
Resources:
- WoWDev Wiki - File Formats
- Original parsers in
/wowee/src/lib/pipeline/ - StormLib is already linked for MPQ archive reading
4. Terrain Rendering (Medium Priority)
Files: src/rendering/renderer.cpp, src/game/world.cpp
Goal: Render game world terrain
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
Shaders are ready at assets/shaders/basic.vert and basic.frag.
5. Character Rendering (Low Priority)
Files: src/rendering/renderer.cpp
Goal: Render player and NPC models
Tasks:
- Load M2 model format
- Implement skeletal animation system
- Parse animation tracks
- Implement vertex skinning in shaders
- Render character equipment
6. UI Screens (Low Priority)
Files: src/ui/*.cpp
Goal: Create game UI with ImGui
Screens to implement:
- Authentication screen (username/password input)
- Realm selection screen
- Character selection screen
- In-game UI (chat, action bars, character panel)
ImGui is already initialized and ready to use!
Development Tips
Adding New Features
- Window/Input: Use
window->getSDLWindow()andInput::getInstance() - Rendering: Add render calls in
Application::render() - Game Logic: Add updates in
Application::update(float deltaTime) - UI: Use ImGui in
UIManager::render()
Debugging
#include "core/logger.hpp"
LOG_DEBUG("Debug message");
LOG_INFO("Info message");
LOG_WARNING("Warning message");
LOG_ERROR("Error message");
State Management
The application uses state machine pattern:
AppState::AUTHENTICATION // Login screen
AppState::REALM_SELECTION // Choose server
AppState::CHARACTER_SELECTION // Choose character
AppState::IN_GAME // Playing the game
AppState::DISCONNECTED // Connection lost
Change state with:
Application::getInstance().setState(AppState::IN_GAME);
Testing Without a Server
For development, you can:
- Mock authentication - Skip SRP and go straight to realm selection
- Load local assets - Test terrain/model rendering without network
- Stub packet handlers - Return fake data for testing UI
Performance Notes
Current configuration:
- VSync: Enabled (60 FPS cap)
- Resolution: 1920x1080 (configurable in
Application::initialize()) - OpenGL: 3.3 Core Profile
- Rendering: Deferred until
renderWorld()is implemented
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
Known Issues
None! The foundation is solid and ready for feature implementation.
Need Help?
- Check the original wowee codebase for JavaScript reference implementations
- Consult WoWDev Wiki for protocol and format specifications
- Look at TrinityCore source for server-side packet handling
- Use
LOG_DEBUG()extensively for troubleshooting
Ready to build a native WoW client! 🎮