Reduce idle sound frequency and restore fidget discovery

Idle sounds were too frequent and strict criteria blocked all fidgets.

Changes:
- Idle sounds now 45-90 seconds apart (was 20-40)
- Fidget criteria back to OR (frequency OR replay) instead of AND
- Keeps all ID exclusions: 2-3, 5-9, 11-21 to prevent battle animations
- Should now discover proper fidgets while filtering problematic ones
This commit is contained in:
Kelsi 2026-02-10 20:36:12 -08:00
parent b14ffd20df
commit 7e85e0b2ef

View file

@ -757,8 +757,9 @@ void Renderer::setMounted(uint32_t mountInstId, uint32_t mountDisplayId, float h
bool isAttackOrCombat = (seq.id >= 11 && seq.id <= 21);
bool isSpecial = (seq.id == 2 || seq.id == 3); // Often aggressive specials
// Select fidgets: STRICT - require BOTH frequency AND replay to ensure proper idle markers
if (!isLoop && hasFrequency && hasReplay && isStationary && reasonableDuration &&
// Select fidgets: (frequency OR replay) + exclude problematic ID ranges
// Relaxed back to OR since some mounts may only have one metadata marker
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) ||
@ -1124,15 +1125,15 @@ void Renderer::updateCharacterAnimation() {
mountActiveFidget_ = 0; // Cancel any active fidget
}
// Idle ambient sounds: snorts and whinnies only, less frequent
// Idle ambient sounds: snorts and whinnies only, infrequent
if (!moving && mountSoundManager) {
mountIdleSoundTimer_ += lastDeltaTime_;
static float nextIdleSoundTime = 20.0f + (rand() % 21); // 20-40 seconds
static float nextIdleSoundTime = 45.0f + (rand() % 46); // 45-90 seconds
if (mountIdleSoundTimer_ >= nextIdleSoundTime) {
mountSoundManager->playIdleSound();
mountIdleSoundTimer_ = 0.0f;
nextIdleSoundTime = 20.0f + (rand() % 21); // Randomize next sound time
nextIdleSoundTime = 45.0f + (rand() % 46); // Randomize next sound time
}
} else if (moving) {
mountIdleSoundTimer_ = 0.0f; // Reset timer when moving