Added NPC voice manager that plays greeting sounds when clicking on NPCs:
Features:
- Voice line library with multiple race/gender voice types (Human, Dwarf,
Night Elf, etc.)
- 3D positional audio - voice comes from NPC location
- Cooldown system prevents spam clicking same NPC
- Randomized pitch/volume for variety
- Loads greeting sounds from character voice files in MPQ
- Generic fallback voices for NPCs without specific voice types
Voice lines trigger automatically when gossip window opens (SMSG_GOSSIP_MESSAGE).
Uses same audio system as other sound effects with ma_sound_set_position.
The mount dust code was calling camera->getForward() without checking if
camera was null first, causing a crash that prevented mounting/dismounting.
Added camera null check to the condition.
Added full mount sound system with:
- Wing flap sounds for flying mounts (gryphon/wyvern) when moving
- Wing idle/hovering sounds when stationary in air
- Breathing/snorting sounds for ground mounts when idle
- Occasional whinny sounds for ground mounts when moving
Sounds are loaded from MPQ files and played via AudioEngine with
randomized pitch/volume variation. Mount sound manager tracks mount
type, movement state, and flying state to play appropriate ambient
sounds at natural intervals.
Updated setMounted() to accept creature display ID and notify the
mount sound manager, which uses display ID ranges to detect mount
type (flying vs ground).
Implement framework for playing mount sounds (flapping, galloping) based on mount type and movement state. Actual sound playback to be implemented next.
Replace POSIX-specific socket and process APIs with portable
abstractions so the project builds on both Windows and Linux.
- Add include/network/net_platform.hpp: Winsock2/POSIX socket
abstraction (socket types, non-blocking, error handling,
WSAStartup lifecycle)
- Add include/platform/process.hpp: CreateProcess/fork+exec
abstraction for spawning ffplay subprocesses
- Update network module (tcp_socket, world_socket) to use
portable socket helpers instead of raw POSIX calls
- Update audio module (music_manager, footstep_manager,
activity_sound_manager) to use portable process helpers
instead of fork/exec/kill/waitpid
- Replace hardcoded /tmp/ paths with std::filesystem::temp_directory_path()
- Link ws2_32 and SDL2main on Windows in CMakeLists.txt