From fe3c6a6a79e5e334c150591287fe2c62e4e6bf6c Mon Sep 17 00:00:00 2001 From: Kelsi Date: Tue, 10 Feb 2026 20:32:43 -0800 Subject: [PATCH] Disable pained sounds and tighten fidget criteria Removed jump/land sounds (attack/wound sounds had pained growls). Made fidget discovery much stricter to exclude jerky battle animations. Changes: - Disabled playJumpSound for ground mounts (attack sounds too aggressive) - Disabled playLandSound for ground mounts (wound sounds have growls) - Fidget criteria now requires BOTH frequency AND replay (not OR) - Excluded IDs 11-15 (attacks) in addition to 16-21 (combat) - Only animations with proper idle metadata will be selected --- src/audio/mount_sound_manager.cpp | 39 +++++++++++++++---------------- src/rendering/renderer.cpp | 11 ++++----- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/audio/mount_sound_manager.cpp b/src/audio/mount_sound_manager.cpp index eaca8de8..8750ca32 100644 --- a/src/audio/mount_sound_manager.cpp +++ b/src/audio/mount_sound_manager.cpp @@ -277,16 +277,16 @@ void MountSoundManager::playJumpSound() { if (elapsed < 200) return; lastActionSoundTime_ = now; - // Jump effort sound - if (currentMountType_ == MountType::GROUND && !horseJumpSounds_.empty()) { - // TODO: Select family-specific sounds once organized by family - static std::mt19937 rng(std::random_device{}()); - std::uniform_int_distribution dist(0, horseJumpSounds_.size() - 1); - const auto& sample = horseJumpSounds_[dist(rng)]; - if (!sample.data.empty()) { - AudioEngine::instance().playSound2D(sample.data, 0.5f * volumeScale_, 1.1f); - } - } else if (currentMountType_ == MountType::FLYING && !wingFlapSounds_.empty()) { + // Jump effort sound - DISABLED (attack sounds have pained growls) + // if (currentMountType_ == MountType::GROUND && !horseJumpSounds_.empty()) { + // static std::mt19937 rng(std::random_device{}()); + // std::uniform_int_distribution dist(0, horseJumpSounds_.size() - 1); + // const auto& sample = horseJumpSounds_[dist(rng)]; + // if (!sample.data.empty()) { + // AudioEngine::instance().playSound2D(sample.data, 0.5f * volumeScale_, 1.1f); + // } + // } else + if (currentMountType_ == MountType::FLYING && !wingFlapSounds_.empty()) { // Flying mounts: wing whoosh static std::mt19937 rng(std::random_device{}()); std::uniform_int_distribution dist(0, wingFlapSounds_.size() - 1); @@ -306,16 +306,15 @@ void MountSoundManager::playLandSound() { if (elapsed < 200) return; lastActionSoundTime_ = now; - // Landing thud/hoof sound - if (currentMountType_ == MountType::GROUND && !horseLandSounds_.empty()) { - // Ground mounts: hoof thud / impact - static std::mt19937 rng(std::random_device{}()); - std::uniform_int_distribution dist(0, horseLandSounds_.size() - 1); - const auto& sample = horseLandSounds_[dist(rng)]; - if (!sample.data.empty()) { - AudioEngine::instance().playSound2D(sample.data, 0.6f * volumeScale_, 0.85f); // Lower pitch for thud - } - } + // Landing thud/hoof sound - DISABLED (wound sounds have pained growls) + // if (currentMountType_ == MountType::GROUND && !horseLandSounds_.empty()) { + // static std::mt19937 rng(std::random_device{}()); + // std::uniform_int_distribution dist(0, horseLandSounds_.size() - 1); + // const auto& sample = horseLandSounds_[dist(rng)]; + // if (!sample.data.empty()) { + // AudioEngine::instance().playSound2D(sample.data, 0.6f * volumeScale_, 0.85f); + // } + // } } void MountSoundManager::playIdleSound() { diff --git a/src/rendering/renderer.cpp b/src/rendering/renderer.cpp index 0872964e..be174f40 100644 --- a/src/rendering/renderer.cpp +++ b/src/rendering/renderer.cpp @@ -752,15 +752,14 @@ void Renderer::setMounted(uint32_t mountInstId, uint32_t mountDisplayId, float h " speed=", seq.movingSpeed); } - // Exclude known problematic animations: death (5,6), combat (16-21), wounds (7-9) + // Exclude known problematic animations: death (5-6), wounds (7-9), combat (16-21), attacks (11-15) bool isDeathOrWound = (seq.id >= 5 && seq.id <= 9); - bool isCombat = (seq.id >= 16 && seq.id <= 21); + bool isAttackOrCombat = (seq.id >= 11 && seq.id <= 21); bool isSpecial = (seq.id == 2 || seq.id == 3); // Often aggressive specials - // Select fidgets: non-looping + (frequency OR replay) + stationary + not death/combat - // Relaxed: some mounts may only have one of the markers - if (!isLoop && (hasFrequency || hasReplay) && isStationary && reasonableDuration && - !isDeathOrWound && !isCombat && !isSpecial) { + // Select fidgets: STRICT - require BOTH frequency AND replay to ensure proper idle markers + if (!isLoop && hasFrequency && hasReplay && isStationary && reasonableDuration && + !isDeathOrWound && !isAttackOrCombat && !isSpecial) { // Bonus: chains back to stand (indicates idle behavior) bool chainsToStand = (seq.nextAnimation == (int16_t)mountAnims_.stand) || (seq.aliasNext == mountAnims_.stand) ||