Core Roadmap
Core development roadmap
Single source of truth for all firelands-next core work. This page merges the former split roadmaps (phases, parity matrix, VMap pipeline, StormLib, C++20, MapService plan, SpellManager plan) into one living tracker.
Client target: WoW Cataclysm 4.3.4 / build 15595.
Status legend
Use these symbols everywhere on this page. Update a row when the next criterion in that row is met.
| Symbol | Status | Meaning |
|---|---|---|
| โ | Done | Shipped, tested or manually validated, docs updated |
| ๐ | In progress | Partial implementation or active branch |
| โณ | Pending | Scoped and prioritized; not started |
| ๐ | Planned | Agreed direction; lower priority or blocked on dependency |
| โ | Blocked | Waiting on another milestone |
Checkbox convention: [x] = done ยท [~] = in progress ยท [ ] = pending
North-star goals
| Priority | Goal | Status |
|---|---|---|
| Obj 0 | Client stable: login โ world โ โฅ 5 min idle without crashes | โ |
| Obj 1 | Incremental subsystem parity vs reference (see matrix below) | ๐ |
| Obj 2 | Lua-first gameplay scripting (no Smart Scripts SQL) | ๐ |
| Obj 3 | Reference-identical collision data (vmap/mmap) wired at runtime | ๐ |
Progress dashboard
Snapshot 2026-05-24. Counts are manual โ refresh when closing milestones.
| Track | Done | In progress | Pending |
|---|---|---|---|
| Core phases (1โ6) | 4 | 2 | 0 |
| Parity subsystems (matrix) | 3 | 12 | 4 |
| Extractor pipeline (Tools 1โ4 + runtime) | 6 | 2 | 3 |
| Architecture / ops | 2 | 2 | 4 |
| Toolchain (C++20) | 1 phase | 1 phase | โ |
Current focus (short term): creature combat + SMSG_UPDATE_OBJECT for units โ quest accept/complete โ auras/effects โ mmap generator โ runtime collision.
Core phases (high level)
Phase 1 โ Foundations & Auth โ
| Item | Status |
|---|---|
| Project skeleton (CMake / C++20), logging, DB connectors | โ |
| SRP-6a auth + successful login | โ |
Phase 2 โ Realm system โ
| Item | Status |
|---|---|
realmlist table, CMD_REALM_LIST + SMSG_REALM_LIST | โ |
Phase 3 โ World server skeleton โ
| Item | Status |
|---|---|
worldserver app + YAML config | โ |
CMSG_AUTH_SESSION + session validation | โ |
Phase 4 โ Character management โ
| Item | Status |
|---|---|
| Characters DB schema | โ |
CMSG_CHAR_ENUM / create / delete | โ |
| Player create info โ spawn, spells, skills from world DB | โ |
Phase 5 โ Entering the world ๐
Most stability criteria met; polish items remain.
-
CMSG_PLAYER_LOGIN, login burst SMSG order, spawnSMSG_UPDATE_OBJECT - Movement relay + chat; crash #132 fix (talents/specs)
- Post-login probes: minimal ACKs (mail, calendar, zone, LFG, cemetery, โฆ)
- Two clients same map: cross
CreateObjecton login - Idle โฅ 5 min validated;
Network.TimeSyncPeriodMsconfigurable - Spot-check login burst payload order vs reference
- Post-login chatter: safe ignore or full handler (no loops / asserts)
Phase 6 โ Gameplay mechanics ๐
- Parity matrix (this document)
- Lua host MVP +
WorldServicehooks - Spells โ minimal cast (GCD +
SMSG_SPELL_START/GO+ failure list) - Gossip DB menus +
npc_text+ quest lines in gossip UI - Zone phasing โ
PhaseShift, area/quest gates,SMSG_PHASE_SHIFT_CHANGE - GM ticket desk โ persistence, claim/reply/close, gossip UI
- [~] Creatures โ spawn pipeline, unit
SMSG_UPDATE_OBJECT, combat hooks - [~] Quest flow โ gossip query handlers; accept/complete opcodes + phase refresh on quest events
- Loot โ basic take-item flow
- Instances + instance scripts (Lua)
- Real collision (vmap/mmap) โ VMap pipeline
- Battlegrounds / arena (after open world stable)
Subsystem parity matrix
Living section โ update Status and Next criterion when milestones close.
| Subsystem | firelands-next | Status | Next criterion |
|---|---|---|---|
| Auth / SRP | AuthSession, SRPService | โ | โ |
| Realm list | RealmListService | โ | Packet field parity spot-check |
| Character DB | MySqlCharacterRepository | โ | Schema parity with ref SQL |
| Player create info | PlayerCreateInfoService, migrations 60โ62 | โ | Regenerate bundles after data edits |
| World socket / crypto | WorldSession, WorldCrypt | ๐ | Full header edge cases vs ref |
| Opcodes / packets | WorldOpcodes.h, shared/network/packets/ | ๐ | Coverage matrix per login + world |
| Player login sequence | WorldSessionLoginFlow | ๐ | Byte-for-byte spot-check critical SMSG |
| Movement | HandleMovement, Map | ๐ | Opcode filter + anti-cheat baseline |
| Map / grid | Map, MapService, MapRegistry | ๐ | Multi-map instance IDs |
| Visibility / broadcast | BroadcastPacketToNearby | ๐ | True visibility range (not just nearby radius) |
| Chat | HandleMessageChat | ๐ | Guild / party / whisper parity |
| Scripting | LuaGameScriptHost | ๐ | Expand C++โLua surface + sandbox |
| Phasing | PhaseShift, WorldSessionPhasing | ๐ | Quest accept/complete triggers phase refresh |
| Creatures / GOs | Domain types + spawn hooks | ๐ | Full unit update fields + combat engagement |
| Combat / spells | SpellManager, WorldSessionCombat | ๐ | Auras + spell costs from DBC; first damage/heal effect |
| Quests / gossip | Gossip + quest lines + partial handlers | ๐ | Accept/complete opcodes + PlayerQuestProgressStore writes |
| Loot | โ | โณ | Basic take-item flow |
| Collision / path | IMapCollisionQueries + stub | ๐ | Wire Collision.DataRoot to real vmap/mmap |
| Instances | โ | โณ | Instance id on Map + reset hooks |
| DBC stores | SpellEntryDbcStore, partial catalogs | ๐ | Critical unit/item templates |
| GM / staff | CommandService, tickets, appearance | โ | Extend command surface as needed |
| Battlegrounds | โ | ๐ | After open world stable |
| Anticheat | โ | ๐ | Movement validation baseline |
Priority order: creatures/combat โ quests โ auras/effects โ collision data โ instances.
Deep tracks
Quests & gossip
| Milestone | Status | Notes |
|---|---|---|
SMSG_GOSSIP_MESSAGE / SMSG_GOSSIP_COMPLETE from DB | โ | Lua-first + IGossipRepository fallback |
npc_text + CMSG_NPC_TEXT_QUERY โ SMSG_NPC_TEXT_UPDATE | โ | Migrations 33โ34 + ref import |
| Quest lines in gossip menu | โ | Shown in gossip UI |
CMSG_QUESTGIVER_* hello / status / query | ๐ | Handlers in WorldSessionGossip.cpp |
| Quest accept / complete / reward | โณ | Wire PlayerQuestProgressStore; call RefreshPlayerPhaseVisibilityFromQuestProgress |
| Quest template data + SQL import | โณ | After opcode flow |
See Gossip & NPC text and Phase system.
Combat & spells (SpellManager)
Merged from the SpellManager implementation plan.
| Phase | Scope | Status |
|---|---|---|
| A | SpellManager skeleton; delegate from WorldSession; GCD + START/GO/FAILURE | โ |
| B | ISpellDefinitionStore, SpellDefinition, DBC + spell_dbc merge at startup | ๐ |
| C | World validation โ range (partial), LoS when collision exists | ๐ |
| D | First playable effect โ direct damage or heal + update fields | โณ |
| E | Cooldowns, power cost, aura apply/remove | โณ |
| F | Effect pipeline extensibility; batching / perf tuning | ๐ |
Performance rules (hot path): O(1) spell lookup, no MySQL per cast, no global mutex on cast, cheap checks before LoS.
Creatures & world entities
| Milestone | Status |
|---|---|
Domain Creature / GameObject types | โ |
| DB spawn bootstrap + phasing on spawn | โ |
SMSG_UPDATE_OBJECT for player (CreateObject) | โ |
| Unit update fields for creatures (health, flags, level) | ๐ |
| Combat engagement + threat baseline | ๐ |
| GO interaction opcodes | โณ |
MapService & world operations
Merged from the MapService isolation plan.
| Milestone | Status | Location |
|---|---|---|
MapSnapshot value object | โ | domain/world/MapSnapshot.h |
Tick timing on Map | โ | Map::RecordTickTime, CreateSnapshot |
MapService wrapper | โ | application/services/MapService |
MapRegistry replaces raw map map in WorldService | โ | application/services/MapRegistry |
| FTXUI Map Status panel | โ | WorldFtxuiConsole |
| Graceful shutdown โ session draining | โณ | AsyncNetworkServer::StopGraceful |
| Fail-fast config validation at startup | โณ | All YAML keys validated before bind |
| Map status via realm-link to auth | ๐ | Optional ops telemetry |
Network refactor
| Milestone | Status |
|---|---|
Split WorldSession into worldsession/*.cpp | โ |
Typed helpers in shared/network/packets/ | ๐ |
| Extract repeated read/write to shared wire types | ๐ |
Extractors & collision pipeline
Master plan: VMap pipeline. MPQ milestones: StormLib roadmap.
WoW 4.3.4 Data/ โ Tool 1 (.map) โ Tool 2 (Buildings/) โ Tool 3 (vmaps/) โ Tool 4 (mmaps/) โ world runtime
| # | Component | CMake target | Status | Next step |
|---|---|---|---|---|
| โ | MPQ patch chain | FirelandsExtractCommon | โ | โ |
| โ | DBC / DB2 extract | firelands-dbc-extractor | โ | โ |
| โ | Raw client maps | firelands-map-extractor | โ | โ |
| 1 | Server .map + tilelist + Cameras | firelands-map-extractor-vmap | โ | Parity hardening vs ref output |
| 2 | VMap4 extract | firelands-vmap4-extractor | โ | Modular split optional |
| 3 | VMap4 assemble | firelands-vmap4-assembler | โ | Integration tests |
| 4 | MMAP generate (Recast/Detour) | firelands-mmap-generator | โณ | Port ref generator |
| โ | TUI orchestrates full pipeline | firelands-extractors | ๐ | Drive Tools 1โ4 from FTXUI |
| โ | Runtime IMapCollisionQueries | world | ๐ | Replace stub; load vmap + mmap |
Closure criteria for collision: generate dataset with Tools 1โ4 โ wire VMapManager2 + Detour in world โ integration tests (LoS, height, path spot-checks).
Toolchain โ C++20
Detail: C++20 migration.
| Milestone | Status |
|---|---|
Phase 1 โ CMAKE_CXX_STANDARD 20, docs, SPDLOG_USE_STD_FORMAT | โ |
std::span on ByteBuffer | โ |
Boost.Asio C++20 coroutines in infrastructure/network/ | โ |
| Trial builds โ full compiler matrix (Linux, Windows) | โณ |
Phase 2 โ designated initializers, using enum | โณ |
Client stability
Definition of done (short term)
- Enter world without crash
- โฅ 5 min idle without disconnect
- Periodic
SMSG_TIME_SYNC_REQ(not chained on every response) - Spot-check login burst payload order vs reference
- Safe handling of all post-login probe opcodes
Post-login minimal ACK checklist โ
Mail time, calendar pending, zone update, guild bank withdraw, LFG empty status, cemetery list โ all implemented. Battlefield status = intentional no-op when no queue.
Idle validation (manual)
- Enter world; stay idle โฅ 5 minutes (no chat/commands)
- Confirm no client crash and no unexpected server disconnect
- Optional:
Log.Level: trace; tuneNetwork.TimeSyncPeriodMsinworldserver.yaml
Stability changelog
| Date | Note |
|---|---|
| 2026-04-29 | Fix crash #132; post-login probe ACKs |
| 2026-04-30 | Cross CreateObject on login; minimal spell cast |
| 2026-05-03 | Network.TimeSyncPeriodMs; idle validation guide |
| 2026-05-05 | Idle โฅ 5 min validation complete |
| 2026-05-18 | Gossip menus shipped; npc_text landed |
| 2026-05-23 | Zone phasing, playercreateinfo docs, phase migrations 53โ59 |
| 2026-05-24 | Unified core roadmap (this page); MapService + Map Status panel |
How to update this roadmap
- Close a milestone in code โ update the matching row Status and check the box.
- Add a line to Stability changelog for user-visible stability wins.
- Bump
updatedDatein frontmatter. - Deep-dive docs (phase-system, vmap-pipeline, etc.) keep technical detail; this page stays the index and tracker.
When in doubt, prefer โ
only after tests or manual validation โ not merely merged to main.
Related documentation
| Topic | Page |
|---|---|
| Architecture | Architecture |
| Gossip & NPC text | Gossip & NPC text |
| Phase system | Phase system |
| Player create info | Player create info |
| GM tickets | GM tickets |
| Lua scripting | Lua scripting |
| VMap / mmap pipeline | VMap pipeline |
| StormLib / MPQ | StormLib |
| C++20 migration | C++20 migration |
| Contributing | Contributing |
Legacy copies in the firelands-next repo (docs/EN/ROADMAP.md, docs/ES/ROADMAP.md, extractor plans) redirect here โ edit this wiki page only.