71 Commits

Author SHA1 Message Date
Kelsi
644cfcc8c1 fix(update-fields): correct multiple wrong vanilla 1.12 indices on classic/turtle
The classic and turtle update_fields.json files had several wrong
indices that aliased fields together and misread the unit record.
Cross-referenced vmangos UpdateFields_1_12_1.h
(github.com/vmangos/core, OBJECT_END=6) and corrected:

- UNIT_FIELD_BYTES_1:        133 -> 138 (was colliding with MOUNTDISPLAYID)
- UNIT_FIELD_STAT0..STAT4:   138..142 -> 150..154 (the old slot held
                              pet fields PETNUMBER/PET_NAME_TIMESTAMP/
                              PETEXPERIENCE/PETNEXTLEVELEXP, not stats)
- UNIT_FIELD_RESISTANCES:    154 -> 155 (off by one — STAT4 lives at 154)
- UNIT_FIELD_NATIVEDISPLAYID: added (was missing) -> 132

The verified other indices (DISPLAYID=131, MOUNTDISPLAYID=133,
DYNAMIC_FLAGS=143, NPC_FLAGS=147, BYTES_0=36) all matched vmangos
and were left alone.

Practical impact on Classic/Turtle prior to this fix:
- entity_controller.cpp:548-553 read MOUNTDISPLAYID and BYTES_1 from
  the same slot — mount/dismount detection and shapeshift form
  detection would race and clobber each other.
- All STAT* readers were reading pet-related fields instead of stats,
  so character-sheet stats and stat-derived UI on Classic/Turtle
  would be wrong/zero.
- UNIT_FIELD_RESISTANCES readers got STAT4 instead of armor resist.

Python collision check after patch: no UNIT_* collisions in either
file.
2026-05-15 00:55:07 -07:00
Kelsi
09f7b127d0 docs(status): flag UNIT_FIELD_BYTES_1 / MOUNTDISPLAYID collision on classic/turtle
While auditing docs found that classic/update_fields.json and
turtle/update_fields.json both assign index 133 to two distinct
fields:
  UNIT_FIELD_BYTES_1       = 133
  UNIT_FIELD_MOUNTDISPLAYID = 133

These are read separately at entity_controller.cpp:548-553 for
display-change detection vs mount/dismount vs shapeshift, so on
Classic/Turtle the two events alias and one will be misattributed
(visible as mount stutter or wrong shapeshift transitions).

TBC and WotLK assign distinct values (BYTES_1=137/137,
MOUNTDISPLAYID=154/69), so the issue is specific to the two
classic-family JSONs. Adding to status.md as a known gap rather
than patching the index blindly — the correct vanilla 1.12 value
should be sourced from CMaNGOS-Zero before changing.
2026-05-15 00:48:14 -07:00
Kelsi
75b1558795 docs: correct ASAN option description and stale LOC numbers
- CMakeLists.txt:29: WOWEE_ENABLE_ASAN description said 'AddressSanitizer
  (Debug builds)', but the implementation at lines 1206-1219 applies
  -fsanitize=address,undefined to ALL configs (no $<$<CONFIG:Debug>:>
  guard) and prints 'AddressSanitizer + UBSan: ENABLED'. Updated to
  match reality.
- CHANGELOG.md / docs/architecture.md: TransportManager decomposition
  claimed 1,200→500 LOC, but transport_manager.cpp is now 367 lines
  (wc -l). Updated to ~370.
- CHANGELOG.md: world editor 'World Editor (tools/editor/)' header
  claimed '14.7k+ lines, 59 files'. Actual: ~132k LOC across ~500
  files in tools/editor/ (find + wc). Updated. The understatement
  most likely reflects an early-2026 snapshot.
2026-05-15 00:25:21 -07:00
Kelsi
dd552fa32e docs: remove vaporware FSR2 startup-safety; fix Turtle WoW version
- docs/AMD_FSR2_INTEGRATION.md: removed 'Startup safety behavior'
  bullets — WOWEE_ALLOW_STARTUP_FSR2 has zero references in src/,
  include/, CMakeLists.txt, or any build script; the IN_WORLD-deferred
  FSR2 logic does not exist. Documenting a knob that nothing reads
  misleads users.
- README.md / docs/status.md / docs/server-setup.md / GETTING_STARTED.md:
  Turtle WoW version was 1.17 in four places, but
  Data/expansions/turtle/expansion.json declares major=1 minor=18
  (build 7234). Sync docs to the canonical config.
- docs/status.md: 'Last updated' bumped from 2026-04-14 to 2026-05-14
  to reflect the v1.9.1-preview-era body that has already replaced the
  v1.8.9 snapshot.
2026-05-14 23:45:40 -07:00
Kelsi
6c972fb734 docs+container: remove unused GLEW dep; fix ATTRIBUTION list; document Tracy vendoring
- ATTRIBUTION.md: removed GLEW (not used — no glew.h includes, no
  find_package(GLEW) in CMakeLists.txt); added the libraries that
  ARE actually used (Vulkan, vk-bootstrap, zlib, FFmpeg, Lua, Catch2,
  nlohmann/json, stb, FidelityFX-FSR2). OpenSSL row clarified for 3.x.
- container/{builder-linux,builder-macos,builder-windows}.Dockerfile:
  drop libglew-dev / vcpkg 'glew' — nothing links against GLEW, so
  these were dead weight in the images.
- container/FLOW.md: matched the Dockerfile changes.
- docs/perf_baseline.md: Tracy is NOT vendored — building with
  WOWEE_ENABLE_TRACY=ON references extern/tracy/ which doesn't exist.
  Documented the required 'git clone' step. Also corrected the
  M2::computeBoneMatrices / M2Renderer::update file paths
  (m2_renderer_internal.h and m2_renderer_render.cpp, not
  m2_renderer.cpp).
2026-05-14 23:31:32 -07:00
Kelsi
183a38f274 docs: correct Warden status and SKY_SYSTEM GL→Vulkan example
- WARDEN_IMPLEMENTATION.md: status said 'Complete' but
  src/game/warden_module.cpp still has placeholder import binding
  (line 1023), TODO for WardenFuncList extraction (line 1155), and
  falls back to fake responses (line 234). Documented honestly.
- WARDEN_IMPLEMENTATION.md: removed the WoW.exe offset 0x005e3a03
  claim — that exact offset appears nowhere in the codebase; the
  modulus is a hardcoded placeholder (per include header).
- SKY_SYSTEM.md: example code used glEnable/glBlendFunc/glDisable in
  a Vulkan-only project. Replaced with a Vulkan-blend description.
2026-05-14 23:23:57 -07:00
Kelsi
afb447367f docs: fix server-setup SQL column name and stale version; clarify packet-framing scope
- docs/server-setup.md: realmlist column is 'flag', not 'realmflags'
  (TrinityCore 3.3.5 schema). Add gamebuild for clarity. Bumped stale
  v1.8.9-preview reference to v1.9.1-preview to match README.
- docs/packet-framing.md: status line claimed the doc was 'tested
  against AzerothCore/TC/Mangos/Turtle' but the doc only describes
  auth framing; world framing (with encryption) lives in WorldSocket.
  Reworded so the scope is unambiguous.
2026-05-14 23:15:34 -07:00
Kelsi
19d1006542 docs: drop unverified opcode count, fix threading.md API names
- README.md / docs/architecture.md: remove the '664 opcode handlers' /
  '664+ opcodes' figure (unverifiable — actual register*Handler() call
  count is 33, but most opcodes are bulk-registered via array loops).
  Reword to describe coverage qualitatively.
- docs/threading.md: WorldSocket::connectAsync(), startWatchdog(), and
  TerrainManager::startWorkers() do not exist. Reference the actual
  symbols: connect() / asyncPumpLoop(), the inline lambda in run(),
  and TerrainManager::initialize() spawning workerLoop().
2026-05-14 23:14:28 -07:00
Kelsi
1668c97502 docs: fix verified inaccuracies in test/log/quickstart docs
- TESTING.md: WOWEE_BUILD_TESTS defaults to ON in CMakeLists.txt:28,
  not OFF as the doc claimed.
- TROUBLESHOOTING.md: log path is logs/wowee.log in CWD (per
  src/core/logger.cpp:61), not ~/.wowee/logs/.
- CONTRIBUTING.md / docs/status.md: align test count with actual
  31 test_*.cpp files in tests/ (was 27 in both docs, 31 in README).
- docs/quickstart.md: section numbering jumped from 2 to 4 to 5;
  renumbered to 1-4.
2026-05-14 23:11:09 -07:00
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
Pavel Okhlopkov
a7df19232a add doc
Signed-off-by: Pavel Okhlopkov <pavel.okhlopkov@flant.com>
2026-04-06 22:52:07 +03:00
Paul
b4989dc11f feat(animation): decompose AnimationController into FSM-based architecture
Replace the 2,200-line monolithic AnimationController (goto-driven,
single class, untestable) with a composed FSM architecture per
refactor.md.

