From 9d01c8801db29d6ff3d64ef81b84321549d84688 Mon Sep 17 00:00:00 2001
From: whiteshark0 <whiteshark0@b956fd51-792f-4845-bead-9b4dfca2ff2c>
Date: Thu, 5 Apr 2007 21:09:52 +0000
Subject: Added Advanced Screen and Options in TIni Options working now only
 for Effect Perfect and Effect Golden.

git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@65 b956fd51-792f-4845-bead-9b4dfca2ff2c
---
 Game/Code/Classes/UDraw.pas                  |  26 +-
 Game/Code/Classes/UGraphic.pas               |  42 ++-
 Game/Code/Classes/UIni.pas                   | 160 +++++-----
 Game/Code/Classes/UThemes.pas                | 442 ++++++++++++++-------------
 Game/Code/Screens/UScreenEditSub.pas         |   4 +-
 Game/Code/Screens/UScreenOptions.pas         |  11 +-
 Game/Code/Screens/UScreenOptionsAdvanced.pas |  95 ++++++
 Game/Code/Screens/UScreenOptionsGraphics.pas |   1 -
 Game/Code/Screens/UScreenSing.pas            |  14 +-
 Game/Code/Screens/UScreenSongMenu.pas        |   4 +-
 Game/Code/UltraStar.dpr                      |  29 +-
 11 files changed, 499 insertions(+), 329 deletions(-)
 create mode 100644 Game/Code/Screens/UScreenOptionsAdvanced.pas

(limited to 'Game/Code')

diff --git a/Game/Code/Classes/UDraw.pas b/Game/Code/Classes/UDraw.pas
index 2e742172..e0e8e941 100644
--- a/Game/Code/Classes/UDraw.pas
+++ b/Game/Code/Classes/UDraw.pas
@@ -215,11 +215,17 @@ begin
       with Nuta[Pet] do begin
         if not FreeStyle then begin
 
-          // Golden Note Patch
-          case Wartosc of
-            1: glColor4f(1, 1, 1, 0.85);
-            2: glColor4f(1, 1, 1, 0.85); // no stars, paint yellow -> glColor4f(1, 1, 0.3, 0.85);
-          end; // case
+
+          if Ini.EffectGolden = 0 then
+          // If Golden note Effect of then Change not Color
+          begin
+            case Wartosc of
+              1: glColor4f(1, 1, 1, 0.85);
+              2: glColor4f(1, 1, 0.3, 0.85); // no stars, paint yellow -> glColor4f(1, 1, 0.3, 0.85);
+            end; // case
+          end //Else all Notes same Color
+          else
+            glColor4f(1, 1, 1, 0.85);
 
           // lewa czesc  -  left part
           Rec.Left := (Start-Czesci[NrCzesci].Czesc[Czesci[NrCzesci].Akt].StartNote) * TempR + Left + 0.5 + 10*ScreenX;
@@ -264,10 +270,10 @@ begin
         glEnd;
 
           // Golden Star Patch
-          if Wartosc = 2 then
-            begin
-              GoldenRec.SaveGoldenStarsRec(GoldenStarPos, Rec.Top, Rec.Right, Rec.Bottom);
-            end;
+          if (Wartosc = 2) AND (Ini.EffectGolden=1) then
+          begin
+            GoldenRec.SaveGoldenStarsRec(GoldenStarPos, Rec.Top, Rec.Right, Rec.Bottom);
+          end;
 
         end; // if not FreeStyle
       end; // with
@@ -373,7 +379,7 @@ var
 
         //Rec.Right := X + (Start+Dlugosc-Czesci[0].Czesc[Czesci[0].Akt].StartNote) * TempR - NotesW - 0.5  + 10*ScreenX;
         //if (Start+Dlugosc-1 = Czas.AktBeatD) then
-        if Perfect AND (Ini.GMAFix <> 1) then begin
+        if Perfect and (Ini.EffectPerfect=1) then begin
 //          A := sqrt((1+sin(Music.Position * 3))/2);
           A := 1 - 2*(Czas.Teraz - GetTimeFromBeat(Start+Dlugosc));
           if not (Start+Dlugosc-1 = Czas.AktBeatD) then
diff --git a/Game/Code/Classes/UGraphic.pas b/Game/Code/Classes/UGraphic.pas
index d9831143..73bb1706 100644
--- a/Game/Code/Classes/UGraphic.pas
+++ b/Game/Code/Classes/UGraphic.pas
@@ -4,7 +4,7 @@ interface
 uses
   SDL, OpenGL12, UTexture, TextGL, ULog, SysUtils, ULyrics, UScreenLoading,
   UScreenWelcome, UScreenMain, UScreenName, UScreenLevel, UScreenOptions, UScreenOptionsGame,
-  UScreenOptionsGraphics, UScreenOptionsSound, UScreenOptionsLyrics, UScreenOptionsThemes, UScreenOptionsRecord,
+  UScreenOptionsGraphics, UScreenOptionsSound, UScreenOptionsLyrics, UScreenOptionsThemes, UScreenOptionsRecord, UScreenOptionsAdvanced,
   UScreenSong, UScreenSing, UScreenScore, UScreenTop5, UScreenEditSub,
   UScreenEdit, UScreenEditConvert, UScreenEditHeader, UScreenOpen, UThemes, USkins, UScreenSongMenu, UScreenSongJumpto,
   {Party Screens} UScreenSingModi, UScreenPartyNewRound, UScreenPartyScore, UScreenPartyOptions, UScreenPartyWin, UScreenPartyPlayer;
@@ -44,6 +44,7 @@ var
   ScreenOptionsLyrics:    TScreenOptionsLyrics;
   ScreenOptionsThemes:    TScreenOptionsThemes;
   ScreenOptionsRecord:    TScreenOptionsRecord;
+  ScreenOptionsAdvanced:  TScreenOptionsAdvanced;
   ScreenEditSub:      TScreenEditSub;
   ScreenEdit:         TScreenEdit;
   ScreenEditConvert:  TScreenEditConvert;
@@ -162,7 +163,7 @@ procedure LoadScreens;
 
 
 implementation
-uses UMain, UIni, UDisplay;
+uses UMain, UIni, UDisplay, Graphics, Classes, Windows;
 
 procedure LoadTextures;
 var
@@ -215,13 +216,36 @@ begin
 end;
 
 procedure Initialize3D (Title: string);
+var
+  Icon: TIcon;
+  Res:  TResourceStream;
+  ISurface: PSDL_Surface;
 begin
   Log.LogStatus('LoadOpenGL', 'Initialize3D');
   Log.BenchmarkStart(2);
 
   LoadOpenGL;
 
