From 59b053bc8a9e0b52168b73ca86296e6fe890f522 Mon Sep 17 00:00:00 2001 From: mogguh Date: Mon, 25 Aug 2008 19:46:45 +0000 Subject: Added: Option for background music in sound options (affects UIni too) Added: New language string SING_OPTIONS_SOUND_BACKGROUNDMUSIC Added: CC licensed music loop Improved: Options positions via Deluxe theme (first pass, next will follow) Improved: Code beautified in UScreenMain git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@1290 b956fd51-792f-4845-bead-9b4dfca2ff2c --- Game/Code/Classes/UIni.pas | 26 ++- Game/Code/Classes/UMusic.pas | 31 +++- Game/Code/Classes/UThemes.pas | 2 + Game/Code/Screens/UScreenMain.pas | 278 +++++++++++++----------------- Game/Code/Screens/UScreenOptionsSound.pas | 107 +++++++----- Game/Code/Screens/UScreenScore.pas | 6 + Game/Code/Screens/UScreenSong.pas | 7 +- 7 files changed, 239 insertions(+), 218 deletions(-) (limited to 'Game') diff --git a/Game/Code/Classes/UIni.pas b/Game/Code/Classes/UIni.pas index c66a10c7..b286c917 100644 --- a/Game/Code/Classes/UIni.pas +++ b/Game/Code/Classes/UIni.pas @@ -41,8 +41,8 @@ type //Options - TVisualizerOption = (voOff, voWhenNoVideo, voOn); - + TVisualizerOption = (voOff, voWhenNoVideo, voOn); + TBackgroundMusicOption = (bmoOff, bmoOn); TIni = class private function RemoveFileExt(FullName: string): string; @@ -113,7 +113,8 @@ type Theme: integer; SkinNo: integer; Color: integer; - + BackgroundMusicOption:integer; + // Record InputDeviceConfig: array of TInputDeviceConfig; @@ -168,6 +169,9 @@ const IDepth: array[0..1] of string = ('16 bit', '32 bit'); IVisualizer: array[0..2] of string = ('Off', 'WhenNoVideo','On'); + IBackgroundMusic: array[0..1] of string = ('Off', 'On'); + + ITextureSize: array[0..2] of string = ('128', '256', '512'); ITextureSizeVals: array[0..2] of integer = ( 128, 256, 512); @@ -716,6 +720,11 @@ begin // || VisualizerOption := TVisualizerOption(GetArrayIndex(IVisualizer, IniFile.ReadString('Graphics', 'Visualization', 'Off'))); VisualizerOption := GetArrayIndex(IVisualizer, IniFile.ReadString('Graphics', 'Visualization', 'Off')); +{** + * Background music + *} + BackgroundMusicOption := GetArrayIndex(IBackgroundMusic, IniFile.ReadString('Sound', 'BackgroundMusic', 'Off')); + // EffectSing EffectSing := GetArrayIndex(IEffectSing, IniFile.ReadString('Advanced', 'EffectSing', 'On')); @@ -811,6 +820,9 @@ begin // AudioOutputBufferSize IniFile.WriteString('Sound', 'AudioOutputBufferSize', IAudioOutputBufferSize[AudioOutputBufferSizeIndex]); + // Background music + IniFile.WriteString('Sound', 'BackgroundMusic', IBackgroundMusic[BackgroundMusicOption]); + // Song Preview IniFile.WriteString('Sound', 'PreviewVolume', IPreviewVolume[PreviewVolume]); @@ -820,11 +832,11 @@ begin // SavePlayback IniFile.WriteString('Sound', 'SavePlayback', ISavePlayback[SavePlayback]); - // VoicePasstrough - IniFile.WriteString('Sound', 'VoicePassthrough', IVoicePassthrough[VoicePassthrough]); + // VoicePasstrough + IniFile.WriteString('Sound', 'VoicePassthrough', IVoicePassthrough[VoicePassthrough]); - // Lyrics Font - IniFile.WriteString('Lyrics', 'LyricsFont', ILyricsFont[LyricsFont]); + // Lyrics Font + IniFile.WriteString('Lyrics', 'LyricsFont', ILyricsFont[LyricsFont]); // Lyrics Effect IniFile.WriteString('Lyrics', 'LyricsEffect', ILyricsEffect[LyricsEffect]); diff --git a/Game/Code/Classes/UMusic.pas b/Game/Code/Classes/UMusic.pas index f3474e30..4090bd2f 100644 --- a/Game/Code/Classes/UMusic.pas +++ b/Game/Code/Classes/UMusic.pas @@ -503,6 +503,8 @@ type procedure LoadSounds(); procedure UnloadSounds(); + procedure StartBgMusic(); + procedure PauseBgMusic(); // TODO //function AddSound(Filename: string): integer; //procedure RemoveSound(ID: integer); @@ -536,6 +538,7 @@ implementation uses sysutils, math, + UIni, UMain, UCommandLine, URecord, @@ -709,7 +712,6 @@ begin // Load in-game sounds SoundLib := TSoundLibrary.Create; - AudioPlayback.PlaySound(SoundLib.BGMusic); end; procedure InitializeVideo(); @@ -860,9 +862,6 @@ end; procedure TSoundLibrary.LoadSounds(); begin - //Log.LogStatus('Loading Sounds', 'Music Initialize'); - //Log.BenchmarkStart(4); - UnloadSounds(); Start := AudioPlayback.OpenSound(SoundPath + 'Common start.mp3'); @@ -872,11 +871,10 @@ begin Option := AudioPlayback.OpenSound(SoundPath + 'option change col.mp3'); Click := AudioPlayback.OpenSound(SoundPath + 'rimshot022b.mp3'); - //BGMusic := AudioPlayback.OpenSound(SoundPath + '18982__bebeto__Loop010_ambient.mp3'); - //BGMusic.SetLoop(true); + BGMusic := AudioPlayback.OpenSound(SoundPath + 'Bebeto_-_Loop010.mp3'); - //Log.BenchmarkEnd(4); - //Log.LogBenchmark('--> Loading Sounds', 4); + if (BGMusic <> nil) then + BGMusic.Loop := True; end; procedure TSoundLibrary.UnloadSounds(); @@ -900,6 +898,23 @@ begin end; *) +procedure TSoundLibrary.StartBgMusic(); +begin + if (TBackgroundMusicOption(Ini.BackgroundMusicOption) = bmoOn) and + (Soundlib.BGMusic <> nil) and not (Soundlib.BGMusic.Status = ssPlaying) then + begin + AudioPlayback.PlaySound(Soundlib.BGMusic); + end; +end; + +procedure TSoundLibrary.PauseBgMusic(); +begin + If (Soundlib.BGMusic <> nil) then + begin + Soundlib.BGMusic.Pause; + end; +end; + { TVoiceRemoval } procedure TVoiceRemoval.Callback(Buffer: PChar; BufSize: integer); diff --git a/Game/Code/Classes/UThemes.pas b/Game/Code/Classes/UThemes.pas index 46327b7c..8a31b21a 100644 --- a/Game/Code/Classes/UThemes.pas +++ b/Game/Code/Classes/UThemes.pas @@ -408,6 +408,7 @@ type TThemeOptionsSound = class(TThemeBasic) SelectMicBoost: TThemeSelectSlide; + SelectBackgroundMusic: TThemeSelectSlide; SelectClickAssist: TThemeSelectSlide; SelectBeatClick: TThemeSelectSlide; SelectThreshold: TThemeSelectSlide; @@ -1159,6 +1160,7 @@ begin // Options Sound ThemeLoadBasic(OptionsSound, 'OptionsSound'); + ThemeLoadSelectSlide(OptionsSound.SelectBackgroundMusic, 'OptionsSoundSelectBackgroundMusic'); ThemeLoadSelectSlide(OptionsSound.SelectMicBoost, 'OptionsSoundSelectMicBoost'); ThemeLoadSelectSlide(OptionsSound.SelectClickAssist, 'OptionsSoundSelectClickAssist'); ThemeLoadSelectSlide(OptionsSound.SelectBeatClick, 'OptionsSoundSelectBeatClick'); diff --git a/Game/Code/Screens/UScreenMain.pas b/Game/Code/Screens/UScreenMain.pas index 108f811c..4dbdaaa1 100644 --- a/Game/Code/Screens/UScreenMain.pas +++ b/Game/Code/Screens/UScreenMain.pas @@ -16,25 +16,22 @@ uses UFiles, SysUtils, UThemes; - //ULCD, //TODO: maybe LCD Support as Plugin? - //ULight //TODO: maybe Light Support as Plugin? type TScreenMain = class(TMenu) - public - TextDescription: integer; - TextDescriptionLong: integer; - - constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: WideChar; PressedDown: Boolean): Boolean; override; - procedure onShow; override; - procedure InteractNext; override; - procedure InteractPrev; override; - procedure InteractInc; override; - procedure InteractDec; override; - //procedure UpdateLCD; //TODO: maybe LCD Support as Plugin? - procedure SetAnimationProgress(Progress: real); override; - //function Draw: boolean; override; + public + TextDescription: integer; + TextDescriptionLong: integer; + + constructor Create; override; + function ParseInput(PressedKey: cardinal; CharCode: widechar; + PressedDown: boolean): boolean; override; + procedure onShow; override; + procedure InteractNext; override; + procedure InteractPrev; override; + procedure InteractInc; override; + procedure InteractDec; override; + procedure SetAnimationProgress(Progress: real); override; end; implementation @@ -46,170 +43,158 @@ uses UTexture, USongs, Textgl, - //opengl, ULanguage, UParty, UDLLManager, UScreenCredits, USkins; - -function TScreenMain.ParseInput(PressedKey: Cardinal; CharCode: WideChar; PressedDown: Boolean): Boolean; +function TScreenMain.ParseInput(PressedKey: cardinal; CharCode: widechar; + PressedDown: boolean): boolean; var - SDL_ModState: Word; + SDL_ModState: word; begin - Result := true; - - SDL_ModState := SDL_GetModState and (KMOD_LSHIFT + KMOD_RSHIFT - + KMOD_LCTRL + KMOD_RCTRL + KMOD_LALT + KMOD_RALT); + Result := True; - //Deactivate Credits when Key is pressed -// if Credits_Visible then -// begin -// Credits_Visible := False; -// exit; -// end; + SDL_ModState := SDL_GetModState and (KMOD_LSHIFT + KMOD_RSHIFT + + KMOD_LCTRL + KMOD_RCTRL + KMOD_LALT + KMOD_RALT); - If (PressedDown) Then + if (PressedDown) then begin // Key Down - // check normal keys + // check normal keys case WideCharUpperCase(CharCode)[1] of 'Q': - begin - Result := false; - Exit; - end; + begin + Result := False; + Exit; + end; 'C': + begin + if (SDL_ModState = KMOD_LALT) then begin - if (SDL_ModState = KMOD_LALT) then - begin - //Credits_Y := 600; - //Credits_Alpha := 0; - //Credits_Visible := True; - FadeTo(@ScreenCredits , SoundLib.Start ); - Exit; - end; + FadeTo(@ScreenCredits, SoundLib.Start); + Exit; end; + end; 'M': + begin + if (Ini.Players >= 1) and (Length(DLLMan.Plugins) >= 1) then begin - if (Ini.Players >= 1) AND (Length(DLLMan.Plugins)>=1) then - begin - FadeTo(@ScreenPartyOptions, SoundLib.Start); - Exit; - end; + FadeTo(@ScreenPartyOptions, SoundLib.Start); + Exit; end; + end; 'S': - begin - FadeTo(@ScreenStatMain, SoundLib.Start); - Exit; - end; + begin + FadeTo(@ScreenStatMain, SoundLib.Start); + Exit; + end; 'E': - begin - FadeTo(@ScreenEdit, SoundLib.Start); - Exit; - end; + begin + FadeTo(@ScreenEdit, SoundLib.Start); + Exit; + end; end; // check special keys case PressedKey of SDLK_ESCAPE, - SDLK_BACKSPACE : - begin - Result := False; - end; + SDLK_BACKSPACE: + begin + Result := False; + end; SDLK_RETURN: + begin + //Solo + if (Interaction = 0) then begin - //Solo - if (Interaction = 0) then + if (Songs.SongList.Count >= 1) then begin - if (Songs.SongList.Count >= 1) then - begin - if (Ini.Players >= 0) and (Ini.Players <= 3) then PlayersPlay := Ini.Players + 1; - if (Ini.Players = 4) then PlayersPlay := 6; - - ScreenName.Goto_SingScreen := False; - FadeTo(@ScreenName, SoundLib.Start); - end - else //show error message - ScreenPopupError.ShowPopup(Language.Translate('ERROR_NO_SONGS')); - end; + if (Ini.Players >= 0) and (Ini.Players <= 3) then + PlayersPlay := Ini.Players + 1; + if (Ini.Players = 4) then + PlayersPlay := 6; + + ScreenName.Goto_SingScreen := False; + FadeTo(@ScreenName, SoundLib.Start); + end + else //show error message + ScreenPopupError.ShowPopup(Language.Translate('ERROR_NO_SONGS')); + end; - //Multi - if Interaction = 1 then + //Multi + if Interaction = 1 then + begin + if (Songs.SongList.Count >= 1) then begin - if (Songs.SongList.Count >= 1) then + if (Length(DLLMan.Plugins) >= 1) then begin - if (Length(DLLMan.Plugins)>=1) then - begin - FadeTo(@ScreenPartyOptions, SoundLib.Start); - end - else //show error message, No Plugins Loaded - ScreenPopupError.ShowPopup(Language.Translate('ERROR_NO_PLUGINS')); + FadeTo(@ScreenPartyOptions, SoundLib.Start); end - else //show error message, No Songs Loaded - ScreenPopupError.ShowPopup(Language.Translate('ERROR_NO_SONGS')); - end; + else //show error message, No Plugins Loaded + ScreenPopupError.ShowPopup(Language.Translate('ERROR_NO_PLUGINS')); + end + else //show error message, No Songs Loaded + ScreenPopupError.ShowPopup(Language.Translate('ERROR_NO_SONGS')); + end; - //Stats - if Interaction = 2 then - begin - FadeTo(@ScreenStatMain, SoundLib.Start); - end; + //Stats + if Interaction = 2 then + begin + FadeTo(@ScreenStatMain, SoundLib.Start); + end; - //Editor - if Interaction = 3 then - begin - FadeTo(@ScreenEdit, SoundLib.Start); - end; + //Editor + if Interaction = 3 then + begin + FadeTo(@ScreenEdit, SoundLib.Start); + end; - //Options - if Interaction = 4 then - begin - FadeTo(@ScreenOptions, SoundLib.Start); - end; + //Options + if Interaction = 4 then + begin + FadeTo(@ScreenOptions, SoundLib.Start); + end; - //Exit - if Interaction = 5 then - begin - Result := false; - end; + //Exit + if Interaction = 5 then + begin + Result := False; end; - // Up and Down could be done at the same time, - // but I don't want to declare variables inside - // functions like this one, called so many times - SDLK_DOWN: InteractInc; - SDLK_UP: InteractDec; - SDLK_RIGHT: InteractNext; - SDLK_LEFT: InteractPrev; + end; + {** + * Up and Down could be done at the same time, + * but I don't want to declare variables inside + * functions like this one, called so many times + *} + SDLK_DOWN: InteractInc; + SDLK_UP: InteractDec; + SDLK_RIGHT: InteractNext; + SDLK_LEFT: InteractPrev; end; end else // Key Up case PressedKey of - SDLK_RETURN : - begin - end; + SDLK_RETURN: + begin + end; end; end; constructor TScreenMain.Create; -var - I: integer; begin inherited Create; - - //---------------- - //Attention ^^: - //New Creation Order needed because of LoadFromTheme - //and Button Collections. - //At First Custom Texts and Statics - //Then LoadFromTheme - //after LoadFromTheme the Buttons and Selects - //---------------- - - +{** + * Attention ^^: + * New Creation Order needed because of LoadFromTheme + * and Button Collections. + * At First Custom Texts and Statics + * Then LoadFromTheme + * after LoadFromTheme the Buttons and Selects + *} TextDescription := AddText(Theme.Main.TextDescription); TextDescriptionLong := AddText(Theme.Main.TextDescriptionLong); @@ -225,13 +210,13 @@ begin Interaction := 0; end; -procedure TScreenMain.onShow; //TODO: maybe LCD Support as Plugin? +procedure TScreenMain.onShow; begin inherited; - (* - LCD.WriteText(1, ' Choose mode: '); - UpdateLCD; - *) +{** + * Start background music + *} + SoundLib.StartBgMusic; end; procedure TScreenMain.InteractNext; @@ -239,8 +224,6 @@ begin inherited InteractNext; Text[TextDescription].Text := Theme.Main.Description[Interaction]; Text[TextDescriptionLong].Text := Theme.Main.DescriptionLong[Interaction]; - //UpdateLCD; - //Light.LightOne(1, 200); end; procedure TScreenMain.InteractPrev; @@ -248,8 +231,6 @@ begin inherited InteractPrev; Text[TextDescription].Text := Theme.Main.Description[Interaction]; Text[TextDescriptionLong].Text := Theme.Main.DescriptionLong[Interaction]; - //UpdateLCD; - //Light.LightOne(0, 200); end; procedure TScreenMain.InteractDec; @@ -257,36 +238,19 @@ begin inherited InteractDec; Text[TextDescription].Text := Theme.Main.Description[Interaction]; Text[TextDescriptionLong].Text := Theme.Main.DescriptionLong[Interaction]; - //UpdateLCD; - //Light.LightOne(0, 200); end; procedure TScreenMain.InteractInc; begin inherited InteractInc; - Text[TextDescription].Text := Theme.Main.Description[Interaction]; + Text[TextDescription].Text := Theme.Main.Description[Interaction]; Text[TextDescriptionLong].Text := Theme.Main.DescriptionLong[Interaction]; - //UpdateLCD; - //Light.LightOne(1, 200); end; -(* -procedure TScreenMain.UpdateLCD; //TODO: maybe LCD Support as Plugin? -begin - - case Interaction of - 0: LCD.WriteText(2, ' sing '); - 1: LCD.WriteText(2, ' editor '); - 2: LCD.WriteText(2, ' options '); - 3: LCD.WriteText(2, ' exit '); - end - -end; -*) - procedure TScreenMain.SetAnimationProgress(Progress: real); begin Static[0].Texture.ScaleW := Progress; Static[0].Texture.ScaleH := Progress; end; + end. diff --git a/Game/Code/Screens/UScreenOptionsSound.pas b/Game/Code/Screens/UScreenOptionsSound.pas index 3a457b7a..9c602788 100644 --- a/Game/Code/Screens/UScreenOptionsSound.pas +++ b/Game/Code/Screens/UScreenOptionsSound.pas @@ -13,90 +13,112 @@ uses type TScreenOptionsSound = class(TMenu) - public - constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: WideChar; PressedDown: Boolean): Boolean; override; - procedure onShow; override; + public + constructor Create; override; + function ParseInput(PressedKey: cardinal; CharCode: widechar; + PressedDown: boolean): boolean; override; + procedure onShow; override; end; implementation uses UGraphic, SysUtils; -function TScreenOptionsSound.ParseInput(PressedKey: Cardinal; CharCode: WideChar; PressedDown: Boolean): Boolean; +function TScreenOptionsSound.ParseInput(PressedKey: cardinal; + CharCode: widechar; PressedDown: boolean): boolean; begin - Result := true; - If (PressedDown) Then + Result := True; + if (PressedDown) then begin // Key Down - // check normal keys + // check normal keys case WideCharUpperCase(CharCode)[1] of 'Q': - begin - Result := false; - Exit; - end; + begin + Result := False; + Exit; + end; end; - + // check special keys case PressedKey of SDLK_ESCAPE, - SDLK_BACKSPACE : + SDLK_BACKSPACE: + begin + // Escape -> save nothing - just leave this screen + AudioPlayback.PlaySound(SoundLib.Back); + FadeTo(@ScreenOptions); + end; + SDLK_RETURN: + begin + if SelInteraction = 8 then begin - // Escape -> save nothing - just leave this screen - + Ini.Save; AudioPlayback.PlaySound(SoundLib.Back); FadeTo(@ScreenOptions); end; - SDLK_RETURN: - begin - if SelInteraction = 7 then begin - Ini.Save; - AudioPlayback.PlaySound(SoundLib.Back); - FadeTo(@ScreenOptions); - end; - end; + end; SDLK_DOWN: InteractNext; - SDLK_UP : + SDLK_UP: InteractPrev; SDLK_RIGHT: + begin + if (SelInteraction >= 0) and (SelInteraction < 8) then begin - if (SelInteraction >= 0) and (SelInteraction <= 7) then begin - AudioPlayback.PlaySound(SoundLib.Option); - InteractInc; - end; + AudioPlayback.PlaySound(SoundLib.Option); + InteractInc; end; + end; SDLK_LEFT: + begin + if (SelInteraction >= 0) and (SelInteraction < 8) then begin - if (SelInteraction >= 0) and (SelInteraction <= 7) then begin - AudioPlayback.PlaySound(SoundLib.Option); - InteractDec; - end; + AudioPlayback.PlaySound(SoundLib.Option); + InteractDec; end; + end; end; end; + +{** + * Actually this one isn't pretty - but it does the trick of + * turning the background music on/off in "real time" + * bgm = background music + * TODO: - Fetching the SelectInteraction via something more descriptive + * - Obtaining the current value of a select is imho ugly + *} + if (SelInteraction = 1) then + begin + if TBackgroundMusicOption(SelectsS[1].SelectedOption) = bmoOn then + SoundLib.StartBgMusic + else + SoundLib.PauseBgMusic; + end; + end; constructor TScreenOptionsSound.Create; -//var -// I: integer; // Auto Removed, Unused Variable begin inherited Create; LoadFromTheme(Theme.OptionsSound); - AddSelectSlide(Theme.OptionsSound.SelectSlideVoicePassthrough, Ini.VoicePassthrough, IVoicePassthrough); - - AddSelectSlide(Theme.OptionsSound.SelectMicBoost, Ini.MicBoost, IMicBoost); // TODO - This need moving to ScreenOptionsRecord + AddSelectSlide(Theme.OptionsSound.SelectSlideVoicePassthrough, + Ini.VoicePassthrough, IVoicePassthrough); + AddSelectSlide(Theme.OptionsSound.SelectBackgroundMusic, + Ini.BackgroundMusicOption, IBackgroundMusic); + AddSelectSlide(Theme.OptionsSound.SelectMicBoost, Ini.MicBoost, IMicBoost); + // TODO: - MicBoost needs to be moved to ScreenOptionsRecord AddSelectSlide(Theme.OptionsSound.SelectClickAssist, Ini.ClickAssist, IClickAssist); AddSelectSlide(Theme.OptionsSound.SelectBeatClick, Ini.BeatClick, IBeatClick); AddSelectSlide(Theme.OptionsSound.SelectThreshold, Ini.ThresholdIndex, IThreshold); - //Song Preview - AddSelectSlide(Theme.OptionsSound.SelectSlidePreviewVolume, Ini.PreviewVolume, IPreviewVolume); - AddSelectSlide(Theme.OptionsSound.SelectSlidePreviewFading, Ini.PreviewFading, IPreviewFading); + AddSelectSlide(Theme.OptionsSound.SelectSlidePreviewVolume, + Ini.PreviewVolume, IPreviewVolume); + AddSelectSlide(Theme.OptionsSound.SelectSlidePreviewFading, + Ini.PreviewFading, IPreviewFading); AddButton(Theme.OptionsSound.ButtonExit); - if (Length(Button[0].Text)=0) then + if (Length(Button[0].Text) = 0) then AddButtonText(14, 20, Theme.Options.Description[7]); Interaction := 0; @@ -105,7 +127,6 @@ end; procedure TScreenOptionsSound.onShow; begin inherited; - Interaction := 0; end; diff --git a/Game/Code/Screens/UScreenScore.pas b/Game/Code/Screens/UScreenScore.pas index 57c37283..ab6c020d 100644 --- a/Game/Code/Screens/UScreenScore.pas +++ b/Game/Code/Screens/UScreenScore.pas @@ -236,6 +236,12 @@ var V: array[1..6] of boolean; // visibility array begin + +{** + * Turn backgroundmusic on + *} + SoundLib.StartBgMusic; + inherited; // all statics / texts are loaded at start - so that we have them all even if we change the amount of players diff --git a/Game/Code/Screens/UScreenSong.pas b/Game/Code/Screens/UScreenSong.pas index 5e374568..be1320f2 100644 --- a/Game/Code/Screens/UScreenSong.pas +++ b/Game/Code/Screens/UScreenSong.pas @@ -23,8 +23,6 @@ uses UThemes, UTexture, ULanguage, - //ULCD, //TODO: maybe LCD Support as Plugin? - //ULight, //TODO: maybe Light Support as Plugin? USong, UIni; @@ -792,7 +790,6 @@ end; procedure TScreenSong.GenerateThumbnails(); var I: Integer; - OldTextureLimit: integer; CoverButtonIndex: integer; CoverButton: TButton; CoverName: string; @@ -1340,6 +1337,10 @@ end; procedure TScreenSong.onShow; begin inherited; +{** + * Pause background music, so we can play it again on scorescreen + *} + SoundLib.PauseBgMusic; AudioPlayback.Stop; -- cgit v1.2.3