New subsystem (src/rendering/animation/ — 16 headers, 10 sources):
- CharacterAnimator: FSM composer implementing ICharacterAnimator
- LocomotionFSM: idle/walk/run/sprint/jump/swim/strafe
- CombatFSM: melee/ranged/spell cast/stun/hit reaction/charge
- ActivityFSM: emote/loot/sit-down/sitting/sit-up
- MountFSM: idle/run/flight/taxi/fidget/rear-up (per-instance RNG)
- AnimCapabilitySet + AnimCapabilityProbe: probe once at model load,
  eliminate per-frame hasAnimation() linear search
- AnimationManager: registry of CharacterAnimator by GUID
- EmoteRegistry: DBC-backed emote command → animId singleton
- FootstepDriver, SfxStateDriver: extracted from AnimationController

animation_ids.hpp/.cpp moved to animation/ subdirectory (452 named
constants); all include paths updated.

AnimationController retained as thin adapter (~400 LOC): collects
FrameInput, delegates to CharacterAnimator, applies AnimOutput.

Priority order: Mount > Stun > HitReaction > Spell > Charge >
Melee/Ranged > CombatIdle > Emote > Loot > Sit > Locomotion.
STAY_IN_STATE policy when all FSMs return valid=false.

Bugs fixed:
- Remove static mt19937 in mount fidget (shared state across all
  mounted units) — replaced with per-instance seeded RNG
- Remove goto from mounted animation branch (skipped init)
- Remove per-frame hasAnimation() calls (now one probe at load)
- Fix VK_INDEX_TYPE_UINT16 → UINT32 in shadow pass

Tests (4 new suites, all ASAN+UBSan clean):
- test_locomotion_fsm: 167 assertions
- test_combat_fsm: 125 cases
- test_activity_fsm: 112 cases
- test_anim_capability: 56 cases

docs/ANIMATION_SYSTEM.md added (architecture reference).
2026-04-05 12:27:35 +03:00
Paul
2cb47bf126 chore(testing): add unit tests and update core render/network pipelines
- add new tests:
  - test_blp_loader.cpp
  - test_dbc_loader.cpp
  - test_entity.cpp
  - test_frustum.cpp
  - test_m2_structs.cpp
  - test_opcode_table.cpp
  - test_packet.cpp
  - test_srp.cpp
  - CMakeLists.txt
- add docs and progress tracking:
  - TESTING.md
  - perf_baseline.md
- update project config/build:
  - .gitignore
  - CMakeLists.txt
  - test.sh
- core engine updates:
  - application.cpp
  - game_handler.cpp
  - world_socket.cpp
  - adt_loader.cpp
  - asset_manager.cpp
  - m2_renderer.cpp
  - post_process_pipeline.cpp
  - renderer.cpp
  - terrain_manager.cpp
  - game_screen.cpp
- add profiler header:
  - profiler.hpp
2026-04-03 09:41:34 +03:00
Kelsi
3499a7f0ee docs: rewrite architecture.md to reflect current Vulkan-based codebase
Complete rewrite — the previous version extensively referenced OpenGL
(glClearColor, VAO/VBO/EBO, GLSL shaders) throughout all sections.
The project has used Vulkan exclusively for months.

Key changes:
- Replace all OpenGL references with Vulkan equivalents (VkContext,
  VMA, descriptor sets, pipeline cache, SPIR-V shaders)
- Update system diagram to show actual sub-renderer hierarchy
  (TerrainRenderer, WMORenderer, M2Renderer, CharacterRenderer, etc.)
- Document GameHandler SOLID decomposition (8 domain handlers +
  EntityController + GameServices dependency injection)
- Add Warden 4-layer architecture section
- Add audio system section (miniaudio, 5 sound managers)
- Update opcode count from "100+" to 664+
- Update UI section: talent screen and settings are implemented (not TODO)
- Document threading model (async terrain, GPU upload queue, normal maps)
- Fix dependencies list (Vulkan SDK, VMA, vk-bootstrap, Unicorn, FFmpeg)
- Add container builds and CI platforms
- Remove stale "TODO" items for features that are complete
2026-03-30 18:36:09 -07:00
Kelsi
dab534e631 docs: fix stale references across 10 documentation files
- CONTRIBUTING.md: C++17 → C++20 (matches CMakeLists.txt)
- TROUBLESHOOTING.md: fix log path (~/.wowee/logs/ → logs/wowee.log)
- docs/authentication.md: remove stale "next milestone" (char enum
  and world entry have been working for months)
