From 28cc1fcc6d29c1650376ddf8662f0ce22737036e Mon Sep 17 00:00:00 2001 From: onpon4 Date: Sun, 8 Mar 2015 10:38:58 -0400 Subject: [PATCH] Updated audio module. --- src/Starfighter.cpp | 2 +- src/aliens.cpp | 12 +++--- src/audio.cpp | 98 ++++++++++++++++++++++++++++++++------------ src/audio.h | 13 +++--- src/bullets.cpp | 28 ++++++------- src/collectable.cpp | 6 +-- src/debris.cpp | 4 +- src/defs.h | 4 +- src/game.cpp | 12 +++--- src/init.cpp | 4 +- src/intermission.cpp | 17 ++------ src/misc.cpp | 2 +- src/missions.cpp | 8 ++-- src/player.cpp | 8 ++-- src/resources.cpp | 32 --------------- src/resources.h | 2 - src/structs.h | 2 - src/title.cpp | 37 ++++------------- 18 files changed, 135 insertions(+), 156 deletions(-) diff --git a/src/Starfighter.cpp b/src/Starfighter.cpp index eb0b903..de0c35d 100644 --- a/src/Starfighter.cpp +++ b/src/Starfighter.cpp @@ -107,7 +107,7 @@ int main(int argc, char **argv) } freeGraphics(); - loadSound(); + audio_loadSounds(); initWeapons(); diff --git a/src/aliens.cpp b/src/aliens.cpp index 3042db3..bbb3e7b 100644 --- a/src/aliens.cpp +++ b/src/aliens.cpp @@ -694,7 +694,7 @@ void alien_move(object *alien) alien->hit = 3; alien->dx *= -1; alien->dy *= -1; - playSound(SFX_HIT, alien->x); + audio_playSound(SFX_HIT, alien->x); } } @@ -712,10 +712,10 @@ void alien_move(object *alien) if (!engine.cheatShield) player.shield -= alien->shield; alien->shield = 0; - playSound(SFX_EXPLOSION, alien->x); + audio_playSound(SFX_EXPLOSION, alien->x); setInfoLine("Warning: Asteroid Collision Damage!!", FONT_RED); player.hit = 5; - playSound(SFX_HIT, player.x); + audio_playSound(SFX_HIT, player.x); } if (alien->classDef == CD_ASTEROID2) @@ -723,10 +723,10 @@ void alien_move(object *alien) if (!engine.cheatShield) player.shield -= alien->shield; alien->shield = 0; - playSound(SFX_EXPLOSION, alien->x); + audio_playSound(SFX_EXPLOSION, alien->x); setInfoLine("Warning: Asteroid Collision Damage!!", FONT_RED); player.hit = 5; - playSound(SFX_HIT, player.x); + audio_playSound(SFX_HIT, player.x); } if (alien->classDef == CD_BARRIER) @@ -734,7 +734,7 @@ void alien_move(object *alien) if (!engine.cheatShield) player.shield--; player.hit = 5; - playSound(SFX_HIT, player.x); + audio_playSound(SFX_HIT, player.x); } } } diff --git a/src/audio.cpp b/src/audio.cpp index e6d778c..1add0f2 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -19,9 +19,30 @@ along with this program. If not, see . #include "Starfighter.h" -Mix_Chunk *sound[MAX_SOUNDS]; +static Mix_Chunk *sound[SFX_MAX]; +static Mix_Music *music = NULL; -void playSound(int sid, float x) +void audio_loadSounds() +{ + sound[SFX_EXPLOSION] = Mix_LoadWAV("sound/explode.ogg"); + sound[SFX_HIT] = Mix_LoadWAV("sound/explode2.ogg"); + sound[SFX_DEATH] = Mix_LoadWAV("sound/maledeath.ogg"); + sound[SFX_MISSILE] = Mix_LoadWAV("sound/missile.ogg"); + sound[SFX_PLASMA] = Mix_LoadWAV("sound/plasma.ogg"); + sound[SFX_CLOCK] = Mix_LoadWAV("sound/clock.ogg"); + sound[SFX_FLY] = Mix_LoadWAV("sound/flyby.ogg"); + sound[SFX_ENERGYRAY] = Mix_LoadWAV("sound/beamLaser.ogg"); + sound[SFX_PICKUP] = Mix_LoadWAV("sound/item.ogg"); + sound[SFX_SHIELDUP] = Mix_LoadWAV("sound/shield.ogg"); + sound[SFX_CLOAK] = Mix_LoadWAV("sound/cloak.ogg"); + sound[SFX_DEBRIS] = Mix_LoadWAV("sound/explode3.ogg"); + sound[SFX_DEBRIS2] = Mix_LoadWAV("sound/explode4.ogg"); + sound[SFX_LASER] = Mix_LoadWAV("sound/laser.ogg"); + sound[SFX_PLASMA2] = Mix_LoadWAV("sound/plasma2.ogg"); + sound[SFX_PLASMA3] = Mix_LoadWAV("sound/plasma3.ogg"); +} + +void audio_playSound(int sid, float x) { if ((!engine.useSound) || (!engine.useAudio)) return; @@ -65,40 +86,49 @@ void playSound(int sid, float x) freechannel = 4; } - int angle = atanf((x - 400) / 400) * 180 / M_PI; - int attenuation = fabsf(x - 400) / 40; + int angle = atanf((x - (screen->w / 2)) / (screen->w / 2)) * 180 / M_PI; + int attenuation = fabsf(x - (screen->w / 2)) / 40; - if(angle < 0) + if (angle < 0) angle += 360; - if(attenuation > 255) + if (attenuation > 255) attenuation = 255; Mix_SetPosition(channel, angle, attenuation); Mix_PlayChannel(channel, sound[sid], 0); } -Mix_Chunk *loadSound(const char *filename) -{ - Mix_Chunk *chunk; - - chunk = Mix_LoadWAV(filename); - - return chunk; -} - -void loadMusic(const char *filename) +void audio_haltMusic() { if (Mix_PlayingMusic()) Mix_HaltMusic(); - if (engine.music != NULL) - Mix_FreeMusic(engine.music); - - engine.music = Mix_LoadMUS(filename); + if (music != NULL) + { + Mix_FreeMusic(music); + music = NULL; + } } -void playRandomTrack() +void audio_setMusicVolume(int volume) +{ + if (engine.useMusic && engine.useAudio) + Mix_VolumeMusic(volume); +} + +void audio_playMusic(const char *filename, int loops) +{ + if (engine.useMusic && engine.useAudio) + { + audio_haltMusic(); + music = Mix_LoadMUS(filename); + audio_setMusicVolume(100); + Mix_PlayMusic(music, loops); + } +} + +void audio_playRandomTrack() { if ((!engine.useMusic) || (!engine.useAudio)) return; @@ -112,20 +142,36 @@ void playRandomTrack() switch(currentGame.area) { case 0: - loadMusic("music/railjet_short.ogg"); + audio_playMusic("music/railjet_short.ogg", -1); break; case 5: case 11: case 18: case 25: - loadMusic("music/orbital_colossus.ogg"); + audio_playMusic("music/orbital_colossus.ogg", -1); break; case 26: - loadMusic("music/RE.ogg"); + audio_playMusic("music/RE.ogg", -1); break; default: - loadMusic(track[rand() % tracks]); + audio_playMusic(track[rand() % tracks], -1); + } +} + +void audio_free() +{ + for (int i = 0 ; i < SFX_MAX ; i++) + { + if (sound[i] != NULL) + { + Mix_FreeChunk(sound[i]); + sound[i] = NULL; + } } - Mix_PlayMusic(engine.music, -1); + if (music != NULL) + { + Mix_FreeMusic(music); + music = NULL; + } } diff --git a/src/audio.h b/src/audio.h index 960a7a1..fb7768c 100644 --- a/src/audio.h +++ b/src/audio.h @@ -20,11 +20,12 @@ along with this program. If not, see . #ifndef AUDIO_H #define AUDIO_H -extern Mix_Chunk *sound[MAX_SOUNDS]; - -extern void playSound(int sid, float x = 400); -extern Mix_Chunk *loadSound(const char *filename); -extern void loadMusic(const char *filename); -extern void playRandomTrack(); +void audio_loadSounds(); +void audio_playSound(int sid, float x); +void audio_haltMusic(); +void audio_setMusicVolume(int volume); +void audio_playMusic(const char *filename, int loops); +void audio_playRandomTrack(); +void audio_free(); #endif diff --git a/src/bullets.cpp b/src/bullets.cpp index f10e44d..3db5a9a 100644 --- a/src/bullets.cpp +++ b/src/bullets.cpp @@ -156,16 +156,16 @@ void fireBullet(object *attacker, int weaponType) case WT_PLASMA: case WT_SPREAD: case WT_DIRECTIONAL: - playSound(SFX_PLASMA, attacker->x); + audio_playSound(SFX_PLASMA, attacker->x); break; case WT_ROCKET: - playSound(SFX_MISSILE, attacker->x); + audio_playSound(SFX_MISSILE, attacker->x); break; case WT_LASER: - playSound(SFX_LASER, attacker->x); + audio_playSound(SFX_LASER, attacker->x); break; case WT_CHARGER: - playSound(SFX_PLASMA3, attacker->x); + audio_playSound(SFX_PLASMA3, attacker->x); break; } @@ -275,7 +275,7 @@ Fill in later... */ static void alien_destroy(object *alien, object *attacker) { - playSound(SFX_EXPLOSION, alien->x); + audio_playSound(SFX_EXPLOSION, alien->x); // Chain reaction destruction if needed if (alien->flags & FL_DAMAGEOWNER) @@ -436,11 +436,11 @@ void fireRay(object *attacker) player.shield--; addExplosion(player.x, player.y, E_SMALL_EXPLOSION); - playSound(SFX_HIT, player.x); + audio_playSound(SFX_HIT, player.x); if (player.shield < 1) { - playSound(SFX_DEATH, player.x); - playSound(SFX_EXPLOSION, player.x); + audio_playSound(SFX_DEATH, player.x); + audio_playSound(SFX_EXPLOSION, player.x); } } } @@ -459,7 +459,7 @@ void fireRay(object *attacker) { anEnemy->shield--; addExplosion(anEnemy->x, anEnemy->y, E_SMALL_EXPLOSION); - playSound(SFX_HIT, anEnemy->x); + audio_playSound(SFX_HIT, anEnemy->x); if (anEnemy->shield < 1) { alien_destroy(anEnemy, attacker->owner); @@ -647,7 +647,7 @@ void doBullets() bullet->active = false; } - playSound(SFX_HIT, alien->x); + audio_playSound(SFX_HIT, alien->x); if (alien->AIType == AI_EVASIVE) alien->thinktime = 0; @@ -709,7 +709,7 @@ void doBullets() bullet->active = false; } - playSound(SFX_HIT, player.x); + audio_playSound(SFX_HIT, player.x); if (bullet->id == WT_ROCKET) addExplosion(bullet->x, bullet->y, E_BIG_EXPLOSION); @@ -731,11 +731,11 @@ void doBullets() { bullet->active = false; addExplosion(bullet->x, bullet->y, E_SMALL_EXPLOSION); - playSound(SFX_HIT, theCargo->x); + audio_playSound(SFX_HIT, theCargo->x); if (theCargo->collectType != P_PHOEBE) { theCargo->active = false; - playSound(SFX_EXPLOSION, theCargo->x); + audio_playSound(SFX_EXPLOSION, theCargo->x); for (int i = 0 ; i < 10 ; i++) addExplosion(theCargo->x + rrand(-15, 15), theCargo->y + rrand(-15, 15), E_BIG_EXPLOSION); updateMissionRequirements(M_PROTECT_PICKUP, P_CARGO, 1); @@ -754,7 +754,7 @@ void doBullets() { if ((bullet->flags & WF_TIMEDEXPLOSION) || (bullet->id == WT_CHARGER)) { - playSound(SFX_EXPLOSION, bullet->x); + audio_playSound(SFX_EXPLOSION, bullet->x); for (int i = 0 ; i < 10 ; i++) addExplosion(bullet->x + rrand(-35, 35), bullet->y + rrand(-35, 35), E_BIG_EXPLOSION); diff --git a/src/collectable.cpp b/src/collectable.cpp index 41f1bc2..b9867dd 100644 --- a/src/collectable.cpp +++ b/src/collectable.cpp @@ -226,7 +226,7 @@ static void explodeMine(collectables *collectable) { if ((collectable->x >= 0) && (collectable->x <= screen->w) && (collectable->y >= 0) && (collectable->y <= screen->h)) - playSound(SFX_EXPLOSION, collectable->x); + audio_playSound(SFX_EXPLOSION, collectable->x); for (int i = 0 ; i < 10 ; i++) addExplosion(collectable->x + rand() % 25 - rand() % 25, @@ -448,9 +448,9 @@ void doCollectables() { setInfoLine(temp, FONT_WHITE); if (collectable->type == P_SHIELD) - playSound(SFX_SHIELDUP, player.x); + audio_playSound(SFX_SHIELDUP, player.x); else - playSound(SFX_PICKUP, player.x); + audio_playSound(SFX_PICKUP, player.x); } } diff --git a/src/debris.cpp b/src/debris.cpp index 488e788..db132ff 100644 --- a/src/debris.cpp +++ b/src/debris.cpp @@ -22,9 +22,9 @@ along with this program. If not, see . void addDebris(int x, int y, int amount) { if ((rand() % 2) == 0) - playSound(SFX_DEBRIS, x); + audio_playSound(SFX_DEBRIS, x); else - playSound(SFX_DEBRIS2, x); + audio_playSound(SFX_DEBRIS2, x); object *debris; diff --git a/src/defs.h b/src/defs.h index c4b0fc8..2774257 100644 --- a/src/defs.h +++ b/src/defs.h @@ -86,7 +86,6 @@ along with this program. If not, see . #define MAX_WEAPONS 20 #define MAX_SHAPES 100 #define MAX_SHIPSHAPES 120 -#define MAX_SOUNDS 17 #define MAX_ALIENS 25 #define MAX_TEXTSHAPES 150 #define MAX_FONTSHAPES 6 @@ -339,7 +338,8 @@ enum { SFX_DEBRIS2, SFX_LASER, SFX_PLASMA2, - SFX_PLASMA3 + SFX_PLASMA3, + SFX_MAX }; enum { diff --git a/src/game.cpp b/src/game.cpp index 7e6fd5e..39b7802 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -541,7 +541,7 @@ int mainGameLoop() else if ((currentGame.area == 26) && (engine.musicVolume > 0)) { limitFloat(&(engine.musicVolume -= 0.2), 0, 100); - Mix_VolumeMusic((int)engine.musicVolume); + audio_setMusicVolume((int)engine.musicVolume); } else { @@ -556,7 +556,7 @@ int mainGameLoop() else { limitFloat(&(engine.musicVolume -= 0.2), 0, 100); - Mix_VolumeMusic((int)engine.musicVolume); + audio_setMusicVolume((int)engine.musicVolume); if (SDL_GetTicks() >= engine.missionCompleteTimer) { engine.done = 1; @@ -721,7 +721,7 @@ int mainGameLoop() alien->flags -= FL_ISCLOAKED; else alien->flags += FL_ISCLOAKED; - playSound(SFX_CLOAK, alien->x); + audio_playSound(SFX_CLOAK, alien->x); } if (alien->classDef == CD_BARRIER) @@ -780,7 +780,7 @@ int mainGameLoop() (alien->ammo[0] == 250)) { alien->flags += FL_FIRERAY; - playSound(SFX_ENERGYRAY, alien->x); + audio_playSound(SFX_ENERGYRAY, alien->x); } } } @@ -932,14 +932,14 @@ int mainGameLoop() // specific to Boss 1 if ((currentGame.area == 5) && (aliens[WC_BOSS].flags & FL_ESCAPED)) { - playSound(SFX_DEATH, aliens[WC_BOSS].x); + audio_playSound(SFX_DEATH, aliens[WC_BOSS].x); clearScreen(white); updateScreen(); for (int i = 0 ; i < 300 ; i++) { SDL_Delay(10); if ((rand() % 25) == 0) - playSound(SFX_EXPLOSION, aliens[WC_BOSS].x); + audio_playSound(SFX_EXPLOSION, aliens[WC_BOSS].x); } SDL_Delay(1000); break; diff --git a/src/init.cpp b/src/init.cpp index e9497ea..f40bea4 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -224,7 +224,7 @@ void initSystem() { if (Mix_OpenAudio(44100, AUDIO_S16, engine.useAudio * 2, 1024) < 0) { - printf("Warning: Couldn't set 44100 Hz 16-bit stereo audio - Reason: %s\n", Mix_GetError()); + printf("Warning: Couldn't set 44100 Hz 16-bit stereo audio - Reason:\n%s\n", Mix_GetError()); printf("Sound and Music will be disabled\n"); engine.useAudio = false; } @@ -246,7 +246,7 @@ void cleanUp() { freeGraphics(); SDL_FreeSurface(background); - freeSound(); + audio_free(); resetLists(); delete(engine.bulletHead); delete(engine.explosionHead); diff --git a/src/intermission.cpp b/src/intermission.cpp index ac36e43..469f730 100644 --- a/src/intermission.cpp +++ b/src/intermission.cpp @@ -409,20 +409,13 @@ static void showOptions(SDL_Surface *optionsSurface) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 417, 222, 45, 22)) { engine.useMusic = true; - if (engine.useAudio) - { - if (Mix_PausedMusic() == 1) - Mix_ResumeMusic(); - else - Mix_PlayMusic(engine.music, -1); - } + audio_playMusic("music/through_space.ogg", -1); } if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 478, 222, 45, 22)) { engine.useMusic = false; - if (engine.useAudio) - Mix_PauseMusic(); + audio_haltMusic(); } if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 417, 272, 45, 22)) @@ -469,8 +462,6 @@ int galaxyMap() initSaveSlots(); - loadMusic("music/through_space.ogg"); - loadBackground(systemBackground[currentGame.system]); char string[25]; @@ -556,7 +547,7 @@ int galaxyMap() int rtn = 0; if ((engine.useAudio) && (engine.useMusic)) - Mix_PlayMusic(engine.music, -1); + audio_playMusic("music/through_space.ogg", -1); textObject iconInfo[12]; @@ -833,7 +824,7 @@ int galaxyMap() delayFrame(); } - Mix_HaltMusic(); + audio_haltMusic(); SDL_FreeSurface(statsSurface); SDL_FreeSurface(savesSurface); SDL_FreeSurface(optionsSurface); diff --git a/src/misc.cpp b/src/misc.cpp index 795eb8a..b1ff406 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -235,7 +235,7 @@ void doInfo() { if ((engine.seconds > 1) && (engine.seconds <= 11) && (engine.minutes == 0)) { - playSound(SFX_CLOCK); + audio_playSound(SFX_CLOCK, screen->w / 2); } if (engine.seconds > 0) diff --git a/src/missions.cpp b/src/missions.cpp index 668e0fa..69d592f 100644 --- a/src/missions.cpp +++ b/src/missions.cpp @@ -516,9 +516,7 @@ static char revealHiddenObjectives() aliens[WC_KLINE].y = player.y; aliens[WC_KLINE].flags |= FL_IMMORTAL | FL_NOFIRE; player_setTarget(WC_KLINE); - loadMusic("music/last_cyber_dance.ogg"); - if ((engine.useAudio) && (engine.useMusic)) - Mix_PlayMusic(engine.music, -1); + audio_playMusic("music/last_cyber_dance.ogg", -1); } } @@ -789,7 +787,7 @@ void missionBriefScreen() textSurface(11, "Power", 25, 570, FONT_WHITE); textSurface(12, "Output", 250, 570, FONT_WHITE); textSurface(13, "Cooler", 485, 570, FONT_WHITE); - playRandomTrack(); + audio_playRandomTrack(); if (currentGame.area != MAX_MISSIONS - 1) { @@ -915,7 +913,7 @@ void missionFinishedScreen() if (player.weaponType[1] == W_LASER) player.ammo[1] = 1; - Mix_HaltMusic(); + audio_haltMusic(); } /* diff --git a/src/player.cpp b/src/player.cpp index 03068d0..73d6358 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -209,7 +209,7 @@ void doPlayer() if ((engine.done == 0) && (engine.gameSection == SECTION_GAME) && (currentMission.remainingObjectives1 == 0)) { - playSound(SFX_FLY); + audio_playSound(SFX_FLY, screen->w / 2); engine.done = 2; engine.missionCompleteTimer = (SDL_GetTicks() - 1); } @@ -322,8 +322,8 @@ void doPlayer() aliens[i].flags |= FL_LEAVESECTOR; } - playSound(SFX_DEATH, player.x); - playSound(SFX_EXPLOSION, player.x); + audio_playSound(SFX_DEATH, player.x); + audio_playSound(SFX_EXPLOSION, player.x); } engine.keyState[KEY_UP] = engine.keyState[KEY_DOWN] = engine.keyState[KEY_LEFT] = engine.keyState[KEY_RIGHT] = 0; @@ -565,7 +565,7 @@ void leaveSector() if (player.x <= -100) { engine.done = 2; - playSound(SFX_FLY); + audio_playSound(SFX_FLY, screen->w / 2); } } diff --git a/src/resources.cpp b/src/resources.cpp index ac36e19..5f2a7b3 100644 --- a/src/resources.cpp +++ b/src/resources.cpp @@ -144,38 +144,6 @@ void loadGameGraphics() setWeaponShapes(); } -void loadSound() -{ - sound[SFX_EXPLOSION] = loadSound("sound/explode.ogg"); - sound[SFX_HIT] = loadSound("sound/explode2.ogg"); - sound[SFX_DEATH] = loadSound("sound/maledeath.ogg"); - sound[SFX_MISSILE] = loadSound("sound/missile.ogg"); - sound[SFX_PLASMA] = loadSound("sound/plasma.ogg"); - sound[SFX_CLOCK] = loadSound("sound/clock.ogg"); - sound[SFX_FLY] = loadSound("sound/flyby.ogg"); - sound[SFX_ENERGYRAY] = loadSound("sound/beamLaser.ogg"); - sound[SFX_PICKUP] = loadSound("sound/item.ogg"); - sound[SFX_SHIELDUP] = loadSound("sound/shield.ogg"); - sound[SFX_CLOAK] = loadSound("sound/cloak.ogg"); - sound[SFX_DEBRIS] = loadSound("sound/explode3.ogg"); - sound[SFX_DEBRIS2] = loadSound("sound/explode4.ogg"); - sound[SFX_LASER] = loadSound("sound/laser.ogg"); - sound[SFX_PLASMA2] = loadSound("sound/plasma2.ogg"); - sound[SFX_PLASMA3] = loadSound("sound/plasma3.ogg"); -} - -void freeSound() -{ - for (int i = 0 ; i < MAX_SOUNDS ; i++) - { - if (sound[i] != NULL) - Mix_FreeChunk(sound[i]); - } - - if (engine.music != NULL) - Mix_FreeMusic(engine.music); -} - /* Custom loading to alter the font color before doing diff --git a/src/resources.h b/src/resources.h index 1ce92e2..f0e75c5 100644 --- a/src/resources.h +++ b/src/resources.h @@ -22,8 +22,6 @@ along with this program. If not, see . extern void loadBackground(const char *filename); extern void loadGameGraphics(); -extern void loadSound(); -extern void freeSound(); extern void loadFont(); #endif diff --git a/src/structs.h b/src/structs.h index 34374cc..bf5604c 100644 --- a/src/structs.h +++ b/src/structs.h @@ -244,8 +244,6 @@ struct globalEngineVariables { float smx; float smy; - Mix_Music *music; - object *bulletHead; object *bulletTail; object *explosionHead; diff --git a/src/title.cpp b/src/title.cpp index 9ac9429..408a1fe 100644 --- a/src/title.cpp +++ b/src/title.cpp @@ -188,8 +188,6 @@ int doTitle() signed char continueSaveSlot = initSaveSlots(); - loadMusic("music/walking_among_androids.ogg"); - loadBackground("gfx/spirit.jpg"); SDL_Surface *prlogo, *sflogo; @@ -266,8 +264,7 @@ int doTitle() flushInput(); engine.keyState[KEY_FIRE] = engine.keyState[KEY_ALTFIRE] = 0; - if ((engine.useMusic) && (engine.useAudio)) - Mix_PlayMusic(engine.music, 1); + audio_playMusic("music/walking_among_androids.ogg", 1); while (!engine.done) { @@ -467,14 +464,12 @@ int doTitle() if (engine.useMusic) { - if (Mix_PausedMusic() == 1) - Mix_ResumeMusic(); - else - Mix_PlayMusic(engine.music, 1); + audio_playMusic( + "music/walking_among_androids.ogg", 1); } else { - Mix_PauseMusic(); + audio_haltMusic(); } } else if (selectedOption == 3) @@ -521,7 +516,7 @@ int doTitle() delayFrame(); } - Mix_HaltMusic(); + audio_haltMusic(); SDL_FreeSurface(prlogo); SDL_FreeSurface(sflogo); @@ -626,8 +621,6 @@ void gameover() engine.keyState[KEY_FIRE] = engine.keyState[KEY_ALTFIRE] = 0; engine.gameSection = SECTION_INTERMISSION; - loadMusic("music/death.ogg"); - SDL_Surface *gameover = loadImage("gfx/gameover.png"); clearScreen(black); @@ -635,11 +628,7 @@ void gameover() clearScreen(black); SDL_Delay(1000); - if ((engine.useMusic) && (engine.useAudio)) - { - Mix_VolumeMusic(100); - Mix_PlayMusic(engine.music, 1); - } + audio_playMusic("music/death.ogg", 1); int x = (screen->w - gameover->w) / 2; int y = (screen->h - gameover->h) / 2; @@ -667,10 +656,7 @@ void gameover() } SDL_FreeSurface(gameover); - - if ((engine.useMusic) && (engine.useAudio)) - Mix_HaltMusic(); - + audio_haltMusic(); flushBuffer(); } @@ -680,9 +666,6 @@ void doCredits() flushBuffer(); freeGraphics(); - if ((engine.useMusic) && (engine.useAudio)) - loadMusic("music/rise_of_spirit.ogg"); - FILE *fp; int lastCredit = -1; @@ -699,11 +682,7 @@ void doCredits() drawBackGround(); - if ((engine.useMusic) && (engine.useAudio)) - { - Mix_VolumeMusic(100); - Mix_PlayMusic(engine.music, 1); - } + audio_playMusic("music/rise_of_spirit.ogg", 1); fp = fopen("data/credits.txt", "rb"); // FIXME: It would be nice for the size of this array to be determined