Kelsidavis-WoWee/CONTRIBUTING.md
Kelsi 2f3a973444 docs: update documentation for PRs #59-63 refactors
- architecture.md: add chat system modules (src/ui/chat/), world map
  modules (src/rendering/world_map/), CatmullRomSpline (src/math/),
  transport decomposition, and updated namespace list
- status.md: update timestamp to 2026-04-14, add recent refactors
  section and world map known gaps
- CHANGELOG.md: add detailed entries for PRs #58-63 covering
  architecture, features, bug fixes, and 19 new test files
- TESTING.md: expand test suite layout from 8 to 27 files organized
  by category (core, animation, transport, world map, chat)
- CONTRIBUTING.md: update namespace table, testing section, and key
  files list to reflect new module directories
- README.md: update status timestamp to 2026-04-14
2026-04-14 03:42:46 -07:00

3.5 KiB

Contributing to Wowee

Build Setup

See BUILD_INSTRUCTIONS.md for full platform-specific details. The short version: CMake + Make on Linux/macOS, MSYS2 on Windows.

cmake -B build -DCMAKE_BUILD_TYPE=Debug
make -C build -j$(nproc)

Code Style

  • C++20. Use #pragma once for include guards.
  • Namespaces: wowee::game, wowee::rendering, wowee::rendering::world_map, wowee::ui, wowee::ui::chat, wowee::math, wowee::core, wowee::network.
  • Conventional commit messages in imperative mood:
    • feat: new feature
    • fix: bug fix
    • refactor: code restructuring with no behavior change
    • perf: performance improvement
  • Prefer constexpr over static const for compile-time data.
  • Mark functions whose return value should not be ignored with [[nodiscard]].

Pull Request Process

  1. Branch from master.
  2. Keep commits focused -- one logical change per commit.
  3. Describe what changed and why in the PR description.
  4. Ensure the project compiles cleanly before submitting.
  5. Manual testing against a WoW 3.3.5a server (e.g. AzerothCore/ChromieCraft) is expected for gameplay-affecting changes.

Architecture Overview

See docs/architecture.md for the full picture. Key namespaces:

Namespace Responsibility
wowee::game Game state, packet handling (GameHandler), opcode dispatch, spline parsing
wowee::rendering Vulkan renderer, M2/WMO/terrain, sky system
wowee::rendering::world_map Modular world map (16 components: facade, compositor, layers, etc.)
wowee::ui ImGui windows and HUD (GameScreen)
wowee::ui::chat Modular chat system (15+ components: commands, markup, macros, etc.)
wowee::math Reusable math modules (CatmullRomSpline)
wowee::core Coordinates, math, utilities
wowee::network Connection, Packet read/write API

Packet Handlers

The standard pattern for adding a new server packet handler:

  1. Define a struct FooData holding the parsed fields.
  2. Write void GameHandler::handleFoo(network::Packet& packet) to parse into FooData.
  3. Register it in the dispatch table: registerHandler(LogicalOpcode::SMSG_FOO, &GameHandler::handleFoo).

Helper variants: registerWorldHandler (requires isInWorld()), registerSkipHandler (discard), registerErrorHandler (log warning).

Testing

27 unit tests cover core systems, animation, transport/spline, world map, and chat. See TESTING.md for the full guide. Run with ./test.sh --test. Manual testing against WoW 3.3.5a private servers (primarily ChromieCraft/AzerothCore) is expected for gameplay-affecting changes.

Key Files for New Contributors

File / Directory What it does
include/game/game_handler.hpp Central game state and all packet handler declarations
src/game/game_handler.cpp Packet dispatch registration and handler implementations
include/network/packet.hpp Packet class -- the read/write API every handler uses
include/ui/game_screen.hpp Main gameplay UI screen (ImGui)
src/ui/chat/ Modular chat system (commands, markup, macros, tab completion)
src/rendering/world_map/ Modular world map (facade, compositor, layers, coordinate projection)
src/math/spline.cpp Reusable CatmullRomSpline math
src/game/spline_packet.cpp Unified spline packet parsing for all expansions
src/rendering/m2_renderer.cpp M2 model loading and rendering
docs/architecture.md High-level system architecture reference