mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-23 07:40:14 +00:00
194 lines
5.5 KiB
Markdown
194 lines
5.5 KiB
Markdown
|
|
# 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
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 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_CHALLENGE` packet
|
||
|
|
- Implement `LOGON_PROOF` packet
|
||
|
|
- 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](https://wowdev.wiki/) - Protocol documentation
|
||
|
|
|
||
|
|
Key packets to implement:
|
||
|
|
- `SMSG_AUTH_CHALLENGE` / `CMSG_AUTH_SESSION`
|
||
|
|
- `CMSG_CHAR_ENUM` / `SMSG_CHAR_ENUM`
|
||
|
|
- `CMSG_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](https://wowdev.wiki/)
|
||
|
|
- 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
|
||
|
|
|
||
|
|
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");
|
||
|
|
```
|
||
|
|
|
||
|
|
### State Management
|
||
|
|
|
||
|
|
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
|
||
|
|
```
|
||
|
|
|
||
|
|
Change state with:
|
||
|
|
```cpp
|
||
|
|
Application::getInstance().setState(AppState::IN_GAME);
|
||
|
|
```
|
||
|
|
|
||
|
|
## Testing Without a Server
|
||
|
|
|
||
|
|
For development, you can:
|
||
|
|
|
||
|
|
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
|
||
|
|
|
||
|
|
## 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?
|
||
|
|
|
||
|
|
1. Check the original wowee codebase for JavaScript reference implementations
|
||
|
|
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
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Ready to build a native WoW client!** 🎮
|