diff --git a/include/audio/mount_sound_manager.hpp b/include/audio/mount_sound_manager.hpp index 82f23da3..93efdb72 100644 --- a/include/audio/mount_sound_manager.hpp +++ b/include/audio/mount_sound_manager.hpp @@ -84,6 +84,7 @@ private: std::vector horseMoveSounds_; std::vector horseJumpSounds_; // Jump effort sounds std::vector horseLandSounds_; // Landing thud sounds + std::vector horseIdleSounds_; // Snorts and whinnies for idle // Sound state tracking bool playingMovementSound_ = false; diff --git a/src/audio/mount_sound_manager.cpp b/src/audio/mount_sound_manager.cpp index 4d8fc111..eaca8de8 100644 --- a/src/audio/mount_sound_manager.cpp +++ b/src/audio/mount_sound_manager.cpp @@ -128,6 +128,19 @@ void MountSoundManager::loadMountSounds() { } } + // Ground mount idle ambient (snorts and whinnies only) + std::vector horseIdlePaths = { + "Sound\\Creature\\Horse\\mHorseStand3A.wav", // Snort + "Sound\\Creature\\Horse\\mHorseAggroA.wav", // Whinny + }; + + for (const auto& path : horseIdlePaths) { + MountSample sample; + if (loadSound(path, sample)) { + horseIdleSounds_.push_back(std::move(sample)); + } + } + if (!wingFlapSounds_.empty()) { LOG_INFO("Loaded ", wingFlapSounds_.size(), " wing flap sounds"); } @@ -146,6 +159,9 @@ void MountSoundManager::loadMountSounds() { if (!horseLandSounds_.empty()) { LOG_INFO("Loaded ", horseLandSounds_.size(), " horse land sounds"); } + if (!horseIdleSounds_.empty()) { + LOG_INFO("Loaded ", horseIdleSounds_.size(), " horse idle sounds (snorts/whinnies)"); + } } bool MountSoundManager::loadSound(const std::string& path, MountSample& sample) { @@ -305,22 +321,16 @@ void MountSoundManager::playLandSound() { void MountSoundManager::playIdleSound() { if (!mounted_ || moving_) return; - // Ambient idle sounds (snort, breath, soft neigh) - if (currentMountType_ == MountType::GROUND && !horseBreathSounds_.empty()) { + // Ambient idle sounds (snorts and whinnies only for ground mounts) + if (currentMountType_ == MountType::GROUND && !horseIdleSounds_.empty()) { static std::mt19937 rng(std::random_device{}()); - std::uniform_int_distribution dist(0, horseBreathSounds_.size() - 1); - const auto& sample = horseBreathSounds_[dist(rng)]; + std::uniform_int_distribution dist(0, horseIdleSounds_.size() - 1); + const auto& sample = horseIdleSounds_[dist(rng)]; if (!sample.data.empty()) { - AudioEngine::instance().playSound2D(sample.data, 0.3f * volumeScale_, 0.95f); - } - } else if (currentMountType_ == MountType::FLYING && !wingIdleSounds_.empty()) { - static std::mt19937 rng(std::random_device{}()); - std::uniform_int_distribution dist(0, wingIdleSounds_.size() - 1); - const auto& sample = wingIdleSounds_[dist(rng)]; - if (!sample.data.empty()) { - AudioEngine::instance().playSound2D(sample.data, 0.25f * volumeScale_, 1.0f); + AudioEngine::instance().playSound2D(sample.data, 0.35f * volumeScale_, 0.95f); } } + // No idle sounds for flying mounts (wing sounds were too aggressive) } MountType MountSoundManager::detectMountType(uint32_t creatureDisplayId) const { diff --git a/src/rendering/renderer.cpp b/src/rendering/renderer.cpp index ed0f579a..32fdf8c6 100644 --- a/src/rendering/renderer.cpp +++ b/src/rendering/renderer.cpp @@ -1102,19 +1102,19 @@ void Renderer::updateCharacterAnimation() { mountActiveFidget_ = 0; // Cancel any active fidget } - // Idle ambient sounds: DISABLED for now (too frequent/annoying) - // if (!moving && mountSoundManager) { - // mountIdleSoundTimer_ += lastDeltaTime_; - // static float nextIdleSoundTime = 8.0f + (rand() % 8); // 8-15 seconds - // - // if (mountIdleSoundTimer_ >= nextIdleSoundTime) { - // mountSoundManager->playIdleSound(); - // mountIdleSoundTimer_ = 0.0f; - // nextIdleSoundTime = 8.0f + (rand() % 8); // Randomize next sound time - // } - // } else if (moving) { - // mountIdleSoundTimer_ = 0.0f; // Reset timer when moving - // } + // Idle ambient sounds: snorts and whinnies only, less frequent + if (!moving && mountSoundManager) { + mountIdleSoundTimer_ += lastDeltaTime_; + static float nextIdleSoundTime = 20.0f + (rand() % 21); // 20-40 seconds + + if (mountIdleSoundTimer_ >= nextIdleSoundTime) { + mountSoundManager->playIdleSound(); + mountIdleSoundTimer_ = 0.0f; + nextIdleSoundTime = 20.0f + (rand() % 21); // Randomize next sound time + } + } else if (moving) { + mountIdleSoundTimer_ = 0.0f; // Reset timer when moving + } // Only update animation if it changed and we're not in an action sequence or playing a fidget if (mountAction_ == MountAction::None && mountActiveFidget_ == 0 && (!haveMountState || curMountAnim != mountAnimId)) { diff --git a/wowee_1746 b/wowee_1746 new file mode 100755 index 00000000..7892a1aa Binary files /dev/null and b/wowee_1746 differ diff --git a/wowee_1748 b/wowee_1748 new file mode 100755 index 00000000..8aaf58d6 Binary files /dev/null and b/wowee_1748 differ diff --git a/wowee_1752 b/wowee_1752 new file mode 100755 index 00000000..8aaf58d6 Binary files /dev/null and b/wowee_1752 differ diff --git a/wowee_1753 b/wowee_1753 new file mode 100755 index 00000000..9d3981bf Binary files /dev/null and b/wowee_1753 differ diff --git a/wowee_1804 b/wowee_1804 new file mode 100755 index 00000000..8c3ae040 Binary files /dev/null and b/wowee_1804 differ diff --git a/wowee_1810 b/wowee_1810 new file mode 100755 index 00000000..b62cf923 Binary files /dev/null and b/wowee_1810 differ diff --git a/wowee_1814 b/wowee_1814 new file mode 100755 index 00000000..93a3bec0 Binary files /dev/null and b/wowee_1814 differ diff --git a/wowee_1816 b/wowee_1816 new file mode 100755 index 00000000..85d91ebe Binary files /dev/null and b/wowee_1816 differ diff --git a/wowee_1819 b/wowee_1819 new file mode 100755 index 00000000..c90f3ed8 Binary files /dev/null and b/wowee_1819 differ diff --git a/wowee_1821 b/wowee_1821 new file mode 100755 index 00000000..4b5ac714 Binary files /dev/null and b/wowee_1821 differ diff --git a/wowee_1823 b/wowee_1823 new file mode 100755 index 00000000..25853668 Binary files /dev/null and b/wowee_1823 differ diff --git a/wowee_1824 b/wowee_1824 new file mode 100755 index 00000000..09c016f3 Binary files /dev/null and b/wowee_1824 differ diff --git a/wowee_1825 b/wowee_1825 new file mode 100755 index 00000000..d0639693 Binary files /dev/null and b/wowee_1825 differ diff --git a/wowee_1828 b/wowee_1828 new file mode 100755 index 00000000..74a1f89b Binary files /dev/null and b/wowee_1828 differ diff --git a/wowee_1834 b/wowee_1834 new file mode 100755 index 00000000..33cf02d5 Binary files /dev/null and b/wowee_1834 differ diff --git a/wowee_1836 b/wowee_1836 new file mode 100755 index 00000000..78f7eb6d Binary files /dev/null and b/wowee_1836 differ diff --git a/wowee_1840 b/wowee_1840 new file mode 100755 index 00000000..e853fa32 Binary files /dev/null and b/wowee_1840 differ diff --git a/wowee_1842 b/wowee_1842 new file mode 100755 index 00000000..2535b4ec Binary files /dev/null and b/wowee_1842 differ diff --git a/wowee_1844 b/wowee_1844 new file mode 100755 index 00000000..bb66b4ed Binary files /dev/null and b/wowee_1844 differ