Add bell tolls for major cities marking time

Implemented periodic bell chimes that add atmosphere to major cities:

Bell types by faction:
- Alliance bell: Stormwind, Ironforge
- Night Elf bell: Darnassus
- Horde bell: Orgrimmar, Undercity
- Tribal bell: Thunder Bluff

Technical details:
- Loads 4 bell toll sound files from Sound\Doodad
- Plays every 120-180 seconds (2-3 minutes) with random variation
- First bell toll 60-90 seconds after entering city
- Volume at 0.5 for noticeable but not overpowering effect
- Only plays when currentCity_ is set (not in wilderness)
- Each city uses faction-appropriate bell sound
- Separate timer (bellTollTime_) from regular city ambience
- State logging for debugging bell events
This commit is contained in:
Kelsi 2026-02-09 16:25:59 -08:00
parent 77a9b3192d
commit cfb64f1d24
2 changed files with 68 additions and 0 deletions

View file

@ -152,6 +152,12 @@ private:
std::vector<AmbientSample> thunderbluffDaySounds_;
std::vector<AmbientSample> thunderbluffNightSounds_;
// City bell sounds
std::vector<AmbientSample> bellAllianceSounds_;
std::vector<AmbientSample> bellHordeSounds_;
std::vector<AmbientSample> bellNightElfSounds_;
std::vector<AmbientSample> bellTribalSounds_;
// Active emitters
std::vector<AmbientEmitter> emitters_;
uint64_t nextEmitterId_ = 1;
@ -167,6 +173,7 @@ private:
float oceanLoopTime_ = 0.0f;
float zoneLoopTime_ = 0.0f;
float cityLoopTime_ = 0.0f;
float bellTollTime_ = 0.0f;
bool wasIndoor_ = false;
bool wasBlacksmith_ = false;
bool wasSwimming_ = false;
@ -191,6 +198,7 @@ private:
void updateWaterAmbience(float deltaTime, bool isSwimming);
void updateZoneAmbience(float deltaTime, bool isIndoor);
void updateCityAmbience(float deltaTime);
void updateBellTolls(float deltaTime);
bool loadSound(const std::string& path, AmbientSample& sample, pipeline::AssetManager* assets);
// Time of day helpers