Skip to the content.

Architecture Overview

System Design

Wowee follows a modular architecture with clear separation of concerns:

┌─────────────────────────────────────────────┐
│           Application (main loop)            │
│  - State management (auth/realms/game)      │
│  - Update cycle                             │
│  - Event dispatch                           │
└──────────────┬──────────────────────────────┘
               │
       ┌───────┴────────┐
       │                │
┌──────▼──────┐  ┌─────▼──────┐
│   Window    │  │   Input    │
│  (SDL2 +    │  │ (Keyboard/ │
│   Vulkan)   │  │   Mouse)   │
└──────┬──────┘  └─────┬──────┘
       │                │
       └───────┬────────┘
               │
    ┌──────────┴──────────┐
    │                     │
┌───▼────────┐   ┌───────▼──────┐
│  Renderer  │   │  UI Manager  │
│  (Vulkan)  │   │   (ImGui)    │
└───┬────────┘   └──────────────┘
    │
    ├─ Camera + CameraController
    ├─ TerrainRenderer (ADT streaming)
    ├─ WMORenderer (buildings, collision)
    ├─ M2Renderer (models, particles, ribbons)
    ├─ CharacterRenderer (skeletal animation)
    ├─ WaterRenderer (refraction, lava, slime)
    ├─ SkyBox + StarField + Weather
    ├─ LightingManager (Light.dbc volumes)
    └─ SwimEffects, ChargeEffect, Lightning

Core Systems

1. Application Layer (src/core/)

Application (application.hpp/cpp) - Main controller

Window (window.hpp/cpp) - SDL2 + Vulkan wrapper

Input (input.hpp/cpp) - Input management

Logger (logger.hpp/cpp) - Thread-safe logging

2. Rendering System (src/rendering/)

Renderer (renderer.hpp/cpp) - Main rendering coordinator

VkContext (vk_context.hpp/cpp) - Vulkan infrastructure

Camera (camera.hpp/cpp) - View/projection matrices

TerrainRenderer - ADT terrain streaming

WMORenderer - World Map Objects (buildings)

M2Renderer - Models (creatures, doodads, spell effects)

CharacterRenderer - Player/NPC character models

WaterRenderer - Terrain and WMO water

Skybox + StarField + Weather

LightingManager - Light.dbc volume sampling

World Map System (src/rendering/world_map/) - Modular map architecture:

3. Networking (src/network/)

TCPSocket (tcp_socket.hpp/cpp) - Platform TCP

WorldSocket (world_socket.hpp/cpp) - WoW world connection

Packet (packet.hpp/cpp) - Binary data container

4. Authentication (src/auth/)

AuthHandler - Auth server protocol (port 3724)

SRP (srp.hpp/cpp) - Secure Remote Password

Integrity - Client integrity verification

5. Game Logic (src/game/)

GameHandler (game_handler.hpp/cpp) - Central game state

Domain Handlers (SOLID decomposition from GameHandler):

OpcodeTable - Expansion-agnostic opcode mapping

Entity / EntityManager - Entity lifecycle

TransportManager - Transport lifecycle and server sync

TransportPathRepository - Transport path data

math::CatmullRomSpline (src/math/) - Reusable spline module

SplineBlockData (src/game/spline_packet.hpp/cpp) - Unified spline parsing

Expansion Helpers (game_utils.hpp):

6. Asset Pipeline (src/pipeline/)

AssetManager - Runtime asset access

asset_extract (tool) - MPQ extraction

BLPLoader - Texture decompression

M2Loader - Model binary parsing

WMOLoader - World object parsing

ADTLoader - Terrain parsing

DBCLoader - Database table parsing

7. UI System (src/ui/)

UIManager - ImGui coordinator

Screens:

Chat System (src/ui/chat/) - Modular chat architecture:

FrameXML owns the chat window itself - tabs, input, message display, and name completion are the interface’s, not this client’s. What remains here is what FrameXML calls into, plus what the client draws in the world.

8. Audio System (src/audio/)

AudioEngine - miniaudio-based playback

Sound Managers:

9. Warden Anti-Cheat (src/game/)

4-layer architecture:

Threading Model

Memory Management

Build System

CMake with modular targets:

Dependencies:

CI: GitHub Actions for Linux (x86-64, ARM64), Windows (MSYS2), macOS (ARM64) Container builds: Docker cross-compilation for Linux, macOS (osxcross), Windows (LLVM-MinGW)

Code Style