- docs/srp-implementation.md: update session key status (RC4 encryption
  is implemented), fix file reference to actual src/auth/srp.cpp
- docs/packet-framing.md: remove stale "next steps" (realm list is
  fully implemented), update status with tested servers
- docs/WARDEN_IMPLEMENTATION.md: fix file list — handler is in
  warden_handler.cpp not game_handler.cpp, add warden_memory.hpp/cpp
- docs/WARDEN_QUICK_REFERENCE.md: fix header/source paths (include/
  not src/), add warden_handler and warden_memory
- docs/quickstart.md: fix clone command (--recurse-submodules, WoWee
  not wowee), remove obsolete manual ImGui clone step, fix log path
- docs/server-setup.md: update version to v1.8.9-preview, date to
  2026-03-30, add all supported expansions
- assets/textures/README.md: remove broken doc references
  (TURTLEHD_IMPORT.md, TEXTURE_MANIFEST.txt), update integration
  status to reflect working PNG override pipeline
2026-03-30 18:33:21 -07:00
Kelsi
47fe6b8468 docs: update README, CHANGELOG, and status to v1.8.9-preview
- README: update status date to 2026-03-30, version to v1.8.9-preview,
  add container builds line, update current focus to code quality
- CHANGELOG: move v1.8.1 entries to their own section, add v1.8.2-v1.8.9
  unreleased section covering architecture (GameHandler decomposition,
  Docker cross-compilation), bug fixes (7 UB/overflow/safety fixes),
  and code quality (30+ constants, 55+ comments, 8 DRY extractions)
- docs/status.md: update last-updated date to 2026-03-30
2026-03-30 17:40:47 -07:00
Kelsi
c18720f0f0 feat: server-synced bag sort, fix world map continent bounds, update docs
Inventory sort: clicking "Sort Bags" now generates CMSG_SWAP_ITEM packets
to move items server-side (one swap per frame to avoid race conditions).
Client-side sort runs immediately for visual preview; server swaps follow.
New Inventory::computeSortSwaps() computes minimal swap sequence using
selection-sort permutation on quality→itemId→stackCount comparator.

World map: fix continent bounds derivation that used intersection (max/min)
instead of union (min/max) of child zone bounds, causing continent views
to display zoomed-in/clipped.

Update README.md and docs/status.md with current features, release info,
and known gaps (v1.8.2-preview, 664 opcode handlers, NPC voices, bag
independence, CharSections auto-detect, quest GO server limitation).
2026-03-24 09:24:09 -07:00
Kelsi
dfddc71ebb docs: update status with nameplate and combat text features 2026-03-18 10:19:25 -07:00
Kelsi
2fb7901cca feat: enable water refraction by default
The VK_ERROR_DEVICE_LOST crash on AMD/Mali GPUs (barrier srcAccessMask)
was fixed in 2026-03-18. Enable refraction for new sessions so players
get the improved water visuals without needing to touch Settings.
Existing saved configs that explicitly disabled it are preserved.
2026-03-18 05:44:59 -07:00
Kelsi
b236a85454 docs: update status.md — water refraction fix, date 2026-03-18 2026-03-18 02:20:59 -07:00
Kelsi
c77bd15538 docs: remove outdated 3D positional audio note - feature is implemented 2026-03-11 15:31:42 -07:00
Kelsi
90e7d61b6d docs: update for graphics presets and accurate shadow status 2026-03-11 15:30:45 -07:00
Kelsi
bae32c1823 Add FSR3 Generic API path and harden runtime diagnostics
- AmdFsr3Runtime now probes both the legacy ffxFsr3* API and the newer
  generic ffxCreateContext/ffxDispatch API; selects whichever the loaded
  runtime library exports (GenericApi takes priority fallback)
- Generic API path implements full upscale + frame-generation context
  creation, configure, dispatch, and destroy lifecycle
- dlopen error captured and surfaced in lastError_ on Linux so runtime
  initialization failures are actionable
- FSR3 runtime init failure log now includes path kind, error string,
  and loaded library path for easier debugging
- tools/generate_ffx_sdk_vk_permutations.sh added: auto-bootstraps
  missing VK permutation headers; DXC auto-downloaded on Linux/Windows
  MSYS2; macOS reads from PATH (CI installs via brew dxc)
- CMakeLists: add upscalers/include to probe include dirs, invoke
  permutation script before SDK build, scope FFX pragma/ODR warning
  suppressions to affected TUs, add runtime-copy dependency on wowee
