aboutsummaryrefslogtreecommitdiffstats
path: root/Game/Code/Screens/UScreenPartyOptionsM2.pas
diff options
context:
space:
mode:
Diffstat (limited to 'Game/Code/Screens/UScreenPartyOptionsM2.pas')
-rw-r--r--Game/Code/Screens/UScreenPartyOptionsM2.pas819
1 files changed, 819 insertions, 0 deletions
diff --git a/Game/Code/Screens/UScreenPartyOptionsM2.pas b/Game/Code/Screens/UScreenPartyOptionsM2.pas
new file mode 100644
index 00000000..186983a1
--- /dev/null
+++ b/Game/Code/Screens/UScreenPartyOptionsM2.pas
@@ -0,0 +1,819 @@
+unit UScreenPartyOptionsM2;
+
+interface
+
+uses
+ UMenu,
+ gl,
+ glu,
+ TextGL,
+ SDL,
+ UDisplay,
+ UMusic,
+ UFiles,
+ SysUtils,
+ UPartyM2,
+ UThemes;
+
+type
+ TScreenPartyOptionsM2 = class(TMenu)
+ const
+ ID='ID_020'; //for help system
+
+ public
+ ID_DUELL: Byte;
+ SelectLevel: cardinal;
+ SelectPlayList: cardinal;
+ SelectPlayList2: cardinal;
+ NameRounds: cardinal;
+ CountRounds: cardinal;
+ SelectPlayers: cardinal;
+ SelectRounds: cardinal;
+ SelectOptionPlugin: cardinal;
+ SelectOptionHandicap: cardinal;
+
+ MenuPluginOpen: boolean;
+
+ PluginList: array of TPartyPlugin;
+ SelectedPlugin: Integer;
+
+ PlayList: integer;
+ PlayList2: integer;
+ Rounds: integer;
+ NumPlayer: integer;
+ OptionPlugin: integer;
+ OptionHandicap: integer;
+
+ constructor Create; override;
+ function ParseInput(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): Boolean; override;
+ procedure onShow; override;
+ function Draw: boolean; override;
+ procedure SetAnimationProgress(Progress: real); override;
+ procedure SetPlaylist2;
+
+ procedure Draw_MenuPlugin;
+ function PartyInput_MenuPlugin(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): boolean;
+ end;
+
+var
+ IPlaylist: array[0..2] of String;
+ IPlaylist2: array of String;
+ IRounds: array of String;
+ IOptionYesNo: array of String;
+
+const
+ IPlayers: array[0..7] of String = ('2', '3', '4', '5', '6', '7', '8', '9');
+ MAX_ROUNDS: Integer = 100;
+
+implementation
+
+uses
+ UGraphic,
+ UMain,
+ UIni,
+ UTexture,
+ ULanguage,
+ UDLLManager,
+ UPlaylist,
+ UHelp,
+ ULog,
+ USongs;
+
+function TScreenPartyOptionsM2.ParseInput(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): Boolean;
+var
+ I, J, Len: integer;
+ DuellAvailible: boolean;
+
+begin
+ Result := true;
+
+ if MenuPluginOpen then
+ begin
+ PartyInput_MenuPlugin(PressedKey, ScanCode, PressedDown);
+ Exit;
+ end;
+
+ if (PressedDown) then
+ begin
+ // check special keys
+ case PressedKey of
+ SDLK_TAB:
+ begin
+ ScreenPopupHelp.ShowPopup();
+ end;
+
+ SDLK_ESCAPE,
+ SDLK_BACKSPACE :
+ begin
+ Music.PlayBack;
+ FadeTo(@ScreenMain);
+ end;
+
+ SDLK_RETURN:
+ begin
+ if not (OptionPlugin=1) then
+ begin
+ //Don'T start when Playlist is Selected and there are no Playlists
+ if (Playlist = 2) and (Length(PlaylistMan.Playlists) = 0) then
+ Exit;
+
+ //check plugins
+ SetLength(PartySessionM2.Plugins, 0);
+ DuellAvailible := false;
+ for I := 0 to Length(PluginList)-1 do
+ begin
+ //deactivate if not select plugins
+ //deselect all Plugins
+ if (OptionPlugin=0) then
+ PluginList[I].Selected := false;
+
+ //activate only duell plugin
+ if (OptionPlugin=0) and (PluginList[I].ID=ID_DUELL) and not PluginList[I].Medley then
+ begin
+ DuellAvailible := true;
+ if OptionPlugin=0 then
+ PluginList[I].Selected := true;
+ end;
+
+ if PluginList[I].Selected then
+ begin
+ Len := Length(PartySessionM2.Plugins);
+ SetLength(PartySessionM2.Plugins, Len+1);
+ PartySessionM2.Plugins[Len] := PluginList[I];
+ end;
+ end;
+
+ // Don't start when OptionPlugin=0 and no DUEL-Plugin
+ if not DuellAvailible and (OptionPlugin=0) then
+ begin
+ ScreenPopupError.ShowPopup(Language.Translate('ERROR_NO_PLUGINS') + ' (Duell)');
+ Exit;
+ end;
+
+ if Length(PartySessionM2.Plugins)=0 then
+ begin
+ ScreenPopupError.ShowPopup(Language.Translate('ERROR_NO_PLUGINS'));
+ Exit;
+ end;
+
+ //Save OptionPlugin
+ if OptionPlugin=0 then
+ PartySessionM2.Option_Plugins := false
+ else
+ PartySessionM2.Option_Plugins := true;
+
+ //Save Option Handicap
+ if OptionHandicap=0 then
+ PartySessionM2.HandicapMode := false
+ else
+ PartySessionM2.HandicapMode := true;
+
+ //Save Difficulty
+ Ini.Difficulty := SelectsS[SelectLevel].SelectedOption;
+ Ini.SaveLevel;
+
+ //Save Playlist
+ PlaylistMan.Mode := Playlist;
+ PlaylistMan.CurPlayList := High(Cardinal);
+ //If Category Selected Search Category ID
+ if Playlist = 1 then
+ begin
+ J := -1;
+ For I := 0 to high(CatSongs.Song) do
+ begin
+ if CatSongs.Song[I].Main then
+ Inc(J);
+
+ if J = Playlist2 then
+ begin
+ PlaylistMan.CurPlayList := I;
+ Break;
+ end;
+ end;
+
+ //No Categorys or Invalid Entry
+ If PlaylistMan.CurPlayList = High(Cardinal) then
+ Exit;
+ end
+ else
+ PlaylistMan.CurPlayList := Playlist2;
+
+ //Start Party
+ PartySessionM2.StartNewParty(NumPlayer+2, Rounds+1);
+
+ Music.PlayStart;
+ //Go to Player Screen
+ FadeTo(@ScreenPartyPlayerM2);
+ end else
+ begin
+ MenuPluginOpen := true;
+ if not Help.SetHelpID('ID_030') then
+ Log.LogError('No Entry for Help-ID ID_030 (ScreenPartyOptionsM2, SelectPlugins)');
+ end;
+ 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:
+ begin
+ InteractNext;
+ if Interaction=7 then
+ MenuPluginOpen := true;
+ end;
+ SDLK_UP: InteractPrev;
+ SDLK_RIGHT:
+ begin
+ Music.PlayOption;
+ InteractInc;
+
+ //Change Playlist2 if Playlist is Changed
+ if (Interaction = 1) then
+ begin
+ SetPlaylist2;
+ end
+ else if(Interaction = 3) then
+ begin
+ Rounds:=(((NumPlayer+2)*(NumPlayer+2))-NumPlayer-2)-1;
+ SelectsS[SelectRounds].SetSelectOpt(Rounds);
+ end else if(Interaction = 4) then
+ begin
+ if (Rounds+1 + NumPlayer + 1 <= MAX_ROUNDS-1) then
+ Rounds:=Rounds + NumPlayer + 1
+ else
+ dec(Rounds);
+
+ SelectsS[SelectRounds].SetSelectOpt(Rounds);
+ end else if(Interaction = 5) then //Option Plugins
+ begin
+ //select all Plugins
+ for I := 0 to Length(PluginList) - 1 do
+ begin
+ PluginList[I].Selected := true;
+ end;
+ end;
+ end;
+ SDLK_LEFT:
+ begin
+ Music.PlayOption;
+ InteractDec;
+
+ //Change Playlist2 if Playlist is Changed
+ if (Interaction = 1) then
+ begin
+ SetPlaylist2;
+ end
+ else if(Interaction = 3) then
+ begin
+ Rounds:=(((NumPlayer+2)*(NumPlayer+2))-NumPlayer-2)-1;
+ SelectsS[SelectRounds].SetSelectOpt(Rounds);
+ end else if(Interaction = 4) then
+ begin
+ if (Rounds+1 - NumPlayer - 1 >= 2) then
+ Rounds:=Rounds - NumPlayer - 1
+ else
+ inc(Rounds);
+
+ SelectsS[SelectRounds].SetSelectOpt(Rounds);
+ end;
+ end;
+ end;
+ end;
+end;
+
+function TScreenPartyOptionsM2.PartyInput_MenuPlugin(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): boolean;
+var
+ I, J, Len: integer;
+ DuellAvailible: boolean;
+
+begin
+ Result := true;
+
+ If (PressedDown) Then
+ begin // Key Down
+ case PressedKey of
+ SDLK_TAB:
+ begin
+ ScreenPopupHelp.ShowPopup();
+ end;
+
+ SDLK_ESCAPE:
+ begin
+ MenuPluginOpen := false;
+ if not Help.SetHelpID(ID) then
+ Log.LogError('No Entry for Help-ID ' + ID + ' (ScreenPartyOptions)');
+ end;
+
+ SDLK_RETURN:
+ begin
+ MenuPluginOpen := false;
+ if not Help.SetHelpID(ID) then
+ Log.LogError('No Entry for Help-ID ' + ID + ' (ScreenPartyOptions)');
+ //Don'T start when Playlist is Selected and there are no Playlists
+ if (Playlist = 2) and (Length(PlaylistMan.Playlists) = 0) then
+ Exit;
+
+ //check plugins
+ SetLength(PartySessionM2.Plugins, 0);
+ DuellAvailible := false;
+ for I := 0 to Length(PluginList)-1 do
+ begin
+ if (PluginList[I].ID=ID_DUELL) then
+ begin
+ DuellAvailible := true;
+ if OptionPlugin=0 then
+ PluginList[I].Selected := true;
+ end;
+
+ if PluginList[I].Selected then
+ begin
+ Len := Length(PartySessionM2.Plugins);
+ SetLength(PartySessionM2.Plugins, Len+1);
+ PartySessionM2.Plugins[Len] := PluginList[I];
+ end;
+ end;
+
+ // Don't start when OptionPlugin=0 and no DUEL-Plugin
+ if not DuellAvailible and (OptionPlugin=0) then
+ begin
+ ScreenPopupError.ShowPopup(Language.Translate('ERROR_NO_PLUGINS') + ' (Duell)');
+ Exit;
+ end;
+
+ if Length(PartySessionM2.Plugins)=0 then
+ begin
+ ScreenPopupError.ShowPopup(Language.Translate('ERROR_NO_PLUGINS'));
+ Exit;
+ end;
+
+ //Save OptionPlugin
+ if OptionPlugin=0 then
+ PartySessionM2.Option_Plugins := false
+ else
+ PartySessionM2.Option_Plugins := true;
+
+ //Save Option Handicap
+ if OptionHandicap=0 then
+ PartySessionM2.HandicapMode := false
+ else
+ PartySessionM2.HandicapMode := true;
+
+ //Save Difficulty
+ Ini.Difficulty := SelectsS[SelectLevel].SelectedOption;
+ Ini.SaveLevel;
+
+ //Save Playlist
+ PlaylistMan.Mode := Playlist;
+ PlaylistMan.CurPlayList := High(Cardinal);
+ //If Category Selected Search Category ID
+ if Playlist = 1 then
+ begin
+ J := -1;
+ For I := 0 to high(CatSongs.Song) do
+ begin
+ if CatSongs.Song[I].Main then
+ Inc(J);
+
+ if J = Playlist2 then
+ begin
+ PlaylistMan.CurPlayList := I;
+ Break;
+ end;
+ end;
+
+ //No Categorys or Invalid Entry
+ If PlaylistMan.CurPlayList = High(Cardinal) then
+ Exit;
+ end
+ else
+ PlaylistMan.CurPlayList := Playlist2;
+
+ //Start Party
+ PartySessionM2.StartNewParty(NumPlayer+2, Rounds+1);
+
+ Music.PlayStart;
+ //Go to Player Screen
+ FadeTo(@ScreenPartyPlayerM2);
+ end;
+
+ SDLK_SPACE:
+ begin
+ Music.PlayOption;
+ PluginList[SelectedPlugin].Selected := not PluginList[SelectedPlugin].Selected;
+ end;
+
+ SDLK_LEFT:
+ begin
+ if PluginList[SelectedPlugin].Selected then
+ begin
+ Music.PlayOption;
+ PluginList[SelectedPlugin].Selected := false;
+ end;
+ end;
+
+ SDLK_RIGHT:
+ begin
+ if not PluginList[SelectedPlugin].Selected then
+ begin
+ Music.PlayOption;
+ PluginList[SelectedPlugin].Selected := true;
+ end;
+ end;
+
+ SDLK_UP:
+ begin
+ if SelectedPlugin>0 then
+ Dec(SelectedPlugin);
+ end;
+
+ SDLK_DOWN:
+ begin
+ if SelectedPlugin<Length(PluginList)-1 then
+ Inc(SelectedPlugin);
+ end;
+ end; //of case
+ end; //of if
+end;
+
+procedure TScreenPartyOptionsM2.Draw_MenuPlugin;
+Type
+ TRect = record
+ left, right, top, bottom: integer;
+ end;
+
+Const
+ h = 40;
+
+ procedure DrawPlugin(num: integer; Rect: TRect; Plug: TPartyPlugin; selected: boolean);
+ var
+ text: PChar;
+ name: string;
+
+ begin
+ glColor4f(1, 1, 1, 1);
+ glLineWidth(1);
+ if selected then
+ begin
+ glBegin(GL_LINE_LOOP);
+ glVertex2f(Rect.left-5, Rect.top+h*num);
+ glVertex2f(Rect.right+5, Rect.top+h*num);
+ glVertex2f(Rect.right+5, Rect.top+h*(num+1));
+ glVertex2f(Rect.left-5, Rect.top+h*(num+1));
+ glEnd;
+ end;
+
+ SetFontStyle(1);
+ SetFontItalic(false);
+ SetFontSize(13);
+
+ SetFontPos (Rect.left, Rect.top+ num*h);
+
+ name := Plug.Name;
+
+ text := Addr(name[1]);
+ glPrint(text);
+
+ SetFontPos (Rect.left+Round((Rect.right-Rect.left)/4*3), Rect.top+ num*h);
+ if Plug.Selected then
+ name := Language.Translate('SONG_MENU_YES')
+ else
+ name := Language.Translate('SONG_MENU_NO');
+
+ text := Addr(name[1]);
+ glPrint(text);
+ end;
+
+ procedure DrawScroll(X, Y, W, H: integer; pos, len: double);
+ var
+ fY, tY: double;
+ begin
+ glColor4f(1, 1, 1, 1);
+
+ glLineWidth(1);
+ glBegin(GL_LINE_LOOP);
+ glVertex2f(X, Y);
+ glVertex2f(X+W, Y);
+ glVertex2f(X+W, Y+H);
+ glVertex2f(X, Y+H);
+ glEnd;
+
+ fY := Y+(H-H*len)*pos;
+ tY := fY+H*len;
+ if tY+0.001>=Y+H then
+ tY := Y+H;
+
+ glBegin(GL_QUADS);
+ glVertex2f(X, fY);
+ glVertex2f(X+W, fY);
+ glVertex2f(X+W, tY);
+ glVertex2f(X, tY);
+ glEnd;
+ end;
+
+var
+ Rect: TRect;
+ abs: real;
+ ab: real;
+ I: integer;
+ barH: double;
+ pos: double;
+
+begin
+ Rect.left := 150;
+ Rect.right := 650;
+ Rect.top := 30;
+ Rect.bottom := 550;
+
+ abs := 15;
+
+ if Length(PluginList)<=13 then
+ begin
+ ab := 0;
+ barH := 1;
+ end else
+ begin
+ ab := 10;
+ barH := h*13/(h*Length(PluginList));
+ end;
+
+ glEnable(GL_BLEND);
+ glBegin(gl_quads);
+ //Background:
+ glColor4f(0.2, 0.2, 0.2, 0.8); glVertex2f(Rect.left-abs, Rect.top-abs);
+ glColor4f(0.2, 0.2, 0.2, 0.8); glVertex2f(Rect.right+abs+ab, Rect.top-abs);
+ glColor4f(0.2, 0.2, 0.2, 0.8); glVertex2f(Rect.right+abs+ab, Rect.bottom+abs);
+ glColor4f(0.2, 0.2, 0.2, 0.8); glVertex2f(Rect.left-abs, Rect.bottom+abs);
+ glEnd;
+ glDisable(GL_BLEND);
+
+ //Draw MainFrame
+ glColor4f(1, 1, 1, 1);
+
+ glLineWidth(1);
+ glBegin(GL_LINE_LOOP);
+ glVertex2f(Rect.left-abs+1, Rect.top-abs+1);
+ glVertex2f(Rect.right+abs-1, Rect.top-abs+1);
+ glVertex2f(Rect.right+abs-1, Rect.bottom+abs-1);
+ glVertex2f(Rect.left-abs+1, Rect.bottom+abs-1);
+ glEnd;
+
+ if barH<1 then
+ begin
+ pos := SelectedPlugin/(Length(PluginList)-1);
+
+ //draw plugin names and selections
+ for I := 0 to 12 do
+ begin
+ if (SelectedPlugin<=6) then
+ DrawPlugin(I, Rect, PluginList[I], I=SelectedPlugin)
+ else if ((SelectedPlugin-6)<=(Length(PluginList)-13)) then
+ DrawPlugin(I, Rect, PluginList[I+(SelectedPlugin-6)],
+ I+(SelectedPlugin-6)=SelectedPlugin)
+ else
+ DrawPlugin(I, Rect, PluginList[I+(Length(PluginList)-13)],
+ I+(Length(PluginList)-13)=SelectedPlugin);
+ end;
+
+ DrawScroll(Round(Rect.right+abs-1), Rect.top-round(abs)+1,
+ Round(ab), Rect.bottom-Rect.top+round(abs+abs)-2,
+ pos, barH);
+ end else
+ begin
+ for I := 0 to Length(PluginList)-1 do
+ DrawPlugin(I, Rect, PluginList[I], I=SelectedPlugin)
+ end;
+end;
+
+constructor TScreenPartyOptionsM2.Create;
+var
+ I: integer;
+begin
+ inherited Create;
+ //Fill IPlaylist
+
+ SetLength(IOptionYesNo, 2);
+ IOptionYesNo[0] := Language.Translate('SONG_MENU_NO');
+ IOptionYesNo[1] := Language.Translate('SONG_MENU_YES');
+
+ SetLength(IRounds, Round(MAX_ROUNDS));
+ for I := 1 to MAX_ROUNDS do
+ begin
+ IRounds[I-1]:=IntToStr(I);
+ end;
+
+ IPlaylist[0] := Language.Translate('PARTY_PLAYLIST_ALL');
+ IPlaylist[1] := Language.Translate('PARTY_PLAYLIST_CATEGORY');
+ IPlaylist[2] := Language.Translate('PARTY_PLAYLIST_PLAYLIST');
+
+ //Fill IPlaylist2
+ SetLength(IPlaylist2, 1);
+ IPlaylist2[0] := '---';
+
+ //Clear all Selects
+ NumPlayer := 0;
+ Rounds := 0;
+ PlayList := 0;
+ PlayList2 := 0;
+
+ //Load Screen From Theme
+ LoadFromTheme(Theme.PartyOptionsM2);
+
+ SelectLevel := AddSelectSlide (Theme.PartyOptionsM2.SelectLevel, Ini.Difficulty, Theme.ILevel);
+ SelectPlayList := AddSelectSlide (Theme.PartyOptionsM2.SelectPlayList, PlayList, IPlaylist);
+ SelectPlayList2 := AddSelectSlide (Theme.PartyOptionsM2.SelectPlayList2, PlayList2, IPlaylist2);
+ SelectPlayers := AddSelectSlide (Theme.PartyOptionsM2.SelectPlayers1, NumPlayer, IPlayers);
+ SelectRounds := AddSelectSlide (Theme.PartyOptionsM2.SelectRounds, Rounds, IRounds);
+ SelectOptionPlugin := AddSelectSlide (Theme.PartyOptionsM2.SelectOptionPlugin, OptionPlugin, IOptionYesNo);
+ SelectOptionHandicap := AddSelectSlide (Theme.PartyOptionsM2.SelectOptionHandicap, OptionHandicap, IOptionYesNo);
+
+ Interaction := 0;
+ Rounds:=1;
+ SelectsS[SelectRounds].SetSelectOpt(Rounds);
+
+end;
+
+procedure TScreenPartyOptionsM2.SetPlaylist2;
+var
+ I: integer;
+begin
+ case Playlist of
+ 0:
+ begin
+ SetLength(IPlaylist2, 1);
+ IPlaylist2[0] := '---';
+ end;
+ 1:
+ begin
+ SetLength(IPlaylist2, 0);
+ for I := 0 to high(CatSongs.Song) do
+ begin
+ if (CatSongs.Song[I].Main) then
+ begin
+ SetLength(IPlaylist2, Length(IPlaylist2) + 1);
+ IPlaylist2[high(IPlaylist2)] := CatSongs.Song[I].Artist;
+ end;
+ end;
+
+ if (Length(IPlaylist2) = 0) then
+ begin
+ SetLength(IPlaylist2, 1);
+ IPlaylist2[0] := 'No Categories found';
+ end;
+ end;
+ 2:
+ begin
+ if (Length(PlaylistMan.Playlists) > 0) then
+ begin
+ SetLength(IPlaylist2, Length(PlaylistMan.Playlists));
+ PlaylistMan.GetNames(IPlaylist2);
+ end
+ else
+ begin
+ SetLength(IPlaylist2, 1);
+ IPlaylist2[0] := 'No Playlists found';
+ end;
+ end;
+ end;
+
+ Playlist2 := 0;
+ UpdateSelectSlideOptions(Theme.PartyOptionsM2.SelectPlayList2, 2, IPlaylist2, Playlist2);
+end;
+
+procedure TScreenPartyOptionsM2.onShow;
+var
+ Len, I: Integer;
+ ID_BLIND: Byte;
+ ID_NOSCORE: Byte;
+
+begin
+ Randomize;
+ if not Help.SetHelpID(ID) then
+ Log.LogError('No Entry for Help-ID ' + ID + ' (ScreenPartyOptionsM2)');
+
+ MenuPluginOpen := false;
+
+ //Fill plugin array
+ ID_DUELL := high(Byte);
+ ID_BLIND := high(Byte);
+ ID_NOSCORE := high(Byte);
+
+ SetLength(PluginList, 0);
+ for I := 0 to high(DLLMan.Plugins) do
+ begin
+ if DLLMan.Plugins[I].Name='PLUGIN_DUELL_NAME' then
+ ID_DUELL := I;
+
+ if DLLMan.Plugins[I].Name='PLUGIN_BLIND_NAME' then
+ ID_BLIND := I;
+
+ if DLLMan.Plugins[I].Name='PLUGIN_NOSCORE_NAME' then
+ ID_NOSCORE := I;
+
+ if (not DLLMan.Plugins[I].TeamModeOnly) then
+ begin
+ Len := Length(PluginList);
+ SetLength(PluginList, Len + 1);
+ PluginList[Len].ID := I;
+ PluginList[Len].TimesPlayed := 0;
+ PluginList[Len].Medley := false;
+ PluginList[Len].MedleySurprise := false;
+
+ if I=ID_DUELL then
+ PluginList[Len].Selected := true
+ else
+ PluginList[Len].Selected := false;
+
+ PluginList[Len].Name := Language.Translate(DLLMan.Plugins[I].Name);
+ PluginList[Len].Desc := Language.Translate(DLLMan.Plugins[I].PluginDesc);
+ end;
+ end;
+
+ //Add Medley "Plugin" (if Plugin DUELL availible)
+ if ID_DUELL<>high(Byte) then
+ begin
+ Len := Length(PluginList);
+ SetLength(PluginList, Len + 1);
+ PluginList[Len].ID := ID_DUELL;
+ PluginList[Len].TimesPlayed := 0;
+ PluginList[Len].Medley := true;
+ PluginList[Len].MedleySurprise := false;
+ PluginList[Len].Selected := true;
+ PluginList[Len].Name := Language.Translate('PLUGIN_MEDLEY_NAME');
+ PluginList[Len].Desc := Language.Translate('PLUGIN_MEDLEY_DESC');
+ end;
+
+ //Add Medley blind "Plugin" (if Plugin BLIND availible)
+ if ID_BLIND<>high(Byte) then
+ begin
+ Len := Length(PluginList);
+ SetLength(PluginList, Len + 1);
+ PluginList[Len].ID := ID_BLIND;
+ PluginList[Len].TimesPlayed := 0;
+ PluginList[Len].Medley := true;
+ PluginList[Len].MedleySurprise := false;
+ PluginList[Len].Selected := true;
+ PluginList[Len].Name := Language.Translate('PLUGIN_MEDLEYBLIND_NAME');
+ PluginList[Len].Desc := Language.Translate('PLUGIN_MEDLEYBLIND_DESC');
+ end;
+
+ //Add Medley noscore "Plugin" (if Plugin NOSCORE availible)
+ if ID_NOSCORE<>high(Byte) then
+ begin
+ Len := Length(PluginList);
+ SetLength(PluginList, Len + 1);
+ PluginList[Len].ID := ID_NOSCORE;
+ PluginList[Len].TimesPlayed := 0;
+ PluginList[Len].Medley := true;
+ PluginList[Len].MedleySurprise := false;
+ PluginList[Len].Selected := true;
+ PluginList[Len].Name := Language.Translate('PLUGIN_MEDLEYNOSCORE_NAME');
+ PluginList[Len].Desc := Language.Translate('PLUGIN_MEDLEYNOSCORE_DESC');
+ end;
+
+ //Add Medley Surprise "Plugin" (if Plugin DUELL availible)
+ if ID_DUELL<>high(Byte) then
+ begin
+ Len := Length(PluginList);
+ SetLength(PluginList, Len + 1);
+ PluginList[Len].ID := ID_DUELL;
+ PluginList[Len].TimesPlayed := 0;
+ PluginList[Len].Medley := true;
+ PluginList[Len].MedleySurprise := true;
+ PluginList[Len].Selected := true;
+ PluginList[Len].Name := Language.Translate('PLUGIN_MEDLEYSURPRISE_NAME');
+ PluginList[Len].Desc := Language.Translate('PLUGIN_MEDLEYSURPRISE_DESC');
+ end;
+
+ //Add Medley Surprise blind "Plugin" (if Plugin BLIND availible)
+ if ID_BLIND<>high(Byte) then
+ begin
+ Len := Length(PluginList);
+ SetLength(PluginList, Len + 1);
+ PluginList[Len].ID := ID_BLIND;
+ PluginList[Len].TimesPlayed := 0;
+ PluginList[Len].Medley := true;
+ PluginList[Len].MedleySurprise := true;
+ PluginList[Len].Selected := true;
+ PluginList[Len].Name := Language.Translate('PLUGIN_MEDLEYSURPRISEBLIND_NAME');
+ PluginList[Len].Desc := Language.Translate('PLUGIN_MEDLEYSURPRISEBLIND_DESC');
+ end;
+
+ SelectedPlugin := 0;
+end;
+
+function TScreenPartyOptionsM2.Draw: boolean;
+begin
+ // draw static menu
+ inherited Draw;
+
+ if MenuPluginOpen then
+ Draw_MenuPlugin;
+end;
+
+procedure TScreenPartyOptionsM2.SetAnimationProgress(Progress: real);
+begin
+ {for I := 0 to 6 do
+ SelectS[I].Texture.ScaleW := Progress;}
+end;
+
+end.