From 180990b9f113e1ebc79e8db97dd07223605378a6 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Fri, 20 Mar 2026 18:21:34 -0700 Subject: [PATCH] feat: play minimap ping sound when party members ping the map Add playMinimapPing() to UiSoundManager with MapPing.wav (falls back to target select sound). Play the ping sound in MSG_MINIMAP_PING handler when the sender is not the local player. Provides audio feedback for party member map pings, matching WoW behavior. --- include/audio/ui_sound_manager.hpp | 4 ++++ src/audio/ui_sound_manager.cpp | 9 +++++++++ src/game/game_handler.cpp | 7 +++++++ 3 files changed, 20 insertions(+) diff --git a/include/audio/ui_sound_manager.hpp b/include/audio/ui_sound_manager.hpp index 6423d460..7a9a66b8 100644 --- a/include/audio/ui_sound_manager.hpp +++ b/include/audio/ui_sound_manager.hpp @@ -78,6 +78,9 @@ public: // Chat notifications void playWhisperReceived(); + // Minimap ping + void playMinimapPing(); + private: struct UISample { std::string path; @@ -126,6 +129,7 @@ private: std::vector selectTargetSounds_; std::vector deselectTargetSounds_; std::vector whisperSounds_; + std::vector minimapPingSounds_; // State tracking float volumeScale_ = 1.0f; diff --git a/src/audio/ui_sound_manager.cpp b/src/audio/ui_sound_manager.cpp index 8ef800f0..6518259e 100644 --- a/src/audio/ui_sound_manager.cpp +++ b/src/audio/ui_sound_manager.cpp @@ -130,6 +130,12 @@ bool UiSoundManager::initialize(pipeline::AssetManager* assets) { } } + // Minimap ping sound + minimapPingSounds_.resize(1); + if (!loadSound("Sound\\Interface\\MapPing.wav", minimapPingSounds_[0], assets)) { + minimapPingSounds_ = selectTargetSounds_; // fallback to target select sound + } + LOG_INFO("UISoundManager: Window sounds - Bag: ", (bagOpenLoaded && bagCloseLoaded) ? "YES" : "NO", ", QuestLog: ", (questLogOpenLoaded && questLogCloseLoaded) ? "YES" : "NO", ", CharSheet: ", (charSheetOpenLoaded && charSheetCloseLoaded) ? "YES" : "NO"); @@ -236,5 +242,8 @@ void UiSoundManager::playTargetDeselect() { playSound(deselectTargetSounds_); } // Chat notifications void UiSoundManager::playWhisperReceived() { playSound(whisperSounds_); } +// Minimap ping +void UiSoundManager::playMinimapPing() { playSound(minimapPingSounds_); } + } // namespace audio } // namespace wowee diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index 65ed32ff..ea5e0904 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -3544,6 +3544,13 @@ void GameHandler::handlePacket(network::Packet& packet) { ping.wowY = pingX; // canonical WoW Y = west = server's posX ping.age = 0.0f; minimapPings_.push_back(ping); + // Play ping sound for other players' pings (not our own) + if (senderGuid != playerGuid) { + if (auto* renderer = core::Application::getInstance().getRenderer()) { + if (auto* sfx = renderer->getUiSoundManager()) + sfx->playMinimapPing(); + } + } break; } case Opcode::SMSG_ZONE_UNDER_ATTACK: {