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    │
│  (SDL3 +    │  │ (Keyboard/ │
│   Vulkan)   │  │ Mouse/Pad) │
└──────┬──────┘  └─────┬──────┘
       │                │
       └───────┬────────┘
               │
    ┌──────────┴──────────┐
    │                     │
┌───▼────────┐   ┌───────▼──────┐
│  Renderer  │   │  UI Manager  │
│  (Vulkan)  │   │  (ImGui) +   │
│            │   │   FrameXML   │
└───┬────────┘   └──────────────┘
    │
    ├─ Camera + CameraController
    ├─ TerrainRenderer (ADT streaming)
    ├─ WMORenderer (buildings, collision)
    ├─ M2Renderer (models, particles, ribbons)
    ├─ CharacterRenderer (skeletal animation)
    ├─ WaterRenderer (refraction, lava, slime)
    ├─ SkySystem (skybox, stars, clouds, lens flare) + 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) - SDL3 + Vulkan wrapper

Input (input.hpp/cpp) - Input management

Gamepad (gamepad.hpp/cpp) - SDL game controller device

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

TerrainManager / TerrainRenderer - ADT terrain streaming and drawing

WMORenderer - World Map Objects (buildings)

M2Renderer - Models (creatures, doodads, spell effects)

CharacterRenderer - Player/NPC character models

WaterRenderer - Terrain and WMO water

SkySystem + 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, used for the auth connection

WorldSocket (world_socket.hpp/cpp) - WoW world connection (derives from Socket, not TCPSocket)

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 (integrity.hpp/cpp) - 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 builder (tools/asset_manager/, tools/asset_extract/)

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

FrameXML interface (src/addons/, src/ui/) - Blizzard’s own interface, run through this client’s Lua engine and widget tree. In game it draws the unit frames, action bars, bags, chat, quest log, spellbook, talents and the rest. See docs/widget-system.md

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/)

AudioCoordinator - Owns the sound managers; owned by Application and fed a per-frame zone context by the Renderer

AudioEngine - miniaudio-based playback

Sound Managers:

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

Components:

Threading Model

See docs/threading.md for the full inventory.

Memory Management

Build System

CMake with modular targets:

Dependencies:

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

Code Style