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.

SymbolStatusMeaning
โœ…DoneShipped, tested or manually validated, docs updated
๐Ÿ”„In progressPartial implementation or active branch
โณPendingScoped and prioritized; not started
๐Ÿ“‹PlannedAgreed direction; lower priority or blocked on dependency
โ›”BlockedWaiting on another milestone

Checkbox convention: [x] = done ยท [~] = in progress ยท [ ] = pending


North-star goals

PriorityGoalStatus
Obj 0Client stable: login โ†’ world โ†’ โ‰ฅ 5 min idle without crashesโœ…
Obj 1Incremental subsystem parity vs reference (see matrix below)๐Ÿ”„
Obj 2Lua-first gameplay scripting (no Smart Scripts SQL)๐Ÿ”„
Obj 3Reference-identical collision data (vmap/mmap) wired at runtime๐Ÿ”„

Progress dashboard

Snapshot 2026-05-24. Counts are manual โ€” refresh when closing milestones.

TrackDoneIn progressPending
Core phases (1โ€“6)420
Parity subsystems (matrix)3124
Extractor pipeline (Tools 1โ€“4 + runtime)623
Architecture / ops224
Toolchain (C++20)1 phase1 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 โœ…

ItemStatus
Project skeleton (CMake / C++20), logging, DB connectorsโœ…
SRP-6a auth + successful loginโœ…

Phase 2 โ€” Realm system โœ…

ItemStatus
realmlist table, CMD_REALM_LIST + SMSG_REALM_LISTโœ…

Phase 3 โ€” World server skeleton โœ…

ItemStatus
worldserver app + YAML configโœ…
CMSG_AUTH_SESSION + session validationโœ…

Phase 4 โ€” Character management โœ…

ItemStatus
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, spawn SMSG_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 CreateObject on login
  • Idle โ‰ฅ 5 min validated; Network.TimeSyncPeriodMs configurable
  • 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 + WorldService hooks
  • 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.

Subsystemfirelands-nextStatusNext criterion
Auth / SRPAuthSession, SRPServiceโœ…โ€”
Realm listRealmListServiceโœ…Packet field parity spot-check
Character DBMySqlCharacterRepositoryโœ…Schema parity with ref SQL
Player create infoPlayerCreateInfoService, migrations 60โ€“62โœ…Regenerate bundles after data edits
World socket / cryptoWorldSession, WorldCrypt๐Ÿ”„Full header edge cases vs ref
Opcodes / packetsWorldOpcodes.h, shared/network/packets/๐Ÿ”„Coverage matrix per login + world
Player login sequenceWorldSessionLoginFlow๐Ÿ”„Byte-for-byte spot-check critical SMSG
MovementHandleMovement, Map๐Ÿ”„Opcode filter + anti-cheat baseline
Map / gridMap, MapService, MapRegistry๐Ÿ”„Multi-map instance IDs
Visibility / broadcastBroadcastPacketToNearby๐Ÿ”„True visibility range (not just nearby radius)
ChatHandleMessageChat๐Ÿ”„Guild / party / whisper parity
ScriptingLuaGameScriptHost๐Ÿ”„Expand C++โ†’Lua surface + sandbox
PhasingPhaseShift, WorldSessionPhasing๐Ÿ”„Quest accept/complete triggers phase refresh
Creatures / GOsDomain types + spawn hooks๐Ÿ”„Full unit update fields + combat engagement
Combat / spellsSpellManager, WorldSessionCombat๐Ÿ”„Auras + spell costs from DBC; first damage/heal effect
Quests / gossipGossip + quest lines + partial handlers๐Ÿ”„Accept/complete opcodes + PlayerQuestProgressStore writes
Lootโ€”โณBasic take-item flow
Collision / pathIMapCollisionQueries + stub๐Ÿ”„Wire Collision.DataRoot to real vmap/mmap
Instancesโ€”โณInstance id on Map + reset hooks
DBC storesSpellEntryDbcStore, partial catalogs๐Ÿ”„Critical unit/item templates
GM / staffCommandService, 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

MilestoneStatusNotes
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.

PhaseScopeStatus
ASpellManager skeleton; delegate from WorldSession; GCD + START/GO/FAILUREโœ…
BISpellDefinitionStore, SpellDefinition, DBC + spell_dbc merge at startup๐Ÿ”„
CWorld validation โ€” range (partial), LoS when collision exists๐Ÿ”„
DFirst playable effect โ€” direct damage or heal + update fieldsโณ
ECooldowns, power cost, aura apply/removeโณ
FEffect 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

MilestoneStatus
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.

MilestoneStatusLocation
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

MilestoneStatus
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
#ComponentCMake targetStatusNext step
โ€”MPQ patch chainFirelandsExtractCommonโœ…โ€”
โ€”DBC / DB2 extractfirelands-dbc-extractorโœ…โ€”
โ€”Raw client mapsfirelands-map-extractorโœ…โ€”
1Server .map + tilelist + Camerasfirelands-map-extractor-vmapโœ…Parity hardening vs ref output
2VMap4 extractfirelands-vmap4-extractorโœ…Modular split optional
3VMap4 assemblefirelands-vmap4-assemblerโœ…Integration tests
4MMAP generate (Recast/Detour)firelands-mmap-generatorโณPort ref generator
โ€”TUI orchestrates full pipelinefirelands-extractors๐Ÿ”„Drive Tools 1โ€“4 from FTXUI
โ€”Runtime IMapCollisionQueriesworld๐Ÿ”„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.

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

  1. Enter world; stay idle โ‰ฅ 5 minutes (no chat/commands)
  2. Confirm no client crash and no unexpected server disconnect
  3. Optional: Log.Level: trace; tune Network.TimeSyncPeriodMs in worldserver.yaml

Stability changelog

DateNote
2026-04-29Fix crash #132; post-login probe ACKs
2026-04-30Cross CreateObject on login; minimal spell cast
2026-05-03Network.TimeSyncPeriodMs; idle validation guide
2026-05-05Idle โ‰ฅ 5 min validation complete
2026-05-18Gossip menus shipped; npc_text landed
2026-05-23Zone phasing, playercreateinfo docs, phase migrations 53โ€“59
2026-05-24Unified core roadmap (this page); MapService + Map Status panel

How to update this roadmap

  1. Close a milestone in code โ†’ update the matching row Status and check the box.
  2. Add a line to Stability changelog for user-visible stability wins.
  3. Bump updatedDate in frontmatter.
  4. 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.


TopicPage
ArchitectureArchitecture
Gossip & NPC textGossip & NPC text
Phase systemPhase system
Player create infoPlayer create info
GM ticketsGM tickets
Lua scriptingLua scripting
VMap / mmap pipelineVMap pipeline
StormLib / MPQStormLib
C++20 migrationC++20 migration
ContributingContributing

Legacy copies in the firelands-next repo (docs/EN/ROADMAP.md, docs/ES/ROADMAP.md, extractor plans) redirect here โ€” edit this wiki page only.