From 0d382c7708e1b087f35b6d4ea5fc795df52c2a22 Mon Sep 17 00:00:00 2001 From: brunzelchen Date: Sun, 15 Aug 2010 10:17:04 +0000 Subject: - added support for 4 (and even 6) players on one screen. its hard-coded and not finished yet. the score screen needs adjustment. - update of acinerella, changed pixel format to BGR (seems to be better than RGB) - update of the language files. big thanks to thursday for the english translation! - added languages.xls for managing the language files - added support for vbr-files (prescan). - reduced the volume in applause.mp3 - added description of plugins in challenge mode git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/branches/1.0.1 Challenge MOD@2609 b956fd51-792f-4845-bead-9b4dfca2ff2c --- Game/Code/Screens/UScreenPartyNewRoundM2.pas | 2 +- Game/Code/Screens/UScreenSing.pas | 709 +++++++++++++++++++++++---- Game/Code/Screens/UScreenSong.pas | 126 +++-- 3 files changed, 702 insertions(+), 135 deletions(-) (limited to 'Game/Code/Screens') diff --git a/Game/Code/Screens/UScreenPartyNewRoundM2.pas b/Game/Code/Screens/UScreenPartyNewRoundM2.pas index 7fe94ac2..de97de72 100644 --- a/Game/Code/Screens/UScreenPartyNewRoundM2.pas +++ b/Game/Code/Screens/UScreenPartyNewRoundM2.pas @@ -194,7 +194,7 @@ begin if PartySessionM2.Option_Plugins then begin Text[TextNextRound].Text := Language.Translate('PARTY_ROUND') + ' ' + IntToStr(PartySessionM2.CurRound + 1) + - ': ' + PartySessionM2.Plugins[PartySessionM2.Rounds[PartySessionM2.CurRound].PluginNr].Name; + ': ' + PartySessionM2.Plugins[PartySessionM2.Rounds[PartySessionM2.CurRound].PluginNr].Desc; end else Text[TextNextRound].Text := Language.Translate('PARTY_ROUND') + ' ' + IntToStr(PartySessionM2.CurRound + 1); diff --git a/Game/Code/Screens/UScreenSing.pas b/Game/Code/Screens/UScreenSing.pas index 2844cc46..f840a465 100644 --- a/Game/Code/Screens/UScreenSing.pas +++ b/Game/Code/Screens/UScreenSing.pas @@ -11,6 +11,18 @@ type change_time: real; end; + TPlayerSkin = record + StaticP: real; + StaticScoreBG : real; + TextP: real; + TextPScore: real; + end; + + TSaveCoords = record + Singbar: array[1..6] of real; + PlayerS: array[1..6] of TPlayerSkin; + end; + TScreenSing = class(TMenu) protected paused: boolean; //Pause Mod @@ -30,6 +42,8 @@ type TextTimeText: integer; //eoa TimeBar mod + SaveCoords: TSaveCoords; + StaticP1: integer; StaticP1ScoreBG: integer; TextP1: integer; @@ -44,6 +58,12 @@ type StaticP2RSingBar: integer; StaticP2MSingBar: integer; StaticP3SingBar: integer; + + StaticP3FourPSingbar: integer; + StaticP4FourPSingbar: integer; + StaticP4SixPSingbar: integer; + StaticP5Singbar: integer; + StaticP6Singbar: integer; //eoa moveable singbar //Added for ps3 skin @@ -74,6 +94,33 @@ type TextP3R: integer; TextP3RScore: integer; + // 4 and 6 player on one screen + P4Mode: boolean; + StaticP3FourP: integer; + StaticP3FourPScoreBG: integer; + TextP3FourP: integer; + TextP3FourPScore: integer; + + StaticP4FourP: integer; + StaticP4FourPScoreBG: integer; + TextP4FourP: integer; + TextP4FourPScore: integer; + + StaticP4SixP: integer; + StaticP4SixPScoreBG: integer; + TextP4SixP: integer; + TextP4SixPScore: integer; + + StaticP5: integer; + StaticP5ScoreBG: integer; + TextP5: integer; + TextP5Score: integer; + + StaticP6: integer; + StaticP6ScoreBG: integer; + TextP6: integer; + TextP6Score: integer; + Tex_Background: TTexture; FadeOut: boolean; LyricMain: array [0..1] of TLyric; @@ -275,20 +322,34 @@ begin TextTimeText := AddText(Theme.Sing.TextTimeText); //eoa TimeBar mod - StaticP1 := AddStatic(Theme.Sing.StaticP1); - StaticP1ScoreBG := AddStatic(Theme.Sing.StaticP1ScoreBG); - TextP1 := AddText(Theme.Sing.TextP1); - TextP1Score := AddText(Theme.Sing.TextP1Score); - //moveable singbar mod StaticP1SingBar := AddStatic(Theme.Sing.StaticP1SingBar); StaticP1ThreePSingBar := AddStatic(Theme.Sing.StaticP1ThreePSingBar); - StaticP1TwoPSingBar := AddStatic(Theme.Sing.StaticP2RSingBar); + StaticP1TwoPSingBar := AddStatic(Theme.Sing.StaticP1TwoPSingBar); StaticP2RSingBar := AddStatic(Theme.Sing.StaticP2RSingBar); StaticP2MSingBar := AddStatic(Theme.Sing.StaticP2MSingBar); StaticP3SingBar := AddStatic(Theme.Sing.StaticP3SingBar); + + StaticP3FourPSingbar := AddStatic(Theme.Sing.StaticP3FourPSingbar); + StaticP4FourPSingbar := AddStatic(Theme.Sing.StaticP4FourPSingbar); + StaticP4SixPSingbar := AddStatic(Theme.Sing.StaticP4SixPSingbar); + StaticP5Singbar := AddStatic(Theme.Sing.StaticP5Singbar); + StaticP6Singbar := AddStatic(Theme.Sing.StaticP6Singbar); + + //save coordinates + SaveCoords.Singbar[1] := Theme.Sing.StaticP1SingBar.X; + SaveCoords.Singbar[2] := Theme.Sing.StaticP1TwoPSingBar.X; + SaveCoords.Singbar[3] := Theme.Sing.StaticP1ThreePSingBar.X; + SaveCoords.Singbar[4] := Theme.Sing.StaticP2RSingBar.X; + SaveCoords.Singbar[5] := Theme.Sing.StaticP2MSingBar.X; + SaveCoords.Singbar[6] := Theme.Sing.StaticP3SingBar.X; //eoa moveable singbar + StaticP1 := AddStatic(Theme.Sing.StaticP1); + StaticP1ScoreBG := AddStatic(Theme.Sing.StaticP1ScoreBG); + TextP1 := AddText(Theme.Sing.TextP1); + TextP1Score := AddText(Theme.Sing.TextP1Score); + //Added for ps3 skin //This one is shown in 2/4P mode StaticP1TwoP := AddStatic(Theme.Sing.StaticP1TwoP); @@ -318,6 +379,63 @@ begin TextP3R := AddText(Theme.Sing.TextP3R); TextP3RScore := AddText(Theme.Sing.TextP3RScore); + // 4 and 6 player on one screen: + StaticP3FourP := AddStatic(Theme.Sing.StaticP3FourP); + StaticP3FourPScoreBG := AddStatic(Theme.Sing.StaticP3FourPScoreBG); + TextP3FourP := AddText(Theme.Sing.TextP3FourP); + TextP3FourPScore := AddText(Theme.Sing.TextP3FourPScore); + + StaticP4FourP := AddStatic(Theme.Sing.StaticP4FourP); + StaticP4FourPScoreBG := AddStatic(Theme.Sing.StaticP4FourPScoreBG); + TextP4FourP := AddText(Theme.Sing.TextP4FourP); + TextP4FourPScore := AddText(Theme.Sing.TextP4FourPScore); + + StaticP4SixP := AddStatic(Theme.Sing.StaticP4SixP); + StaticP4SixPScoreBG := AddStatic(Theme.Sing.StaticP4SixPScoreBG); + TextP4SixP := AddText(Theme.Sing.TextP4SixP); + TextP4SixPScore := AddText(Theme.Sing.TextP4SixPScore); + + StaticP5 := AddStatic(Theme.Sing.StaticP5); + StaticP5ScoreBG := AddStatic(Theme.Sing.StaticP5ScoreBG); + TextP5 := AddText(Theme.Sing.TextP5); + TextP5Score := AddText(Theme.Sing.TextP5Score); + + StaticP6 := AddStatic(Theme.Sing.StaticP6); + StaticP6ScoreBG := AddStatic(Theme.Sing.StaticP6ScoreBG); + TextP6 := AddText(Theme.Sing.TextP6); + TextP6Score := AddText(Theme.Sing.TextP6Score); + + //save coordinates + SaveCoords.PlayerS[1].StaticP := Theme.Sing.StaticP1.X; + SaveCoords.PlayerS[1].StaticScoreBG := Theme.Sing.StaticP1ScoreBG.X; + SaveCoords.PlayerS[1].TextP := Theme.Sing.TextP1.X; + SaveCoords.PlayerS[1].TextPScore := Theme.Sing.TextP1Score.X; + + SaveCoords.PlayerS[2].StaticP := Theme.Sing.StaticP1TwoP.X; + SaveCoords.PlayerS[2].StaticScoreBG := Theme.Sing.StaticP1TwoPScoreBG.X; + SaveCoords.PlayerS[2].TextP := Theme.Sing.TextP1TwoP.X; + SaveCoords.PlayerS[2].TextPScore := Theme.Sing.TextP1TwoPScore.X; + + SaveCoords.PlayerS[3].StaticP := Theme.Sing.StaticP1ThreeP.X; + SaveCoords.PlayerS[3].StaticScoreBG := Theme.Sing.StaticP1ThreePScoreBG.X; + SaveCoords.PlayerS[3].TextP := Theme.Sing.TextP1ThreeP.X; + SaveCoords.PlayerS[3].TextPScore := Theme.Sing.TextP1ThreePScore.X; + + SaveCoords.PlayerS[4].StaticP := Theme.Sing.StaticP2R.X; + SaveCoords.PlayerS[4].StaticScoreBG := Theme.Sing.StaticP2RScoreBG.X; + SaveCoords.PlayerS[4].TextP := Theme.Sing.TextP2R.X; + SaveCoords.PlayerS[4].TextPScore := Theme.Sing.TextP2RScore.X; + + SaveCoords.PlayerS[5].StaticP := Theme.Sing.StaticP2M.X; + SaveCoords.PlayerS[5].StaticScoreBG := Theme.Sing.StaticP2MScoreBG.X; + SaveCoords.PlayerS[5].TextP := Theme.Sing.TextP2M.X; + SaveCoords.PlayerS[5].TextPScore := Theme.Sing.TextP2MScore.X; + + SaveCoords.PlayerS[6].StaticP := Theme.Sing.StaticP3R.X; + SaveCoords.PlayerS[6].StaticScoreBG := Theme.Sing.StaticP3RScoreBG.X; + SaveCoords.PlayerS[6].TextP := Theme.Sing.TextP3R.X; + SaveCoords.PlayerS[6].TextPScore := Theme.Sing.TextP3RScore.X; + SongNameStatic := AddStatic(Theme.Sing.StaticSongName); SongNameText := AddText(Theme.Sing.TextSongName); @@ -341,6 +459,11 @@ var V2R: boolean; V2M: boolean; V3R: boolean; + V3FourP: boolean; + V4FourP: boolean; + V4SixP: boolean; + V5: boolean; + V6: boolean; NR: TRecR; //Line Bonus Mod begin Log.LogStatus('Begin', 'onShow'); @@ -375,7 +498,51 @@ begin SetLength(Player, PlayersPlay); // Player[0].ScoreTotalI := 0; - case PlayersPlay of + // positions + if ((Screens = 1) and (PlayersPlay <= 3)) or (Screens = 2) then + begin + P4Mode := false; + NR.Left := 20; + NR.Right := 780; + + Theme.Sing.StaticP1SingBar.X := Round(SaveCoords.Singbar[1]); + Theme.Sing.StaticP1TwoPSingBar.X := Round(SaveCoords.Singbar[2]); + Theme.Sing.StaticP1ThreePSingBar.X := Round(SaveCoords.Singbar[3]); + Theme.Sing.StaticP2RSingBar.X := Round(SaveCoords.Singbar[4]); + Theme.Sing.StaticP2MSingBar.X := Round(SaveCoords.Singbar[5]); + Theme.Sing.StaticP3SingBar.X := Round(SaveCoords.Singbar[6]); + + Theme.Sing.StaticP1.X := Round(SaveCoords.PlayerS[1].StaticP); + Theme.Sing.StaticP1ScoreBG.X := Round(SaveCoords.PlayerS[1].StaticScoreBG); + Theme.Sing.TextP1.X := Round(SaveCoords.PlayerS[1].TextP); + Theme.Sing.TextP1Score.X := Round(SaveCoords.PlayerS[1].TextPScore); + + Theme.Sing.StaticP1TwoP.X := Round(SaveCoords.PlayerS[2].StaticP); + Theme.Sing.StaticP1TwoPScoreBG.X := Round(SaveCoords.PlayerS[2].StaticScoreBG); + Theme.Sing.TextP1TwoP.X := Round(SaveCoords.PlayerS[2].TextP); + Theme.Sing.TextP1TwoPScore.X := Round(SaveCoords.PlayerS[2].TextPScore); + + Theme.Sing.StaticP1ThreeP.X := Round(SaveCoords.PlayerS[3].StaticP); + Theme.Sing.StaticP1ThreePScoreBG.X := Round(SaveCoords.PlayerS[3].StaticScoreBG); + Theme.Sing.TextP1ThreeP.X := Round(SaveCoords.PlayerS[3].TextP); + Theme.Sing.TextP1ThreePScore.X := Round(SaveCoords.PlayerS[3].TextPScore); + + Theme.Sing.StaticP2R.X := Round(SaveCoords.PlayerS[4].StaticP); + Theme.Sing.StaticP2RScoreBG.X := Round(SaveCoords.PlayerS[4].StaticScoreBG); + Theme.Sing.TextP2R.X := Round(SaveCoords.PlayerS[4].TextP); + Theme.Sing.TextP2RScore.X := Round(SaveCoords.PlayerS[4].TextPScore); + + Theme.Sing.StaticP2M.X := Round(SaveCoords.PlayerS[5].StaticP); + Theme.Sing.StaticP2MScoreBG.X := Round(SaveCoords.PlayerS[5].StaticScoreBG); + Theme.Sing.TextP2M.X := Round(SaveCoords.PlayerS[5].TextP); + Theme.Sing.TextP2MScore.X := Round(SaveCoords.PlayerS[5].TextPScore); + + Theme.Sing.StaticP3R.X := Round(SaveCoords.PlayerS[6].StaticP); + Theme.Sing.StaticP3RScoreBG.X := Round(SaveCoords.PlayerS[6].StaticScoreBG); + Theme.Sing.TextP3R.X := Round(SaveCoords.PlayerS[6].TextP); + Theme.Sing.TextP3RScore.X := Round(SaveCoords.PlayerS[6].TextPScore); + + case PlayersPlay of 1: begin V1 := true; V1TwoP := false; //added for ps3 skin @@ -383,6 +550,11 @@ begin V2R := false; V2M := false; V3R := false; + V3FourP := false; + V4FourP := false; + V4SixP := false; + V5 := false; + V6 := false; end; 2: begin V1 := false; @@ -391,6 +563,11 @@ begin V2R := true; V2M := false; V3R := false; + V3FourP := false; + V4FourP := false; + V4SixP := false; + V5 := false; + V6 := false; end; 3: begin V1 := false; @@ -399,6 +576,11 @@ begin V2R := false; V2M := true; V3R := true; + V3FourP := false; + V4FourP := false; + V4SixP := false; + V5 := false; + V6 := false; end; 4: begin // double screen V1 := false; @@ -407,6 +589,11 @@ begin V2R := true; V2M := false; V3R := false; + V3FourP := false; + V4FourP := false; + V4SixP := false; + V5 := false; + V6 := false; end; 6: begin // double screen V1 := false; @@ -415,6 +602,11 @@ begin V2R := false; V2M := true; V3R := true; + V3FourP := false; + V4FourP := false; + V4SixP := false; + V5 := false; + V6 := false; end; else begin //should not happen V1 := true; @@ -423,20 +615,187 @@ begin V2R := false; V2M := false; V3R := false; + V3FourP := false; + V4FourP := false; + V4SixP := false; + V5 := false; + V6 := false; + end; + end; + end else + begin + P4Mode := true; + NR.Left := 10; + NR.Right := 390; + + Theme.Sing.StaticP1SingBar.X := Round(SaveCoords.Singbar[1]); + Theme.Sing.StaticP1TwoPSingBar.X := Round(SaveCoords.Singbar[2]-400); + Theme.Sing.StaticP1ThreePSingBar.X := Round(SaveCoords.Singbar[3]+Theme.Sing.OFF_P1); + Theme.Sing.StaticP2RSingBar.X := Round(SaveCoords.Singbar[4]-400); + Theme.Sing.StaticP2MSingBar.X := Round(SaveCoords.Singbar[5]+Theme.Sing.OFF_P2); + Theme.Sing.StaticP3SingBar.X := Round(SaveCoords.Singbar[6]+Theme.Sing.OFF_P3); + + Theme.Sing.StaticP1.X := Round(SaveCoords.PlayerS[1].StaticP); + Theme.Sing.StaticP1ScoreBG.X := Round(SaveCoords.PlayerS[1].StaticScoreBG); + Theme.Sing.TextP1.X := Round(SaveCoords.PlayerS[1].TextP); + Theme.Sing.TextP1Score.X := Round(SaveCoords.PlayerS[1].TextPScore); + + Theme.Sing.StaticP1TwoP.X := Round(SaveCoords.PlayerS[2].StaticP); + Theme.Sing.StaticP1TwoPScoreBG.X := Round(SaveCoords.PlayerS[2].StaticScoreBG-400); + Theme.Sing.TextP1TwoP.X := Round(SaveCoords.PlayerS[2].TextP); + Theme.Sing.TextP1TwoPScore.X := Round(SaveCoords.PlayerS[2].TextPScore-400); + + Theme.Sing.StaticP1ThreeP.X := Round(SaveCoords.PlayerS[3].StaticP+Theme.Sing.OFF_P1); + Theme.Sing.StaticP1ThreePScoreBG.X := Round(SaveCoords.PlayerS[3].StaticScoreBG+Theme.Sing.OFF_P1); + Theme.Sing.TextP1ThreeP.X := Round(SaveCoords.PlayerS[3].TextP+Theme.Sing.OFF_P1); + Theme.Sing.TextP1ThreePScore.X := Round(SaveCoords.PlayerS[3].TextPScore+Theme.Sing.OFF_P1); + + Theme.Sing.StaticP2R.X := Round(SaveCoords.PlayerS[4].StaticP); + Theme.Sing.StaticP2RScoreBG.X := Round(SaveCoords.PlayerS[4].StaticScoreBG-400); + Theme.Sing.TextP2R.X := Round(SaveCoords.PlayerS[4].TextP); + Theme.Sing.TextP2RScore.X := Round(SaveCoords.PlayerS[4].TextPScore-400); + + Theme.Sing.StaticP2M.X := Round(SaveCoords.PlayerS[5].StaticP+Theme.Sing.OFF_P2); + Theme.Sing.StaticP2MScoreBG.X := Round(SaveCoords.PlayerS[5].StaticScoreBG+Theme.Sing.OFF_P2); + Theme.Sing.TextP2M.X := Round(SaveCoords.PlayerS[5].TextP+Theme.Sing.OFF_P2); + Theme.Sing.TextP2MScore.X := Round(SaveCoords.PlayerS[5].TextPScore+Theme.Sing.OFF_P2); + + Theme.Sing.StaticP3R.X := Round(SaveCoords.PlayerS[6].StaticP+Theme.Sing.OFF_P3); + Theme.Sing.StaticP3RScoreBG.X := Round(SaveCoords.PlayerS[6].StaticScoreBG+Theme.Sing.OFF_P3); + Theme.Sing.TextP3R.X := Round(SaveCoords.PlayerS[6].TextP+Theme.Sing.OFF_P3); + Theme.Sing.TextP3RScore.X := Round(SaveCoords.PlayerS[6].TextPScore+Theme.Sing.OFF_P3); + + case PlayersPlay of + 1: begin + V1 := true; + V1TwoP := false; //added for ps3 skin + V1ThreeP := false; //added for ps3 skin + V2R := false; + V2M := false; + V3R := false; + V3FourP := false; + V4FourP := false; + V4SixP := false; + V5 := false; + V6 := false; end; + 2: begin + V1 := false; + V1TwoP := true; //added for ps3 skin + V1ThreeP := false; //added for ps3 skin + V2R := true; + V2M := false; + V3R := false; + V3FourP := false; + V4FourP := false; + V4SixP := false; + V5 := false; + V6 := false; + end; + 3: begin + V1 := false; + V1TwoP := false; //added for ps3 skin + V1ThreeP := true; //added for ps3 skin + V2R := false; + V2M := true; + V3R := true; + V3FourP := false; + V4FourP := false; + V4SixP := false; + V5 := false; + V6 := false; + end; + 4: begin // double screen + V1 := false; + V1TwoP := true; //added for ps3 skin + V1ThreeP := false; //added for ps3 skin + V2R := true; + V2M := false; + V3R := false; + V3FourP := true; + V4FourP := true; + V4SixP := false; + V5 := false; + V6 := false; + end; + 6: begin // double screen + V1 := false; + V1TwoP := false; //added for ps3 skin + V1ThreeP := true; //added for ps3 skin + V2R := false; + V2M := true; + V3R := true; + V3FourP := false; + V4FourP := false; + V4SixP := true; + V5 := true; + V6 := true; + end; + else begin //should not happen + V1 := true; + V1TwoP := false; + V1ThreeP := false; + V2R := false; + V2M := false; + V3R := false; + V3FourP := false; + V4FourP := false; + V4SixP := false; + V5 := false; + V6 := false; + end; + end; end; + Static[StaticP1].Texture.X := Theme.Sing.StaticP1.X; + Static[StaticP1ScoreBG].Texture.X := Theme.Sing.StaticP1ScoreBG.X; + Text[TextP1].X := Theme.Sing.TextP1.X; + Text[TextP1Score].X := Theme.Sing.TextP1Score.X; + + Static[StaticP1TwoP].Texture.X := Theme.Sing.StaticP1TwoP.X; + Static[StaticP1TwoPScoreBG].Texture.X := Theme.Sing.StaticP1TwoPScoreBG.X; + Text[TextP1TwoP].X := Theme.Sing.TextP1TwoP.X; + Text[TextP1TwoPScore].X := Theme.Sing.TextP1TwoPScore.X; + + Static[StaticP1ThreeP].Texture.X := Theme.Sing.StaticP1ThreeP.X; + Static[StaticP1ThreePScoreBG].Texture.X := Theme.Sing.StaticP1ThreePScoreBG.X; + Text[TextP1ThreeP].X := Theme.Sing.TextP1ThreeP.X; + Text[TextP1ThreePScore].X := Theme.Sing.TextP1ThreePScore.X; + + Static[StaticP2R].Texture.X := Theme.Sing.StaticP2R.X; + Static[StaticP2RScoreBG].Texture.X := Theme.Sing.StaticP2RScoreBG.X; + Text[TextP2R].X := Theme.Sing.TextP2R.X; + Text[TextP2RScore].X := Theme.Sing.TextP2RScore.X; + + Static[StaticP2M].Texture.X := Theme.Sing.StaticP2M.X; + Static[StaticP2MScoreBG].Texture.X := Theme.Sing.StaticP2MScoreBG.X; + Text[TextP2M].X := Theme.Sing.TextP2M.X; + Text[TextP2MScore].X := Theme.Sing.TextP2MScore.X; + + Static[StaticP3R].Texture.X := Theme.Sing.StaticP3R.X; + Static[StaticP3RScoreBG].Texture.X := Theme.Sing.StaticP3RScoreBG.X; + Text[TextP3R].X := Theme.Sing.TextP3R.X; + Text[TextP3RScore].X := Theme.Sing.TextP3RScore.X; + + NR.Width := NR.Right - NR.Left; + NR.WMid := NR.Width / 2; + NR.Mid := NR.Left + NR.WMid; + + + //Added for ps3 skin //This one is shown in 1P mode Static[StaticP1].Visible := V1; Static[StaticP1ScoreBG].Visible := V1; Text[TextP1].Visible := V1; Text[TextP1Score].Visible := V1; + //This one is shown in 2/4P mode Static[StaticP1TwoP].Visible := V1TwoP; Static[StaticP1TwoPScoreBG].Visible := V1TwoP; Text[TextP1TwoP].Visible := V1TwoP; Text[TextP1TwoPScore].Visible := V1TwoP; + //This one is shown in 3/6P mode Static[StaticP1ThreeP].Visible := V1ThreeP; Static[StaticP1ThreePScoreBG].Visible := V1ThreeP; @@ -459,10 +818,35 @@ begin Text[TextP3R].Visible := V3R; Text[TextP3RScore].Visible := V3R; + Static[StaticP3FourP].Visible := V3FourP; + Static[StaticP3FourPScoreBG].Visible := V3FourP; + Text[TextP3FourP].Visible := V3FourP; + Text[TextP3FourPScore].Visible := V3FourP; + + Static[StaticP4FourP].Visible := V4FourP; + Static[StaticP4FourPScoreBG].Visible := V4FourP; + Text[TextP4FourP].Visible := V4FourP; + Text[TextP4FourPScore].Visible := V4FourP; + + Static[StaticP4SixP].Visible := V4SixP; + Static[StaticP4SixPScoreBG].Visible := V4SixP; + Text[TextP4SixP].Visible := V4SixP; + Text[TextP4SixPScore].Visible := V4SixP; + + Static[StaticP5].Visible := V5; + Static[StaticP5ScoreBG].Visible := V5; + Text[TextP5].Visible := V5; + Text[TextP5Score].Visible := V5; + + Static[StaticP6].Visible := V6; + Static[StaticP6ScoreBG].Visible := V6; + Text[TextP6].Visible := V6; + Text[TextP6Score].Visible := V6; + //Set Position of Line Bonus - PhrasenBonus if (Ini.LineBonus = 1) then //Show Line Bonus at Scores begin - Case PlayersPlay of + Case PlayersPlay of 1: begin Player[0].LineBonus_TargetX := Theme.Sing.StaticP1ScoreBG.x; Player[0].LineBonus_TargetY := Theme.Sing.TextP1Score.Y; @@ -517,17 +901,33 @@ begin Player[1].LineBonus_StartX := Theme.Sing.StaticP2RScoreBG.x; Player[1].LineBonus_StartY := Theme.Sing.TextP2RScore.Y + 65; - //P3 - Player[2].LineBonus_TargetX := Theme.Sing.StaticP1TwoPScoreBG.x; - Player[2].LineBonus_TargetY := Theme.Sing.TextP1TwoPScore.Y; - Player[2].LineBonus_StartX := Theme.Sing.StaticP1TwoPScoreBG.x; - Player[2].LineBonus_StartY := Theme.Sing.TextP1TwoPScore.Y + 65; - - //P4 - Player[3].LineBonus_TargetX := Theme.Sing.StaticP2RScoreBG.x; - Player[3].LineBonus_TargetY := Theme.Sing.TextP2RScore.Y; - Player[3].LineBonus_StartX := Theme.Sing.StaticP2RScoreBG.x; - Player[3].LineBonus_StartY := Theme.Sing.TextP2RScore.Y + 65; + if P4Mode then + begin + //P3 + Player[2].LineBonus_TargetX := Theme.Sing.StaticP3FourPScoreBG.x; + Player[2].LineBonus_TargetY := Theme.Sing.TextP3FourPScore.Y; + Player[2].LineBonus_StartX := Theme.Sing.StaticP3FourPScoreBG.x; + Player[2].LineBonus_StartY := Theme.Sing.TextP3FourPScore.Y + 65; + + //P4 + Player[3].LineBonus_TargetX := Theme.Sing.StaticP4FourPScoreBG.x; + Player[3].LineBonus_TargetY := Theme.Sing.TextP4FourPScore.Y; + Player[3].LineBonus_StartX := Theme.Sing.StaticP4FourPScoreBG.x; + Player[3].LineBonus_StartY := Theme.Sing.TextP4FourPScore.Y + 65; + end else + begin + //P3 + Player[2].LineBonus_TargetX := Theme.Sing.StaticP1TwoPScoreBG.x; + Player[2].LineBonus_TargetY := Theme.Sing.TextP1TwoPScore.Y; + Player[2].LineBonus_StartX := Theme.Sing.StaticP1TwoPScoreBG.x; + Player[2].LineBonus_StartY := Theme.Sing.TextP1TwoPScore.Y + 65; + + //P4 + Player[3].LineBonus_TargetX := Theme.Sing.StaticP2RScoreBG.x; + Player[3].LineBonus_TargetY := Theme.Sing.TextP2RScore.Y; + Player[3].LineBonus_StartX := Theme.Sing.StaticP2RScoreBG.x; + Player[3].LineBonus_StartY := Theme.Sing.TextP2RScore.Y + 65; + end; end; 6: begin @@ -549,44 +949,53 @@ begin Player[2].LineBonus_StartX := Theme.Sing.StaticP3RScoreBG.x; Player[2].LineBonus_StartY := Theme.Sing.TextP3RScore.Y + 65; - //P4 - Player[3].LineBonus_TargetX := Theme.Sing.StaticP1ThreePScoreBG.x; - Player[3].LineBonus_TargetY := Theme.Sing.TextP1ThreePScore.Y; - Player[3].LineBonus_StartX := Theme.Sing.StaticP1ThreePScoreBG.x; - Player[3].LineBonus_StartY := Theme.Sing.TextP1ThreePScore.Y + 65; - - //P5 - Player[4].LineBonus_TargetX := Theme.Sing.StaticP2MScoreBG.x; - Player[4].LineBonus_TargetY := Theme.Sing.TextP2MScore.Y; - Player[4].LineBonus_StartX := Theme.Sing.StaticP2MScoreBG.x; - Player[4].LineBonus_StartY := Theme.Sing.TextP2MScore.Y + 65; - - //P6 - Player[5].LineBonus_TargetX := Theme.Sing.StaticP3RScoreBG.x; - Player[5].LineBonus_TargetY := Theme.Sing.TextP3RScore.Y; - Player[5].LineBonus_StartX := Theme.Sing.StaticP3RScoreBG.x; - Player[5].LineBonus_StartY := Theme.Sing.TextP3RScore.Y + 65; + if P4Mode then + begin + //P4 + Player[3].LineBonus_TargetX := Theme.Sing.StaticP4SixPScoreBG.x; + Player[3].LineBonus_TargetY := Theme.Sing.TextP4SixPScore.Y; + Player[3].LineBonus_StartX := Theme.Sing.StaticP4SixPScoreBG.x; + Player[3].LineBonus_StartY := Theme.Sing.TextP4SixPScore.Y + 65; + + //P5 + Player[4].LineBonus_TargetX := Theme.Sing.StaticP5ScoreBG.x; + Player[4].LineBonus_TargetY := Theme.Sing.TextP5Score.Y; + Player[4].LineBonus_StartX := Theme.Sing.StaticP5ScoreBG.x; + Player[4].LineBonus_StartY := Theme.Sing.TextP5Score.Y + 65; + + //P6 + Player[5].LineBonus_TargetX := Theme.Sing.StaticP6ScoreBG.x; + Player[5].LineBonus_TargetY := Theme.Sing.TextP6Score.Y; + Player[5].LineBonus_StartX := Theme.Sing.StaticP6ScoreBG.x; + Player[5].LineBonus_StartY := Theme.Sing.TextP6Score.Y + 65; + end else + begin + //P4 + Player[3].LineBonus_TargetX := Theme.Sing.StaticP1ThreePScoreBG.x; + Player[3].LineBonus_TargetY := Theme.Sing.TextP1ThreePScore.Y; + Player[3].LineBonus_StartX := Theme.Sing.StaticP1ThreePScoreBG.x; + Player[3].LineBonus_StartY := Theme.Sing.TextP1ThreePScore.Y + 65; + + //P5 + Player[4].LineBonus_TargetX := Theme.Sing.StaticP2MScoreBG.x; + Player[4].LineBonus_TargetY := Theme.Sing.TextP2MScore.Y; + Player[4].LineBonus_StartX := Theme.Sing.StaticP2MScoreBG.x; + Player[4].LineBonus_StartY := Theme.Sing.TextP2MScore.Y + 65; + + //P6 + Player[5].LineBonus_TargetX := Theme.Sing.StaticP3RScoreBG.x; + Player[5].LineBonus_TargetY := Theme.Sing.TextP3RScore.Y; + Player[5].LineBonus_StartX := Theme.Sing.StaticP3RScoreBG.x; + Player[5].LineBonus_StartY := Theme.Sing.TextP3RScore.Y + 65; + end; + end; end; - end; - end - else if (Ini.LineBonus = 2) then //Show Line Bonus at Notes + end else if (Ini.LineBonus = 2) then //Show Line Bonus at Notes begin //SingDrawNoteLines(Nr.Left + 10*ScreenX, 120, Nr.Right + 10*ScreenX, 12); //SingDrawNoteLines(Nr.Left + 10*ScreenX, 245, Nr.Right + 10*ScreenX, 12); //SingDrawNoteLines(Nr.Left + 10*ScreenX, 370, Nr.Right + 10*ScreenX, 12); - // positions - if Ini.SingWindow = 0 then begin - NR.Left := 120; - end else begin - NR.Left := 20; - end; - NR.Right := 780; - - NR.Width := NR.Right - NR.Left; - NR.WMid := NR.Width / 2; - NR.Mid := NR.Left + NR.WMid; - Case PlayersPlay of 1: begin Player[0].LineBonus_TargetX := Round(Nr.Right + 10*ScreenX - 100); @@ -642,17 +1051,33 @@ begin Player[1].LineBonus_StartX := Round(Nr.Right + 10*ScreenX - 100); Player[1].LineBonus_StartY := Skin_P2_NotesB - 105 + 28; - //P3 - Player[2].LineBonus_TargetX := Round(Nr.Right + 10*ScreenX - 100); - Player[2].LineBonus_TargetY := Skin_P1_NotesB - 105 - 65 + 28; - Player[2].LineBonus_StartX := Round(Nr.Right + 10*ScreenX - 100); - Player[2].LineBonus_StartY := Skin_P1_NotesB - 105 + 28; - - //P4 - Player[3].LineBonus_TargetX := Round(Nr.Right + 10*ScreenX - 100); - Player[3].LineBonus_TargetY := Skin_P2_NotesB - 105 - 65 + 28; - Player[3].LineBonus_StartX := Round(Nr.Right + 10*ScreenX - 100); - Player[3].LineBonus_StartY := Skin_P2_NotesB - 105 + 28; + if P4Mode then + begin + //P3 + Player[2].LineBonus_TargetX := Round(400 + Nr.Right + 10*ScreenX - 100); + Player[2].LineBonus_TargetY := Skin_P1_NotesB - 105 - 65 + 28; + Player[2].LineBonus_StartX := Round(400 + Nr.Right + 10*ScreenX - 100); + Player[2].LineBonus_StartY := Skin_P1_NotesB - 105 + 28; + + //P4 + Player[3].LineBonus_TargetX := Round(400 + Nr.Right + 10*ScreenX - 100); + Player[3].LineBonus_TargetY := Skin_P2_NotesB - 105 - 65 + 28; + Player[3].LineBonus_StartX := Round(400 + Nr.Right + 10*ScreenX - 100); + Player[3].LineBonus_StartY := Skin_P2_NotesB - 105 + 28; + end else + begin + //P3 + Player[2].LineBonus_TargetX := Round(Nr.Right + 10*ScreenX - 100); + Player[2].LineBonus_TargetY := Skin_P1_NotesB - 105 - 65 + 28; + Player[2].LineBonus_StartX := Round(Nr.Right + 10*ScreenX - 100); + Player[2].LineBonus_StartY := Skin_P1_NotesB - 105 + 28; + + //P4 + Player[3].LineBonus_TargetX := Round(Nr.Right + 10*ScreenX - 100); + Player[3].LineBonus_TargetY := Skin_P2_NotesB - 105 - 65 + 28; + Player[3].LineBonus_StartX := Round(Nr.Right + 10*ScreenX - 100); + Player[3].LineBonus_StartY := Skin_P2_NotesB - 105 + 28; + end; end; 6: begin @@ -674,28 +1099,87 @@ begin Player[2].LineBonus_StartX := Round(Nr.Right + 10*ScreenX - 100); Player[2].LineBonus_StartY := 370 + 28; - //P4 - Player[3].LineBonus_TargetX := Round(Nr.Right + 10*ScreenX - 100); - Player[3].LineBonus_TargetY := 120 - 65 + 28; - Player[3].LineBonus_StartX := Round(Nr.Right + 10*ScreenX - 100); - Player[3].LineBonus_StartY := 120 + 28; - - //P5 - Player[4].LineBonus_TargetX := Round(Nr.Right + 10*ScreenX - 100); - Player[4].LineBonus_TargetY := 245 - 65 + 28; - Player[4].LineBonus_StartX := Round(Nr.Right + 10*ScreenX - 100); - Player[4].LineBonus_StartY := 245 + 28; - - //P6 - Player[5].LineBonus_TargetX := Round(Nr.Right + 10*ScreenX - 100); - Player[5].LineBonus_TargetY := 370 - 65 + 28; - Player[5].LineBonus_StartX := Round(Nr.Right + 10*ScreenX - 100); - Player[5].LineBonus_StartY := 370 + 28; + if P4Mode then + begin + //P4 + Player[3].LineBonus_TargetX := Round(400 + Nr.Right + 10*ScreenX - 100); + Player[3].LineBonus_TargetY := 120 - 65 + 28; + Player[3].LineBonus_StartX := Round(400 + Nr.Right + 10*ScreenX - 100); + Player[3].LineBonus_StartY := 120 + 28; + + //P5 + Player[4].LineBonus_TargetX := Round(400 + Nr.Right + 10*ScreenX - 100); + Player[4].LineBonus_TargetY := 245 - 65 + 28; + Player[4].LineBonus_StartX := Round(400 + Nr.Right + 10*ScreenX - 100); + Player[4].LineBonus_StartY := 245 + 28; + + //P6 + Player[5].LineBonus_TargetX := Round(400 + Nr.Right + 10*ScreenX - 100); + Player[5].LineBonus_TargetY := 370 - 65 + 28; + Player[5].LineBonus_StartX := Round(400 + Nr.Right + 10*ScreenX - 100); + Player[5].LineBonus_StartY := 370 + 28; + end else + begin + //P4 + Player[3].LineBonus_TargetX := Round(Nr.Right + 10*ScreenX - 100); + Player[3].LineBonus_TargetY := 120 - 65 + 28; + Player[3].LineBonus_StartX := Round(Nr.Right + 10*ScreenX - 100); + Player[3].LineBonus_StartY := 120 + 28; + + //P5 + Player[4].LineBonus_TargetX := Round(Nr.Right + 10*ScreenX - 100); + Player[4].LineBonus_TargetY := 245 - 65 + 28; + Player[4].LineBonus_StartX := Round(Nr.Right + 10*ScreenX - 100); + Player[4].LineBonus_StartY := 245 + 28; + + //P6 + Player[5].LineBonus_TargetX := Round(Nr.Right + 10*ScreenX - 100); + Player[5].LineBonus_TargetY := 370 - 65 + 28; + Player[5].LineBonus_StartX := Round(Nr.Right + 10*ScreenX - 100); + Player[5].LineBonus_StartY := 370 + 28; + end; end; end; end; //Set Position of Line Bonus - PhrasenBonus End + if (PlayersPlay=6) then + begin + LoadColor(Static[StaticP4SixP].Texture.ColR, Static[StaticP4SixP].Texture.ColG, + Static[StaticP4SixP].Texture.ColB, 'P4Dark'); + LoadColor(Static[StaticP5].Texture.ColR, Static[StaticP5].Texture.ColG, + Static[StaticP5].Texture.ColB, 'P5Dark'); + LoadColor(Static[StaticP6].Texture.ColR, Static[StaticP6].Texture.ColG, + Static[StaticP6].Texture.ColB, 'P6Dark'); + + LoadColor(Static[StaticP4SixPScoreBG].Texture.ColR, Static[StaticP4SixPScoreBG].Texture.ColG, + Static[StaticP4SixPScoreBG].Texture.ColB, 'P4Dark'); + LoadColor(Static[StaticP5ScoreBG].Texture.ColR, Static[StaticP5ScoreBG].Texture.ColG, + Static[StaticP5ScoreBG].Texture.ColB, 'P5Dark'); + LoadColor(Static[StaticP6ScoreBG].Texture.ColR, Static[StaticP6ScoreBG].Texture.ColG, + Static[StaticP6ScoreBG].Texture.ColB, 'P6Dark'); + + Text[TextP4SixP].Text := 'P4'; + Text[TextP5].Text := 'P5'; + Text[TextP6].Text := 'P6'; + end; + + if (PlayersPlay=4) then + begin + LoadColor(Static[StaticP3FourP].Texture.ColR, Static[StaticP3FourP].Texture.ColG, + Static[StaticP3FourP].Texture.ColB, 'P3Dark'); + LoadColor(Static[StaticP4FourP].Texture.ColR, Static[StaticP4FourP].Texture.ColG, + Static[StaticP4FourP].Texture.ColB, 'P4Dark'); + + LoadColor(Static[StaticP3FourPScoreBG].Texture.ColR, Static[StaticP3FourPScoreBG].Texture.ColG, + Static[StaticP3FourPScoreBG].Texture.ColB, 'P3Dark'); + LoadColor(Static[StaticP4FourPScoreBG].Texture.ColR, Static[StaticP4FourPScoreBG].Texture.ColG, + Static[StaticP4FourPScoreBG].Texture.ColB, 'P4Dark'); + + Text[TextP3FourP].Text := 'P3'; + Text[TextP4FourP].Text := 'P4'; + end; + LoadNextSong; Log.LogStatus('End', 'onShow'); @@ -1206,7 +1690,7 @@ begin // stereo // weird stuff, maybe this is for "dual screen?", but where is player three then? - Static[StaticP1].Texture.X := Static[StaticP1].Texture.X + 10*ScreenX; + {Static[StaticP1].Texture.X := Static[StaticP1].Texture.X + 10*ScreenX; Static[StaticP1ScoreBG].Texture.X := Static[StaticP1ScoreBG].Texture.X + 10*ScreenX; Text[TextP1].X := Text[TextP1].X + 10*ScreenX; @@ -1224,7 +1708,7 @@ begin Static[S].Texture.X := Static[S].Texture.X + 10*ScreenX; for T := 0 to 1 do - Text[T].X := Text[T].X + 10*ScreenX; + Text[T].X := Text[T].X + 10*ScreenX;} // update static menu with time ... if ScreenSong.Mode <> smMedley then @@ -1270,13 +1754,15 @@ begin medley_start_applause := false; // .. and scores - if PlayersPlay = 1 then begin + if PlayersPlay = 1 then + begin Tekst := IntToStr(Player[0].ScoreTotalI); while Length(Tekst) < 5 do Tekst := '0' + Tekst; Text[TextP1Score].Text := Tekst; end; - if PlayersPlay = 2 then begin + if PlayersPlay = 2 then + begin Tekst := IntToStr(Player[0].ScoreTotalI); while Length(Tekst) < 5 do Tekst := '0' + Tekst; Text[TextP1TwoPScore].Text := Tekst; @@ -1286,7 +1772,8 @@ begin Text[TextP2RScore].Text := Tekst; end; - if PlayersPlay = 3 then begin + if PlayersPlay = 3 then + begin Tekst := IntToStr(Player[0].ScoreTotalI); while Length(Tekst) < 5 do Tekst := '0' + Tekst; Text[TextP1ThreePScore].Text := Tekst; @@ -1300,8 +1787,10 @@ begin Text[TextP3RScore].Text := Tekst; end; - if PlayersPlay = 4 then begin - if ScreenAct = 1 then begin + if PlayersPlay = 4 then + begin + if ScreenAct = 1 then + begin Tekst := IntToStr(Player[0].ScoreTotalI); while Length(Tekst) < 5 do Tekst := '0' + Tekst; Text[TextP1TwoPScore].Text := Tekst; @@ -1310,7 +1799,9 @@ begin while Length(Tekst) < 5 do Tekst := '0' + Tekst; Text[TextP2RScore].Text := Tekst; end; - if ScreenAct = 2 then begin + + if ScreenAct = 2 then + begin Tekst := IntToStr(Player[2].ScoreTotalI); while Length(Tekst) < 5 do Tekst := '0' + Tekst; Text[TextP1TwoPScore].Text := Tekst; @@ -1319,10 +1810,23 @@ begin while Length(Tekst) < 5 do Tekst := '0' + Tekst; Text[TextP2RScore].Text := Tekst; end; + + if P4Mode then + begin + Tekst := IntToStr(Player[2].ScoreTotalI); + while Length(Tekst) < 5 do Tekst := '0' + Tekst; + Text[TextP3FourPScore].Text := Tekst; + + Tekst := IntToStr(Player[3].ScoreTotalI); + while Length(Tekst) < 5 do Tekst := '0' + Tekst; + Text[TextP4FourPScore].Text := Tekst; + end; end; - if PlayersPlay = 6 then begin - if ScreenAct = 1 then begin + if PlayersPlay = 6 then + begin + if ScreenAct = 1 then + begin Tekst := IntToStr(Player[0].ScoreTotalI); while Length(Tekst) < 5 do Tekst := '0' + Tekst; Text[TextP1ThreePScore].Text := Tekst; @@ -1335,7 +1839,9 @@ begin while Length(Tekst) < 5 do Tekst := '0' + Tekst; Text[TextP3RScore].Text := Tekst; end; - if ScreenAct = 2 then begin + + if ScreenAct = 2 then + begin Tekst := IntToStr(Player[3].ScoreTotalI); while Length(Tekst) < 5 do Tekst := '0' + Tekst; Text[TextP1ThreePScore].Text := Tekst; @@ -1348,6 +1854,21 @@ begin while Length(Tekst) < 5 do Tekst := '0' + Tekst; Text[TextP3RScore].Text := Tekst; end; + + if P4Mode then + begin + Tekst := IntToStr(Player[3].ScoreTotalI); + while Length(Tekst) < 5 do Tekst := '0' + Tekst; + Text[TextP4SixPScore].Text := Tekst; + + Tekst := IntToStr(Player[4].ScoreTotalI); + while Length(Tekst) < 5 do Tekst := '0' + Tekst; + Text[TextP5Score].Text := Tekst; + + Tekst := IntToStr(Player[5].ScoreTotalI); + while Length(Tekst) < 5 do Tekst := '0' + Tekst; + Text[TextP6Score].Text := Tekst; + end; end; @@ -1445,6 +1966,8 @@ begin Alpha[I] := Alpha[I]-TimeSkip/dt; if (Alpha[I]<0) then Alpha[I] := 0; + end else if (ab>2*dt) then + begin end else if (ab>dt) then begin Alpha[I] := Alpha[I]+TimeSkip/dt; @@ -1458,7 +1981,7 @@ begin begin ab := GetTimeFromBeat(Czesci[I].Czesc[K+1].StartNote) - Czas.Teraz; - if (ab>2*dt) then + if (ab>2.5*dt) then Alpha[I+2] := 0 else if (ab>dt) then Alpha[I+2] := (1-(ab-dt)/dt) @@ -1488,7 +2011,7 @@ begin // back stereo // weird stuff, maybe this is for "dual screen?", but where is player three then? - Static[StaticP1].Texture.X := Static[StaticP1].Texture.X - 10*ScreenX; + {Static[StaticP1].Texture.X := Static[StaticP1].Texture.X - 10*ScreenX; Static[StaticP1ScoreBG].Texture.X := Static[StaticP1ScoreBG].Texture.X - 10*ScreenX; Text[TextP1].X := Text[TextP1].X - 10*ScreenX; @@ -1499,7 +2022,7 @@ begin Static[StaticP2RScoreBG].Texture.X := Static[StaticP2RScoreBG].Texture.X - 10*ScreenX; Text[TextP2R].X := Text[TextP2R].X - 10*ScreenX; - Text[TextP2RScore].X := Text[TextP2RScore].X - 10*ScreenX; + Text[TextP2RScore].X := Text[TextP2RScore].X - 10*ScreenX;} //weird end for S := 1 to 1 do diff --git a/Game/Code/Screens/UScreenSong.pas b/Game/Code/Screens/UScreenSong.pas index 226ae532..33018783 100644 --- a/Game/Code/Screens/UScreenSong.pas +++ b/Game/Code/Screens/UScreenSong.pas @@ -36,8 +36,9 @@ type TScreenSong = class(TMenu) private - SkippedSongs: array of integer; + SkippedSongs: array of integer; ChooseableSongs: integer; + isScrolling: boolean; public MP3Volume: integer; @@ -54,7 +55,7 @@ type TextTop: array[0..2] of integer; StaticTop: integer; - FoundCAT: boolean; //for M2-MOD: a cat is chosen, see whats next... + FoundCAT: boolean; //for M2-MOD: a cat is chosen, see whats next... SongIndex: integer; //Index of Song that is playing since UScreenScore... @@ -76,7 +77,7 @@ type MakeMedley: boolean; //InfoHandler - InfoHandler: THandler; + InfoHandler: THandler; //AspectHandler AspectHandler: THandler; @@ -104,7 +105,7 @@ type is_jump_title:boolean; //Jump to SOng MOd-YTrue if search for Title EqualizerBands: array of Byte; - EqualizerTime: Cardinal; + EqualizerTime: Cardinal; EqualizerTime2: Byte; ID: string; //for help-system @@ -174,6 +175,7 @@ type procedure Refresh(GiveStats: boolean); //Refresh Song Sorting procedure DrawEqualizer; procedure ChangeMusic; + procedure StartPreview; procedure LoadTop; procedure StartVideoPreview; //Party Mode @@ -2081,6 +2083,7 @@ begin Mode := smNormal; MakeMedley := false; + isScrolling := false; StartTry := false; AspectHandler.changed := false; @@ -2356,6 +2359,11 @@ var begin dx := SongTarget-SongCurrent; + if SameValue(SongTarget, SongCurrent, 0.002) then + isScrolling := false + else + isScrolling := true; + dt := TimeSkip*7; if dt > 1 then dt := 1; SongCurrent := SongCurrent + dx*dt; @@ -2371,10 +2379,11 @@ begin // Log.LogBenchmark('SetScroll4', 5); //Fading Functions, Only if Covertime is under 10 Seconds - If (CoverTime < 10) then + If (CoverTime < 10) and not isScrolling then begin // 0.5.0: cover fade - if (CoverTime < 1) and (CoverTime + TimeSkip >= 1) then begin + if (CoverTime < 1) and (CoverTime + TimeSkip >= 1) then + begin // load new texture Texture.GetTexture(Button[Interaction].Texture.Name, 'Plain', false); Button[Interaction].Texture.Alpha := 1; @@ -2719,6 +2728,8 @@ begin end; DrawExtensions; + + StartPreview; end; procedure TScreenSong.DrawInfo(text: string); @@ -2758,7 +2769,8 @@ begin if VS > 0 then begin - UnLoadDetailedCover; + if (not isScrolling) and (VS>1) then + UnLoadDetailedCover; Skip := 1; Skip2:= 0; @@ -2834,7 +2846,8 @@ begin if VS > 0 then begin - UnLoadDetailedCover; + if (not isScrolling) and (VS>1) then + UnLoadDetailedCover; Skip := 1; @@ -2863,6 +2876,7 @@ begin begin Music.Close; acClose; + { if Music.Open(CatSongs.Song[Interaction].Path + CatSongs.Song[Interaction].Mp3) then begin if (CatSongs.Song[Interaction].PreviewStart>0) then @@ -2881,54 +2895,44 @@ begin Music.Fade(0, MP3Volume, Ini.PreviewFading); Music.Play; end; - end; + end; } end else + begin Music.Stop; + acClose; + end; end; LoadTop; end; -procedure TScreenSong.LoadTop; -var - I: integer; +procedure TScreenSong.StartPreview; begin - //Load Top 3 - if (NOT CatSongs.Song[Interaction].Main) AND (CatSongs.VisibleSongs > 0) and - not MakeMedley and not PartyMedley then + if (Ini.PreviewVolume >= 0) and not isScrolling and not Music.isOpen then begin - AktSong := CatSongs.Song[Interaction]; - DataBase.ReadScore(AktSong, 3, {Ini.SumPlayers}0); - - for I := 0 to 2 do + if Music.Open(CatSongs.Song[Interaction].Path + CatSongs.Song[Interaction].Mp3) then begin - Text[TextTop[I]].Text := IntToStr(I+1)+'. '; - end; - - if Length(AktSong.Score[Ini.Difficulty])>0 then - Static[StaticTop].Visible := true - else - Static[StaticTop].Visible := false; - - for I := 0 to Length(AktSong.Score[Ini.Difficulty])-1 do - begin - Text[TextTop[I]].Visible := true; + if (CatSongs.Song[Interaction].PreviewStart>0) then + Music.MoveTo(CatSongs.Song[Interaction].PreviewStart) + else + Music.MoveTo(Music.Length / 4); - Text[TextTop[I]].Text := Text[TextTop[I]].Text + AktSong.Score[Ini.Difficulty, I].Name + '\n' + - AktSong.Score[Ini.Difficulty, I].Date + ' (' + IntToStr(AktSong.Score[Ini.Difficulty, I].Score) + ')'; + StartVideoPreview; + //If Song Fading is activated then don't Play directly, and Set Volume to Null, else Play normal + if (Ini.PreviewFading = 0) then + begin + Music.SetMusicVolume (MP3Volume); + Music.Play; + end else + begin + Music.Fade(0, MP3Volume, Ini.PreviewFading); + Music.Play; + end; end; - - for I := Length(AktSong.Score[Ini.Difficulty]) to 2 do - Text[TextTop[I]].Visible := false; - end else - begin - for I := 0 to 2 do - Text[TextTop[I]].Visible := false; - - Static[StaticTop].Visible := false; end; end; + procedure TScreenSong.StartVideoPreview; begin if (Ini.PreviewVolume >= 0) and (Ini.MovieSize < 3) then @@ -2991,6 +2995,46 @@ begin end; end; +procedure TScreenSong.LoadTop; +var + I: integer; +begin + //Load Top 3 + if (NOT CatSongs.Song[Interaction].Main) AND (CatSongs.VisibleSongs > 0) and + not MakeMedley and not PartyMedley then + begin + AktSong := CatSongs.Song[Interaction]; + DataBase.ReadScore(AktSong, 3, {Ini.SumPlayers}0); + + for I := 0 to 2 do + begin + Text[TextTop[I]].Text := IntToStr(I+1)+'. '; + end; + + if Length(AktSong.Score[Ini.Difficulty])>0 then + Static[StaticTop].Visible := true + else + Static[StaticTop].Visible := false; + + for I := 0 to Length(AktSong.Score[Ini.Difficulty])-1 do + begin + Text[TextTop[I]].Visible := true; + + Text[TextTop[I]].Text := Text[TextTop[I]].Text + AktSong.Score[Ini.Difficulty, I].Name + '\n' + + AktSong.Score[Ini.Difficulty, I].Date + ' (' + IntToStr(AktSong.Score[Ini.Difficulty, I].Score) + ')'; + end; + + for I := Length(AktSong.Score[Ini.Difficulty]) to 2 do + Text[TextTop[I]].Visible := false; + end else + begin + for I := 0 to 2 do + Text[TextTop[I]].Visible := false; + + Static[StaticTop].Visible := false; + end; +end; + procedure TScreenSong.SkipTo(Target: Cardinal); // 0.5.0 var -- cgit v1.2.3