From 178153c82b392b4f5a990ec318ebd44cb28ddeaf Mon Sep 17 00:00:00 2001 From: Cong Date: Tue, 16 May 2017 00:06:07 +1000 Subject: [PATCH] Positional battle audio --- src/system/sound.c | 10 +++++++++- src/system/sound.h | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/system/sound.c b/src/system/sound.c index ed2727f..a2ed592 100644 --- a/src/system/sound.c +++ b/src/system/sound.c @@ -99,7 +99,15 @@ void playBattleSound(int id, int x, int y) vol /= MAX_BATTLE_SOUND_DISTANCE; vol *= distance; - Mix_SetDistance(channel, vol); + if (distance >= MIN_BATTLE_SOUND_DISTANCE) + { + float bearing = 360 - getAngle(x, y, lastPlayerX, lastPlayerY); + Mix_SetPosition(channel, (Sint16)bearing, (Uint8)distance); + } + else + { + Mix_SetDistance(channel, vol); + } } } } diff --git a/src/system/sound.h b/src/system/sound.h index f6b911f..9e6f6c6 100644 --- a/src/system/sound.h +++ b/src/system/sound.h @@ -23,8 +23,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "SDL2/SDL_mixer.h" #define MAX_BATTLE_SOUND_DISTANCE 1500 +#define MIN_BATTLE_SOUND_DISTANCE 100 extern int getDistance(int x1, int y1, int x2, int y2); +extern float getAngle(int x1, int y1, int x2, int y2); extern char *getFileLocation(char *filename); extern Entity *player;