-//  SDL_WM_SetIcon(SDL_LoadBMP('..\Graphics\us.ico'),0);
+  {//Load Icon
+  Res := TResourceStream.CreateFromID(HInstance, 3, RT_ICON);
+  Icon := TIcon.Create;
+  Icon.LoadFromStream(Res);
+  Res.Free;
+
+  //Create icon Surface
+  SDL_CreateRGBSurface (
+  SDL_SWSURFACE,
+  Icon.Width,
+  Icon.Height,
+  32,
+  128 or 64,
+  32 or 16,
+  8 or 4,
+  2 or 1);
+  SDL_BlitSurface( //}
+
+
+  SDL_WM_SetIcon(SDL_LoadBMP('us.ico'), 0); //}
 
   Log.LogStatus('SDL_Init', 'Initialize3D');
   if ( SDL_Init(SDL_INIT_VIDEO or SDL_INIT_AUDIO)= -1 ) then begin
@@ -370,16 +394,18 @@ begin
   Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Options', 3); Log.BenchmarkStart(3);
   ScreenOptionsGame :=      TScreenOptionsGame.Create('');
   Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Options Game', 3); Log.BenchmarkStart(3);
-  ScreenOptionsGraphics :=  TScreenOptionsGraphics.Create('');
+  ScreenOptionsGraphics  :=  TScreenOptionsGraphics.Create('');
   Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Options Graphics', 3); Log.BenchmarkStart(3);
-  ScreenOptionsSound :=     TScreenOptionsSound.Create('');
+  ScreenOptionsSound    :=     TScreenOptionsSound.Create('');
   Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Options Sound', 3); Log.BenchmarkStart(3);
-  ScreenOptionsLyrics :=    TScreenOptionsLyrics.Create('');
+  ScreenOptionsLyrics   :=    TScreenOptionsLyrics.Create('');
   Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Options Lyrics', 3); Log.BenchmarkStart(3);
-  ScreenOptionsThemes :=    TScreenOptionsThemes.Create('');
+  ScreenOptionsThemes   :=    TScreenOptionsThemes.Create('');
   Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Options Themes', 3); Log.BenchmarkStart(3);
-  ScreenOptionsRecord :=    TScreenOptionsRecord.Create;
+  ScreenOptionsRecord   :=    TScreenOptionsRecord.Create;
   Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Options Record', 3); Log.BenchmarkStart(3);
+  ScreenOptionsAdvanced :=    TScreenOptionsAdvanced.Create;
+  Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Options Advanced', 3); Log.BenchmarkStart(3);
   ScreenEditSub :=          TScreenEditSub.Create('');
   Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Edit Sub', 3); Log.BenchmarkStart(3);
   ScreenEdit :=             TScreenEdit.Create('');
diff --git a/Game/Code/Classes/UIni.pas b/Game/Code/Classes/UIni.pas
index a17ba52d..7ab8de99 100644
--- a/Game/Code/Classes/UIni.pas
+++ b/Game/Code/Classes/UIni.pas
@@ -27,11 +27,6 @@ type
     Spectrum:       integer;
     Spectrograph:   integer;
     MovieSize:      integer;
-    //LineBonus Mod
-    LineBonus: integer;
-    //GMA Fix
-    GMAFix: integer;
-
 
     // Sound
     MicBoost:       integer;
@@ -61,6 +56,14 @@ type
       ChannelR:       integer;
     end;
 
+    // Advanced
+    LoadAnimation:  integer;
+    EffectPerfect:  integer;
+    EffectGolden:   integer;
+    AskbeforeDel:   integer;
+    OnSongClick:    integer;
+    LineBonus:      integer;
+
     // Controller
     Joypad:         integer;
 
@@ -113,11 +116,6 @@ const
   IOscilloscope:  array[0..2] of string = ('Off', 'Osci', 'Bar');
   //IOscilloscope:  array[0..1] of string = ('Off', 'On');
 
-  //Line Bonus MOd
-  ILineBonus:  array[0..2] of string = ('Off', 'At Score', 'At Notes');
-  //GMA Fix
-  IGMAFix:  array[0..1] of string = ('Off', 'On');
-
   ISpectrum:      array[0..1] of string = ('Off', 'On');
   ISpectrograph:  array[0..1] of string = ('Off', 'On');
   IMovieSize:     array[0..1] of string = ('Half', 'Full');
@@ -135,6 +133,14 @@ const
 
   IColor:         array[0..8] of string = ('Blue', 'Green', 'Pink', 'Red', 'Violet', 'Orange', 'Yellow', 'Brown', 'Black');
 
+  // Advanced
+  ILoadAnimation: array[0..1] of string = ('Off', 'On');
+  IEffectPerfect: array[0..1] of string = ('Off', 'On');
+  IEffectGolden:  array[0..1] of string = ('Off', 'On');
+  IAskbeforeDel:  array[0..1] of string = ('Off', 'On');
+  IOnSongClick:   array[0..2] of string = ('Sing', 'Select Players', 'Open Menu');
+  ILineBonus:  array[0..2] of string = ('Off', 'At Score', 'At Notes');
+
   IJoypad:        array[0..1] of string = ('Off', 'On');
   ILPT:           array[0..2] of string = ('Off', 'LCD', 'Lights');
 
@@ -257,16 +263,6 @@ begin
   for Pet := 0 to High(IOscilloscope) do
     if Tekst = IOscilloscope[Pet] then Ini.Oscilloscope := Pet;
 
-  // Line Bonus
-  Tekst := IniFile.ReadString('Graphics', 'LineBonus', 'At Score');
-  for Pet := 0 to High(ILineBonus) do
-    if Tekst = ILineBonus[Pet] then Ini.LineBonus := Pet;
-
-  //GMA Fix
-  Tekst := IniFile.ReadString('Graphics', 'GMAFix', 'Off');
-  for Pet := 0 to High(IGMAFix) do
-    if Tekst = IGMAFix[Pet] then Ini.GMAFix := Pet;
-
   // Spectrum
   Tekst := IniFile.ReadString('Graphics', 'Spectrum', 'Off');
   for Pet := 0 to High(ISpectrum) do
@@ -307,22 +303,6 @@ begin
   for Pet := 0 to High(IThreshold) do
     if Tekst = IThreshold[Pet] then Ini.Threshold := Pet;
 
-  {// Two Player Mode
-  for I := 0 to 7 do begin
-    Ini.SoundCard[I, 1] := 2*I + 1;
-    Ini.SoundCard[I, 2] := 2*I + 2;
-  end;
-
-  Tekst := IniFile.ReadString('Sound', 'TwoPlayerMode', ITwoPlayerMode[0]);
-  for Pet := 0 to High(ITwoPlayerMode) do
-    if Tekst = ITwoPlayerMode[Pet] then Ini.TwoPlayerMode := Pet;
-
-  if Ini.TwoPlayerMode = 1 then begin
-    Ini.SoundCard[0, 1] := 1;
-    Ini.SoundCard[0, 2] := 3;
-    Ini.SoundCard[1, 1] := 2;
-  end;}
-
   // Lyrics Font
   Tekst := IniFile.ReadString('Lyrics',    'LyricsFont',   ILyricsFont[1]);
   for Pet := 0 to High(ILyricsFont) do
@@ -339,15 +319,6 @@ begin
     if Tekst = ISolmization[Pet] then Ini.Solmization := Pet;
 
   // Theme
-  {SetLength(ITheme, 0);
-  if FileExists('Themes\Singstar.ini') then begin
-    SetLength(ITheme, Length(ITheme)+1);
-    ITheme[High(ITheme)] := 'Singstar';
-  end; {
-  if FileExists('Themes\Karin.ini') then begin
-    SetLength(ITheme, Length(ITheme)+1);
-    ITheme[High(ITheme)] := 'Karin';
-  end;}
 
   //Theme List Patch
     SetLength(ITheme, 0);
@@ -372,8 +343,7 @@ begin
   //No Theme Found
   if (Length(ITheme)=0) then
   begin
-    Log.LogError('Could not find any valid Themes.');
-    Halt;
+    Log.CriticalError('Could not find any valid Themes.');
   end;
 
 
@@ -425,8 +395,6 @@ begin
     Inc(I);
   end;
 
-  Log.LogError(InttoStr(Length(CardList)) + ' Cards Loaded');
-
   // Record - append detected soundcards
   for I := 0 to High(Recording.SoundCard) do
   begin
@@ -455,40 +423,45 @@ begin
     end;
   end;
 
-  {for I := 0 to High(Recording.SoundCard) do begin
+  //Advanced Settings
 
-    B := false;
-    I2 := 0;
-    while ((B = false) and (I2 <= High(CardList))) do
-      if CardList[I2].Name = Recording.SoundCard[I].Description then B := true
-      else Inc(I2);
+  // LoadAnimation
+  Tekst := IniFile.ReadString('Advanced', 'LoadAnimation', 'On');
+  for Pet := 0 to High(ILoadAnimation) do
+    if Tekst = ILoadAnimation[Pet] then Ini.LoadAnimation := Pet;
+
+  // EffectPerfect
+  Tekst := IniFile.ReadString('Advanced', 'EffectPerfect', 'On');
+  for Pet := 0 to High(IEffectPerfect) do
+    if Tekst = IEffectPerfect[Pet] then Ini.EffectPerfect := Pet;
+
+  // EffectGolden
+  Tekst := IniFile.ReadString('Advanced', 'EffectGolden', 'On');
+  for Pet := 0 to High(IEffectGolden) do
+    if Tekst = IEffectGolden[Pet] then Ini.EffectGolden := Pet;
+
+  // AskbeforeDel
+  Tekst := IniFile.ReadString('Advanced', 'AskbeforeDel', 'On');
+  for Pet := 0 to High(IAskbeforeDel) do
+    if Tekst = IAskbeforeDel[Pet] then Ini.AskbeforeDel := Pet;
+
+  // OnSongClick
+  Tekst := IniFile.ReadString('Advanced', 'OnSongClick', 'Sing');
+  for Pet := 0 to High(IOnSongClick) do
+    if Tekst = IOnSongClick[Pet] then Ini.OnSongClick := Pet;
+
+  // Linebonus
+  Tekst := IniFile.ReadString('Advanced', 'LineBonus', 'At Score');
+  for Pet := 0 to High(ILineBonus) do
+    if Tekst = ILineBonus[Pet] then Ini.LineBonus := Pet;
 
-    // if the card wasn't detected in ini file, append it to the ini list
-    if B = false then begin
-      I3 := Length(CardList);
-      SetLength(CardList, I3+1);
-      CardList[I3].Name := Recording.SoundCard[I].Description;
-      CardList[I3].Input := 0;
-      CardList[I3].ChannelL := 0;
-      CardList[I3].ChannelR := 0;
-      if Length(CardList) = 1 then CardList[I].ChannelL := 1; // default for new users
-      //CardList[I].Input := 2;
-    end;
-  end; }
 
-  Log.LogError(InttoStr(Length(CardList)) + ' Cards Detected');
 
   // Joypad
   Tekst := IniFile.ReadString('Controller',    'Joypad',   IJoypad[0]);
   for Pet := 0 to High(IJoypad) do
     if Tekst = IJoypad[Pet] then Ini.Joypad := Pet;
 
-  {// SoundCard
-  for I := 0 to 7 do begin
-    Ini.SoundCard[I, 1] := IniFile.ReadInteger('SoundCards', 'SoundCard'+IntToStr(I+1)+'L', Ini.SoundCard[I, 1]);
-    Ini.SoundCard[I, 2] := IniFile.ReadInteger('SoundCards', 'SoundCard'+IntToStr(I+1)+'R', Ini.SoundCard[I, 2]);
-  end;   }
-
   // LCD
   Tekst := IniFile.ReadString('Devices',    'LPT',   ILPT[0]);
   for Pet := 0 to High(ILPT) do
@@ -564,14 +537,6 @@ begin
   Tekst := IOscilloscope[Ini.Oscilloscope];
   IniFile.WriteString('Graphics', 'Oscilloscope', Tekst);
 
-  //Line Bonus
-  Tekst := ILineBonus[Ini.LineBonus];
-  IniFile.WriteString('Graphics', 'LineBonus', Tekst);
-
-  //GMA Fix
-  Tekst := IGMAFix[Ini.GMAFix];
-  IniFile.WriteString('Graphics', 'GMAFix', Tekst);
-
   // Spectrum
   Tekst := ISpectrum[Ini.Spectrum];
   IniFile.WriteString('Graphics', 'Spectrum', Tekst);
@@ -604,10 +569,6 @@ begin
   Tekst := ISavePlayback[Ini.SavePlayback];
   IniFile.WriteString('Sound',    'SavePlayback',    Tekst);
 
-  {// Two Player Mode
-  Tekst := ITwoPlayerMode[Ini.TwoPlayerMode];
-  IniFile.WriteString('Sound',    'TwoPlayerMode',    Tekst); }
-
   // Lyrics Font
   Tekst := ILyricsFont[Ini.LyricsFont];
   IniFile.WriteString('Lyrics',    'LyricsFont',    Tekst);
@@ -651,6 +612,33 @@ begin
 
     Log.LogError(InttoStr(Length(CardList)) + ' Cards Saved');
 
+  //Advanced Settings
+
+  //LoadAnimation
+  Tekst := ILoadAnimation[Ini.LoadAnimation];
+  IniFile.WriteString('Advanced', 'LoadAnimation', Tekst);
+
+  //EffectPerfect
+  Tekst := IEffectPerfect[Ini.EffectPerfect];
+  IniFile.WriteString('Advanced', 'EffectPerfect', Tekst);
+
+  //EffectGolden
+  Tekst := IEffectGolden[Ini.EffectGolden];
+  IniFile.WriteString('Advanced', 'EffectGolden', Tekst);
+
+  //AskbeforeDel
+  Tekst := IAskbeforeDel[Ini.AskbeforeDel];
+  IniFile.WriteString('Advanced', 'AskbeforeDel', Tekst);
+
+  //OnSongClick
+  Tekst := IOnSongClick[Ini.OnSongClick];
+  IniFile.WriteString('Advanced', 'OnSongClick', Tekst);
+
+  //Line Bonus
+  Tekst := ILineBonus[Ini.LineBonus];
+  IniFile.WriteString('Advanced', 'LineBonus', Tekst);
+
+
   // Joypad
   Tekst := IJoypad[Ini.Joypad];
   IniFile.WriteString('Controller',    'Joypad',    Tekst);
diff --git a/Game/Code/Classes/UThemes.pas b/Game/Code/Classes/UThemes.pas
index d2fb5b11..17983a60 100644
--- a/Game/Code/Classes/UThemes.pas
+++ b/Game/Code/Classes/UThemes.pas
@@ -333,10 +333,11 @@ type
     ButtonLyrics:     TThemeButton;
     ButtonThemes:     TThemeButton;
     ButtonRecord:     TThemeButton;
+    ButtonAdvanced:   TThemeButton;
     ButtonExit:       TThemeButton;
 
     TextDescription:      TThemeText;
-    Description:          array[0..6] of string;
+    Description:          array[0..7] of string;
   end;
 
   TThemeOptionsGame = class(TThemeBasic)
@@ -390,6 +391,16 @@ type
     ButtonExit:           TThemeButton;
   end;
 
+  TThemeOptionsAdvanced = class(TThemeBasic)
+    SelectLoadAnimation:  TThemeSelect;
+    SelectEffectPerfect:  TThemeSelect;
+    SelectEffectGolden:   TThemeSelect;
+    SelectLineBonus:      TThemeSelect;
+    SelectAskbeforeDel:   TThemeSelect;
+    SelectOnSongClick:    TThemeSelectSlide;
+    ButtonExit:           TThemeButton;
+  end;
+
   //ScreenSong Menue
   TThemeSongMenu = class(TThemeBasic)
     Button1: TThemeButton;
@@ -549,7 +560,8 @@ type
     OptionsLyrics:    TThemeOptionsLyrics;
     OptionsThemes:    TThemeOptionsThemes;
     OptionsRecord:    TThemeOptionsRecord;
-    //Menu
+    OptionsAdvanced:  TThemeOptionsAdvanced;
+    //ScreenSong extensions
     SongMenu:         TThemeSongMenu;
     SongJumpto:       TThemeSongJumpTo;
     //Party Screens:
@@ -633,6 +645,7 @@ begin
   OptionsLyrics := TThemeOptionsLyrics.Create;
   OptionsThemes := TThemeOptionsThemes.Create;
   OptionsRecord := TThemeOptionsRecord.Create;
+  OptionsAdvanced := TThemeOptionsAdvanced.Create;
 
   SongMenu := TThemeSongMenu.Create;
   SongJumpto := TThemeSongJumpto.Create;
@@ -939,72 +952,74 @@ begin
       ThemeLoadTexts(Top5.TextName, 'Top5TextName');
       ThemeLoadTexts(Top5.TextScore, 'Top5TextScore');
 
-    // Options
-    ThemeLoadBasic(Options, 'Options');
-
-    ThemeLoadButton(Options.ButtonGame, 'OptionsButtonGame');
-    ThemeLoadButton(Options.ButtonGraphics, 'OptionsButtonGraphics');
-    ThemeLoadButton(Options.ButtonSound, 'OptionsButtonSound');
-    ThemeLoadButton(Options.ButtonLyrics, 'OptionsButtonLyrics');
-    ThemeLoadButton(Options.ButtonThemes, 'OptionsButtonThemes');
-    ThemeLoadButton(Options.ButtonRecord, 'OptionsButtonRecord');
-    ThemeLoadButton(Options.ButtonExit, 'OptionsButtonExit');
-
-    {{$IFDEF TRANSLATE}
-    Options.Description[0] := Language.Translate('SING_OPTIONS_GAME');
-    Options.Description[1] := Language.Translate('SING_OPTIONS_GRAPHICS');
-    Options.Description[2] := Language.Translate('SING_OPTIONS_SOUND');
-    Options.Description[3] := Language.Translate('SING_OPTIONS_LYRICS');
-    Options.Description[4] := Language.Translate('SING_OPTIONS_THEMES');
-    Options.Description[5] := Language.Translate('SING_OPTIONS_RECORD');
-    Options.Description[6] := Language.Translate('SING_OPTIONS_EXIT');
-    {{$ENDIF}
-
-    ThemeLoadText(Options.TextDescription, 'OptionsTextDescription');
-    Options.TextDescription.Text := Options.Description[0];
-
-    // Options Game
-    ThemeLoadBasic(OptionsGame, 'OptionsGame');
-
-    ThemeLoadSelect(OptionsGame.SelectPlayers, 'OptionsGameSelectPlayers');
-    ThemeLoadSelect(OptionsGame.SelectDifficulty, 'OptionsGameSelectDifficulty');
-    ThemeLoadSelectSlide(OptionsGame.SelectLanguage, 'OptionsGameSelectSlideLanguage');
-    ThemeLoadSelect(OptionsGame.SelectTabs, 'OptionsGameSelectTabs');
-    ThemeLoadSelectSlide(OptionsGame.SelectSorting, 'OptionsGameSelectSlideSorting');
-    ThemeLoadSelect(OptionsGame.SelectDebug, 'OptionsGameSelectDebug');
-    ThemeLoadButton(OptionsGame.ButtonExit, 'OptionsGameButtonExit');
-
-    // Options Graphics
-    ThemeLoadBasic(OptionsGraphics, 'OptionsGraphics');
-
-    ThemeLoadSelect(OptionsGraphics.SelectFullscreen, 'OptionsGraphicsSelectFullscreen');
-    ThemeLoadSelectSlide(OptionsGraphics.SelectSlideResolution, 'OptionsGraphicsSelectSlideResolution');
-    ThemeLoadSelect(OptionsGraphics.SelectDepth, 'OptionsGraphicsSelectDepth');
-    ThemeLoadSelect(OptionsGraphics.SelectOscilloscope, 'OptionsGraphicsSelectOscilloscope');
-    ThemeLoadSelect(OptionsGraphics.SelectLineBonus, 'OptionsGraphicsSelectLineBonus');
-    ThemeLoadSelect(OptionsGraphics.SelectMovieSize, 'OptionsGraphicsSelectMovieSize');
-    ThemeLoadButton(OptionsGraphics.ButtonExit, 'OptionsGraphicsButtonExit');
-
-    // Options Sound
-    ThemeLoadBasic(OptionsSound, 'OptionsSound');
-
-    ThemeLoadSelect(OptionsSound.SelectMicBoost, 'OptionsSoundSelectMicBoost');
-    ThemeLoadSelect(OptionsSound.SelectClickAssist, 'OptionsSoundSelectClickAssist');
-    ThemeLoadSelect(OptionsSound.SelectBeatClick, 'OptionsSoundSelectBeatClick');
-    ThemeLoadSelect(OptionsSound.SelectThreshold, 'OptionsSoundSelectThreshold');
-    //ThemeLoadSelect(OptionsSound.SelectTwoPlayerMode, 'OptionsSoundSelectTwoPlayerMode');
-    ThemeLoadButton(OptionsSound.ButtonExit, 'OptionsSoundButtonExit');
-
-    // Options Lyrics
-    ThemeLoadBasic(OptionsLyrics, 'OptionsLyrics');
-
-    ThemeLoadSelect(OptionsLyrics.SelectLyricsFont, 'OptionsLyricsSelectLyricsFont');
-    ThemeLoadSelect(OptionsLyrics.SelectLyricsEffect, 'OptionsLyricsSelectLyricsEffect');
-    ThemeLoadSelect(OptionsLyrics.SelectSolmization, 'OptionsLyricsSelectSolmization');
-    ThemeLoadButton(OptionsLyrics.ButtonExit, 'OptionsLyricsButtonExit');
-
-    // Options Themes
-    ThemeLoadBasic(OptionsThemes, 'OptionsThemes');
+      // Options
+      ThemeLoadBasic(Options, 'Options');
+
+      ThemeLoadButton(Options.ButtonGame, 'OptionsButtonGame');
+      ThemeLoadButton(Options.ButtonGraphics, 'OptionsButtonGraphics');
+      ThemeLoadButton(Options.ButtonSound, 'OptionsButtonSound');
+      ThemeLoadButton(Options.ButtonLyrics, 'OptionsButtonLyrics');
+      ThemeLoadButton(Options.ButtonThemes, 'OptionsButtonThemes');
+      ThemeLoadButton(Options.ButtonRecord, 'OptionsButtonRecord');
+      ThemeLoadButton(Options.ButtonAdvanced, 'OptionsButtonAdvanced');
+      ThemeLoadButton(Options.ButtonExit, 'OptionsButtonExit');
+
+      {{$IFDEF TRANSLATE}
+      Options.Description[0] := Language.Translate('SING_OPTIONS_GAME');
+      Options.Description[1] := Language.Translate('SING_OPTIONS_GRAPHICS');
+      Options.Description[2] := Language.Translate('SING_OPTIONS_SOUND');
+      Options.Description[3] := Language.Translate('SING_OPTIONS_LYRICS');
+      Options.Description[4] := Language.Translate('SING_OPTIONS_THEMES');
+      Options.Description[5] := Language.Translate('SING_OPTIONS_RECORD');
+      Options.Description[6] := Language.Translate('SING_OPTIONS_ADVANCED');
+      Options.Description[7] := Language.Translate('SING_OPTIONS_EXIT');
+      {{$ENDIF}
+
+      ThemeLoadText(Options.TextDescription, 'OptionsTextDescription');
+      Options.TextDescription.Text := Options.Description[0];
+
+      // Options Game
+      ThemeLoadBasic(OptionsGame, 'OptionsGame');
+
+      ThemeLoadSelect(OptionsGame.SelectPlayers, 'OptionsGameSelectPlayers');
+      ThemeLoadSelect(OptionsGame.SelectDifficulty, 'OptionsGameSelectDifficulty');
+      ThemeLoadSelectSlide(OptionsGame.SelectLanguage, 'OptionsGameSelectSlideLanguage');
+      ThemeLoadSelect(OptionsGame.SelectTabs, 'OptionsGameSelectTabs');
+      ThemeLoadSelectSlide(OptionsGame.SelectSorting, 'OptionsGameSelectSlideSorting');
+      ThemeLoadSelect(OptionsGame.SelectDebug, 'OptionsGameSelectDebug');
+      ThemeLoadButton(OptionsGame.ButtonExit, 'OptionsGameButtonExit');
+
+      // Options Graphics
+      ThemeLoadBasic(OptionsGraphics, 'OptionsGraphics');
+
+      ThemeLoadSelect(OptionsGraphics.SelectFullscreen, 'OptionsGraphicsSelectFullscreen');
+      ThemeLoadSelectSlide(OptionsGraphics.SelectSlideResolution, 'OptionsGraphicsSelectSlideResolution');
+      ThemeLoadSelect(OptionsGraphics.SelectDepth, 'OptionsGraphicsSelectDepth');
+      ThemeLoadSelect(OptionsGraphics.SelectOscilloscope, 'OptionsGraphicsSelectOscilloscope');
+      ThemeLoadSelect(OptionsGraphics.SelectLineBonus, 'OptionsGraphicsSelectLineBonus');
+      ThemeLoadSelect(OptionsGraphics.SelectMovieSize, 'OptionsGraphicsSelectMovieSize');
+      ThemeLoadButton(OptionsGraphics.ButtonExit, 'OptionsGraphicsButtonExit');
+
+      // Options Sound
+      ThemeLoadBasic(OptionsSound, 'OptionsSound');
+
+      ThemeLoadSelect(OptionsSound.SelectMicBoost, 'OptionsSoundSelectMicBoost');
+      ThemeLoadSelect(OptionsSound.SelectClickAssist, 'OptionsSoundSelectClickAssist');
+      ThemeLoadSelect(OptionsSound.SelectBeatClick, 'OptionsSoundSelectBeatClick');
+      ThemeLoadSelect(OptionsSound.SelectThreshold, 'OptionsSoundSelectThreshold');
+      //ThemeLoadSelect(OptionsSound.SelectTwoPlayerMode, 'OptionsSoundSelectTwoPlayerMode');
+      ThemeLoadButton(OptionsSound.ButtonExit, 'OptionsSoundButtonExit');
+
+      // Options Lyrics
+      ThemeLoadBasic(OptionsLyrics, 'OptionsLyrics');
+
+      ThemeLoadSelect(OptionsLyrics.SelectLyricsFont, 'OptionsLyricsSelectLyricsFont');
+      ThemeLoadSelect(OptionsLyrics.SelectLyricsEffect, 'OptionsLyricsSelectLyricsEffect');
+      ThemeLoadSelect(OptionsLyrics.SelectSolmization, 'OptionsLyricsSelectSolmization');
+      ThemeLoadButton(OptionsLyrics.ButtonExit, 'OptionsLyricsButtonExit');
+
+      // Options Themes
+      ThemeLoadBasic(OptionsThemes, 'OptionsThemes');
 
       ThemeLoadSelectSlide(OptionsThemes.SelectTheme, 'OptionsThemesSelectTheme');
       ThemeLoadSelectSlide(OptionsThemes.SelectSkin, 'OptionsThemesSelectSkin');
@@ -1020,147 +1035,158 @@ begin
       ThemeLoadSelectSlide(OptionsRecord.SelectSlideChannelR, 'OptionsRecordSelectSlideChannelR');
       ThemeLoadButton(OptionsRecord.ButtonExit, 'OptionsRecordButtonExit');
 
-   //Song Menu
-    ThemeLoadBasic (SongMenu, 'SongMenu');
-    ThemeLoadButton(SongMenu.Button1, 'SongMenuButton1');
-    ThemeLoadButton(SongMenu.Button2, 'SongMenuButton2');
-    ThemeLoadButton(SongMenu.Button3, 'SongMenuButton3');
-    ThemeLoadButton(SongMenu.Button4, 'SongMenuButton4');
-    ThemeLoadSelectSlide(SongMenu.SelectSlide3, 'SongMenuSelectSlide3');
-
-    ThemeLoadText(SongMenu.TextMenu, 'SongMenuTextMenu');
-
-    //Song Jumpto
-    ThemeLoadBasic (SongJumpto, 'SongJumpto');
-    ThemeLoadButton(SongJumpto.ButtonSearchText, 'SongJumptoButtonSearchText');
-    ThemeLoadSelectSlide(SongJumpto.SelectSlideType, 'SongJumptoSelectSlideType');
-    ThemeLoadText(SongJumpto.TextFound, 'SongJumptoTextFound');
-    //Translations
-    SongJumpto.IType[0] := Language.Translate('SONG_JUMPTO_TYPE1');
-    SongJumpto.IType[1] := Language.Translate('SONG_JUMPTO_TYPE2');
-    SongJumpto.IType[2] := Language.Translate('SONG_JUMPTO_TYPE3');
-    SongJumpto.SongsFound := Language.Translate('SONG_JUMPTO_SONGSFOUND');
-    SongJumpto.NoSongsFound := Language.Translate('SONG_JUMPTO_NOSONGSFOUND');
-    SongJumpto.CatText := Language.Translate('SONG_JUMPTO_CATTEXT');
+      //Options Advanced
+      ThemeLoadBasic(OptionsAdvanced, 'OptionsAdvanced');
+
+      ThemeLoadSelect       (OptionsAdvanced.SelectLoadAnimation, 'OptionsAdvancedSelectLoadAnimation');
+      ThemeLoadSelect       (OptionsAdvanced.SelectEffectPerfect, 'OptionsAdvancedSelectEffectPerfect');
+      ThemeLoadSelect       (OptionsAdvanced.SelectEffectGolden, 'OptionsAdvancedSelectEffectGolden');
+      ThemeLoadSelect       (OptionsAdvanced.SelectLineBonus, 'OptionsAdvancedSelectLineBonus');
+      ThemeLoadSelectSlide  (OptionsAdvanced.SelectOnSongClick, 'OptionsAdvancedSelectSlideOnSongClick');
+      ThemeLoadSelect       (OptionsAdvanced.SelectAskbeforeDel, 'OptionsAdvancedSelectAskbeforeDel');
+      ThemeLoadButton       (OptionsAdvanced.ButtonExit, 'OptionsAdvancedButtonExit');
+
+      //Song Menu
+      ThemeLoadBasic (SongMenu, 'SongMenu');
+      ThemeLoadButton(SongMenu.Button1, 'SongMenuButton1');
+      ThemeLoadButton(SongMenu.Button2, 'SongMenuButton2');
+      ThemeLoadButton(SongMenu.Button3, 'SongMenuButton3');
+      ThemeLoadButton(SongMenu.Button4, 'SongMenuButton4');
+      ThemeLoadSelectSlide(SongMenu.SelectSlide3, 'SongMenuSelectSlide3');
+
+      ThemeLoadText(SongMenu.TextMenu, 'SongMenuTextMenu');
+
+      //Song Jumpto
+      ThemeLoadBasic (SongJumpto, 'SongJumpto');
+      ThemeLoadButton(SongJumpto.ButtonSearchText, 'SongJumptoButtonSearchText');
+      ThemeLoadSelectSlide(SongJumpto.SelectSlideType, 'SongJumptoSelectSlideType');
+      ThemeLoadText(SongJumpto.TextFound, 'SongJumptoTextFound');
+      //Translations
+      SongJumpto.IType[0] := Language.Translate('SONG_JUMPTO_TYPE1');
+      SongJumpto.IType[1] := Language.Translate('SONG_JUMPTO_TYPE2');
+      SongJumpto.IType[2] := Language.Translate('SONG_JUMPTO_TYPE3');
+      SongJumpto.SongsFound := Language.Translate('SONG_JUMPTO_SONGSFOUND');
+      SongJumpto.NoSongsFound := Language.Translate('SONG_JUMPTO_NOSONGSFOUND');
+      SongJumpto.CatText := Language.Translate('SONG_JUMPTO_CATTEXT');
+
+      //Party Screens:
+      //Party NewRound
+      ThemeLoadBasic(PartyNewRound, 'PartyNewRound');
+
+      ThemeLoadText (PartyNewRound.TextRound1, 'PartyNewRoundTextRound1');
+      ThemeLoadText (PartyNewRound.TextRound2, 'PartyNewRoundTextRound2');
+      ThemeLoadText (PartyNewRound.TextRound3, 'PartyNewRoundTextRound3');
+      ThemeLoadText (PartyNewRound.TextRound4, 'PartyNewRoundTextRound4');
+      ThemeLoadText (PartyNewRound.TextRound5, 'PartyNewRoundTextRound5');
+      ThemeLoadText (PartyNewRound.TextRound6, 'PartyNewRoundTextRound6');
+      ThemeLoadText (PartyNewRound.TextRound7, 'PartyNewRoundTextRound7');
+      ThemeLoadText (PartyNewRound.TextWinner1, 'PartyNewRoundTextWinner1');
+      ThemeLoadText (PartyNewRound.TextWinner2, 'PartyNewRoundTextWinner2');
+      ThemeLoadText (PartyNewRound.TextWinner3, 'PartyNewRoundTextWinner3');
+      ThemeLoadText (PartyNewRound.TextWinner4, 'PartyNewRoundTextWinner4');
+      ThemeLoadText (PartyNewRound.TextWinner5, 'PartyNewRoundTextWinner5');
+      ThemeLoadText (PartyNewRound.TextWinner6, 'PartyNewRoundTextWinner6');
+      ThemeLoadText (PartyNewRound.TextWinner7, 'PartyNewRoundTextWinner7');
+      ThemeLoadText (PartyNewRound.TextNextRound, 'PartyNewRoundTextNextRound');
+      ThemeLoadText (PartyNewRound.TextNextRoundNo, 'PartyNewRoundTextNextRoundNo');
+      ThemeLoadText (PartyNewRound.TextNextPlayer1, 'PartyNewRoundTextNextPlayer1');
+      ThemeLoadText (PartyNewRound.TextNextPlayer2, 'PartyNewRoundTextNextPlayer2');
+      ThemeLoadText (PartyNewRound.TextNextPlayer3, 'PartyNewRoundTextNextPlayer3');
+
+      ThemeLoadStatic (PartyNewRound.StaticRound1, 'PartyNewRoundStaticRound1');
+      ThemeLoadStatic (PartyNewRound.StaticRound2, 'PartyNewRoundStaticRound2');
+      ThemeLoadStatic (PartyNewRound.StaticRound3, 'PartyNewRoundStaticRound3');
+      ThemeLoadStatic (PartyNewRound.StaticRound4, 'PartyNewRoundStaticRound4');
+      ThemeLoadStatic (PartyNewRound.StaticRound5, 'PartyNewRoundStaticRound5');
+      ThemeLoadStatic (PartyNewRound.StaticRound6, 'PartyNewRoundStaticRound6');
+      ThemeLoadStatic (PartyNewRound.StaticRound7, 'PartyNewRoundStaticRound7');
+
+      ThemeLoadText (PartyNewRound.TextScoreTeam1, 'PartyNewRoundTextScoreTeam1');
+      ThemeLoadText (PartyNewRound.TextScoreTeam2, 'PartyNewRoundTextScoreTeam2');
+      ThemeLoadText (PartyNewRound.TextScoreTeam3, 'PartyNewRoundTextScoreTeam3');
+      ThemeLoadText (PartyNewRound.TextNameTeam1, 'PartyNewRoundTextNameTeam1');
+      ThemeLoadText (PartyNewRound.TextNameTeam2, 'PartyNewRoundTextNameTeam2');
+      ThemeLoadText (PartyNewRound.TextNameTeam3, 'PartyNewRoundTextNameTeam3');
+
+      ThemeLoadStatic (PartyNewRound.StaticTeam1, 'PartyNewRoundStaticTeam1');
+      ThemeLoadStatic (PartyNewRound.StaticTeam2, 'PartyNewRoundStaticTeam2');
+      ThemeLoadStatic (PartyNewRound.StaticTeam3, 'PartyNewRoundStaticTeam3');
+
+      ThemeLoadButton (PartyNewRound.ButtonNext, 'PartyNewRoundButtonNext');
+
+      //Party Score
+      ThemeLoadBasic(PartyScore, 'PartyScore');
+
+      ThemeLoadText (PartyScore.TextScoreTeam1, 'PartyScoreTextScoreTeam1');
+      ThemeLoadText (PartyScore.TextScoreTeam2, 'PartyScoreTextScoreTeam2');
+      ThemeLoadText (PartyScore.TextScoreTeam3, 'PartyScoreTextScoreTeam3');
+      ThemeLoadText (PartyScore.TextNameTeam1, 'PartyScoreTextNameTeam1');
+      ThemeLoadText (PartyScore.TextNameTeam2, 'PartyScoreTextNameTeam2');
+      ThemeLoadText (PartyScore.TextNameTeam3, 'PartyScoreTextNameTeam3');
+
+      ThemeLoadStatic (PartyScore.StaticTeam1, 'PartyScoreStaticTeam1');
+      ThemeLoadStatic (PartyScore.StaticTeam2, 'PartyScoreStaticTeam2');
+      ThemeLoadStatic (PartyScore.StaticTeam3, 'PartyScoreStaticTeam3');
+
+      ThemeLoadText (PartyScore.TextWinner, 'PartyScoreTextWinner');
+
+      //Party Win
+      ThemeLoadBasic(PartyWin, 'PartyWin');
+
+      ThemeLoadText (PartyWin.TextScoreTeam1, 'PartyWinTextScoreTeam1');
+      ThemeLoadText (PartyWin.TextScoreTeam2, 'PartyWinTextScoreTeam2');
+      ThemeLoadText (PartyWin.TextScoreTeam3, 'PartyWinTextScoreTeam3');
+      ThemeLoadText (PartyWin.TextNameTeam1, 'PartyWinTextNameTeam1');
+      ThemeLoadText (PartyWin.TextNameTeam2, 'PartyWinTextNameTeam2');
+      ThemeLoadText (PartyWin.TextNameTeam3, 'PartyWinTextNameTeam3');
+
+      ThemeLoadStatic (PartyWin.StaticTeam1, 'PartyWinStaticTeam1');
+      ThemeLoadStatic (PartyWin.StaticTeam2, 'PartyWinStaticTeam2');
+      ThemeLoadStatic (PartyWin.StaticTeam3, 'PartyWinStaticTeam3');
+
+      ThemeLoadText (PartyWin.TextWinner, 'PartyWinTextWinner');
+
+      //Party Options
+      ThemeLoadBasic(PartyOptions, 'PartyOptions');
+      ThemeLoadSelectSlide(PartyOptions.SelectLevel, 'PartyOptionsSelectLevel');
+      ThemeLoadSelectSlide(PartyOptions.SelectPlayList, 'PartyOptionsSelectPlayList');
+      ThemeLoadSelectSlide(PartyOptions.SelectPlayList2, 'PartyOptionsSelectPlayList2');
+      ThemeLoadSelectSlide(PartyOptions.SelectRounds, 'PartyOptionsSelectRounds');
+      ThemeLoadSelectSlide(PartyOptions.SelectTeams, 'PartyOptionsSelectTeams');
+      ThemeLoadSelectSlide(PartyOptions.SelectPlayers1, 'PartyOptionsSelectPlayers1');
+      ThemeLoadSelectSlide(PartyOptions.SelectPlayers2, 'PartyOptionsSelectPlayers2');
+      ThemeLoadSelectSlide(PartyOptions.SelectPlayers3, 'PartyOptionsSelectPlayers3');
+
+      {ThemeLoadButton (ButtonNext, 'ButtonNext');
+      ThemeLoadButton (ButtonPrev, 'ButtonPrev');}
+
+      //Party Player
+      ThemeLoadBasic(PartyPlayer, 'PartyPlayer');
+      ThemeLoadButton(PartyPlayer.Team1Name, 'PartyPlayerTeam1Name');
+      ThemeLoadButton(PartyPlayer.Player1Name, 'PartyPlayerPlayer1Name');
+      ThemeLoadButton(PartyPlayer.Player2Name, 'PartyPlayerPlayer2Name');
+      ThemeLoadButton(PartyPlayer.Player3Name, 'PartyPlayerPlayer3Name');
+      ThemeLoadButton(PartyPlayer.Player4Name, 'PartyPlayerPlayer4Name');
+
+      ThemeLoadButton(PartyPlayer.Team2Name, 'PartyPlayerTeam2Name');
+      ThemeLoadButton(PartyPlayer.Player5Name, 'PartyPlayerPlayer5Name');
+      ThemeLoadButton(PartyPlayer.Player6Name, 'PartyPlayerPlayer6Name');
+      ThemeLoadButton(PartyPlayer.Player7Name, 'PartyPlayerPlayer7Name');
+      ThemeLoadButton(PartyPlayer.Player8Name, 'PartyPlayerPlayer8Name');
+
+      ThemeLoadButton(PartyPlayer.Team3Name, 'PartyPlayerTeam3Name');
+      ThemeLoadButton(PartyPlayer.Player9Name, 'PartyPlayerPlayer9Name');
+      ThemeLoadButton(PartyPlayer.Player10Name, 'PartyPlayerPlayer10Name');
+      ThemeLoadButton(PartyPlayer.Player11Name, 'PartyPlayerPlayer11Name');
+      ThemeLoadButton(PartyPlayer.Player12Name, 'PartyPlayerPlayer12Name');
+
+      {ThemeLoadButton(ButtonNext, 'PartyPlayerButtonNext');
+      ThemeLoadButton(ButtonPrev, 'PartyPlayerButtonPrev');}
+
+      //Playlist Translations
+      Playlist.CatText := Language.Translate('PLAYLIST_CATTEXT')
+    end;
 
-    //Party Screens:
-    //Party NewRound
-    ThemeLoadBasic(PartyNewRound, 'PartyNewRound');
-
-    ThemeLoadText (PartyNewRound.TextRound1, 'PartyNewRoundTextRound1');
-    ThemeLoadText (PartyNewRound.TextRound2, 'PartyNewRoundTextRound2');
-    ThemeLoadText (PartyNewRound.TextRound3, 'PartyNewRoundTextRound3');
-    ThemeLoadText (PartyNewRound.TextRound4, 'PartyNewRoundTextRound4');
-    ThemeLoadText (PartyNewRound.TextRound5, 'PartyNewRoundTextRound5');
-    ThemeLoadText (PartyNewRound.TextRound6, 'PartyNewRoundTextRound6');
-    ThemeLoadText (PartyNewRound.TextRound7, 'PartyNewRoundTextRound7');
-    ThemeLoadText (PartyNewRound.TextWinner1, 'PartyNewRoundTextWinner1');
-    ThemeLoadText (PartyNewRound.TextWinner2, 'PartyNewRoundTextWinner2');
-    ThemeLoadText (PartyNewRound.TextWinner3, 'PartyNewRoundTextWinner3');
-    ThemeLoadText (PartyNewRound.TextWinner4, 'PartyNewRoundTextWinner4');
-    ThemeLoadText (PartyNewRound.TextWinner5, 'PartyNewRoundTextWinner5');
-    ThemeLoadText (PartyNewRound.TextWinner6, 'PartyNewRoundTextWinner6');
-    ThemeLoadText (PartyNewRound.TextWinner7, 'PartyNewRoundTextWinner7');
-    ThemeLoadText (PartyNewRound.TextNextRound, 'PartyNewRoundTextNextRound');
-    ThemeLoadText (PartyNewRound.TextNextRoundNo, 'PartyNewRoundTextNextRoundNo');
-    ThemeLoadText (PartyNewRound.TextNextPlayer1, 'PartyNewRoundTextNextPlayer1');
-    ThemeLoadText (PartyNewRound.TextNextPlayer2, 'PartyNewRoundTextNextPlayer2');
-    ThemeLoadText (PartyNewRound.TextNextPlayer3, 'PartyNewRoundTextNextPlayer3');
-
-    ThemeLoadStatic (PartyNewRound.StaticRound1, 'PartyNewRoundStaticRound1');
-    ThemeLoadStatic (PartyNewRound.StaticRound2, 'PartyNewRoundStaticRound2');
-    ThemeLoadStatic (PartyNewRound.StaticRound3, 'PartyNewRoundStaticRound3');
-    ThemeLoadStatic (PartyNewRound.StaticRound4, 'PartyNewRoundStaticRound4');
-    ThemeLoadStatic (PartyNewRound.StaticRound5, 'PartyNewRoundStaticRound5');
-    ThemeLoadStatic (PartyNewRound.StaticRound6, 'PartyNewRoundStaticRound6');
-    ThemeLoadStatic (PartyNewRound.StaticRound7, 'PartyNewRoundStaticRound7');
-
-    ThemeLoadText (PartyNewRound.TextScoreTeam1, 'PartyNewRoundTextScoreTeam1');
-    ThemeLoadText (PartyNewRound.TextScoreTeam2, 'PartyNewRoundTextScoreTeam2');
-    ThemeLoadText (PartyNewRound.TextScoreTeam3, 'PartyNewRoundTextScoreTeam3');
-    ThemeLoadText (PartyNewRound.TextNameTeam1, 'PartyNewRoundTextNameTeam1');
-    ThemeLoadText (PartyNewRound.TextNameTeam2, 'PartyNewRoundTextNameTeam2');
-    ThemeLoadText (PartyNewRound.TextNameTeam3, 'PartyNewRoundTextNameTeam3');
-
-    ThemeLoadStatic (PartyNewRound.StaticTeam1, 'PartyNewRoundStaticTeam1');
-    ThemeLoadStatic (PartyNewRound.StaticTeam2, 'PartyNewRoundStaticTeam2');
-    ThemeLoadStatic (PartyNewRound.StaticTeam3, 'PartyNewRoundStaticTeam3');
-
-    ThemeLoadButton (PartyNewRound.ButtonNext, 'PartyNewRoundButtonNext');
-
-    //Party Score
-    ThemeLoadBasic(PartyScore, 'PartyScore');
-
-    ThemeLoadText (PartyScore.TextScoreTeam1, 'PartyScoreTextScoreTeam1');
-    ThemeLoadText (PartyScore.TextScoreTeam2, 'PartyScoreTextScoreTeam2');
-    ThemeLoadText (PartyScore.TextScoreTeam3, 'PartyScoreTextScoreTeam3');
-    ThemeLoadText (PartyScore.TextNameTeam1, 'PartyScoreTextNameTeam1');
-    ThemeLoadText (PartyScore.TextNameTeam2, 'PartyScoreTextNameTeam2');
-    ThemeLoadText (PartyScore.TextNameTeam3, 'PartyScoreTextNameTeam3');
-
-    ThemeLoadStatic (PartyScore.StaticTeam1, 'PartyScoreStaticTeam1');
-    ThemeLoadStatic (PartyScore.StaticTeam2, 'PartyScoreStaticTeam2');
-    ThemeLoadStatic (PartyScore.StaticTeam3, 'PartyScoreStaticTeam3');
-
-    ThemeLoadText (PartyScore.TextWinner, 'PartyScoreTextWinner');
-
-    //Party Win
-    ThemeLoadBasic(PartyWin, 'PartyWin');
-
-    ThemeLoadText (PartyWin.TextScoreTeam1, 'PartyWinTextScoreTeam1');
-    ThemeLoadText (PartyWin.TextScoreTeam2, 'PartyWinTextScoreTeam2');
-    ThemeLoadText (PartyWin.TextScoreTeam3, 'PartyWinTextScoreTeam3');
-    ThemeLoadText (PartyWin.TextNameTeam1, 'PartyWinTextNameTeam1');
-    ThemeLoadText (PartyWin.TextNameTeam2, 'PartyWinTextNameTeam2');
-    ThemeLoadText (PartyWin.TextNameTeam3, 'PartyWinTextNameTeam3');
-
-    ThemeLoadStatic (PartyWin.StaticTeam1, 'PartyWinStaticTeam1');
-    ThemeLoadStatic (PartyWin.StaticTeam2, 'PartyWinStaticTeam2');
-    ThemeLoadStatic (PartyWin.StaticTeam3, 'PartyWinStaticTeam3');
-
-    ThemeLoadText (PartyWin.TextWinner, 'PartyWinTextWinner');
-
-    //Party Options
-    ThemeLoadBasic(PartyOptions, 'PartyOptions');
-    ThemeLoadSelectSlide(PartyOptions.SelectLevel, 'PartyOptionsSelectLevel');
-    ThemeLoadSelectSlide(PartyOptions.SelectPlayList, 'PartyOptionsSelectPlayList');
-    ThemeLoadSelectSlide(PartyOptions.SelectPlayList2, 'PartyOptionsSelectPlayList2');
-    ThemeLoadSelectSlide(PartyOptions.SelectRounds, 'PartyOptionsSelectRounds');
-    ThemeLoadSelectSlide(PartyOptions.SelectTeams, 'PartyOptionsSelectTeams');
-    ThemeLoadSelectSlide(PartyOptions.SelectPlayers1, 'PartyOptionsSelectPlayers1');
-    ThemeLoadSelectSlide(PartyOptions.SelectPlayers2, 'PartyOptionsSelectPlayers2');
-    ThemeLoadSelectSlide(PartyOptions.SelectPlayers3, 'PartyOptionsSelectPlayers3');
-
-    {ThemeLoadButton (ButtonNext, 'ButtonNext');
-    ThemeLoadButton (ButtonPrev, 'ButtonPrev');}
-
-    //Party Player
-    ThemeLoadBasic(PartyPlayer, 'PartyPlayer');
-    ThemeLoadButton(PartyPlayer.Team1Name, 'PartyPlayerTeam1Name');
-    ThemeLoadButton(PartyPlayer.Player1Name, 'PartyPlayerPlayer1Name');
-    ThemeLoadButton(PartyPlayer.Player2Name, 'PartyPlayerPlayer2Name');
-    ThemeLoadButton(PartyPlayer.Player3Name, 'PartyPlayerPlayer3Name');
-    ThemeLoadButton(PartyPlayer.Player4Name, 'PartyPlayerPlayer4Name');
-
-    ThemeLoadButton(PartyPlayer.Team2Name, 'PartyPlayerTeam2Name');
-    ThemeLoadButton(PartyPlayer.Player5Name, 'PartyPlayerPlayer5Name');
-    ThemeLoadButton(PartyPlayer.Player6Name, 'PartyPlayerPlayer6Name');
-    ThemeLoadButton(PartyPlayer.Player7Name, 'PartyPlayerPlayer7Name');
-    ThemeLoadButton(PartyPlayer.Player8Name, 'PartyPlayerPlayer8Name');
-
-    ThemeLoadButton(PartyPlayer.Team3Name, 'PartyPlayerTeam3Name');
-    ThemeLoadButton(PartyPlayer.Player9Name, 'PartyPlayerPlayer9Name');
-    ThemeLoadButton(PartyPlayer.Player10Name, 'PartyPlayerPlayer10Name');
-    ThemeLoadButton(PartyPlayer.Player11Name, 'PartyPlayerPlayer11Name');
-    ThemeLoadButton(PartyPlayer.Player12Name, 'PartyPlayerPlayer12Name');
-
-    {ThemeLoadButton(ButtonNext, 'PartyPlayerButtonNext');
-    ThemeLoadButton(ButtonPrev, 'PartyPlayerButtonPrev');}
-
-    //Playlist Translations
-    Playlist.CatText := Language.Translate('PLAYLIST_CATTEXT')
-  end;
-      
     ThemeIni.Free;
   end;
 end;
diff --git a/Game/Code/Screens/UScreenEditSub.pas b/Game/Code/Screens/UScreenEditSub.pas
index 52cd0b26..6094edd1 100644
--- a/Game/Code/Screens/UScreenEditSub.pas
+++ b/Game/Code/Screens/UScreenEditSub.pas
@@ -1096,6 +1096,8 @@ begin
     MidiOut.ProductName := 'Microsoft GS Wavetable SW Synth'; // for my kxproject without midi table
   MidiOut.Open;
 
+  //MidiOut.SetVolume(65535, 65535);
+
 
 
   CzyscNuty;
@@ -1113,7 +1115,7 @@ begin
 
     Music.Open(Path + AktSong.Mp3);
     //Set Down Music Volume for Better hearability of Midi Sounds
-    Music.SetVolume(40);
+    //Music.SetVolume(40);
     
     Lyric.Clear;
     Lyric.X := 400;
diff --git a/Game/Code/Screens/UScreenOptions.pas b/Game/Code/Screens/UScreenOptions.pas
index f24b29c1..2a8d0d9a 100644
--- a/Game/Code/Screens/UScreenOptions.pas
+++ b/Game/Code/Screens/UScreenOptions.pas
@@ -70,6 +70,11 @@ begin
           end;
 
           if SelInteraction = 6 then begin
+            Music.PlayStart;
+            FadeTo(@ScreenOptionsAdvanced);
+          end;
+
+          if SelInteraction = 7 then begin
             Ini.Save;
             Music.PlayBack;
             FadeTo(@ScreenMain);
@@ -182,10 +187,14 @@ begin
   if (Length(Button[5].Text)=0) then
     AddButtonText(14, 20, Theme.Options.Description[5]);
 
-  AddButton(Theme.Options.ButtonExit);
+  AddButton(Theme.Options.ButtonAdvanced);
   if (Length(Button[6].Text)=0) then
     AddButtonText(14, 20, Theme.Options.Description[6]);
 
+  AddButton(Theme.Options.ButtonExit);
+  if (Length(Button[7].Text)=0) then
+    AddButtonText(14, 20, Theme.Options.Description[7]);
+
   for I := 0 to High(Theme.Options.Static) do
     AddStatic(Theme.Options.Static[I]);
 
diff --git a/Game/Code/Screens/UScreenOptionsAdvanced.pas b/Game/Code/Screens/UScreenOptionsAdvanced.pas
new file mode 100644
index 00000000..bfbd54a7
--- /dev/null
+++ b/Game/Code/Screens/UScreenOptionsAdvanced.pas
@@ -0,0 +1,95 @@
+unit UScreenOptionsAdvanced;
+
+interface
+
+uses
+  UMenu, SDL, UDisplay, UMusic, UPliki, UIni, UThemes;
+
+type
+  TScreenOptionsAdvanced = class(TMenu)
+    public
+      constructor Create(Back: String); override;
+      function ParseInput(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): Boolean; override;
+      procedure onShow; override;
+  end;
+
+implementation
+
+uses UGraphic;
+
+function TScreenOptionsAdvanced.ParseInput(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): Boolean;
+begin
+  Result := true;
+  If (PressedDown) Then
+  begin // Key Down
+    case PressedKey of
+      SDLK_ESCAPE :
+        begin
+          Ini.Save;
+          Music.PlayBack;
+          FadeTo(@ScreenOptions);
+        end;
+      SDLK_RETURN:
+        begin
+          if SelInteraction = 6 then begin
+            Ini.Save;
+            Music.PlayBack;
+            FadeTo(@ScreenOptions);
+          end;
+        end;
+      SDLK_DOWN:
+        InteractNext;
+      SDLK_UP :
+        InteractPrev;
+      SDLK_RIGHT:
+        begin
+          if (SelInteraction >= 0) and (SelInteraction <= 5) then begin
+            Music.PlayOption;
+            InteractInc;
+          end;
+        end;
+      SDLK_LEFT:
+        begin
+          if (SelInteraction >= 0) and (SelInteraction <= 5) then begin
+            Music.PlayOption;
+            InteractDec;
+          end;
+        end;
+    end;
+  end;
+end;
+
+constructor TScreenOptionsAdvanced.Create(Back: String);
+var
+  I:      integer;
+begin
+  inherited Create(Back);
+
+  AddBackground(Theme.OptionsAdvanced.Background.Tex);
+
+  for I := 0 to High(Theme.OptionsAdvanced.Static) do
+    AddStatic(Theme.OptionsAdvanced.Static[I]);
+
+  for I := 0 to High(Theme.OptionsAdvanced.Text) do
+    AddText(Theme.OptionsAdvanced.Text[I]);
+
+  AddSelect(Theme.OptionsAdvanced.SelectLoadAnimation, Ini.LoadAnimation, ILoadAnimation);
+  AddSelect(Theme.OptionsAdvanced.SelectEffectPerfect, Ini.EffectPerfect, IEffectPerfect);
+  AddSelect(Theme.OptionsAdvanced.SelectEffectGolden, Ini.EffectGolden, IEffectGolden);
+  AddSelect(Theme.OptionsAdvanced.SelectLineBonus, Ini.LineBonus, ILineBonus);
+  AddSelectSlide(Theme.OptionsAdvanced.SelectOnSongClick, Ini.OnSongClick, IOnSongClick);
+  AddSelect(Theme.OptionsAdvanced.SelectAskbeforeDel, Ini.AskbeforeDel, IAskbeforeDel);
+
+  AddButton(Theme.OptionsAdvanced.ButtonExit);
+  if (Length(Button[0].Text)=0) then
+    AddButtonText(14, 20, Theme.Options.Description[6]);
+
+  Interaction := 0;
+end;
+
+procedure TScreenOptionsAdvanced.onShow;
+begin
+  Interaction := 0;
+end;
+
+end.
diff --git a/Game/Code/Screens/UScreenOptionsGraphics.pas b/Game/Code/Screens/UScreenOptionsGraphics.pas
index 62648e0c..d39a10c8 100644
--- a/Game/Code/Screens/UScreenOptionsGraphics.pas
+++ b/Game/Code/Screens/UScreenOptionsGraphics.pas
@@ -84,7 +84,6 @@ begin
   AddSelect(Theme.OptionsGraphics.SelectFullscreen, Ini.Fullscreen, IFullscreen);
   AddSelect(Theme.OptionsGraphics.SelectDepth, Ini.Depth, IDepth);
   AddSelect(Theme.OptionsGraphics.SelectOscilloscope, Ini.Oscilloscope, IOscilloscope);
-  AddSelect(Theme.OptionsGraphics.SelectLineBonus, Ini.LineBonus, ILineBonus);
   AddSelect(Theme.OptionsGraphics.SelectMovieSize, Ini.MovieSize, IMovieSize);
 
 
diff --git a/Game/Code/Screens/UScreenSing.pas b/Game/Code/Screens/UScreenSing.pas
index ee4bedc8..d684dc3c 100644
--- a/Game/Code/Screens/UScreenSing.pas
+++ b/Game/Code/Screens/UScreenSing.pas
@@ -1089,18 +1089,12 @@ begin
 
       //Generate Steps 0 to 8
       A := Floor(A / (B * Czesci[0].Czesc[S].TotalNotes / Czesci[0].Wartosc) * 8);
+
+      //Generate Text
       if A >= 8 then
-        Player[I].LineBonus_Text := Language.Translate('LINEBONUS_PERFECT')
-      else if (A = 6) or (A = 7) then
-        Player[I].LineBonus_Text := Language.Translate('LINEBONUS_BETTER')
-      else if A = 5 then
-        Player[I].LineBonus_Text := Language.Translate('LINEBONUS_GOOD')
-      else if (A = 3) or (A = 4) then
-        Player[I].LineBonus_Text := Language.Translate('LINEBONUS_NORMAL')
-      else if A = 2 then
-        Player[I].LineBonus_Text := Language.Translate('LINEBONUS_BAD')
+        Player[I].LineBonus_Text := Theme.Sing.LineBonusText[8]
       else
-        Player[I].LineBonus_Text := Language.Translate('LINEBONUS_WORST');
+        Player[I].LineBonus_Text := Theme.Sing.LineBonusText[Floor(A)];
 
       //PhrasenBonus give Points
       Player[I].ScoreLine := Player[I].ScoreLine + (1000 / (Length(Czesci[0].Czesc) - NumEmptySentences) * A / 8);
diff --git a/Game/Code/Screens/UScreenSongMenu.pas b/Game/Code/Screens/UScreenSongMenu.pas
index 0b4a9d91..3ccba228 100644
--- a/Game/Code/Screens/UScreenSongMenu.pas
+++ b/Game/Code/Screens/UScreenSongMenu.pas
@@ -250,7 +250,7 @@ begin
           Button[3].Visible := False;
           SelectsS[0].Visible := False;
           Button[2].Visible := True;
-          Button[3].Text[0].Text := Language.Translate('SONG_MENU_PLAYLIST_NOEXISTING');
+          Button[2].Text[0].Text := Language.Translate('SONG_MENU_PLAYLIST_NOEXISTING');
         end;
       end;
 
@@ -311,7 +311,7 @@ begin
           Button[3].Visible := False;
           SelectsS[0].Visible := False;
           Button[2].Visible := True;
-          Button[3].Text[0].Text := Language.Translate('SONG_MENU_PLAYLIST_NOEXISTING');
+          Button[2].Text[0].Text := Language.Translate('SONG_MENU_PLAYLIST_NOEXISTING');
           Interaction := 2;
         end;
       end;
diff --git a/Game/Code/UltraStar.dpr b/Game/Code/UltraStar.dpr
index 66638832..f36f9a26 100644
--- a/Game/Code/UltraStar.dpr
+++ b/Game/Code/UltraStar.dpr
@@ -6,6 +6,9 @@ program UltraStar;
 {$R 'UltraStar.res' 'UltraStar.rc'}
 
 uses
+  //------------------------------
+  //Includes - Menu System
+  //------------------------------
   UDisplay in 'Menu\UDisplay.pas',
   UMenu in 'Menu\UMenu.pas',
   UMenuStatic in 'Menu\UMenuStatic.pas',
@@ -15,6 +18,10 @@ uses
   UMenuSelect in 'Menu\UMenuSelect.pas',
   UMenuSelectSlide in 'Menu\UMenuSelectSlide.pas',
   UDrawTexture in 'Menu\UDrawTexture.pas',
+
+  //------------------------------
+  //Includes - Classes
+  //------------------------------
   UGraphic in 'Classes\UGraphic.pas',
   UTexture in 'Classes\UTexture.pas',
   UMusic in 'Classes\UMusic.pas',
@@ -42,6 +49,11 @@ uses
   UGraphicClasses in 'Classes\UGraphicClasses.pas',
   UDLLManager in 'Classes\UDLLManager.pas',
   UParty in 'Classes\UParty.pas',
+  UPlaylist in 'Classes\UPlaylist.pas',
+
+  //------------------------------
+  //Includes - Screens
+  //------------------------------
   UScreenLoading in 'Screens\UScreenLoading.pas',
   UScreenWelcome in 'Screens\UScreenWelcome.pas',
   UScreenMain in 'Screens\UScreenMain.pas',
@@ -57,6 +69,7 @@ uses
   UScreenOptionsLyrics in 'Screens\UScreenOptionsLyrics.pas',
   UScreenOptionsThemes in 'Screens\UScreenOptionsThemes.pas',
   UScreenOptionsRecord in 'Screens\UScreenOptionsRecord.pas',
+  UScreenOptionsAdvanced in 'Screens\UScreenOptionsAdvanced.pas',
   UScreenEditSub in 'Screens\UScreenEditSub.pas',
   UScreenEdit in 'Screens\UScreenEdit.pas',
   UScreenEditConvert in 'Screens\UScreenEditConvert.pas',
@@ -65,17 +78,29 @@ uses
   UScreenTop5 in 'Screens\UScreenTop5.pas',
   UScreenSongMenu in 'Screens\UScreenSongMenu.pas',
   UScreenSongJumpto in 'Screens\UScreenSongJumpto.pas',
+
+  //------------------------------
+  //Includes - Screens PartyMode
+  //------------------------------
   UScreenSingModi in 'Screens\UScreenSingModi.pas',
   UScreenPartyNewRound in 'Screens\UScreenPartyNewRound.pas',
   UScreenPartyScore in 'Screens\UScreenPartyScore.pas',
   UScreenPartyPlayer in 'Screens\UScreenPartyPlayer.pas',
   UScreenPartyOptions in 'Screens\UScreenPartyOptions.pas',
   UScreenPartyWin in 'Screens\UScreenPartyWin.pas',
+
+  //------------------------------
+  //Includes - Modi SDK
+  //------------------------------
   ModiSDK in '..\..\Modis\SDK\ModiSDK.pas',
+
+  //------------------------------
+  //Includes - Delphi
+  //------------------------------
   Windows,
   SDL,
-  SysUtils,
-  UPlaylist in 'Classes\UPlaylist.pas';
+  SysUtils;
+
 
 const
   Version = 'UltraStar Deluxe V 0.90 Beta';
-- 
cgit v1.2.3