dominus icon

Untitled

dominus | PRO | 06/09/25 11:01:33 PM UTC | 0 ⭐ | 15620 👁️ | Never ⏰ | []
Diff |

5.68 KB

|

None

|

0 👍

/

0 👎

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

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