Files
WoWee/docs/quickstart.md

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_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 - 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:

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

#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:

  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

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! 🎮