dominus icon

Untitled

dominus | PRO | 04/11/24 06:23:34 AM UTC | 0 ⭐ | 14186 👁️ | Never ⏰ | []
Diff |

7.52 KB

|

None

|

0 👍

/

0 👎

diff --git a/gamewin.cc b/gamewin.cc
index 15df83838..a721bb8b4 100644
--- a/gamewin.cc
+++ b/gamewin.cc
@@ -164,6 +164,7 @@ void Background_noise::handle_event(unsigned long curtime, uintptr udata) {
    const int     weather        = gwin->get_effects()->get_weather();
    const bool    nighttime      = bghour < 6 || bghour > 20;
    const bool    nearby_hostile = gwin->is_hostile_nearby();
+
    if (nearby_hostile && !gwin->in_combat()) {
        currentstate = DangerNear;
    } else if (gwin->is_in_dungeon()) {
@@ -173,111 +174,95 @@ void Background_noise::handle_event(unsigned long curtime, uintptr udata) {
    } else if (weather == 1) {
        currentstate = SnowStorm;
    } else if (nighttime) {
-       currentstate = Nighttime;    // Night time
+       currentstate = Nighttime;
    } else {
        currentstate = Outside;
    }
 
    MyMidiPlayer* player = Audio::get_ptr()->get_midi();
-   // Lets allow this for Digital Muisc and MT32Emu only,
-   // for MT32/FakeMT32 conversion as well.
-   // if (player) {
-   // if (player && player->get_ogg_enabled()){
-   if (player
-       && (player->get_ogg_enabled() || player->is_mt32()
-           || player->is_adlib())) {
-       delay = 1000;    // Quickly get back to this function check
-       // We've got OGG so play the background SFX tracks
-
-       const int curr_track = player->get_current_track();
-
-       // Testing. Original seems to allow crickets for all songs at night,
-       // except when in a dungeon. Also, only do it sometimes.
-       if (nighttime && currentstate != Dungeon && rand() % 6 == 0) {
-           // Play the cricket sounds at night
-           Audio::get_ptr()->play_sound_effect(
-                   Audio::game_sfx(61), AUDIO_MAX_VOLUME - 30);
-       }
-
-       if ((curr_track == -1 || laststate != currentstate)
-           && Audio::get_ptr()->is_music_enabled()) {
-           // Don't override bee cave music with dungeon music.
-           const bool notbees = !GAME_BG || curr_track != 54;
-           // ++++ TODO: Need to come up with a way to replace repeating songs
-           // here, just so they don't loop forever.
-           // Conditions: not playing music, playing a background music
-           if (curr_track == -1 || gwin->is_bg_track(curr_track)
-               || (((currentstate == Dungeon && notbees)
-                    || currentstate == DangerNear)
-                   && !is_combat_music(curr_track))) {
-               // Not already playing music
-               int tracknum = 255;
-
-               // Get the relevant track number.
-               if (nearby_hostile && !gwin->in_combat()) {
-                   tracknum  = Audio::game_music(10);
-                   laststate = DangerNear;
-               } else if (gwin->is_in_dungeon()) {
-                   // Start the SFX music track then
+   // The sfx tracks only play for Digital Music, FMOpl, MT32emu, MT32/FakeMT32
+   const bool    play_sfx_tracks = player && (player->get_ogg_enabled() || player->is_mt32();
+
+   delay = 1000;    // Quickly get back to this function check
+
+   const int curr_track = player->get_current_track();
+
+   // Tests to see if day sfx track is playing, possible
+   // when the game has been restored
+   // and the Audio option was changed from OGG/MT32 to something else
+   // If nighttime sfx track is uncommented, also query whether track 7 plays 
+   if (player && !play_sfx_tracks && curr_track == 6) {
+       player->stop_music();
+   }
+   Main_actor* ava = gwin->get_main_actor();
+   // Testing. When outside play birds during daytime or crickets at night
+   if (ava && !gwin->is_main_actor_inside() && currentstate != Dungeon) {
+       int                        sound;    // SFX #.
+       int                       volume;    // keep the volume down.
+       static const unsigned char bgnight[] = {61, 61, 255};
+       static const unsigned char bgday[]   = {82, 85, 85};
+       if (repeats > 0) {    // Repeating?
+           sound = last_sound;
+       } else {
+           if (nighttime) {
+               sound = bgnight[rand() % sizeof(bgnight)];
+               volume = AUDIO_MAX_VOLUME - 200;
+           // only play daytime sfx when no music track is playing
+           } else if (!play_sfx_tracks || curr_track != -1) {
+               sound = bgday[rand() % sizeof(bgday)];
+               volume = AUDIO_MAX_VOLUME - 200;
+           }
+           last_sound = sound;
+       }
+       Audio::get_ptr()->play_sound_effect(
+               Audio::game_sfx(sound), volume);
+       repeats++;    // Count it.
+       if (rand() % (repeats + 1) == 0) {
+           // Repeat.
+           delay = 500 + rand() % 1000;
+       } else {
+           delay   = 4000 + rand() % 3000;
+           repeats = 0;
+       }
+   }
+
+   if ((curr_track == -1 || laststate != currentstate)
+       && Audio::get_ptr()->is_music_enabled()) {
+       // ++++ TODO: Need to come up with a way to replace repeating songs
+       // here, just so they don't loop forever.
+       // Conditions: not playing music, playing a background music
+       if (curr_track == -1 || gwin->is_bg_track(curr_track)
+           || (((currentstate == Dungeon)
+                || currentstate == DangerNear)
+               && !is_combat_music(curr_track))) {
+           int tracknum = 255;
+           // Get the relevant track number.
+           if (nearby_hostile && !gwin->in_combat()) {
+               tracknum  = Audio::game_music(10);
+               laststate = DangerNear;
+           } else if (gwin->is_in_dungeon()) {
+               if (play_sfx_tracks)
                    tracknum  = Audio::game_music(52);
-                   laststate = Dungeon;
-               } else if (weather == 1) {    // Snowstorm
+               laststate = Dungeon;
+           } else if (weather == 1) {    // Snowstorm
+               if (play_sfx_tracks)
                    tracknum  = Audio::game_music(5);
-                   laststate = SnowStorm;
-               } else if (weather == 2) {    // Rainstorm
+               laststate = SnowStorm;
+           } else if (weather == 2) {    // Rainstorm
+               if (play_sfx_tracks)
                    tracknum  = Audio::game_music(4);
-                   laststate = RainStorm;
-               } else if (bghour < 6 || bghour > 20) {
-                   tracknum  = Audio::game_music(7);
-                   laststate = Nighttime;
-               } else {
-                   // Start the SFX music track then
-                   tracknum  = Audio::game_music(6);
-                   laststate = Outside;
-               }
-               Audio::get_ptr()->start_music(tracknum, true);
-           }
-       }
-   } else {
-       Main_actor* ava = gwin->get_main_actor();
-       // Tests to see if track is playing the SFX tracks, possible
-       // when the game has been restored
-       // and the Audio option was changed from OGG to something else
-       if (player && player->get_current_track() >= Audio::game_music(4)
-           && player->get_current_track() <= Audio::game_music(8)) {
-           player->stop_music();
-       }
-
-       // Not OGG so play the SFX sounds manually
-       //  Only if outside.
-       if (ava && !gwin->is_main_actor_inside() &&
-           // +++++SI SFX's don't sound right.
-           Game::get_game_type() == BLACK_GATE) {
-           int                        sound;    // BG SFX #.
-           static const unsigned char bgnight[] = {61, 61, 255};
-           static const unsigned char bgday[]   = {82, 85, 85};
-           if (repeats > 0) {    // Repeating?
-               sound = last_sound;
+               laststate = RainStorm;
+           } else if (nighttime) {
+               // Disabled nighttime sfx track as it is very distracting
+               /*if (play_sfx_tracks)
+                   tracknum  = Audio::game_music(7);*/
+               laststate = Nighttime;
            } else {
-               const int hour = gwin->get_clock()->get_hour();
-               if (hour < 6 || hour > 20) {
-                   sound = bgnight[rand() % sizeof(bgnight)];
-               } else {
-                   sound = bgday[rand() % sizeof(bgday)];
-               }
-               // Translate BG to SI #'s.
-               sound      = Audio::game_sfx(sound);
-               last_sound = sound;
-           }
-           Audio::get_ptr()->play_sound_effect(sound);
-           repeats++;    // Count it.
-           if (rand() % (repeats + 1) == 0) {
-               // Repeat.
-               delay = 500 + rand() % 1000;
-           } else {
-               delay   = 4000 + rand() % 3000;
-               repeats = 0;
+               if (play_sfx_tracks)
+                   tracknum  = Audio::game_music(6);
+               laststate = Outside;
            }
+           Audio::get_ptr()->start_music(tracknum, true);
        }
    }
 
 

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

    |

    👍

    /

    👎