Opcode registry: move to generated canonical+alias pipeline

Introduce data-driven opcode registry with canonical and alias sources:

- Added Data/opcodes/canonical.json as the single canonical LogicalOpcode set.

- Added Data/opcodes/aliases.json for cross-core naming aliases (CMaNGOS/AzerothCore/local legacy).

Added generator and generated include fragments:

- tools/gen_opcode_registry.py emits include/game/opcode_enum_generated.inc, include/game/opcode_names_generated.inc, and include/game/opcode_aliases_generated.inc.

- include/game/opcode_table.hpp now consumes generated enum entries.

- src/game/opcode_table.cpp now consumes generated name and alias tables.

Loader canonicalization behavior:

- OpcodeTable::nameToLogical canonicalizes incoming JSON opcode names via alias table before enum lookup, so implementation code stays stable while expansion maps can use different core spellings.

Validation and build integration:

- Added tools/validate_opcode_maps.py to validate canonical contract across expansions.

- Added CMake targets opcodes-generate and opcodes-validate.

- wowee target now depends on opcodes-generate so generated headers stay current.

Validation/build run:

- cmake -S . -B build

- cmake --build build --target opcodes-generate opcodes-validate

- cmake --build build -j32
This commit is contained in:
Kelsi 2026-02-20 03:02:31 -08:00
parent 52ac3bcba3
commit 610ed71922
10 changed files with 4572 additions and 2812 deletions

View file

@ -0,0 +1,45 @@
// GENERATED FILE - DO NOT EDIT
{"CMSG_GAMEOBJECT_USE", "CMSG_GAMEOBJ_USE"},
{"CMSG_GUILD_DECLINE_INVITATION", "CMSG_GUILD_DECLINE"},
{"CMSG_GUILD_DEMOTE_MEMBER", "CMSG_GUILD_DEMOTE"},
{"CMSG_GUILD_GET_ROSTER", "CMSG_GUILD_ROSTER"},
{"CMSG_GUILD_PROMOTE_MEMBER", "CMSG_GUILD_PROMOTE"},
{"CMSG_MOVE_FALL_LAND", "MSG_MOVE_FALL_LAND"},
{"CMSG_MOVE_HEARTBEAT", "MSG_MOVE_HEARTBEAT"},
{"CMSG_MOVE_JUMP", "MSG_MOVE_JUMP"},
{"CMSG_MOVE_SET_FACING", "MSG_MOVE_SET_FACING"},
{"CMSG_MOVE_START_BACKWARD", "MSG_MOVE_START_BACKWARD"},
{"CMSG_MOVE_START_FORWARD", "MSG_MOVE_START_FORWARD"},
{"CMSG_MOVE_START_STRAFE_LEFT", "MSG_MOVE_START_STRAFE_LEFT"},
{"CMSG_MOVE_START_STRAFE_RIGHT", "MSG_MOVE_START_STRAFE_RIGHT"},
{"CMSG_MOVE_START_SWIM", "MSG_MOVE_START_SWIM"},
{"CMSG_MOVE_START_TURN_LEFT", "MSG_MOVE_START_TURN_LEFT"},
{"CMSG_MOVE_START_TURN_RIGHT", "MSG_MOVE_START_TURN_RIGHT"},
{"CMSG_MOVE_STOP", "MSG_MOVE_STOP"},
{"CMSG_MOVE_STOP_STRAFE", "MSG_MOVE_STOP_STRAFE"},
{"CMSG_MOVE_STOP_SWIM", "MSG_MOVE_STOP_SWIM"},
{"CMSG_MOVE_STOP_TURN", "MSG_MOVE_STOP_TURN"},
{"CMSG_REQUEST_PLAYED_TIME", "CMSG_PLAYED_TIME"},
{"CMSG_SHOWING_CLOAK", "CMSG_SHOWING_CLOAK"},
{"CMSG_SHOWING_HELM", "CMSG_SHOWING_HELM"},
{"CMSG_STAND_STATE_CHANGE", "CMSG_STANDSTATECHANGE"},
{"CMSG_TOGGLE_CLOAK", "CMSG_SHOWING_CLOAK"},
{"CMSG_TOGGLE_HELM", "CMSG_SHOWING_HELM"},
{"SMSG_BATTLEFIELD_PORT_DENIED", "SMSG_BATTLEFIELD_PORT_DENIED"},
{"SMSG_CAST_FAILED", "SMSG_CAST_FAILED"},
{"SMSG_CAST_RESULT", "SMSG_CAST_FAILED"},
{"SMSG_ENVIRONMENTALDAMAGELOG", "SMSG_ENVIRONMENTAL_DAMAGE_LOG"},
{"SMSG_INIT_EXTRA_AURA_INFO", "SMSG_INIT_EXTRA_AURA_INFO_OBSOLETE"},
{"SMSG_INSPECT", "SMSG_INSPECT_RESULTS_UPDATE"},
{"SMSG_INSPECT_RESULTS", "SMSG_INSPECT_RESULTS_UPDATE"},
{"SMSG_PUREMOUNT_CANCELLED_OBSOLETE", "SMSG_REMOVED_FROM_PVP_QUEUE"},
{"SMSG_QUEST_FORCE_REMOVE", "SMSG_QUEST_FORCE_REMOVE"},
{"SMSG_REMOVED_FROM_PVP_QUEUE", "SMSG_REMOVED_FROM_PVP_QUEUE"},
{"SMSG_SET_EXTRA_AURA_INFO", "SMSG_SET_EXTRA_AURA_INFO_OBSOLETE"},
{"SMSG_SET_REST_START", "SMSG_QUEST_FORCE_REMOVE"},
{"SMSG_SPLINE_MOVE_SET_RUN_BACK_SPEED", "SMSG_SPLINE_SET_RUN_BACK_SPEED"},
{"SMSG_SPLINE_MOVE_SET_RUN_SPEED", "SMSG_SPLINE_SET_RUN_SPEED"},
{"SMSG_SPLINE_MOVE_SET_SWIM_SPEED", "SMSG_SPLINE_SET_SWIM_SPEED"},
{"SMSG_UPDATE_AURA_DURATION", "SMSG_EQUIPMENT_SET_SAVED"},
{"SMSG_VICTIMSTATEUPDATE_OBSOLETE", "SMSG_BATTLEFIELD_PORT_DENIED"},