Added a Y component to audio_playSound, and reduction of volume by distance.
This makes it possible to remove code that made mines that exploded off-screen completely inaudible.
This commit is contained in:
parent
5ba8759804
commit
0929abf3a3
|
@ -1643,7 +1643,7 @@ void alien_move(object *alien)
|
||||||
alien->hit = 3;
|
alien->hit = 3;
|
||||||
alien->dx *= -1;
|
alien->dx *= -1;
|
||||||
alien->dy *= -1;
|
alien->dy *= -1;
|
||||||
audio_playSound(SFX_HIT, alien->x);
|
audio_playSound(SFX_HIT, alien->x, alien->y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1659,9 +1659,9 @@ void alien_move(object *alien)
|
||||||
if ((!engine.cheatShield) && (engine.missionCompleteTimer == 0))
|
if ((!engine.cheatShield) && (engine.missionCompleteTimer == 0))
|
||||||
player.shield -= alien->shield;
|
player.shield -= alien->shield;
|
||||||
alien->shield = 0;
|
alien->shield = 0;
|
||||||
audio_playSound(SFX_EXPLOSION, alien->x);
|
audio_playSound(SFX_EXPLOSION, alien->x, alien->y);
|
||||||
player.hit = 5;
|
player.hit = 5;
|
||||||
audio_playSound(SFX_HIT, player.x);
|
audio_playSound(SFX_HIT, player.x, player.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alien->classDef == CD_ASTEROID2)
|
if (alien->classDef == CD_ASTEROID2)
|
||||||
|
@ -1669,9 +1669,9 @@ void alien_move(object *alien)
|
||||||
if ((!engine.cheatShield) && (engine.missionCompleteTimer == 0))
|
if ((!engine.cheatShield) && (engine.missionCompleteTimer == 0))
|
||||||
player.shield -= alien->shield;
|
player.shield -= alien->shield;
|
||||||
alien->shield = 0;
|
alien->shield = 0;
|
||||||
audio_playSound(SFX_EXPLOSION, alien->x);
|
audio_playSound(SFX_EXPLOSION, alien->x, alien->y);
|
||||||
player.hit = 5;
|
player.hit = 5;
|
||||||
audio_playSound(SFX_HIT, player.x);
|
audio_playSound(SFX_HIT, player.x, player.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alien->classDef == CD_BARRIER)
|
if (alien->classDef == CD_BARRIER)
|
||||||
|
@ -1679,7 +1679,7 @@ void alien_move(object *alien)
|
||||||
if ((!engine.cheatShield) && (engine.missionCompleteTimer == 0))
|
if ((!engine.cheatShield) && (engine.missionCompleteTimer == 0))
|
||||||
player.shield--;
|
player.shield--;
|
||||||
player.hit = 5;
|
player.hit = 5;
|
||||||
audio_playSound(SFX_HIT, player.x);
|
audio_playSound(SFX_HIT, player.x, player.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1690,7 +1690,7 @@ Fill in later...
|
||||||
*/
|
*/
|
||||||
void alien_destroy(object *alien, object *attacker)
|
void alien_destroy(object *alien, object *attacker)
|
||||||
{
|
{
|
||||||
audio_playSound(SFX_EXPLOSION, alien->x);
|
audio_playSound(SFX_EXPLOSION, alien->x, alien->y);
|
||||||
|
|
||||||
if (alien->flags & FL_FRIEND)
|
if (alien->flags & FL_FRIEND)
|
||||||
{
|
{
|
||||||
|
@ -1841,7 +1841,7 @@ void alien_hurt(object *alien, object *attacker, int damage, bool ion)
|
||||||
alien->flags |= FL_LEAVESECTOR;
|
alien->flags |= FL_LEAVESECTOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
audio_playSound(SFX_HIT, alien->x);
|
audio_playSound(SFX_HIT, alien->x, alien->y);
|
||||||
if (alien->AIType == AI_EVASIVE)
|
if (alien->AIType == AI_EVASIVE)
|
||||||
alien->thinktime = 0;
|
alien->thinktime = 0;
|
||||||
|
|
||||||
|
|
|
@ -42,13 +42,17 @@ void audio_loadSounds()
|
||||||
sound[SFX_PLASMA3] = Mix_LoadWAV("sound/plasma3.ogg");
|
sound[SFX_PLASMA3] = Mix_LoadWAV("sound/plasma3.ogg");
|
||||||
}
|
}
|
||||||
|
|
||||||
void audio_playSound(int sid, float x)
|
void audio_playSound(int sid, float x, float y)
|
||||||
{
|
{
|
||||||
if ((!engine.useSound) || (!engine.useAudio))
|
|
||||||
return;
|
|
||||||
|
|
||||||
int channel = -1;
|
int channel = -1;
|
||||||
static int freechannel = 4;
|
static int freechannel = 4;
|
||||||
|
int angle = atanf((x - (screen->w / 2)) / (screen->w / 2)) * 180 / M_PI;
|
||||||
|
int attenuation = fabsf(x - (screen->w / 2)) / (screen->w / 20);
|
||||||
|
float distance = sqrtf(powf(fabsf(x - (screen->w / 2)), 2) + powf(fabsf(y - (screen->h / 2)), 2));
|
||||||
|
int volume = MIX_MAX_VOLUME - (MIX_MAX_VOLUME * distance / (3 * screen->w));
|
||||||
|
|
||||||
|
if ((!engine.useSound) || (!engine.useAudio) || (volume <= 0))
|
||||||
|
return;
|
||||||
|
|
||||||
switch(sid)
|
switch(sid)
|
||||||
{
|
{
|
||||||
|
@ -86,9 +90,7 @@ void audio_playSound(int sid, float x)
|
||||||
freechannel = 4;
|
freechannel = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
int angle = atanf((x - (screen->w / 2)) / (screen->w / 2)) * 180 / M_PI;
|
angle %= 360;
|
||||||
int attenuation = fabsf(x - (screen->w / 2)) / 40;
|
|
||||||
|
|
||||||
if (angle < 0)
|
if (angle < 0)
|
||||||
angle += 360;
|
angle += 360;
|
||||||
|
|
||||||
|
@ -96,6 +98,7 @@ void audio_playSound(int sid, float x)
|
||||||
attenuation = 255;
|
attenuation = 255;
|
||||||
|
|
||||||
Mix_SetPosition(channel, angle, attenuation);
|
Mix_SetPosition(channel, angle, attenuation);
|
||||||
|
Mix_Volume(channel, volume);
|
||||||
Mix_PlayChannel(channel, sound[sid], 0);
|
Mix_PlayChannel(channel, sound[sid], 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#define AUDIO_H
|
#define AUDIO_H
|
||||||
|
|
||||||
void audio_loadSounds();
|
void audio_loadSounds();
|
||||||
void audio_playSound(int sid, float x);
|
void audio_playSound(int sid, float x, float y);
|
||||||
void audio_haltMusic();
|
void audio_haltMusic();
|
||||||
void audio_pauseMusic();
|
void audio_pauseMusic();
|
||||||
void audio_resumeMusic();
|
void audio_resumeMusic();
|
||||||
|
|
|
@ -229,9 +229,7 @@ bool collectable_collision(collectables *collectable, object *ship)
|
||||||
|
|
||||||
void collectable_explode(collectables *collectable)
|
void collectable_explode(collectables *collectable)
|
||||||
{
|
{
|
||||||
if ((collectable->x >= 0) && (collectable->x <= screen->w) &&
|
audio_playSound(SFX_EXPLOSION, collectable->x, collectable->y);
|
||||||
(collectable->y >= 0) && (collectable->y <= screen->h))
|
|
||||||
audio_playSound(SFX_EXPLOSION, collectable->x);
|
|
||||||
|
|
||||||
for (int i = 0 ; i < 10 ; i++)
|
for (int i = 0 ; i < 10 ; i++)
|
||||||
explosion_add(RANDRANGE(collectable->x - 25, collectable->x + 25),
|
explosion_add(RANDRANGE(collectable->x - 25, collectable->x + 25),
|
||||||
|
|
36
src/game.cpp
36
src/game.cpp
|
@ -143,9 +143,9 @@ void game_init()
|
||||||
static void game_addDebris(int x, int y, int amount)
|
static void game_addDebris(int x, int y, int amount)
|
||||||
{
|
{
|
||||||
if ((rand() % 2) == 0)
|
if ((rand() % 2) == 0)
|
||||||
audio_playSound(SFX_DEBRIS, x);
|
audio_playSound(SFX_DEBRIS, x, y);
|
||||||
else
|
else
|
||||||
audio_playSound(SFX_DEBRIS2, x);
|
audio_playSound(SFX_DEBRIS2, x, y);
|
||||||
|
|
||||||
object *debris;
|
object *debris;
|
||||||
|
|
||||||
|
@ -450,9 +450,9 @@ static void game_doCollectables()
|
||||||
{
|
{
|
||||||
setInfoLine(temp, FONT_WHITE);
|
setInfoLine(temp, FONT_WHITE);
|
||||||
if (collectable->type == P_SHIELD)
|
if (collectable->type == P_SHIELD)
|
||||||
audio_playSound(SFX_SHIELDUP, player.x);
|
audio_playSound(SFX_SHIELDUP, player.x, player.y);
|
||||||
else
|
else
|
||||||
audio_playSound(SFX_PICKUP, player.x);
|
audio_playSound(SFX_PICKUP, player.x, player.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -648,7 +648,7 @@ static void game_doBullets()
|
||||||
{
|
{
|
||||||
bullet->active = false;
|
bullet->active = false;
|
||||||
bullet->shield = 0;
|
bullet->shield = 0;
|
||||||
audio_playSound(SFX_EXPLOSION, bullet->x);
|
audio_playSound(SFX_EXPLOSION, bullet->x, bullet->y);
|
||||||
for (int i = 0 ; i < 10 ; i++)
|
for (int i = 0 ; i < 10 ; i++)
|
||||||
explosion_add(bullet->x + RANDRANGE(-35, 35),
|
explosion_add(bullet->x + RANDRANGE(-35, 35),
|
||||||
bullet->y + RANDRANGE(-35, 35),
|
bullet->y + RANDRANGE(-35, 35),
|
||||||
|
@ -700,7 +700,7 @@ static void game_doBullets()
|
||||||
{
|
{
|
||||||
bullet->active = false;
|
bullet->active = false;
|
||||||
bullet->shield = 0;
|
bullet->shield = 0;
|
||||||
audio_playSound(SFX_EXPLOSION, bullet->x);
|
audio_playSound(SFX_EXPLOSION, bullet->x, bullet->y);
|
||||||
for (int i = 0 ; i < 10 ; i++)
|
for (int i = 0 ; i < 10 ; i++)
|
||||||
explosion_add(bullet->x + RANDRANGE(-35, 35),
|
explosion_add(bullet->x + RANDRANGE(-35, 35),
|
||||||
bullet->y + RANDRANGE(-35, 35), SP_BIG_EXPLOSION);
|
bullet->y + RANDRANGE(-35, 35), SP_BIG_EXPLOSION);
|
||||||
|
@ -712,7 +712,7 @@ static void game_doBullets()
|
||||||
bullet->shield = 0;
|
bullet->shield = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
audio_playSound(SFX_HIT, player.x);
|
audio_playSound(SFX_HIT, player.x, player.y);
|
||||||
|
|
||||||
if (bullet->id == WT_ROCKET)
|
if (bullet->id == WT_ROCKET)
|
||||||
explosion_add(bullet->x, bullet->y, SP_BIG_EXPLOSION);
|
explosion_add(bullet->x, bullet->y, SP_BIG_EXPLOSION);
|
||||||
|
@ -733,11 +733,11 @@ static void game_doBullets()
|
||||||
{
|
{
|
||||||
bullet->active = false;
|
bullet->active = false;
|
||||||
explosion_add(bullet->x, bullet->y, SP_SMALL_EXPLOSION);
|
explosion_add(bullet->x, bullet->y, SP_SMALL_EXPLOSION);
|
||||||
audio_playSound(SFX_HIT, cargo[j].x);
|
audio_playSound(SFX_HIT, cargo[j].x, cargo[j].y);
|
||||||
if (cargo[j].collectType != P_PHOEBE)
|
if (cargo[j].collectType != P_PHOEBE)
|
||||||
{
|
{
|
||||||
cargo[j].active = false;
|
cargo[j].active = false;
|
||||||
audio_playSound(SFX_EXPLOSION, cargo[j].x);
|
audio_playSound(SFX_EXPLOSION, cargo[j].x, cargo[j].y);
|
||||||
for (int i = 0 ; i < 10 ; i++)
|
for (int i = 0 ; i < 10 ; i++)
|
||||||
explosion_add(cargo[j].x + RANDRANGE(-15, 15),
|
explosion_add(cargo[j].x + RANDRANGE(-15, 15),
|
||||||
cargo[j].y + RANDRANGE(-15, 15),
|
cargo[j].y + RANDRANGE(-15, 15),
|
||||||
|
@ -803,7 +803,7 @@ static void game_doBullets()
|
||||||
{
|
{
|
||||||
if (bullet->flags & WF_TIMEDEXPLOSION)
|
if (bullet->flags & WF_TIMEDEXPLOSION)
|
||||||
{
|
{
|
||||||
audio_playSound(SFX_EXPLOSION, bullet->x);
|
audio_playSound(SFX_EXPLOSION, bullet->x, bullet->y);
|
||||||
for (int i = 0 ; i < 10 ; i++)
|
for (int i = 0 ; i < 10 ; i++)
|
||||||
explosion_add(bullet->x + RANDRANGE(-35, 35),
|
explosion_add(bullet->x + RANDRANGE(-35, 35),
|
||||||
bullet->y + RANDRANGE(-35, 35), SP_BIG_EXPLOSION);
|
bullet->y + RANDRANGE(-35, 35), SP_BIG_EXPLOSION);
|
||||||
|
@ -987,7 +987,7 @@ static void game_doAliens()
|
||||||
aliens[i].flags -= FL_ISCLOAKED;
|
aliens[i].flags -= FL_ISCLOAKED;
|
||||||
else
|
else
|
||||||
aliens[i].flags += FL_ISCLOAKED;
|
aliens[i].flags += FL_ISCLOAKED;
|
||||||
audio_playSound(SFX_CLOAK, aliens[i].x);
|
audio_playSound(SFX_CLOAK, aliens[i].x, aliens[i].y);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aliens[i].classDef == CD_BARRIER)
|
if (aliens[i].classDef == CD_BARRIER)
|
||||||
|
@ -1046,7 +1046,7 @@ static void game_doAliens()
|
||||||
(aliens[i].ammo[0] >= 250))
|
(aliens[i].ammo[0] >= 250))
|
||||||
{
|
{
|
||||||
aliens[i].flags += FL_FIRERAY;
|
aliens[i].flags += FL_FIRERAY;
|
||||||
audio_playSound(SFX_ENERGYRAY, aliens[i].x);
|
audio_playSound(SFX_ENERGYRAY, aliens[i].x, aliens[i].y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1306,7 +1306,7 @@ static void game_doPlayer()
|
||||||
if ((engine.done == 0) && (engine.gameSection == SECTION_GAME) &&
|
if ((engine.done == 0) && (engine.gameSection == SECTION_GAME) &&
|
||||||
(currentMission.remainingObjectives1 == 0))
|
(currentMission.remainingObjectives1 == 0))
|
||||||
{
|
{
|
||||||
audio_playSound(SFX_FLY, screen->w / 2);
|
audio_playSound(SFX_FLY, screen->w / 2, screen->h / 2);
|
||||||
engine.done = 2;
|
engine.done = 2;
|
||||||
engine.missionCompleteTimer = (SDL_GetTicks() - 1);
|
engine.missionCompleteTimer = (SDL_GetTicks() - 1);
|
||||||
}
|
}
|
||||||
|
@ -1431,8 +1431,8 @@ static void game_doPlayer()
|
||||||
aliens[i].flags |= FL_LEAVESECTOR;
|
aliens[i].flags |= FL_LEAVESECTOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
audio_playSound(SFX_DEATH, player.x);
|
audio_playSound(SFX_DEATH, player.x, player.y);
|
||||||
audio_playSound(SFX_EXPLOSION, player.x);
|
audio_playSound(SFX_EXPLOSION, player.x, player.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
engine.keyState[KEY_UP] = engine.keyState[KEY_DOWN] = engine.keyState[KEY_LEFT] = engine.keyState[KEY_RIGHT] = 0;
|
engine.keyState[KEY_UP] = engine.keyState[KEY_DOWN] = engine.keyState[KEY_LEFT] = engine.keyState[KEY_RIGHT] = 0;
|
||||||
|
@ -1754,7 +1754,7 @@ static void game_doHud()
|
||||||
{
|
{
|
||||||
if ((engine.seconds > 1) && (engine.seconds <= 11) && (engine.minutes == 0))
|
if ((engine.seconds > 1) && (engine.seconds <= 11) && (engine.minutes == 0))
|
||||||
{
|
{
|
||||||
audio_playSound(SFX_CLOCK, screen->w / 2);
|
audio_playSound(SFX_CLOCK, screen->w / 2, screen->h / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (engine.seconds > 0)
|
if (engine.seconds > 0)
|
||||||
|
@ -2333,14 +2333,14 @@ int game_mainLoop()
|
||||||
if ((game.area == MISN_MOEBO) &&
|
if ((game.area == MISN_MOEBO) &&
|
||||||
(aliens[ALIEN_BOSS].flags & FL_ESCAPED))
|
(aliens[ALIEN_BOSS].flags & FL_ESCAPED))
|
||||||
{
|
{
|
||||||
audio_playSound(SFX_DEATH, aliens[ALIEN_BOSS].x);
|
audio_playSound(SFX_DEATH, aliens[ALIEN_BOSS].x, aliens[ALIEN_BOSS].y);
|
||||||
screen_clear(white);
|
screen_clear(white);
|
||||||
renderer_update();
|
renderer_update();
|
||||||
for (int i = 0 ; i < 300 ; i++)
|
for (int i = 0 ; i < 300 ; i++)
|
||||||
{
|
{
|
||||||
SDL_Delay(10);
|
SDL_Delay(10);
|
||||||
if ((rand() % 25) == 0)
|
if ((rand() % 25) == 0)
|
||||||
audio_playSound(SFX_EXPLOSION, aliens[ALIEN_BOSS].x);
|
audio_playSound(SFX_EXPLOSION, aliens[ALIEN_BOSS].x, aliens[ALIEN_BOSS].y);
|
||||||
}
|
}
|
||||||
SDL_Delay(1000);
|
SDL_Delay(1000);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -320,7 +320,7 @@ void leaveSector()
|
||||||
if (player.x <= -100)
|
if (player.x <= -100)
|
||||||
{
|
{
|
||||||
engine.done = 2;
|
engine.done = 2;
|
||||||
audio_playSound(SFX_FLY, screen->w / 2);
|
audio_playSound(SFX_FLY, screen->w / 2, screen->h / 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
14
src/ship.cpp
14
src/ship.cpp
|
@ -61,16 +61,16 @@ void ship_fireBullet(object *ship, int weaponType)
|
||||||
case WT_PLASMA:
|
case WT_PLASMA:
|
||||||
case WT_SPREAD:
|
case WT_SPREAD:
|
||||||
case WT_DIRECTIONAL:
|
case WT_DIRECTIONAL:
|
||||||
audio_playSound(SFX_PLASMA, ship->x);
|
audio_playSound(SFX_PLASMA, ship->x, ship->y);
|
||||||
break;
|
break;
|
||||||
case WT_ROCKET:
|
case WT_ROCKET:
|
||||||
audio_playSound(SFX_MISSILE, ship->x);
|
audio_playSound(SFX_MISSILE, ship->x, ship->y);
|
||||||
break;
|
break;
|
||||||
case WT_LASER:
|
case WT_LASER:
|
||||||
audio_playSound(SFX_LASER, ship->x);
|
audio_playSound(SFX_LASER, ship->x, ship->y);
|
||||||
break;
|
break;
|
||||||
case WT_CHARGER:
|
case WT_CHARGER:
|
||||||
audio_playSound(SFX_PLASMA3, ship->x);
|
audio_playSound(SFX_PLASMA3, ship->x, ship->y);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -177,11 +177,11 @@ void ship_fireRay(object *ship)
|
||||||
player.shield--;
|
player.shield--;
|
||||||
|
|
||||||
explosion_add(player.x, player.y, SP_SMALL_EXPLOSION);
|
explosion_add(player.x, player.y, SP_SMALL_EXPLOSION);
|
||||||
audio_playSound(SFX_HIT, player.x);
|
audio_playSound(SFX_HIT, player.x, player.y);
|
||||||
if (player.shield < 1)
|
if (player.shield < 1)
|
||||||
{
|
{
|
||||||
audio_playSound(SFX_DEATH, player.x);
|
audio_playSound(SFX_DEATH, player.x, player.y);
|
||||||
audio_playSound(SFX_EXPLOSION, player.x);
|
audio_playSound(SFX_EXPLOSION, player.x, player.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue