Advertisement
dominus

Untitled

Jun 9th, 2025
393
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 5.68 KB | None | 0 0
  1. diff --git a/audio/Audio.cc b/audio/Audio.cc
  2. index ba13da941..532bc1de9 100644
  3. --- a/audio/Audio.cc
  4. +++ b/audio/Audio.cc
  5. @@ -539,55 +539,6 @@ bool Audio::start_music(
  6.     return false;
  7.  }
  8.  
  9. -void Audio::start_music_combat(Combat_song song, bool continuous) {
  10. -#ifdef DEBUG
  11. -   cout << formatTicks() << "Audio subsystem request: Combat Music start "
  12. -        << int(song) << endl;
  13. -#endif
  14. -   if (!audio_enabled || !music_enabled || !mixer || !mixer->getMidiPlayer()) {
  15. -       return;
  16. -   }
  17. -
  18. -   int num = -1;
  19. -
  20. -   switch (song) {
  21. -   case CSBattle_Over:
  22. -       num = Audio::game_music(9);
  23. -       break;
  24. -
  25. -   case CSAttacked1:
  26. -       num = Audio::game_music(11);
  27. -       break;
  28. -
  29. -   case CSAttacked2:
  30. -       num = Audio::game_music(12);
  31. -       break;
  32. -
  33. -   case CSVictory:
  34. -       num = Audio::game_music(15);
  35. -       break;
  36. -
  37. -   case CSRun_Away:
  38. -       num = Audio::game_music(16);
  39. -       break;
  40. -
  41. -   case CSDanger:
  42. -       num = Audio::game_music(10);
  43. -       break;
  44. -
  45. -   case CSHidden_Danger:
  46. -       num = Audio::game_music(18);
  47. -       break;
  48. -
  49. -   default:
  50. -       CERR("Error: Unable to Find combat track for song " << song << ".");
  51. -       break;
  52. -   }
  53. -
  54. -   mixer->getMidiPlayer()->start_music(
  55. -           num, continuous && music_looping != LoopingType::Never);
  56. -}
  57. -
  58.  void Audio::stop_music() {
  59.  #ifdef DEBUG
  60.     cout << formatTicks() << "Audio subsystem request: Music stop" << endl;
  61. diff --git a/audio/Audio.h b/audio/Audio.h
  62. index 6f9ea5371..3a02d9e12 100644
  63. --- a/audio/Audio.h
  64. +++ b/audio/Audio.h
  65. @@ -54,19 +54,6 @@ class Tile_coord;
  66.  
  67.  #define MAX_SOUND_FALLOFF 24
  68.  
  69. -/*
  70. - * Music:
  71. - */
  72. -enum Combat_song {
  73. -   CSBattle_Over,
  74. -   CSAttacked1,
  75. -   CSAttacked2,
  76. -   CSVictory,
  77. -   CSRun_Away,
  78. -   CSDanger,
  79. -   CSHidden_Danger
  80. -};
  81. -
  82.  /*
  83.   * This is a resource-management class for SFX. Maybe make it a
  84.   * template class and use for other resources also?
  85. @@ -167,7 +154,6 @@ class Audio : nonreplicatable {
  86.     bool start_music(
  87.             const std::string& fname, int num, bool continuous = false,
  88.             MyMidiPlayer::ForceType force = MyMidiPlayer::Force_None);
  89. -   void start_music_combat(Combat_song song, bool continuous);
  90.     void stop_music();
  91.     int  play_sound_effect(
  92.              int num, int volume = AUDIO_MAX_VOLUME, int balance = 0,
  93. diff --git a/combat.cc b/combat.cc
  94. index 320c4e67a..61182ee7d 100644
  95. --- a/combat.cc
  96. +++ b/combat.cc
  97. @@ -93,6 +93,65 @@ bool In_ammo_family(int shnum, int family) {
  98.     return ainf != nullptr && ainf->get_family_shape() == family;
  99.  }
  100.  
  101. +/*
  102. + *  Start music for combat.
  103. + *  If continuous is true, the music will not be stopped when combat ends.
  104. + */
  105. +
  106. +void Combat_schedule::start_music_combat(Combat_song song, bool continuous) {
  107. +#ifdef DEBUG
  108. +   cout << "Audio subsystem request: Combat Music start " << int(song) << endl;
  109. +#endif
  110. +   if (!Audio::get_ptr()) {
  111. +       return;
  112. +   }
  113. +
  114. +   int num = -1;
  115. +
  116. +   switch (song) {
  117. +   case CSBattle_Over:
  118. +       num = Audio::game_music(9);
  119. +       break;
  120. +
  121. +   case CSAttacked1:
  122. +       num = Audio::game_music(11);
  123. +       break;
  124. +
  125. +   case CSAttacked2:
  126. +       num = Audio::game_music(12);
  127. +       break;
  128. +
  129. +   case CSVictory:
  130. +       num = Audio::game_music(15);
  131. +       break;
  132. +
  133. +   case CSRun_Away:
  134. +       num = Audio::game_music(16);
  135. +       break;
  136. +
  137. +   case CSDanger:
  138. +       num = Audio::game_music(10);
  139. +       break;
  140. +
  141. +   case CSHidden_Danger:
  142. +       // ++++ FIXME: This should play when the party successfully flees either
  143. +       // in or out combat.
  144. +       num = Audio::game_music(18);
  145. +       break;
  146. +
  147. +   case CSAvatar_died:
  148. +       // ++++ FIXME: This should play when the Avatar dies in combat.
  149. +       num = Audio::game_music(17);
  150. +       break;
  151. +
  152. +   default:
  153. +       CERR("Error: Unable to Find combat track for song " << song << ".");
  154. +       return;    // Unknown song
  155. +   }
  156. +
  157. +   Audio::get_ptr()->start_music(num, continuous);
  158. +}
  159. +
  160.  /*
  161.   *  Start music if battle has recently started.
  162.   */
  163. @@ -111,8 +170,7 @@ void Combat_schedule::start_battle() {
  164.     Game_object* target = npc->get_target();
  165.     if (npc == gwin->get_main_actor() && curtime - battle_time >= 30000
  166.         && (!opponents.empty() || (target && target->as_actor()))) {
  167. -       Audio::get_ptr()->start_music_combat(
  168. -               (rand() % 2) ? CSAttacked1 : CSAttacked2, false);
  169. +       start_music_combat((rand() % 2) ? CSAttacked1 : CSAttacked2, false);
  170.         battle_time     = curtime;
  171.         battle_end_time = curtime - 1;
  172.     }
  173. @@ -141,8 +199,7 @@ void Combat_schedule::monster_died() {
  174.     // Figure #seconds battle lasted.
  175.     const unsigned long len  = (battle_end_time - battle_time) / 1000;
  176.     const bool          hard = len > 15u && (rand() % 60u < len);
  177. -   Audio::get_ptr()->start_music_combat(
  178. -           hard ? CSBattle_Over : CSVictory, false);
  179. +   start_music_combat(hard ? CSBattle_Over : CSVictory, false);
  180.  }
  181.  
  182.  /*
  183. @@ -1752,7 +1809,7 @@ void Combat_schedule::ending(int /* newtype */
  184.             }
  185.         }
  186.         if (found) {
  187. -           Audio::get_ptr()->start_music_combat(CSRun_Away, false);
  188. +           start_music_combat(CSRun_Away, false);
  189.         }
  190.     }
  191.  }
  192. diff --git a/combat.h b/combat.h
  193. index 356ebf78b..41a1370d0 100644
  194. --- a/combat.h
  195. +++ b/combat.h
  196. @@ -29,6 +29,20 @@ class Actor;
  197.  class Game_object;
  198.  class Spellbook_object;
  199.  
  200. +/*
  201. + * Combat Music:
  202. + */
  203. +enum Combat_song {
  204. +   CSBattle_Over,
  205. +   CSAttacked1,
  206. +   CSAttacked2,
  207. +   CSVictory,
  208. +   CSRun_Away,
  209. +   CSDanger,
  210. +   CSHidden_Danger,
  211. +   CSAvatar_died
  212. +};
  213. +
  214.  /*
  215.   *  Combat schedule:
  216.   */
  217. @@ -100,6 +114,7 @@ class Combat_schedule : public Schedule {
  218.     static void stop_attacking_invisible(Game_object* npc);
  219.     void        now_what() override;    // Npc calls this when it's done
  220.     void im_dormant() override;         // Npc calls this when it goes dormant.
  221. +   static void start_music_combat(Combat_song song, bool continuous);
  222.     void ending(int newtype) override;    // Switching to another schedule.
  223.     void set_weapon(bool removed = false) override;    // Set weapon info.
  224.     void set_hand_to_hand();
  225.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement