diff --git a/audio/Audio.cc b/audio/Audio.cc
index ba13da941..532bc1de9 100644
--- a/audio/Audio.cc
+++ b/audio/Audio.cc
@@ -539,55 +539,6 @@ bool Audio::start_music(
return false;
}
-void Audio::start_music_combat(Combat_song song, bool continuous) {
-#ifdef DEBUG
- cout << formatTicks() << "Audio subsystem request: Combat Music start "
- << int(song) << endl;
-#endif
- if (!audio_enabled || !music_enabled || !mixer || !mixer->getMidiPlayer()) {
- return;
- }
-
- int num = -1;
-
- switch (song) {
- case CSBattle_Over:
- num = Audio::game_music(9);
- break;
-
- case CSAttacked1:
- num = Audio::game_music(11);
- break;
-
- case CSAttacked2:
- num = Audio::game_music(12);
- break;
-
- case CSVictory:
- num = Audio::game_music(15);
- break;
-
- case CSRun_Away:
- num = Audio::game_music(16);
- break;
-
- case CSDanger:
- num = Audio::game_music(10);
- break;
-
- case CSHidden_Danger:
- num = Audio::game_music(18);
- break;
-
- default:
- CERR("Error: Unable to Find combat track for song " << song << ".");
- break;
- }
-
- mixer->getMidiPlayer()->start_music(
- num, continuous && music_looping != LoopingType::Never);
-}
-
void Audio::stop_music() {
#ifdef DEBUG
cout << formatTicks() << "Audio subsystem request: Music stop" << endl;
diff --git a/audio/Audio.h b/audio/Audio.h
index 6f9ea5371..3a02d9e12 100644
--- a/audio/Audio.h
+++ b/audio/Audio.h
@@ -54,19 +54,6 @@ class Tile_coord;
#define MAX_SOUND_FALLOFF 24
-/*
- * Music:
- */
-enum Combat_song {
- CSBattle_Over,
- CSAttacked1,
- CSAttacked2,
- CSVictory,
- CSRun_Away,
- CSDanger,
- CSHidden_Danger
-};
-
/*
* This is a resource-management class for SFX. Maybe make it a
* template class and use for other resources also?
@@ -167,7 +154,6 @@ class Audio : nonreplicatable {
bool start_music(
const std::string& fname, int num, bool continuous = false,
MyMidiPlayer::ForceType force = MyMidiPlayer::Force_None);
- void start_music_combat(Combat_song song, bool continuous);
void stop_music();
int play_sound_effect(
int num, int volume = AUDIO_MAX_VOLUME, int balance = 0,
diff --git a/combat.cc b/combat.cc
index 320c4e67a..61182ee7d 100644
--- a/combat.cc
+++ b/combat.cc
@@ -93,6 +93,65 @@ bool In_ammo_family(int shnum, int family) {
return ainf != nullptr && ainf->get_family_shape() == family;
}
+/*
+ * Start music for combat.
+ * If continuous is true, the music will not be stopped when combat ends.
+ */
+
+void Combat_schedule::start_music_combat(Combat_song song, bool continuous) {
+#ifdef DEBUG
+ cout << "Audio subsystem request: Combat Music start " << int(song) << endl;
+#endif
+ if (!Audio::get_ptr()) {
+ return;
+ }
+
+ int num = -1;
+
+ switch (song) {
+ case CSBattle_Over:
+ num = Audio::game_music(9);
+ break;
+
+ case CSAttacked1:
+ num = Audio::game_music(11);
+ break;
+
+ case CSAttacked2:
+ num = Audio::game_music(12);
+ break;
+
+ case CSVictory:
+ num = Audio::game_music(15);
+ break;
+
+ case CSRun_Away:
+ num = Audio::game_music(16);
+ break;
+
+ case CSDanger:
+ num = Audio::game_music(10);
+ break;
+
+ case CSHidden_Danger:
+ // ++++ FIXME: This should play when the party successfully flees either
+ // in or out combat.
+ num = Audio::game_music(18);
+ break;
+
+ case CSAvatar_died:
+ // ++++ FIXME: This should play when the Avatar dies in combat.
+ num = Audio::game_music(17);
+ break;
+
+ default:
+ CERR("Error: Unable to Find combat track for song " << song << ".");
+ return; // Unknown song
+ }
+
+ Audio::get_ptr()->start_music(num, continuous);
+}
+
/*
* Start music if battle has recently started.
*/
@@ -111,8 +170,7 @@ void Combat_schedule::start_battle() {
Game_object* target = npc->get_target();
if (npc == gwin->get_main_actor() && curtime - battle_time >= 30000
&& (!opponents.empty() || (target && target->as_actor()))) {
- Audio::get_ptr()->start_music_combat(
- (rand() % 2) ? CSAttacked1 : CSAttacked2, false);
+ start_music_combat((rand() % 2) ? CSAttacked1 : CSAttacked2, false);
battle_time = curtime;
battle_end_time = curtime - 1;
}
@@ -141,8 +199,7 @@ void Combat_schedule::monster_died() {
// Figure #seconds battle lasted.
const unsigned long len = (battle_end_time - battle_time) / 1000;
const bool hard = len > 15u && (rand() % 60u < len);
- Audio::get_ptr()->start_music_combat(
- hard ? CSBattle_Over : CSVictory, false);
+ start_music_combat(hard ? CSBattle_Over : CSVictory, false);
}
/*
@@ -1752,7 +1809,7 @@ void Combat_schedule::ending(int /* newtype */
}
}
if (found) {
- Audio::get_ptr()->start_music_combat(CSRun_Away, false);
+ start_music_combat(CSRun_Away, false);
}
}
}
diff --git a/combat.h b/combat.h
index 356ebf78b..41a1370d0 100644
--- a/combat.h
+++ b/combat.h
@@ -29,6 +29,20 @@ class Actor;
class Game_object;
class Spellbook_object;
+/*
+ * Combat Music:
+ */
+enum Combat_song {
+ CSBattle_Over,
+ CSAttacked1,
+ CSAttacked2,
+ CSVictory,
+ CSRun_Away,
+ CSDanger,
+ CSHidden_Danger,
+ CSAvatar_died
+};
+
/*
* Combat schedule:
*/
@@ -100,6 +114,7 @@ class Combat_schedule : public Schedule {
static void stop_attacking_invisible(Game_object* npc);
void now_what() override; // Npc calls this when it's done
void im_dormant() override; // Npc calls this when it goes dormant.
+ static void start_music_combat(Combat_song song, bool continuous);
void ending(int newtype) override; // Switching to another schedule.
void set_weapon(bool removed = false) override; // Set weapon info.
void set_hand_to_hand();
Comments
0 B
|👍
/👎
0 B
|👍
/👎