- UI labels updated from "FSR2" → "FSR3" in settings, tuning panel,
  performance HUD, and combo boxes
- CI macOS job now installs dxc via Homebrew for permutation codegen
2026-03-09 12:51:59 -07:00
Kelsi
ae48e4d7a6 Make FSR3 SDK integration Kits-only and align CI/docs 2026-03-09 05:00:51 -07:00
Kelsi
1c7b87ee78 Remove FSR3 wrapper path and keep official Path-A runtime only 2026-03-09 04:33:05 -07:00
Kelsi
09d6cd41c7 Document Linux/Windows auto-fallback to dx12_bridge 2026-03-09 02:37:32 -07:00
Kelsi
91f83cb108 Add Linux bridge preflight and FD-handle validation 2026-03-09 02:33:18 -07:00
Kelsi
faec3f6ec2 Enable Linux bridge mode and Vulkan FD interop exports 2026-03-09 02:28:49 -07:00
Kelsi
1c7908f02d Add ABI v3 fence-value sync for DX12 bridge dispatch 2026-03-09 01:58:45 -07:00
Kelsi
b65f3e0aa3 Import all DX12 bridge shared handles and expose wrapper last-error symbol 2026-03-09 01:42:41 -07:00
Kelsi
d06d1df873 Wire Win32 semaphore handles into FSR3 wrapper bridge payload 2026-03-09 01:33:39 -07:00
Kelsi
61cb2df400 Add ABI v2 external-handle plumbing for FSR3 bridge dispatch 2026-03-09 01:31:01 -07:00
Kelsi
e25253a6e8 Enable dx12_bridge init path and runtime export compatibility scan 2026-03-09 01:23:04 -07:00
Kelsi
32eb9e3bcb Default wrapper backend to Vulkan runtime across platforms 2026-03-09 01:12:44 -07:00
Kelsi
afaafa7470 Align FSR3 SDK detection/docs with legacy and Kits layouts 2026-03-09 01:09:37 -07:00
Kelsi
19bc52f54e Check Vulkan Win32 interop extensions in DX12 bridge preflight 2026-03-09 00:58:43 -07:00
Kelsi
fd2ca42f28 Add DX12 factory/device preflight for bridge mode 2026-03-09 00:54:36 -07:00
Kelsi
45feb51e84 Add DX12 bridge preflight checks and runtime override env 2026-03-09 00:50:09 -07:00
Kelsi
5030f5435f Add wrapper backend mode switch and explicit DX12 bridge runtime errors 2026-03-09 00:45:39 -07:00
Kelsi
e93f097272 Default FidelityFX SDK source to Kelsidavis fork and relax CI FG file check 2026-03-09 00:39:11 -07:00
Kelsi
036e102fa0 Add in-tree FSR3 wrapper target and forkable FidelityFX SDK source overrides 2026-03-09 00:36:53 -07:00
Kelsi
a1c4244a27 Implement clean Path-B FSR3 wrapper ABI for framegen 2026-03-09 00:08:22 -07:00
Kelsi
f1099f5940 Add FSR3 runtime library probing and readiness status 2026-03-08 23:03:45 -07:00
Kelsi
bdfec103ac Add persisted AMD FSR3 framegen runtime toggle plumbing 2026-03-08 22:53:21 -07:00
Kelsi
a49decd9a6 Add AMD FSR3 framegen interface probe and CI validation 2026-03-08 22:47:46 -07:00
Kelsi
700e05b142 Bootstrap AMD FSR2 Vulkan permutations cross-platform 2026-03-08 21:45:25 -07:00
Kelsi
09cdcd67b5 Update FSR docs and make AMD CI header check non-fatal 2026-03-08 21:40:26 -07:00
Kelsi
a24ff375fb Add AMD FSR2 SDK detection and backend integration scaffolding 2026-03-08 19:33:07 -07:00
Kelsi
f374e19239 Comprehensive README/status update covering 60+ commits since Feb 2026
Add instances, bank, auction house, mail, pets, party stats, map
exploration, talent/spellbook revamp, chest looting, spirit healer,
CI builds, performance optimizations, shadow/collision/lava fixes.
2026-03-07 00:55:34 -08:00
Kelsi
88dc1f94a6 Update README and status docs for v0.3.6-preview
- Add water/lava/lighting rendering features to README
- Add transport riding to movement features
- Update status date and rendering capabilities
- Note interior shadow and lava steam known gaps
2026-03-07 00:50:45 -08:00