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
0 B
|👍
/👎
0 B
|👍
/👎