/*
-Copyright (C) 2004-2010 Parallel Realities
+Copyright (C) 2004-2011 Parallel Realities
+Copyright (C) 2011-2015 Perpendicular Dimensions
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
remove(tempPath);
- SDL_Delay(250); // wait a bit, just to be sure!
-
if (music != NULL)
{
Mix_HaltMusic();
return false;
}
- snprintf(tempPath, sizeof tempPath, "%s.tags", filename);
+ #if USEPAK
+ snprintf(tempPath, sizeof tempPath, "%smusic.tags", engine->userHomeDirectory);
+ remove(tempPath);
+ char tagfilename[PATH_MAX];
+ snprintf(tagfilename, sizeof tagfilename, "%s.tags", filename);
+ engine->unpack(tagfilename, PAK_TAGS);
+ #else
+ snprintf(tempPath, sizeof tempPath, "%s.tags", filename);
+ #endif
FILE *fp = fopen(tempPath, "r");
char line[1024];
return true;
}
-void Audio::playSound(int snd, int channel)
+void Audio::playSoundRelative(int snd, int channel, float x)
{
if ((!engine->useAudio) || (soundVolume == 0))
return;
return;
}
- Mix_Volume(channel, soundVolume);
+ int angle = atanf(x / 480) * 180 / M_PI;
+ int attenuation = fabsf(x) / 40;
+
+ if (angle < 0)
+ angle += 360;
+
+ if (attenuation > 255)
+ attenuation = 255;
+ Mix_Volume(channel, soundVolume);
Mix_PlayChannel(channel, sound[snd], 0);
+ Mix_SetPosition(channel, angle, attenuation);
+}
+
+void Audio::playSound(int snd, int channel, float x)
+{
+ x -= (engine->playerPosX + 320);
+ playSoundRelative(snd, channel, x);
+}
+
+void Audio::playSound(int snd, int channel)
+{
+ playSoundRelative(snd, channel, 0);
}
void Audio::playMusic()