From cf56577ce8fc7a73c2f1e55cb9e5b602748bdd2f Mon Sep 17 00:00:00 2001 From: spherallic Date: Tue, 21 Mar 2023 12:40:47 +0100 Subject: [PATCH 01/13] Streamline music settings --- src/d_main.c | 28 ++------- src/d_netcmd.c | 3 +- src/deh_soc.c | 1 - src/doomstat.h | 3 +- src/m_menu.c | 39 +++++------- src/p_enemy.c | 2 +- src/s_sound.c | 150 +++++++++++--------------------------------- src/s_sound.h | 24 ++----- src/sdl/sdl_sound.c | 8 +-- src/y_inter.c | 4 +- 10 files changed, 71 insertions(+), 191 deletions(-) diff --git a/src/d_main.c b/src/d_main.c index 5861f9886..3925463b2 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -114,9 +114,8 @@ INT32 postimgparam2; // These variables are in effect // whether the respective sound system is disabled // or they're init'ed, but the player just toggled them -boolean midi_disabled = false; boolean sound_disabled = false; -boolean digital_disabled = false; +boolean music_disabled = false; // // DEMO LOOP @@ -1529,36 +1528,21 @@ void D_SRB2Main(void) if (dedicated) { sound_disabled = true; - midi_disabled = digital_disabled = true; + music_disabled = true; } if (M_CheckParm("-noaudio")) // combines -nosound and -nomusic { sound_disabled = true; - digital_disabled = true; - midi_disabled = true; + music_disabled = true; } else { if (M_CheckParm("-nosound")) sound_disabled = true; - if (M_CheckParm("-nomusic")) // combines -nomidimusic and -nodigmusic - { - digital_disabled = true; - midi_disabled = true; - } - else - { - if (M_CheckParm("-nomidimusic")) - midi_disabled = true; // WARNING: DOS version initmusic in I_StartupSound - if (M_CheckParm("-nodigmusic")) - digital_disabled = true; // WARNING: DOS version initmusic in I_StartupSound - } + if (M_CheckParm("-nomusic")) + music_disabled = true; } - if (!( sound_disabled && digital_disabled -#ifndef NO_MIDI - && midi_disabled -#endif - )) + if (!(sound_disabled && music_disabled)) { CONS_Printf("S_InitSfxChannels(): Setting up sound channels.\n"); I_StartupSound(); diff --git a/src/d_netcmd.c b/src/d_netcmd.c index af44e53d6..bdbb3747e 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -865,9 +865,8 @@ void D_RegisterClientCommands(void) // s_sound.c CV_RegisterVar(&cv_soundvolume); - CV_RegisterVar(&cv_closedcaptioning); CV_RegisterVar(&cv_digmusicvolume); - CV_RegisterVar(&cv_midimusicvolume); + CV_RegisterVar(&cv_closedcaptioning); CV_RegisterVar(&cv_numChannels); // screen.c diff --git a/src/deh_soc.c b/src/deh_soc.c index 8dd849daf..82b52ca3b 100644 --- a/src/deh_soc.c +++ b/src/deh_soc.c @@ -1646,7 +1646,6 @@ void readlevelheader(MYFILE *f, INT32 num) else i = -1; // (fastcmp(word2, "DEFAULT")) if (i >= -1 && i <= 1) // -1 to force off, 1 to force on, 0 to honor default. - // This behavior can be disabled with cv_resetmusicbyheader mapheaderinfo[num-1]->musforcereset = (SINT8)i; else deh_warning("Level header %d: invalid forceresetmusic option %d", num, i); diff --git a/src/doomstat.h b/src/doomstat.h index a812cc304..48f396b52 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -108,9 +108,8 @@ extern boolean fromlevelselect; // Internal parameters for sound rendering. // ======================================== -extern boolean midi_disabled; extern boolean sound_disabled; -extern boolean digital_disabled; +extern boolean music_disabled; // ========================= // Status flags for refresh. diff --git a/src/m_menu.c b/src/m_menu.c index cf61e7fb1..c80c6fb7c 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1485,33 +1485,30 @@ static menuitem_t OP_OpenGLLightingMenu[] = static menuitem_t OP_SoundOptionsMenu[] = { {IT_HEADER, NULL, "Game Audio", NULL, 0}, - {IT_STRING | IT_CVAR, NULL, "Sound Effects", &cv_gamesounds, 6}, - {IT_STRING | IT_CVAR | IT_CV_SLIDER, NULL, "Sound Volume", &cv_soundvolume, 11}, + {IT_STRING | IT_CVAR, NULL, "Sound Effects", &cv_gamesounds, 12}, + {IT_STRING | IT_CVAR | IT_CV_SLIDER, NULL, "Sound Volume", &cv_soundvolume, 22}, - {IT_STRING | IT_CVAR, NULL, "Digital Music", &cv_gamedigimusic, 21}, - {IT_STRING | IT_CVAR | IT_CV_SLIDER, NULL, "Digital Music Volume", &cv_digmusicvolume, 26}, + {IT_STRING | IT_CVAR, NULL, "Music", &cv_gamedigimusic, 42}, + {IT_STRING | IT_CVAR | IT_CV_SLIDER, NULL, "Music Volume", &cv_digmusicvolume, 52}, + + {IT_STRING | IT_CVAR, NULL, "Music Preference", &cv_musicpref, 72}, - {IT_STRING | IT_CVAR, NULL, "MIDI Music", &cv_gamemidimusic, 36}, - {IT_STRING | IT_CVAR | IT_CV_SLIDER, NULL, "MIDI Music Volume", &cv_midimusicvolume, 41}, + {IT_HEADER, NULL, "Miscellaneous", NULL, 90}, + {IT_STRING | IT_CVAR, NULL, "Closed Captioning", &cv_closedcaptioning, 102}, + {IT_STRING | IT_CVAR, NULL, "Default 1-Up sound", &cv_1upsound, 112}, + {IT_STRING | IT_CVAR, NULL, "Reset Music Upon Dying", &cv_resetmusic, 122}, - {IT_STRING | IT_CVAR, NULL, "Music Preference", &cv_musicpref, 51}, - - {IT_HEADER, NULL, "Miscellaneous", NULL, 61}, - {IT_STRING | IT_CVAR, NULL, "Closed Captioning", &cv_closedcaptioning, 67}, - {IT_STRING | IT_CVAR, NULL, "Reset Music Upon Dying", &cv_resetmusic, 72}, - {IT_STRING | IT_CVAR, NULL, "Default 1-Up sound", &cv_1upsound, 77}, - - {IT_STRING | IT_SUBMENU, NULL, "Advanced Settings...", &OP_SoundAdvancedDef, 87}, + {IT_STRING | IT_SUBMENU, NULL, "Advanced Settings...", &OP_SoundAdvancedDef, 142}, }; #ifdef HAVE_OPENMPT -#define OPENMPT_MENUOFFSET 32 +#define OPENMPT_MENUOFFSET 30 #else #define OPENMPT_MENUOFFSET 0 #endif #ifdef HAVE_MIXERX -#define MIXERX_MENUOFFSET 81 +#define MIXERX_MENUOFFSET 80 #else #define MIXERX_MENUOFFSET 0 #endif @@ -1526,18 +1523,16 @@ static menuitem_t OP_SoundAdvancedMenu[] = #ifdef HAVE_MIXERX {IT_HEADER, NULL, "MIDI Settings", NULL, OPENMPT_MENUOFFSET}, {IT_STRING | IT_CVAR, NULL, "MIDI Player", &cv_midiplayer, OPENMPT_MENUOFFSET+12}, - {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "FluidSynth Sound Font File", &cv_midisoundfontpath, OPENMPT_MENUOFFSET+24}, - {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "TiMidity++ Config Folder", &cv_miditimiditypath, OPENMPT_MENUOFFSET+51}, + {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "FluidSynth Sound Font File", &cv_midisoundfontpath, OPENMPT_MENUOFFSET+22}, + {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "TiMidity++ Config Folder", &cv_miditimiditypath, OPENMPT_MENUOFFSET+49}, #endif - {IT_HEADER, NULL, "Miscellaneous", NULL, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET}, + {IT_HEADER, NULL, "Focus settings", NULL, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET}, {IT_STRING | IT_CVAR, NULL, "Play Sound Effects if Unfocused", &cv_playsoundsifunfocused, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET+12}, {IT_STRING | IT_CVAR, NULL, "Play Music if Unfocused", &cv_playmusicifunfocused, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET+22}, - {IT_STRING | IT_CVAR, NULL, "Let Levels Force Reset Music", &cv_resetmusicbyheader, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET+32}, }; #undef OPENMPT_MENUOFFSET -#undef MIXERX_MENUOFFSET static menuitem_t OP_DataOptionsMenu[] = { @@ -2214,7 +2209,7 @@ menu_t OP_ColorOptionsDef = 0, NULL }; -menu_t OP_SoundOptionsDef = DEFAULTSCROLLMENUSTYLE( +menu_t OP_SoundOptionsDef = DEFAULTMENUSTYLE( MTREE2(MN_OP_MAIN, MN_OP_SOUND), "M_SOUND", OP_SoundOptionsMenu, &OP_MainDef, 30, 30); menu_t OP_SoundAdvancedDef = DEFAULTMENUSTYLE( diff --git a/src/p_enemy.c b/src/p_enemy.c index fe062cffc..230bc6001 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -3965,7 +3965,7 @@ static void P_DoBossVictory(mobj_t *mo) } if (mapheaderinfo[gamemap-1]->muspostbossname[0] && - S_MusicExists(mapheaderinfo[gamemap-1]->muspostbossname, !midi_disabled, !digital_disabled)) + S_MusicPrefExists(mapheaderinfo[gamemap-1]->muspostbossname)) { // Touching the egg trap button calls P_DoPlayerExit, which calls P_RestoreMusic. // So just park ourselves in the mapmus variables. diff --git a/src/s_sound.c b/src/s_sound.c index ada1a0fd2..e45f2e3f5 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -44,9 +44,8 @@ static void Command_Tunes_f(void); static void Command_RestartAudio_f(void); // Sound system toggles -static void GameMIDIMusic_OnChange(void); static void GameSounds_OnChange(void); -static void GameDigiMusic_OnChange(void); +static void GameMusic_OnChange(void); static void MusicPref_OnChange(void); #ifdef HAVE_OPENMPT @@ -76,7 +75,6 @@ static consvar_t precachesound = CVAR_INIT ("precachesound", "Off", CV_SAVE, CV_ // actual general (maximum) sound & music volume, saved into the config consvar_t cv_soundvolume = CVAR_INIT ("soundvolume", "16", CV_SAVE, soundvolume_cons_t, NULL); consvar_t cv_digmusicvolume = CVAR_INIT ("digmusicvolume", "16", CV_SAVE, soundvolume_cons_t, NULL); -consvar_t cv_midimusicvolume = CVAR_INIT ("midimusicvolume", "16", CV_SAVE, soundvolume_cons_t, NULL); static void Captioning_OnChange(void) { @@ -93,7 +91,6 @@ consvar_t cv_numChannels = CVAR_INIT ("snd_channels", "32", CV_SAVE|CV_CALL, CV_ static consvar_t surround = CVAR_INIT ("surround", "Off", CV_SAVE, CV_OnOff, NULL); consvar_t cv_resetmusic = CVAR_INIT ("resetmusic", "Off", CV_SAVE, CV_OnOff, NULL); -consvar_t cv_resetmusicbyheader = CVAR_INIT ("resetmusicbyheader", "Yes", CV_SAVE, CV_YesNo, NULL); static CV_PossibleValue_t cons_1upsound_t[] = { {0, "Jingle"}, @@ -103,8 +100,7 @@ static CV_PossibleValue_t cons_1upsound_t[] = { consvar_t cv_1upsound = CVAR_INIT ("1upsound", "Jingle", CV_SAVE, cons_1upsound_t, NULL); // Sound system toggles, saved into the config -consvar_t cv_gamedigimusic = CVAR_INIT ("digimusic", "On", CV_SAVE|CV_CALL|CV_NOINIT, CV_OnOff, GameDigiMusic_OnChange); -consvar_t cv_gamemidimusic = CVAR_INIT ("midimusic", "On", CV_SAVE|CV_CALL|CV_NOINIT, CV_OnOff, GameMIDIMusic_OnChange); +consvar_t cv_gamedigimusic = CVAR_INIT ("digimusic", "On", CV_SAVE|CV_CALL|CV_NOINIT, CV_OnOff, GameMusic_OnChange); consvar_t cv_gamesounds = CVAR_INIT ("sounds", "On", CV_SAVE|CV_CALL|CV_NOINIT, CV_OnOff, GameSounds_OnChange); // Music preference @@ -272,13 +268,11 @@ void S_RegisterSoundStuff(void) CV_RegisterVar(&surround); CV_RegisterVar(&cv_samplerate); CV_RegisterVar(&cv_resetmusic); - CV_RegisterVar(&cv_resetmusicbyheader); CV_RegisterVar(&cv_1upsound); CV_RegisterVar(&cv_playsoundsifunfocused); CV_RegisterVar(&cv_playmusicifunfocused); CV_RegisterVar(&cv_gamesounds); CV_RegisterVar(&cv_gamedigimusic); - CV_RegisterVar(&cv_gamemidimusic); CV_RegisterVar(&cv_musicpref); #ifdef HAVE_OPENMPT CV_RegisterVar(&cv_modfilter); @@ -825,8 +819,7 @@ void S_StopSound(void *origin) // Updates music & sounds // static INT32 actualsfxvolume; // check for change through console -static INT32 actualdigmusicvolume; -static INT32 actualmidimusicvolume; +static INT32 actualmusicvolume; void S_UpdateSounds(void) { @@ -844,11 +837,9 @@ void S_UpdateSounds(void) // Update sound/music volumes, if changed manually at console if (actualsfxvolume != cv_soundvolume.value) - S_SetSfxVolume (cv_soundvolume.value); - if (actualdigmusicvolume != cv_digmusicvolume.value) - S_SetDigMusicVolume (cv_digmusicvolume.value); - if (actualmidimusicvolume != cv_midimusicvolume.value) - S_SetMIDIMusicVolume (cv_midimusicvolume.value); + S_SetSfxVolume(cv_soundvolume.value); + if (actualmusicvolume != cv_digmusicvolume.value) + S_SetMusicVolume(cv_digmusicvolume.value); // We're done now, if we're not in a level. if (gamestate != GS_LEVEL) @@ -1733,19 +1724,9 @@ boolean S_PrepareSoundTest(void) /// Music Status /// ------------------------ -boolean S_DigMusicDisabled(void) -{ - return digital_disabled; -} - -boolean S_MIDIMusicDisabled(void) -{ - return midi_disabled; -} - boolean S_MusicDisabled(void) { - return (midi_disabled && digital_disabled); + return (music_disabled); } boolean S_MusicPlaying(void) @@ -1775,6 +1756,11 @@ const char *S_MusicName(void) return music_name; } +boolean S_MusicPrefExists(const char *mname) +{ + return (W_CheckNumForName(va((cv_musicpref.value ? "D_%s" : "O_%s"), mname)) != LUMPERROR); +} + boolean S_MusicExists(const char *mname, boolean checkMIDI, boolean checkDigi) { return ( @@ -1970,7 +1956,7 @@ static musicstack_t *S_GetMusicStackEntry(UINT16 status, boolean fromfirst, INT1 { if (P_EvaluateMusicStatus(mst->status, mst->musname)) { - if (!S_MusicExists(mst->musname, !midi_disabled, !digital_disabled)) // paranoia + if (!S_MusicPrefExists(mst->musname)) // paranoia S_RemoveMusicStackEntry(mst); // then continue else return mst; @@ -2023,7 +2009,7 @@ boolean S_RecallMusic(UINT16 status, boolean fromfirst) else result = S_GetMusicStackEntry(JT_NONE, false, -1); - if (result && !S_MusicExists(result->musname, !midi_disabled, !digital_disabled)) + if (result && !S_MusicPrefExists(result->musname)) { Z_Free(entry); return false; // music doesn't exist, so don't do anything @@ -2072,7 +2058,7 @@ boolean S_RecallMusic(UINT16 status, boolean fromfirst) } if (strncmp(entry->musname, S_MusicName(), 7) || // don't restart music if we're already playing it - (midipref != currentmidi && S_PrefAvailable(midipref, entry->musname))) // but do if the user's preference has changed + (midipref != currentmidi && S_MusicPrefExists(entry->musname))) // but do if the user's preference has changed { if (music_stack_fadeout) S_ChangeMusicEx(entry->musname, entry->musflags, entry->looping, 0, music_stack_fadeout, 0); @@ -2121,9 +2107,9 @@ static lumpnum_t S_GetMusicLumpNum(const char *mname) { boolean midipref = cv_musicpref.value; - if (S_PrefAvailable(midipref, mname)) + if (S_MusicPrefExists(mname)) return W_GetNumForName(va(midipref ? "d_%s":"o_%s", mname)); - else if (S_PrefAvailable(!midipref, mname)) + else if (S_MusicPrefExists(mname)) return W_GetNumForName(va(midipref ? "o_%s":"d_%s", mname)); else return LUMPERROR; @@ -2203,7 +2189,7 @@ static boolean S_PlayMusic(boolean looping, UINT32 fadeinms) } } - S_InitMusicVolume(); // switch between digi and sequence volume + S_SetMusicVolume(-1); // initialize music volume if (S_MusicNotInFocus()) S_PauseAudio(); @@ -2279,7 +2265,7 @@ void S_ChangeMusicEx(const char *mmusic, UINT16 mflags, boolean looping, UINT32 return; } else if (strnicmp(music_name, newmusic, 6) || (mflags & MUSIC_FORCERESET) || - (midipref != currentmidi && S_PrefAvailable(midipref, newmusic))) + (midipref != currentmidi && S_MusicPrefExists(newmusic))) { CONS_Debug(DBG_DETAILED, "Now playing song %s\n", newmusic); @@ -2362,35 +2348,17 @@ void S_ResumeAudio(void) S_AdjustMusicStackTics(); } -void S_SetMusicVolume(INT32 digvolume, INT32 seqvolume) +void S_SetMusicVolume(INT32 volume) { - if (digvolume < 0) - digvolume = cv_digmusicvolume.value; - if (seqvolume < 0) - seqvolume = cv_midimusicvolume.value; + if (volume < 0) + volume = cv_digmusicvolume.value; - if (digvolume < 0 || digvolume > 31) + if (volume < 0 || volume > 31) CONS_Alert(CONS_WARNING, "digmusicvolume should be between 0-31\n"); - CV_SetValue(&cv_digmusicvolume, digvolume&31); - actualdigmusicvolume = cv_digmusicvolume.value; //check for change of var + CV_SetValue(&cv_digmusicvolume, volume&31); + actualmusicvolume = cv_digmusicvolume.value; //check for change of var - if (seqvolume < 0 || seqvolume > 31) - CONS_Alert(CONS_WARNING, "midimusicvolume should be between 0-31\n"); - CV_SetValue(&cv_midimusicvolume, seqvolume&31); - actualmidimusicvolume = cv_midimusicvolume.value; //check for change of var - - switch(I_SongType()) - { - case MU_MID: - case MU_MID_EX: - //case MU_MOD: - //case MU_GME: - I_SetMusicVolume(seqvolume&31); - break; - default: - I_SetMusicVolume(digvolume&31); - break; - } + I_SetMusicVolume(volume&31); } /// ------------------------ @@ -2524,7 +2492,7 @@ static void Command_RestartAudio_f(void) // These must be called or no sound and music until manually set. I_SetSfxVolume(cv_soundvolume.value); - S_SetMusicVolume(cv_digmusicvolume.value, cv_midimusicvolume.value); + S_SetMusicVolume(cv_digmusicvolume.value); if (Playing()) // Gotta make sure the player is in a level P_RestoreMusic(&players[consoleplayer]); } @@ -2548,85 +2516,37 @@ void GameSounds_OnChange(void) } } -void GameDigiMusic_OnChange(void) +void GameMusic_OnChange(void) { if (M_CheckParm("-nomusic") || M_CheckParm("-noaudio")) return; - else if (M_CheckParm("-nodigmusic")) - return; - if (digital_disabled) + if (music_disabled) { - digital_disabled = false; + music_disabled = false; I_StartupSound(); // will return early if initialised I_InitMusic(); if (Playing()) P_RestoreMusic(&players[consoleplayer]); - else if ((!cv_musicpref.value || midi_disabled) && S_DigExists("_clear")) + else if (S_MusicPrefExists("_clear")) S_ChangeMusicInternal("_clear", false); } else { - digital_disabled = true; - if (S_MusicType() != MU_MID && S_MusicType() != MU_MID_EX) - { - S_StopMusic(); - if (!midi_disabled) - { - if (Playing()) - P_RestoreMusic(&players[consoleplayer]); - else - S_ChangeMusicInternal("_clear", false); - } - } - } -} - -void GameMIDIMusic_OnChange(void) -{ - if (M_CheckParm("-nomusic") || M_CheckParm("-noaudio")) - return; - else if (M_CheckParm("-nomidimusic")) - return; - - if (midi_disabled) - { - midi_disabled = false; - I_StartupSound(); // will return early if initialised - I_InitMusic(); - - if (Playing()) - P_RestoreMusic(&players[consoleplayer]); - else if ((cv_musicpref.value || digital_disabled) && S_MIDIExists("_clear")) - S_ChangeMusicInternal("_clear", false); - } - else - { - midi_disabled = true; - if (S_MusicType() == MU_MID || S_MusicType() == MU_MID_EX) - { - S_StopMusic(); - if (!digital_disabled) - { - if (Playing()) - P_RestoreMusic(&players[consoleplayer]); - else - S_ChangeMusicInternal("_clear", false); - } - } + music_disabled = true; + S_StopMusic(); } } void MusicPref_OnChange(void) { - if (M_CheckParm("-nomusic") || M_CheckParm("-noaudio") || - M_CheckParm("-nomidimusic") || M_CheckParm("-nodigmusic")) + if (M_CheckParm("-nomusic") || M_CheckParm("-noaudio")) return; if (Playing()) P_RestoreMusic(&players[consoleplayer]); - else if (S_PrefAvailable(cv_musicpref.value, "_clear")) + else if (S_MusicPrefExists("_clear")) S_ChangeMusicInternal("_clear", false); } diff --git a/src/s_sound.h b/src/s_sound.h index 288859c8d..e5a77810a 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -29,22 +29,18 @@ extern openmpt_module *openmpt_mhandle; #define PICKUP_SOUND 0x8000 extern consvar_t stereoreverse; -extern consvar_t cv_soundvolume, cv_closedcaptioning, cv_digmusicvolume, cv_midimusicvolume; +extern consvar_t cv_soundvolume, cv_closedcaptioning, cv_digmusicvolume; extern consvar_t cv_numChannels; extern consvar_t cv_resetmusic; -extern consvar_t cv_resetmusicbyheader; extern consvar_t cv_1upsound; #define RESETMUSIC (!modeattacking && \ - (cv_resetmusicbyheader.value ? \ - (mapheaderinfo[gamemap-1]->musforcereset != -1 ? mapheaderinfo[gamemap-1]->musforcereset : cv_resetmusic.value) \ - : cv_resetmusic.value) \ + mapheaderinfo[gamemap-1]->musforcereset != -1 ? mapheaderinfo[gamemap-1]->musforcereset : cv_resetmusic.value \ ) extern consvar_t cv_gamedigimusic; -extern consvar_t cv_gamemidimusic; extern consvar_t cv_gamesounds; extern consvar_t cv_musicpref; @@ -154,23 +150,14 @@ void S_StopSound(void *origin); // Music Status // -boolean S_DigMusicDisabled(void); -boolean S_MIDIMusicDisabled(void); boolean S_MusicDisabled(void); boolean S_MusicPlaying(void); boolean S_MusicPaused(void); boolean S_MusicNotInFocus(void); musictype_t S_MusicType(void); const char *S_MusicName(void); +boolean S_MusicPrefExists(const char *mname); boolean S_MusicExists(const char *mname, boolean checkMIDI, boolean checkDigi); -#define S_DigExists(a) S_MusicExists(a, false, true) -#define S_MIDIExists(a) S_MusicExists(a, true, false) - -// Returns whether the preferred format a (true = MIDI, false = Digital) -// exists and is enabled for musicname b -#define S_PrefAvailable(a, b) (a ? \ - (!S_MIDIMusicDisabled() && S_MIDIExists(b)) : \ - (!S_DigMusicDisabled() && S_DigExists(b))) // // Music Effects @@ -310,10 +297,7 @@ void S_UpdateClosedCaptions(void); FUNCMATH fixed_t S_CalculateSoundDistance(fixed_t px1, fixed_t py1, fixed_t pz1, fixed_t px2, fixed_t py2, fixed_t pz2); void S_SetSfxVolume(INT32 volume); -void S_SetMusicVolume(INT32 digvolume, INT32 seqvolume); -#define S_SetDigMusicVolume(a) S_SetMusicVolume(a,-1) -#define S_SetMIDIMusicVolume(a) S_SetMusicVolume(-1,a) -#define S_InitMusicVolume() S_SetMusicVolume(-1,-1) +void S_SetMusicVolume(INT32 volume); INT32 S_OriginPlaying(void *origin); INT32 S_IdPlaying(sfxenum_t id); diff --git a/src/sdl/sdl_sound.c b/src/sdl/sdl_sound.c index 2ca35b954..c7ec470fa 100644 --- a/src/sdl/sdl_sound.c +++ b/src/sdl/sdl_sound.c @@ -196,7 +196,7 @@ static void Snd_LockAudio(void) //Alam: Lock audio data and uninstall audio call { if (Snd_Mutex) SDL_LockMutex(Snd_Mutex); else if (sound_disabled) return; - else if (midi_disabled && digital_disabled + else if (music_disabled #ifdef HW3SOUND && hws_mode == HWS_DEFAULT_MODE #endif @@ -210,7 +210,7 @@ static void Snd_UnlockAudio(void) //Alam: Unlock audio data and reinstall audio { if (Snd_Mutex) SDL_UnlockMutex(Snd_Mutex); else if (sound_disabled) return; - else if (midi_disabled && digital_disabled + else if (music_disabled #ifdef HW3SOUND && hws_mode == HWS_DEFAULT_MODE #endif @@ -1154,7 +1154,7 @@ void I_ShutdownSound(void) } #endif - if (midi_disabled && digital_disabled) + if (music_disabled) SDL_CloseAudio(); CONS_Printf("%s", M_GetText("shut down\n")); sound_started = false; @@ -1174,7 +1174,7 @@ void I_StartupSound(void) const char *sdrv_name = NULL; #endif #ifndef HAVE_MIXER - midi_disabled = digital_disabled = true; + music_disabled = true; #endif memset(channels, 0, sizeof (channels)); //Alam: Clean it diff --git a/src/y_inter.c b/src/y_inter.c index 6e7d362a7..d1a2d1a05 100644 --- a/src/y_inter.c +++ b/src/y_inter.c @@ -1050,7 +1050,7 @@ void Y_Ticker(void) #endif ) S_FadeOutStopMusic(mapheaderinfo[gamemap-1]->musinterfadeout); - else if (mapheaderinfo[gamemap-1]->musintername[0] && S_MusicExists(mapheaderinfo[gamemap-1]->musintername, !midi_disabled, !digital_disabled)) + else if (mapheaderinfo[gamemap-1]->musintername[0] && S_MusicPrefExists(mapheaderinfo[gamemap-1]->musintername)) S_ChangeMusicInternal(mapheaderinfo[gamemap-1]->musintername, false); // don't loop it else S_ChangeMusicInternal("_clear", false); // don't loop it @@ -1127,7 +1127,7 @@ void Y_Ticker(void) #endif ) S_FadeOutStopMusic(mapheaderinfo[gamemap-1]->musinterfadeout); - else if (mapheaderinfo[gamemap-1]->musintername[0] && S_MusicExists(mapheaderinfo[gamemap-1]->musintername, !midi_disabled, !digital_disabled)) + else if (mapheaderinfo[gamemap-1]->musintername[0] && S_MusicPrefExists(mapheaderinfo[gamemap-1]->musintername)) S_ChangeMusicInternal(mapheaderinfo[gamemap-1]->musintername, false); // don't loop it else S_ChangeMusicInternal("_clear", false); // don't loop it From 6847aa119d5369062024cc35a92c633204e37813 Mon Sep 17 00:00:00 2001 From: spherallic Date: Tue, 21 Mar 2023 14:16:21 +0100 Subject: [PATCH 02/13] Fix mistake with S_GetMusicLumpNum --- src/s_sound.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/s_sound.c b/src/s_sound.c index e45f2e3f5..1a642a9b4 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -2105,14 +2105,10 @@ boolean S_RecallMusic(UINT16 status, boolean fromfirst) static lumpnum_t S_GetMusicLumpNum(const char *mname) { - boolean midipref = cv_musicpref.value; - if (S_MusicPrefExists(mname)) - return W_GetNumForName(va(midipref ? "d_%s":"o_%s", mname)); - else if (S_MusicPrefExists(mname)) - return W_GetNumForName(va(midipref ? "o_%s":"d_%s", mname)); - else - return LUMPERROR; + return W_CheckNumForName(va(cv_musicpref.value ? "d_%s":"o_%s", mname)); + else // see if the other music type exists + return W_CheckNumForName(va(cv_musicpref.value ? "o_%s":"d_%s", mname)); } static boolean S_LoadMusic(const char *mname) From 4c25085b08b70fc4f32326d17de6face87718b25 Mon Sep 17 00:00:00 2001 From: spherallic Date: Tue, 21 Mar 2023 14:30:48 +0100 Subject: [PATCH 03/13] Restore mistakenly removed #undef --- src/m_menu.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/m_menu.c b/src/m_menu.c index c80c6fb7c..37cb4a527 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1533,6 +1533,7 @@ static menuitem_t OP_SoundAdvancedMenu[] = }; #undef OPENMPT_MENUOFFSET +#undef MIXERX_MENUOFFSET static menuitem_t OP_DataOptionsMenu[] = { From 5d45b221576d44cef9818f6c7b513cb6f1b2e069 Mon Sep 17 00:00:00 2001 From: spherallic Date: Wed, 22 Mar 2023 00:15:00 +0100 Subject: [PATCH 04/13] Fix LoopTitle being ignored in certain cases --- src/m_menu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 37cb4a527..cd4bdb2fd 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -2973,7 +2973,7 @@ static void M_HandleMenuPresState(menu_t *newMenu) } // Change the music - M_ChangeMenuMusic("_title", false); + M_ChangeMenuMusic("_title", looptitle); // Run the linedef execs if (titlemapinaction) @@ -10665,7 +10665,7 @@ static void M_ModeAttackEndGame(INT32 choice) itemOn = currentMenu->lastOn; G_SetGamestate(GS_TIMEATTACK); modeattacking = ATTACKING_NONE; - M_ChangeMenuMusic("_title", true); + M_ChangeMenuMusic("_title", looptitle); Nextmap_OnChange(); } From 4a212fc6408409a274435980661c8352a15651d3 Mon Sep 17 00:00:00 2001 From: spherallic Date: Wed, 22 Mar 2023 01:11:22 +0100 Subject: [PATCH 05/13] Don't reset postboss music on dying without reload --- src/g_game.c | 9 ++------- src/s_sound.c | 17 ++++++++++------- src/s_sound.h | 1 + 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/g_game.c b/src/g_game.c index b23980044..2e66288be 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -2739,13 +2739,8 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps) if (p-players == consoleplayer) { - if (mapmusflags & MUSIC_RELOADRESET) - { - strncpy(mapmusname, mapheaderinfo[gamemap-1]->musname, 7); - mapmusname[6] = 0; - mapmusflags = (mapheaderinfo[gamemap-1]->mustrack & MUSIC_TRACKMASK); - mapmusposition = mapheaderinfo[gamemap-1]->muspos; - } + if ((mapmusflags & MUSIC_RELOADRESET) && !(mapheaderinfo[gamemap-1]->levelflags & LF_NORELOAD || netgame)) + S_ReloadReset(); // This is in S_Start, but this was not here previously. // if (RESETMUSIC) diff --git a/src/s_sound.c b/src/s_sound.c index 1a642a9b4..a6814327c 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -2395,13 +2395,8 @@ boolean S_FadeOutStopMusic(UINT32 ms) // void S_StartEx(boolean reset) { - if (mapmusflags & MUSIC_RELOADRESET) - { - strncpy(mapmusname, mapheaderinfo[gamemap-1]->musname, 7); - mapmusname[6] = 0; - mapmusflags = (mapheaderinfo[gamemap-1]->mustrack & MUSIC_TRACKMASK); - mapmusposition = mapheaderinfo[gamemap-1]->muspos; - } + if ((mapmusflags & MUSIC_RELOADRESET) && !(mapheaderinfo[gamemap-1]->levelflags & LF_NORELOAD || netgame)) + S_ReloadReset(); if (RESETMUSIC || reset) S_StopMusic(); @@ -2413,6 +2408,14 @@ void S_StartEx(boolean reset) music_stack_fadein = JINGLEPOSTFADE; } +void S_ReloadReset(void) +{ + strncpy(mapmusname, mapheaderinfo[gamemap-1]->musname, 7); + mapmusname[6] = 0; + mapmusflags = (mapheaderinfo[gamemap-1]->mustrack & MUSIC_TRACKMASK); + mapmusposition = mapheaderinfo[gamemap-1]->muspos; +} + static void Command_Tunes_f(void) { const char *tunearg; diff --git a/src/s_sound.h b/src/s_sound.h index e5a77810a..276a4b5ce 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -122,6 +122,7 @@ void S_InitSfxChannels(INT32 sfxVolume); void S_StopSounds(void); void S_ClearSfx(void); void S_StartEx(boolean reset); +void S_ReloadReset(void); #define S_Start() S_StartEx(false) // From 22e9e955b8810be4b439167b30885a158c203583 Mon Sep 17 00:00:00 2001 From: spherallic Date: Wed, 22 Mar 2023 01:50:08 +0100 Subject: [PATCH 06/13] Expose MUSIC_ flags to Lua --- src/deh_tables.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/deh_tables.c b/src/deh_tables.c index d53680c19..eed4a72d2 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -5759,6 +5759,11 @@ struct int_const_s const INT_CONST[] = { {"MB_SCROLLUP",MB_SCROLLUP}, {"MB_SCROLLDOWN",MB_SCROLLDOWN}, + // Music flags & stuff + {"MUSIC_TRACKMASK", MUSIC_TRACKMASK}, + {"MUSIC_FORCERESET", MUSIC_FORCERESET}, + {"MUSIC_RELOADRESET", MUSIC_RELOADRESET}, + {NULL,0} }; From 5e15e8f97b80e142add9e9c89a0f658b28f3eee8 Mon Sep 17 00:00:00 2001 From: spherallic Date: Wed, 22 Mar 2023 11:55:45 +0100 Subject: [PATCH 07/13] Restore MIDI volume slider --- src/d_netcmd.c | 1 + src/m_menu.c | 11 ++++++----- src/s_sound.c | 21 +++++++++++++++------ src/s_sound.h | 2 +- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index bdbb3747e..6776208ac 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -866,6 +866,7 @@ void D_RegisterClientCommands(void) // s_sound.c CV_RegisterVar(&cv_soundvolume); CV_RegisterVar(&cv_digmusicvolume); + CV_RegisterVar(&cv_midimusicvolume); CV_RegisterVar(&cv_closedcaptioning); CV_RegisterVar(&cv_numChannels); diff --git a/src/m_menu.c b/src/m_menu.c index cd4bdb2fd..cc654e2c7 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1498,7 +1498,7 @@ static menuitem_t OP_SoundOptionsMenu[] = {IT_STRING | IT_CVAR, NULL, "Default 1-Up sound", &cv_1upsound, 112}, {IT_STRING | IT_CVAR, NULL, "Reset Music Upon Dying", &cv_resetmusic, 122}, - {IT_STRING | IT_SUBMENU, NULL, "Advanced Settings...", &OP_SoundAdvancedDef, 142}, + {IT_STRING | IT_SUBMENU, NULL, "Advanced/MIDI Settings...", &OP_SoundAdvancedDef, 142}, }; #ifdef HAVE_OPENMPT @@ -1508,7 +1508,7 @@ static menuitem_t OP_SoundOptionsMenu[] = #endif #ifdef HAVE_MIXERX -#define MIXERX_MENUOFFSET 80 +#define MIXERX_MENUOFFSET 90 #else #define MIXERX_MENUOFFSET 0 #endif @@ -1522,9 +1522,10 @@ static menuitem_t OP_SoundAdvancedMenu[] = #ifdef HAVE_MIXERX {IT_HEADER, NULL, "MIDI Settings", NULL, OPENMPT_MENUOFFSET}, - {IT_STRING | IT_CVAR, NULL, "MIDI Player", &cv_midiplayer, OPENMPT_MENUOFFSET+12}, - {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "FluidSynth Sound Font File", &cv_midisoundfontpath, OPENMPT_MENUOFFSET+22}, - {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "TiMidity++ Config Folder", &cv_miditimiditypath, OPENMPT_MENUOFFSET+49}, + {IT_STRING | IT_CVAR | IT_CV_SLIDER, NULL, "MIDI Volume", &cv_midimusicvolume, OPENMPT_MENUOFFSET+12}, + {IT_STRING | IT_CVAR, NULL, "MIDI Player", &cv_midiplayer, OPENMPT_MENUOFFSET+22}, + {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "FluidSynth Sound Font File", &cv_midisoundfontpath, OPENMPT_MENUOFFSET+32}, + {IT_STRING | IT_CVAR | IT_CV_STRING, NULL, "TiMidity++ Config Folder", &cv_miditimiditypath, OPENMPT_MENUOFFSET+59}, #endif {IT_HEADER, NULL, "Focus settings", NULL, OPENMPT_MENUOFFSET+MIXERX_MENUOFFSET}, diff --git a/src/s_sound.c b/src/s_sound.c index a6814327c..d0089022a 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -75,6 +75,7 @@ static consvar_t precachesound = CVAR_INIT ("precachesound", "Off", CV_SAVE, CV_ // actual general (maximum) sound & music volume, saved into the config consvar_t cv_soundvolume = CVAR_INIT ("soundvolume", "16", CV_SAVE, soundvolume_cons_t, NULL); consvar_t cv_digmusicvolume = CVAR_INIT ("digmusicvolume", "16", CV_SAVE, soundvolume_cons_t, NULL); +consvar_t cv_midimusicvolume = CVAR_INIT ("midimusicvolume", "16", CV_SAVE, soundvolume_cons_t, NULL); static void Captioning_OnChange(void) { @@ -831,6 +832,8 @@ void S_UpdateSounds(void) mobj_t *listenmobj = players[displayplayer].mo; mobj_t *listenmobj2 = NULL; + + boolean currentmidi = (I_SongType() == MU_MID || I_SongType() == MU_MID_EX); memset(&listener, 0, sizeof(listener_t)); memset(&listener2, 0, sizeof(listener_t)); @@ -838,8 +841,8 @@ void S_UpdateSounds(void) // Update sound/music volumes, if changed manually at console if (actualsfxvolume != cv_soundvolume.value) S_SetSfxVolume(cv_soundvolume.value); - if (actualmusicvolume != cv_digmusicvolume.value) - S_SetMusicVolume(cv_digmusicvolume.value); + if (actualmusicvolume != currentmidi ? cv_midimusicvolume.value : cv_digmusicvolume.value) + S_SetMusicVolume(-1); // We're done now, if we're not in a level. if (gamestate != GS_LEVEL) @@ -2346,13 +2349,19 @@ void S_ResumeAudio(void) void S_SetMusicVolume(INT32 volume) { + boolean currentmidi = (I_SongType() == MU_MID || I_SongType() == MU_MID_EX); + if (volume < 0) volume = cv_digmusicvolume.value; + if (currentmidi) + volume = cv_midimusicvolume.value; + if (volume < 0 || volume > 31) - CONS_Alert(CONS_WARNING, "digmusicvolume should be between 0-31\n"); - CV_SetValue(&cv_digmusicvolume, volume&31); - actualmusicvolume = cv_digmusicvolume.value; //check for change of var + CONS_Alert(CONS_WARNING, "Music volume should be between 0-31\n"); + + CV_SetValue(currentmidi ? &cv_midimusicvolume : &cv_digmusicvolume, volume&31); + actualmusicvolume = currentmidi ? cv_midimusicvolume.value : cv_digmusicvolume.value; //check for change of var I_SetMusicVolume(volume&31); } @@ -2491,7 +2500,7 @@ static void Command_RestartAudio_f(void) // These must be called or no sound and music until manually set. I_SetSfxVolume(cv_soundvolume.value); - S_SetMusicVolume(cv_digmusicvolume.value); + S_SetMusicVolume(-1); if (Playing()) // Gotta make sure the player is in a level P_RestoreMusic(&players[consoleplayer]); } diff --git a/src/s_sound.h b/src/s_sound.h index 276a4b5ce..fd9fbc0db 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -29,7 +29,7 @@ extern openmpt_module *openmpt_mhandle; #define PICKUP_SOUND 0x8000 extern consvar_t stereoreverse; -extern consvar_t cv_soundvolume, cv_closedcaptioning, cv_digmusicvolume; +extern consvar_t cv_soundvolume, cv_closedcaptioning, cv_digmusicvolume, cv_midimusicvolume; extern consvar_t cv_numChannels; extern consvar_t cv_resetmusic; From 2a2ec6fdfd52d0ce74b0ad07ab1baf2c56a4df56 Mon Sep 17 00:00:00 2001 From: spherallic Date: Wed, 22 Mar 2023 12:09:51 +0100 Subject: [PATCH 08/13] Remove last traces of Mumble code --- src/android/i_system.c | 12 ---- src/d_clisrv.c | 2 +- src/dummy/i_system.c | 8 --- src/i_system.h | 8 --- src/s_sound.c | 11 --- src/sdl/i_system.c | 154 ----------------------------------------- 6 files changed, 1 insertion(+), 194 deletions(-) diff --git a/src/android/i_system.c b/src/android/i_system.c index ff8b88de5..e04710cf4 100644 --- a/src/android/i_system.c +++ b/src/android/i_system.c @@ -158,18 +158,6 @@ const char *I_GetJoyName(INT32 joyindex) return NULL; } -void I_SetupMumble(void) -{ -} - -#ifndef NOMUMBLE -void I_UpdateMumble(const mobj_t *mobj, const listener_t listener) -{ - (void)mobj; - (void)listener; -} -#endif - void I_OutputMsg(const char *fmt, ...) { va_list argptr; diff --git a/src/d_clisrv.c b/src/d_clisrv.c index ca9f4a24e..d32b873f8 100755 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -79,7 +79,7 @@ boolean server = true; // true or false but !server == client boolean nodownload = false; boolean serverrunning = false; INT32 serverplayer = 0; -char motd[254], server_context[8]; // Message of the Day, Unique Context (even without Mumble support) +char motd[254], server_context[8]; // Message of the Day, Unique Context // Server specific vars UINT8 playernode[MAXPLAYERS]; diff --git a/src/dummy/i_system.c b/src/dummy/i_system.c index 8556c0248..b26fcdd96 100644 --- a/src/dummy/i_system.c +++ b/src/dummy/i_system.c @@ -80,14 +80,6 @@ const char *I_GetJoyName(INT32 joyindex) return NULL; } -#ifndef NOMUMBLE -void I_UpdateMumble(const mobj_t *mobj, const listener_t listener) -{ - (void)mobj; - (void)listener; -} -#endif - void I_OutputMsg(const char *error, ...) { (void)error; diff --git a/src/i_system.h b/src/i_system.h index deea9f8a8..3ad7f7177 100644 --- a/src/i_system.h +++ b/src/i_system.h @@ -185,14 +185,6 @@ INT32 I_NumJoys(void); */ const char *I_GetJoyName(INT32 joyindex); -#ifndef NOMUMBLE -#include "p_mobj.h" // mobj_t -#include "s_sound.h" // listener_t -/** \brief to update Mumble of Player Postion -*/ -void I_UpdateMumble(const mobj_t *mobj, const listener_t listener); -#endif - /** \brief Startup the first mouse */ void I_StartupMouse(void); diff --git a/src/s_sound.c b/src/s_sound.c index d0089022a..265021e58 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -846,14 +846,7 @@ void S_UpdateSounds(void) // We're done now, if we're not in a level. if (gamestate != GS_LEVEL) - { -#ifndef NOMUMBLE - // Stop Mumble cutting out. I'm sick of it. - I_UpdateMumble(NULL, listener); -#endif - goto notinlevel; - } if (dedicated || sound_disabled) return; @@ -883,10 +876,6 @@ void S_UpdateSounds(void) listener.angle = listenmobj->angle; } -#ifndef NOMUMBLE - I_UpdateMumble(players[consoleplayer].mo, listener); -#endif - #ifdef HW3SOUND if (hws_mode != HWS_DEFAULT_MODE) { diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c index 66eeffa30..fdbd75e1e 100644 --- a/src/sdl/i_system.c +++ b/src/sdl/i_system.c @@ -108,23 +108,6 @@ typedef LPVOID (WINAPI *p_MapViewOfFile) (HANDLE, DWORD, DWORD, DWORD, SIZE_T); #define NEWSIGNALHANDLER #endif -#ifndef NOMUMBLE -#ifdef __linux__ // need -lrt -#include -#ifdef MAP_FAILED -#define HAVE_SHM -#endif -#include -#endif - -#ifdef _WIN32 -#define HAVE_MUMBLE -#define WINMUMBLE -#elif defined (HAVE_SHM) -#define HAVE_MUMBLE -#endif -#endif // NOMUMBLE - #ifndef O_BINARY #define O_BINARY 0 #endif @@ -206,12 +189,6 @@ static char returnWadPath[256]; #include "../d_main.h" -#if !defined(NOMUMBLE) && defined(HAVE_MUMBLE) -// Mumble context string -#include "../d_clisrv.h" -#include "../byteptr.h" -#endif - /** \brief The JoyReset function \param JoySet Joystick info to reset @@ -1654,134 +1631,6 @@ const char *I_GetJoyName(INT32 joyindex) return joyname; } -#ifndef NOMUMBLE -#ifdef HAVE_MUMBLE -// Best Mumble positional audio settings: -// Minimum distance 3.0 m -// Bloom 175% -// Maximum distance 80.0 m -// Minimum volume 50% -#define DEG2RAD (0.017453292519943295769236907684883l) // TAU/360 or PI/180 -#define MUMBLEUNIT (64.0f) // FRACUNITS in a Meter - -static struct { -#ifdef WINMUMBLE - UINT32 uiVersion; - DWORD uiTick; -#else - Uint32 uiVersion; - Uint32 uiTick; -#endif - float fAvatarPosition[3]; - float fAvatarFront[3]; - float fAvatarTop[3]; // defaults to Y-is-up (only used for leaning) - wchar_t name[256]; // game name - float fCameraPosition[3]; - float fCameraFront[3]; - float fCameraTop[3]; // defaults to Y-is-up (only used for leaning) - wchar_t identity[256]; // player id -#ifdef WINMUMBLE - UINT32 context_len; -#else - Uint32 context_len; -#endif - unsigned char context[256]; // server/team - wchar_t description[2048]; // game description -} *mumble = NULL; -#endif // HAVE_MUMBLE - -static void I_SetupMumble(void) -{ -#ifdef WINMUMBLE - HANDLE hMap = OpenFileMappingW(FILE_MAP_ALL_ACCESS, FALSE, L"MumbleLink"); - if (!hMap) - return; - - mumble = MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(*mumble)); - if (!mumble) - CloseHandle(hMap); -#elif defined (HAVE_SHM) - int shmfd; - char memname[256]; - - snprintf(memname, 256, "/MumbleLink.%d", getuid()); - shmfd = shm_open(memname, O_RDWR, S_IRUSR | S_IWUSR); - - if(shmfd < 0) - return; - - mumble = mmap(NULL, sizeof(*mumble), PROT_READ | PROT_WRITE, MAP_SHARED, shmfd, 0); - if (mumble == MAP_FAILED) - mumble = NULL; -#endif -} - -void I_UpdateMumble(const mobj_t *mobj, const listener_t listener) -{ -#ifdef HAVE_MUMBLE - double angle; - fixed_t anglef; - - if (!mumble) - return; - - if(mumble->uiVersion != 2) { - wcsncpy(mumble->name, L"SRB2 "VERSIONSTRINGW, 256); - wcsncpy(mumble->description, L"Sonic Robo Blast 2 with integrated Mumble Link support.", 2048); - mumble->uiVersion = 2; - } - mumble->uiTick++; - - if (!netgame || gamestate != GS_LEVEL) { // Zero out, but never delink. - mumble->fAvatarPosition[0] = mumble->fAvatarPosition[1] = mumble->fAvatarPosition[2] = 0.0f; - mumble->fAvatarFront[0] = 1.0f; - mumble->fAvatarFront[1] = mumble->fAvatarFront[2] = 0.0f; - mumble->fCameraPosition[0] = mumble->fCameraPosition[1] = mumble->fCameraPosition[2] = 0.0f; - mumble->fCameraFront[0] = 1.0f; - mumble->fCameraFront[1] = mumble->fCameraFront[2] = 0.0f; - return; - } - - { - UINT8 *p = mumble->context; - WRITEMEM(p, server_context, 8); - WRITEINT16(p, gamemap); - mumble->context_len = (UINT32)(p - mumble->context); - } - - if (mobj) { - mumble->fAvatarPosition[0] = FIXED_TO_FLOAT(mobj->x) / MUMBLEUNIT; - mumble->fAvatarPosition[1] = FIXED_TO_FLOAT(mobj->z) / MUMBLEUNIT; - mumble->fAvatarPosition[2] = FIXED_TO_FLOAT(mobj->y) / MUMBLEUNIT; - - anglef = AngleFixed(mobj->angle); - angle = FIXED_TO_FLOAT(anglef)*DEG2RAD; - mumble->fAvatarFront[0] = (float)cos(angle); - mumble->fAvatarFront[1] = 0.0f; - mumble->fAvatarFront[2] = (float)sin(angle); - } else { - mumble->fAvatarPosition[0] = mumble->fAvatarPosition[1] = mumble->fAvatarPosition[2] = 0.0f; - mumble->fAvatarFront[0] = 1.0f; - mumble->fAvatarFront[1] = mumble->fAvatarFront[2] = 0.0f; - } - - mumble->fCameraPosition[0] = FIXED_TO_FLOAT(listener.x) / MUMBLEUNIT; - mumble->fCameraPosition[1] = FIXED_TO_FLOAT(listener.z) / MUMBLEUNIT; - mumble->fCameraPosition[2] = FIXED_TO_FLOAT(listener.y) / MUMBLEUNIT; - - anglef = AngleFixed(listener.angle); - angle = FIXED_TO_FLOAT(anglef)*DEG2RAD; - mumble->fCameraFront[0] = (float)cos(angle); - mumble->fCameraFront[1] = 0.0f; - mumble->fCameraFront[2] = (float)sin(angle); -#else - (void)mobj; - (void)listener; -#endif // HAVE_MUMBLE -} -#undef WINMUMBLE -#endif // NOMUMBLE - #ifdef HAVE_TERMIOS void I_GetMouseEvents(void) @@ -2331,9 +2180,6 @@ INT32 I_StartupSystem(void) SDLlinked.major, SDLlinked.minor, SDLlinked.patch); if (SDL_Init(0) < 0) I_Error("SRB2: SDL System Error: %s", SDL_GetError()); //Alam: Oh no.... -#ifndef NOMUMBLE - I_SetupMumble(); -#endif return 0; } From 2263a25a84212aca28626c5b9c6164e499241c16 Mon Sep 17 00:00:00 2001 From: spherallic Date: Wed, 22 Mar 2023 17:54:17 +0100 Subject: [PATCH 09/13] Clean up S_SetMusicVolume & some other stuff --- src/s_sound.c | 70 ++++++++++++++++----------------------------------- 1 file changed, 21 insertions(+), 49 deletions(-) diff --git a/src/s_sound.c b/src/s_sound.c index 265021e58..1aeb8d0a2 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -164,8 +164,7 @@ caption_t closedcaptions[NUMCAPTIONS]; void S_ResetCaptions(void) { - UINT8 i; - for (i = 0; i < NUMCAPTIONS; i++) + for (UINT8 i = 0; i < NUMCAPTIONS; i++) { closedcaptions[i].c = NULL; closedcaptions[i].s = NULL; @@ -290,8 +289,6 @@ void S_RegisterSoundStuff(void) static void SetChannelsNum(void) { - INT32 i; - // Allocating the internal channels for mixing // (the maximum number of sounds rendered // simultaneously) within zone memory. @@ -301,7 +298,6 @@ static void SetChannelsNum(void) Z_Free(channels); channels = NULL; - if (cv_numChannels.value == 999999999) //Alam_GBC: OH MY ROD!(ROD rimmiced with GOD!) CV_StealthSet(&cv_numChannels,cv_numChannels.defaultvalue); @@ -317,7 +313,7 @@ static void SetChannelsNum(void) numofchannels = cv_numChannels.value; // Free all channels for use - for (i = 0; i < numofchannels; i++) + for (INT32 i = 0; i < numofchannels; i++) channels[i].sfxinfo = 0; S_ResetCaptions(); @@ -352,17 +348,12 @@ lumpnum_t S_GetSfxLumpNum(sfxinfo_t *sfx) boolean S_SoundDisabled(void) { - return ( - sound_disabled || - ( window_notinfocus && ! cv_playsoundsifunfocused.value ) - ); + return sound_disabled || (window_notinfocus && !cv_playsoundsifunfocused.value); } // Stop all sounds, load level info, THEN start sounds. void S_StopSounds(void) { - INT32 cnum; - #ifdef HW3SOUND if (hws_mode != HWS_DEFAULT_MODE) { @@ -372,7 +363,7 @@ void S_StopSounds(void) #endif // kill all playing sounds at start of level - for (cnum = 0; cnum < numofchannels; cnum++) + for (INT32 cnum = 0; cnum < numofchannels; cnum++) if (channels[cnum].sfxinfo) S_StopChannel(cnum); @@ -381,8 +372,6 @@ void S_StopSounds(void) void S_StopSoundByID(void *origin, sfxenum_t sfx_id) { - INT32 cnum; - // Sounds without origin can have multiple sources, they shouldn't // be stopped by new sounds. if (!origin) @@ -394,7 +383,7 @@ void S_StopSoundByID(void *origin, sfxenum_t sfx_id) return; } #endif - for (cnum = 0; cnum < numofchannels; cnum++) + for (INT32 cnum = 0; cnum < numofchannels; cnum++) { if (channels[cnum].sfxinfo == &S_sfx[sfx_id] && channels[cnum].origin == origin) { @@ -406,8 +395,6 @@ void S_StopSoundByID(void *origin, sfxenum_t sfx_id) void S_StopSoundByNum(sfxenum_t sfxnum) { - INT32 cnum; - #ifdef HW3SOUND if (hws_mode != HWS_DEFAULT_MODE) { @@ -415,7 +402,7 @@ void S_StopSoundByNum(sfxenum_t sfxnum) return; } #endif - for (cnum = 0; cnum < numofchannels; cnum++) + for (INT32 cnum = 0; cnum < numofchannels; cnum++) { if (channels[cnum].sfxinfo == &S_sfx[sfxnum]) { @@ -792,8 +779,6 @@ void S_StartSound(const void *origin, sfxenum_t sfx_id) void S_StopSound(void *origin) { - INT32 cnum; - // Sounds without origin can have multiple sources, they shouldn't // be stopped by new sounds. if (!origin) @@ -806,7 +791,7 @@ void S_StopSound(void *origin) return; } #endif - for (cnum = 0; cnum < numofchannels; cnum++) + for (INT32 cnum = 0; cnum < numofchannels; cnum++) { if (channels[cnum].sfxinfo && channels[cnum].origin == origin) { @@ -974,9 +959,8 @@ notinlevel: void S_UpdateClosedCaptions(void) { - UINT8 i; boolean gamestopped = (paused || P_AutoPause()); - for (i = 0; i < NUMCAPTIONS; i++) // update captions + for (UINT8 i = 0; i < NUMCAPTIONS; i++) // update captions { if (!closedcaptions[i].s) continue; @@ -1193,7 +1177,6 @@ INT32 S_AdjustSoundParams(const mobj_t *listener, const mobj_t *source, INT32 *v // on the given origin. INT32 S_OriginPlaying(void *origin) { - INT32 cnum; if (!origin) return false; @@ -1202,7 +1185,7 @@ INT32 S_OriginPlaying(void *origin) return HW3S_OriginPlaying(origin); #endif - for (cnum = 0; cnum < numofchannels; cnum++) + for (INT32 cnum = 0; cnum < numofchannels; cnum++) if (channels[cnum].origin == origin) return 1; return 0; @@ -1212,14 +1195,12 @@ INT32 S_OriginPlaying(void *origin) // is playing anywhere. INT32 S_IdPlaying(sfxenum_t id) { - INT32 cnum; - #ifdef HW3SOUND if (hws_mode != HWS_DEFAULT_MODE) return HW3S_IdPlaying(id); #endif - for (cnum = 0; cnum < numofchannels; cnum++) + for (INT32 cnum = 0; cnum < numofchannels; cnum++) if ((size_t)(channels[cnum].sfxinfo - S_sfx) == (size_t)id) return 1; return 0; @@ -1229,7 +1210,6 @@ INT32 S_IdPlaying(sfxenum_t id) // origin x playing sound id y. INT32 S_SoundPlaying(void *origin, sfxenum_t id) { - INT32 cnum; if (!origin) return 0; @@ -1238,7 +1218,7 @@ INT32 S_SoundPlaying(void *origin, sfxenum_t id) return HW3S_SoundPlaying(origin, id); #endif - for (cnum = 0; cnum < numofchannels; cnum++) + for (INT32 cnum = 0; cnum < numofchannels; cnum++) { if (channels[cnum].origin == origin && (size_t)(channels[cnum].sfxinfo - S_sfx) == (size_t)id) @@ -1659,8 +1639,7 @@ void S_LoadMusicDefs(UINT16 wadnum) // void S_InitMusicDefs(void) { - UINT16 i; - for (i = 0; i < numwadfiles; i++) + for (UINT16 i = 0; i < numwadfiles; i++) S_LoadMusicDefs(i); } @@ -1718,7 +1697,7 @@ boolean S_PrepareSoundTest(void) boolean S_MusicDisabled(void) { - return (music_disabled); + return music_disabled; } boolean S_MusicPlaying(void) @@ -1733,9 +1712,7 @@ boolean S_MusicPaused(void) boolean S_MusicNotInFocus(void) { - return ( - ( window_notinfocus && ! cv_playmusicifunfocused.value ) - ); + return window_notinfocus && !cv_playmusicifunfocused.value; } musictype_t S_MusicType(void) @@ -1994,7 +1971,6 @@ boolean S_RecallMusic(UINT16 status, boolean fromfirst) musicstack_t *result; musicstack_t *entry = Z_Calloc(sizeof (*result), PU_MUSIC, NULL); boolean currentmidi = (I_SongType() == MU_MID || I_SongType() == MU_MID_EX); - boolean midipref = cv_musicpref.value; if (status) result = S_GetMusicStackEntry(status, fromfirst, -1); @@ -2050,7 +2026,7 @@ boolean S_RecallMusic(UINT16 status, boolean fromfirst) } if (strncmp(entry->musname, S_MusicName(), 7) || // don't restart music if we're already playing it - (midipref != currentmidi && S_MusicPrefExists(entry->musname))) // but do if the user's preference has changed + (cv_musicpref.value != currentmidi && S_MusicPrefExists(entry->musname))) // but do if the user's preference has changed { if (music_stack_fadeout) S_ChangeMusicEx(entry->musname, entry->musflags, entry->looping, 0, music_stack_fadeout, 0); @@ -2224,7 +2200,6 @@ void S_ChangeMusicEx(const char *mmusic, UINT16 mflags, boolean looping, UINT32 }; boolean currentmidi = (I_SongType() == MU_MID || I_SongType() == MU_MID_EX); - boolean midipref = cv_musicpref.value; if (S_MusicDisabled()) return; @@ -2253,7 +2228,7 @@ void S_ChangeMusicEx(const char *mmusic, UINT16 mflags, boolean looping, UINT32 return; } else if (strnicmp(music_name, newmusic, 6) || (mflags & MUSIC_FORCERESET) || - (midipref != currentmidi && S_MusicPrefExists(newmusic))) + (cv_musicpref.value != currentmidi && S_MusicPrefExists(newmusic))) { CONS_Debug(DBG_DETAILED, "Now playing song %s\n", newmusic); @@ -2277,7 +2252,7 @@ void S_ChangeMusicEx(const char *mmusic, UINT16 mflags, boolean looping, UINT32 { I_SetSongPosition(position); I_FadeSong(100, fadeinms, NULL); -} + } else // reset volume to 100 with same music { I_StopFadingSong(); @@ -2338,19 +2313,16 @@ void S_ResumeAudio(void) void S_SetMusicVolume(INT32 volume) { - boolean currentmidi = (I_SongType() == MU_MID || I_SongType() == MU_MID_EX); + consvar_t *musicvolume = (I_SongType() == MU_MID || I_SongType() == MU_MID_EX) ? &cv_midimusicvolume : &cv_digmusicvolume; if (volume < 0) - volume = cv_digmusicvolume.value; - - if (currentmidi) - volume = cv_midimusicvolume.value; + volume = musicvolume->value; if (volume < 0 || volume > 31) CONS_Alert(CONS_WARNING, "Music volume should be between 0-31\n"); - CV_SetValue(currentmidi ? &cv_midimusicvolume : &cv_digmusicvolume, volume&31); - actualmusicvolume = currentmidi ? cv_midimusicvolume.value : cv_digmusicvolume.value; //check for change of var + CV_SetValue(musicvolume, volume&31); + actualmusicvolume = musicvolume->value; //check for change of var I_SetMusicVolume(volume&31); } From 4345744a51f71cda3d8d0c0af5f0cfe243555fae Mon Sep 17 00:00:00 2001 From: spherallic Date: Wed, 5 Jul 2023 10:15:16 +0200 Subject: [PATCH 10/13] Remove last traces of LENGTHMS --- src/sdl/mixer_sound.c | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/src/sdl/mixer_sound.c b/src/sdl/mixer_sound.c index f13aaef5d..801294204 100644 --- a/src/sdl/mixer_sound.c +++ b/src/sdl/mixer_sound.c @@ -95,7 +95,6 @@ UINT8 sound_started = false; static Mix_Music *music; static UINT8 music_volume, sfx_volume, internal_volume; static float loop_point; -static float song_length; // length in seconds static boolean songpaused; static UINT32 music_bytes; static boolean is_looping; @@ -203,7 +202,7 @@ consvar_t cv_miditimiditypath = CVAR_INIT ("midisoundbank", "./timidity", CV_SAV static void var_cleanup(void) { - song_length = loop_point = 0.0f; + loop_point = 0.0f; music_bytes = fading_source = fading_target =\ fading_timer = fading_duration = 0; @@ -936,12 +935,7 @@ UINT32 I_GetSongLength(void) if (xlength >= 0) return (UINT32)(xlength*1000); #endif - // VERY IMPORTANT to set your LENGTHMS= in your song files, folks! - // SDL mixer can't read music length itself. - length = (UINT32)(song_length*1000); - if (!length) - CONS_Debug(DBG_DETAILED, "Getting music length: music is missing LENGTHMS= tag. Needed for seeking.\n"); - return length; + return 0; //used to check for LENGTHMS, but that's now gone } } @@ -1235,7 +1229,6 @@ boolean I_LoadSong(char *data, size_t len) // Find the OGG loop point. loop_point = 0.0f; - song_length = 0.0f; while ((UINT32)(p - data) < len) { @@ -1326,9 +1319,6 @@ boolean I_PlaySong(boolean looping) if (!music) return false; - if (fpclassify(song_length) == FP_ZERO && (I_SongType() == MU_OGG || I_SongType() == MU_MP3 || I_SongType() == MU_FLAC)) - CONS_Debug(DBG_DETAILED, "This song is missing a LENGTHMS= tag! Required to make seeking work properly.\n"); - if (I_SongType() != MU_MOD && I_SongType() != MU_MID && Mix_PlayMusic(music, 0) == -1) { CONS_Alert(CONS_ERROR, "Mix_PlayMusic: %s\n", Mix_GetError()); From 2ae1222dbe3d867580d5c99fbd1f113f43fd4f05 Mon Sep 17 00:00:00 2001 From: spherallic Date: Fri, 9 Feb 2024 11:28:24 +0100 Subject: [PATCH 11/13] Revert "Remove last traces of Mumble code" This reverts commit 2a2ec6fdfd52d0ce74b0ad07ab1baf2c56a4df56. --- src/android/i_system.c | 12 ++++ src/dummy/i_system.c | 8 +++ src/i_system.h | 8 +++ src/s_sound.c | 11 +++ src/sdl/i_system.c | 154 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 193 insertions(+) diff --git a/src/android/i_system.c b/src/android/i_system.c index 10e1e37e3..9d798d452 100644 --- a/src/android/i_system.c +++ b/src/android/i_system.c @@ -158,6 +158,18 @@ const char *I_GetJoyName(INT32 joyindex) return NULL; } +void I_SetupMumble(void) +{ +} + +#ifndef NOMUMBLE +void I_UpdateMumble(const mobj_t *mobj, const listener_t listener) +{ + (void)mobj; + (void)listener; +} +#endif + void I_OutputMsg(const char *fmt, ...) { va_list argptr; diff --git a/src/dummy/i_system.c b/src/dummy/i_system.c index 280b16374..fe33cfe3e 100644 --- a/src/dummy/i_system.c +++ b/src/dummy/i_system.c @@ -91,6 +91,14 @@ const char *I_GetJoyName(INT32 joyindex) return NULL; } +#ifndef NOMUMBLE +void I_UpdateMumble(const mobj_t *mobj, const listener_t listener) +{ + (void)mobj; + (void)listener; +} +#endif + void I_OutputMsg(const char *error, ...) { (void)error; diff --git a/src/i_system.h b/src/i_system.h index 50f22a3df..834dd4091 100644 --- a/src/i_system.h +++ b/src/i_system.h @@ -189,6 +189,14 @@ INT32 I_NumJoys(void); */ const char *I_GetJoyName(INT32 joyindex); +#ifndef NOMUMBLE +#include "p_mobj.h" // mobj_t +#include "s_sound.h" // listener_t +/** \brief to update Mumble of Player Postion +*/ +void I_UpdateMumble(const mobj_t *mobj, const listener_t listener); +#endif + /** \brief Startup the first mouse */ void I_StartupMouse(void); diff --git a/src/s_sound.c b/src/s_sound.c index e0ecb5619..0e2b01f47 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -831,7 +831,14 @@ void S_UpdateSounds(void) // We're done now, if we're not in a level. if (gamestate != GS_LEVEL) + { +#ifndef NOMUMBLE + // Stop Mumble cutting out. I'm sick of it. + I_UpdateMumble(NULL, listener); +#endif + goto notinlevel; + } if (dedicated || sound_disabled) return; @@ -861,6 +868,10 @@ void S_UpdateSounds(void) listener.angle = listenmobj->angle; } +#ifndef NOMUMBLE + I_UpdateMumble(players[consoleplayer].mo, listener); +#endif + #ifdef HW3SOUND if (hws_mode != HWS_DEFAULT_MODE) { diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c index 1a95c3edb..f3b1ce963 100644 --- a/src/sdl/i_system.c +++ b/src/sdl/i_system.c @@ -114,6 +114,23 @@ typedef LPVOID (WINAPI *p_MapViewOfFile) (HANDLE, DWORD, DWORD, DWORD, SIZE_T); #define NEWSIGNALHANDLER #endif +#ifndef NOMUMBLE +#ifdef __linux__ // need -lrt +#include +#ifdef MAP_FAILED +#define HAVE_SHM +#endif +#include +#endif + +#ifdef _WIN32 +#define HAVE_MUMBLE +#define WINMUMBLE +#elif defined (HAVE_SHM) +#define HAVE_MUMBLE +#endif +#endif // NOMUMBLE + #ifndef O_BINARY #define O_BINARY 0 #endif @@ -198,6 +215,12 @@ static char returnWadPath[256]; #include "../d_main.h" +#if !defined(NOMUMBLE) && defined(HAVE_MUMBLE) +// Mumble context string +#include "../d_clisrv.h" +#include "../byteptr.h" +#endif + /** \brief The JoyReset function \param JoySet Joystick info to reset @@ -1683,6 +1706,134 @@ const char *I_GetJoyName(INT32 joyindex) return joyname; } +#ifndef NOMUMBLE +#ifdef HAVE_MUMBLE +// Best Mumble positional audio settings: +// Minimum distance 3.0 m +// Bloom 175% +// Maximum distance 80.0 m +// Minimum volume 50% +#define DEG2RAD (0.017453292519943295769236907684883l) // TAU/360 or PI/180 +#define MUMBLEUNIT (64.0f) // FRACUNITS in a Meter + +static struct { +#ifdef WINMUMBLE + UINT32 uiVersion; + DWORD uiTick; +#else + Uint32 uiVersion; + Uint32 uiTick; +#endif + float fAvatarPosition[3]; + float fAvatarFront[3]; + float fAvatarTop[3]; // defaults to Y-is-up (only used for leaning) + wchar_t name[256]; // game name + float fCameraPosition[3]; + float fCameraFront[3]; + float fCameraTop[3]; // defaults to Y-is-up (only used for leaning) + wchar_t identity[256]; // player id +#ifdef WINMUMBLE + UINT32 context_len; +#else + Uint32 context_len; +#endif + unsigned char context[256]; // server/team + wchar_t description[2048]; // game description +} *mumble = NULL; +#endif // HAVE_MUMBLE + +static void I_SetupMumble(void) +{ +#ifdef WINMUMBLE + HANDLE hMap = OpenFileMappingW(FILE_MAP_ALL_ACCESS, FALSE, L"MumbleLink"); + if (!hMap) + return; + + mumble = MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(*mumble)); + if (!mumble) + CloseHandle(hMap); +#elif defined (HAVE_SHM) + int shmfd; + char memname[256]; + + snprintf(memname, 256, "/MumbleLink.%d", getuid()); + shmfd = shm_open(memname, O_RDWR, S_IRUSR | S_IWUSR); + + if(shmfd < 0) + return; + + mumble = mmap(NULL, sizeof(*mumble), PROT_READ | PROT_WRITE, MAP_SHARED, shmfd, 0); + if (mumble == MAP_FAILED) + mumble = NULL; +#endif +} + +void I_UpdateMumble(const mobj_t *mobj, const listener_t listener) +{ +#ifdef HAVE_MUMBLE + double angle; + fixed_t anglef; + + if (!mumble) + return; + + if(mumble->uiVersion != 2) { + wcsncpy(mumble->name, L"SRB2 "VERSIONSTRINGW, 256); + wcsncpy(mumble->description, L"Sonic Robo Blast 2 with integrated Mumble Link support.", 2048); + mumble->uiVersion = 2; + } + mumble->uiTick++; + + if (!netgame || gamestate != GS_LEVEL) { // Zero out, but never delink. + mumble->fAvatarPosition[0] = mumble->fAvatarPosition[1] = mumble->fAvatarPosition[2] = 0.0f; + mumble->fAvatarFront[0] = 1.0f; + mumble->fAvatarFront[1] = mumble->fAvatarFront[2] = 0.0f; + mumble->fCameraPosition[0] = mumble->fCameraPosition[1] = mumble->fCameraPosition[2] = 0.0f; + mumble->fCameraFront[0] = 1.0f; + mumble->fCameraFront[1] = mumble->fCameraFront[2] = 0.0f; + return; + } + + { + UINT8 *p = mumble->context; + WRITEMEM(p, server_context, 8); + WRITEINT16(p, gamemap); + mumble->context_len = (UINT32)(p - mumble->context); + } + + if (mobj) { + mumble->fAvatarPosition[0] = FIXED_TO_FLOAT(mobj->x) / MUMBLEUNIT; + mumble->fAvatarPosition[1] = FIXED_TO_FLOAT(mobj->z) / MUMBLEUNIT; + mumble->fAvatarPosition[2] = FIXED_TO_FLOAT(mobj->y) / MUMBLEUNIT; + + anglef = AngleFixed(mobj->angle); + angle = FIXED_TO_FLOAT(anglef)*DEG2RAD; + mumble->fAvatarFront[0] = (float)cos(angle); + mumble->fAvatarFront[1] = 0.0f; + mumble->fAvatarFront[2] = (float)sin(angle); + } else { + mumble->fAvatarPosition[0] = mumble->fAvatarPosition[1] = mumble->fAvatarPosition[2] = 0.0f; + mumble->fAvatarFront[0] = 1.0f; + mumble->fAvatarFront[1] = mumble->fAvatarFront[2] = 0.0f; + } + + mumble->fCameraPosition[0] = FIXED_TO_FLOAT(listener.x) / MUMBLEUNIT; + mumble->fCameraPosition[1] = FIXED_TO_FLOAT(listener.z) / MUMBLEUNIT; + mumble->fCameraPosition[2] = FIXED_TO_FLOAT(listener.y) / MUMBLEUNIT; + + anglef = AngleFixed(listener.angle); + angle = FIXED_TO_FLOAT(anglef)*DEG2RAD; + mumble->fCameraFront[0] = (float)cos(angle); + mumble->fCameraFront[1] = 0.0f; + mumble->fCameraFront[2] = (float)sin(angle); +#else + (void)mobj; + (void)listener; +#endif // HAVE_MUMBLE +} +#undef WINMUMBLE +#endif // NOMUMBLE + #ifdef HAVE_TERMIOS void I_GetMouseEvents(void) @@ -2281,6 +2432,9 @@ INT32 I_StartupSystem(void) SDLlinked.major, SDLlinked.minor, SDLlinked.patch); if (SDL_Init(0) < 0) I_Error("SRB2: SDL System Error: %s", SDL_GetError()); //Alam: Oh no.... +#ifndef NOMUMBLE + I_SetupMumble(); +#endif return 0; } From 08e3341a46f64ed762257cd02b0a0590d39e7fd3 Mon Sep 17 00:00:00 2001 From: spherallic Date: Fri, 9 Feb 2024 11:33:03 +0100 Subject: [PATCH 12/13] Fix compile error after Mumble restoration --- src/sdl/i_system.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c index f3b1ce963..847806270 100644 --- a/src/sdl/i_system.c +++ b/src/sdl/i_system.c @@ -217,7 +217,7 @@ static char returnWadPath[256]; #if !defined(NOMUMBLE) && defined(HAVE_MUMBLE) // Mumble context string -#include "../d_clisrv.h" +#include "../netcode/d_clisrv.h" #include "../byteptr.h" #endif From babda3fe892406ca2d3dc434513c56cf7371ac53 Mon Sep 17 00:00:00 2001 From: Logan Aerl Arias Date: Sat, 17 Feb 2024 03:51:23 +0000 Subject: [PATCH 13/13] length in I_GetSongLength() is unused when HAVE_GME is not defined --- src/sdl/mixer_sound.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sdl/mixer_sound.c b/src/sdl/mixer_sound.c index 679e88d8d..c6de25d90 100644 --- a/src/sdl/mixer_sound.c +++ b/src/sdl/mixer_sound.c @@ -900,9 +900,9 @@ boolean I_SetSongSpeed(float speed) UINT32 I_GetSongLength(void) { +#ifdef HAVE_GME INT32 length; -#ifdef HAVE_GME if (gme) { gme_info_t *info;