From 0d5fbd096cddf37bfc3a5f642644179c81bde582 Mon Sep 17 00:00:00 2001 From: mogguh Date: Thu, 20 Dec 2007 00:21:32 +0000 Subject: Minor refinings in score screen git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@732 b956fd51-792f-4845-bead-9b4dfca2ff2c --- Game/Code/Classes/UGraphic.pas | 47 +- Game/Code/Classes/UThemes.pas | 4 + Game/Code/Screens/UScreenScore.pas | 701 ++++++++++++++++++++------- Skins/Deluxe/Blue.ini | 38 +- Skins/Deluxe/Fall.ini | 36 +- Skins/Deluxe/Summer.ini | 36 +- Skins/Deluxe/Winter.ini | 34 +- Skins/Deluxe/[score]Line.png | Bin 216 -> 2825 bytes Skins/Deluxe/[score]bar_box_dark.png | Bin 0 -> 496 bytes Skins/Deluxe/[score]bar_box_light.png | Bin 0 -> 490 bytes Skins/Deluxe/[score]bar_box_lightest.png | Bin 0 -> 484 bytes Skins/Deluxe/[score]endcap.png | Bin 2339 -> 2275 bytes Skins/Deluxe/[score]glass_box.png | Bin 0 -> 3581 bytes Skins/Deluxe/[score]level.png | Bin 174 -> 266 bytes Skins/Deluxe/[score]levelRound.png | Bin 360 -> 524 bytes Skins/Deluxe/[score]level_dark.png | Bin 0 -> 213 bytes Skins/Deluxe/[score]level_dark_round.png | Bin 0 -> 410 bytes Skins/Deluxe/[score]level_light.png | Bin 0 -> 209 bytes Skins/Deluxe/[score]level_light_round.png | Bin 0 -> 445 bytes Skins/Deluxe/[score]level_lightest.png | Bin 0 -> 209 bytes Skins/Deluxe/[score]level_lightest_round.png | Bin 0 -> 467 bytes Skins/Deluxe/[score]rating_0.png | Bin 0 -> 18351 bytes Skins/Deluxe/[score]rating_1.png | Bin 0 -> 16724 bytes Skins/Deluxe/[score]rating_2.png | Bin 0 -> 20557 bytes Skins/Deluxe/[score]rating_3.png | Bin 0 -> 15562 bytes Skins/Deluxe/[score]rating_4.png | Bin 0 -> 14538 bytes Skins/Deluxe/[score]rating_5.png | Bin 0 -> 15317 bytes Skins/Deluxe/[score]rating_6.png | Bin 0 -> 13896 bytes Themes/Deluxe.ini | 472 +++++++++--------- 29 files changed, 966 insertions(+), 402 deletions(-) create mode 100644 Skins/Deluxe/[score]bar_box_dark.png create mode 100644 Skins/Deluxe/[score]bar_box_light.png create mode 100644 Skins/Deluxe/[score]bar_box_lightest.png create mode 100644 Skins/Deluxe/[score]glass_box.png create mode 100644 Skins/Deluxe/[score]level_dark.png create mode 100644 Skins/Deluxe/[score]level_dark_round.png create mode 100644 Skins/Deluxe/[score]level_light.png create mode 100644 Skins/Deluxe/[score]level_light_round.png create mode 100644 Skins/Deluxe/[score]level_lightest.png create mode 100644 Skins/Deluxe/[score]level_lightest_round.png create mode 100644 Skins/Deluxe/[score]rating_0.png create mode 100644 Skins/Deluxe/[score]rating_1.png create mode 100644 Skins/Deluxe/[score]rating_2.png create mode 100644 Skins/Deluxe/[score]rating_3.png create mode 100644 Skins/Deluxe/[score]rating_4.png create mode 100644 Skins/Deluxe/[score]rating_5.png create mode 100644 Skins/Deluxe/[score]rating_6.png diff --git a/Game/Code/Classes/UGraphic.pas b/Game/Code/Classes/UGraphic.pas index f774a899..32d7d304 100644 --- a/Game/Code/Classes/UGraphic.pas +++ b/Game/Code/Classes/UGraphic.pas @@ -157,8 +157,20 @@ var //End PhrasenBonus - Line Bonus Mod //ScoreBG Texs - Tex_ScoreBG: array [0..5] of TTexture; + Tex_ScoreBG: array [1..6] of TTexture; + //Score Screen Textures + Tex_Score_NoteBarLevel_Dark : array [1..6] of TTexture; + Tex_Score_NoteBarRound_Dark : array [1..6] of TTexture; + + Tex_Score_NoteBarLevel_Light : array [1..6] of TTexture; + Tex_Score_NoteBarRound_Light : array [1..6] of TTexture; + + Tex_Score_NoteBarLevel_Lightest : array [1..6] of TTexture; + Tex_Score_NoteBarRound_Lightest : array [1..6] of TTexture; + + Tex_Score_Ratings : array [0..6] of TTexture; + const Skin_BGColorR = 1; Skin_BGColorG = 1; @@ -348,14 +360,45 @@ begin Tex_SingLineBonusBack[P] := Texture.LoadTexture(pchar(Skin.GetTextureFileName('LineBonusBack')), 'PNG', 'Colorized', Col); end; - //Score BG Textures +//## backgrounds for the scores ## for P := 0 to 5 do begin LoadColor(R, G, B, 'P' + IntToStr(P+1) + 'Light'); Col := $10000 * Round(R*255) + $100 * Round(G*255) + Round(B*255); Tex_ScoreBG[P] := Texture.LoadTexture(pchar(Skin.GetTextureFileName('ScoreBG')), 'PNG', 'Colorized', Col); end; + Log.LogStatus('Loading Textures - D', 'LoadTextures'); + +// ###################### +// Score screen textures +// ###################### + +//## the bars that visualize the score ## + for P := 1 to 6 do begin +//NoteBar ScoreBar + LoadColor(R, G, B, 'P' + IntToStr(P) + 'Dark'); + Col := $10000 * Round(R*255) + $100 * Round(G*255) + Round(B*255); + Tex_Score_NoteBarLevel_Dark[P] := Texture.LoadTexture(pchar(Skin.GetTextureFileName('ScoreLevel_Dark')), 'PNG', 'Colorized', Col); + Tex_Score_NoteBarRound_Dark[P] := Texture.LoadTexture(pchar(Skin.GetTextureFileName('ScoreLevel_Dark_Round')), 'PNG', 'Colorized', Col); +//LineBonus ScoreBar + LoadColor(R, G, B, 'P' + IntToStr(P) + 'Light'); + Col := $10000 * Round(R*255) + $100 * Round(G*255) + Round(B*255); + Tex_Score_NoteBarLevel_Light[P] := Texture.LoadTexture(pchar(Skin.GetTextureFileName('ScoreLevel_Light')), 'PNG', 'Colorized', Col); + Tex_Score_NoteBarRound_Light[P] := Texture.LoadTexture(pchar(Skin.GetTextureFileName('ScoreLevel_Light_Round')), 'PNG', 'Colorized', Col); +//GoldenNotes ScoreBar + LoadColor(R, G, B, 'P' + IntToStr(P) + 'Lightest'); + Col := $10000 * Round(R*255) + $100 * Round(G*255) + Round(B*255); + Tex_Score_NoteBarLevel_Lightest[P] := Texture.LoadTexture(pchar(Skin.GetTextureFileName('ScoreLevel_Lightest')), 'PNG', 'Colorized', Col); + Tex_Score_NoteBarRound_Lightest[P] := Texture.LoadTexture(pchar(Skin.GetTextureFileName('ScoreLevel_Lightest_Round')), 'PNG', 'Colorized', Col); + end; + +//## rating pictures that show a picture according to your rate ## + for P := 0 to 6 do begin + Tex_Score_Ratings[P] := Texture.LoadTexture(pchar(Skin.GetTextureFileName('Rating_'+IntToStr(P))), 'PNG', 'Transparent', 0); + end; + + Log.LogStatus('Loading Textures - Done', 'LoadTextures'); end; procedure Initialize3D (Title: string); diff --git a/Game/Code/Classes/UThemes.pas b/Game/Code/Classes/UThemes.pas index f7b08479..1c731ce0 100644 --- a/Game/Code/Classes/UThemes.pas +++ b/Game/Code/Classes/UThemes.pas @@ -343,6 +343,8 @@ type StaticBoxLight: array[1..6] of TThemeStatic; StaticBoxDark: array[1..6] of TThemeStatic; + StaticRatings: array[1..6] of TThemeStatic; + StaticBackLevel: array[1..6] of TThemeStatic; StaticBackLevelRound: array[1..6] of TThemeStatic; StaticLevel: array[1..6] of TThemeStatic; @@ -1082,6 +1084,8 @@ begin ThemeLoadStatic(Score.StaticBackLevelRound[I], 'ScoreStaticBackLevelRound' + IntToStr(I)); ThemeLoadStatic(Score.StaticLevel[I], 'ScoreStaticLevel' + IntToStr(I)); ThemeLoadStatic(Score.StaticLevelRound[I], 'ScoreStaticLevelRound' + IntToStr(I)); + + ThemeLoadStatic(Score.StaticRatings[I], 'ScoreStaticRatingPicture' + IntToStr(I)); end; // Top5 diff --git a/Game/Code/Screens/UScreenScore.pas b/Game/Code/Screens/UScreenScore.pas index 0ed04b89..35296233 100644 --- a/Game/Code/Screens/UScreenScore.pas +++ b/Game/Code/Screens/UScreenScore.pas @@ -19,20 +19,69 @@ uses OpenGL12, {$ifdef win32} Windows, + dialogs, {$endif} math, - ULCD; - + ULCD, + UTexture; // OpenGL; +const + ZBars : real = 0.8; // Z value for the bars + ZRatingPic : real = 0.8; // Z value for the rating pictures + + EaseOut_MaxSteps : real = 40; // that's the speed of the bars (10 is fast | 100 is slower) + type + TPlayerScoreScreenTexture = record // holds all colorized textures for up to 6 players + //Bar textures + Score_NoteBarLevel_Dark : TTexture; // Note + Score_NoteBarRound_Dark : TTexture; // that's the round thing on top + + Score_NoteBarLevel_Light : TTexture; // LineBonus | Phrasebonus + Score_NoteBarRound_Light : TTexture; + + Score_NoteBarLevel_Lightest : TTexture; // GoldenNotes + Score_NoteBarRound_Lightest : TTexture; + end; + + TPlayerScoreScreenData = record // holds the positions and other data + Bar_X :Real; + Bar_Y :Real; + Bar_Height :Real; // this is the max height of the bar, who knows if there ever will be a theme with different heights :D + Bar_Width :Real; // another rather senseless setting, but you never know what our cool users do with the them :) + + Bar_Actual_Height : Real; // this one holds the actual height of the bar, while we animate it + BarScore_ActualHeight : Real; + BarLine_ActualHeight : Real; + BarGolden_ActualHeight : Real; + end; + + TPlayerScoreRatingPics = record // a fine array of the rating pictures + RatePic_X :Real; + RatePic_Y :Real; + RatePic_Height :Real; + RatePic_Width :Real; + + RateEaseStep : Integer; + RateEaseValue: Real; + end; + TScreenScore = class(TMenu) public + aPlayerScoreScreenTextures : array[1..6] of TPlayerScoreScreenTexture; + aPlayerScoreScreenDatas : array[1..6] of TPlayerScoreScreenData; + aPlayerScoreScreenRatings : array[1..6] of TPlayerScoreRatingPics; + + BarScore_EaseOut_Step : real; + BarPhrase_EaseOut_Step : real; + BarGolden_EaseOut_Step : real; + TextArtist: integer; TextTitle: integer; TextArtistTitle : integer; - + TextName: array[1..6] of integer; TextScore: array[1..6] of integer; @@ -61,19 +110,11 @@ type Animation: real; Fadeout: boolean; - BarScore_ActualHeight : array[0..5] of real; - BarPhrase_ActualHeight : array[0..5] of real; - BarGolden_ActualHeight : array[0..5] of real; - - BarScore_EaseOut_Step : real; - BarPhrase_EaseOut_Step : real; - BarGolden_EaseOut_Step : real; + TextScore_ActualValue : array[1..6] of integer; + TextPhrase_ActualValue : array[1..6] of integer; + TextGolden_ActualValue : array[1..6] of integer; - TextScore_ActualValue : array[0..5] of integer; - TextPhrase_ActualValue : array[0..5] of integer; - TextGolden_ActualValue : array[0..5] of integer; - EaseOut_MaxSteps : real; constructor Create; override; function ParseInput(PressedKey: Cardinal; ScanCode: byte; PressedDown: Boolean): Boolean; override; @@ -82,8 +123,13 @@ type function Draw: boolean; override; procedure FillPlayer(Item, P: integer); - function RaiseBar(PlayerNumber: integer; BarStartPosY: Single; ActualHeight: real; Score: integer; ColorBrightness : String; EaseOut_Step: Real) : real; - function IncrementScore(PlayerNumber: integer; ActualScoreValue: Integer; ScoreReached: integer; EaseOut_Step: Real) : integer; + function EaseBarIn(PlayerNumber : Integer; BarType: String) : real; + function EaseScoreIn(PlayerNumber : Integer; ScoreType: String) : real; + + procedure FillPlayerItems(PlayerNumber : Integer; ScoreType: String); + procedure ShowRating(PlayerNumber: integer); + + function elastique(PlayerNumber : Integer): real; end; implementation @@ -142,18 +188,35 @@ end; constructor TScreenScore.Create; var - P: integer; - I, C: integer; + P : integer; + I, C : integer; + ArrayStartModifier : Byte; + begin inherited Create; LoadFromTheme(Theme.Score); - TextArtist := AddText(Theme.Score.TextArtist); - TextTitle := AddText(Theme.Score.TextTitle); - + TextArtist := AddText(Theme.Score.TextArtist); + TextTitle := AddText(Theme.Score.TextTitle); TextArtistTitle := AddText(Theme.Score.TextArtistTitle); + for P := 1 to 6 do + begin + //textures + aPlayerScoreScreenTextures[P].Score_NoteBarLevel_Dark := Tex_Score_NoteBarLevel_Dark[P]; + aPlayerScoreScreenTextures[P].Score_NoteBarRound_Dark := Tex_Score_NoteBarRound_Dark[P]; + + aPlayerScoreScreenTextures[P].Score_NoteBarLevel_Light := Tex_Score_NoteBarLevel_Light[P]; + aPlayerScoreScreenTextures[P].Score_NoteBarRound_Light := Tex_Score_NoteBarRound_Light[P]; + + aPlayerScoreScreenTextures[P].Score_NoteBarLevel_Lightest := Tex_Score_NoteBarLevel_Lightest[P]; + aPlayerScoreScreenTextures[P].Score_NoteBarRound_Lightest := Tex_Score_NoteBarRound_Lightest[P]; + end; + + +//old stuff + for P := 1 to 6 do begin SetLength(PlayerStatic[P], Length(Theme.Score.PlayerStatic[P])); @@ -186,6 +249,7 @@ begin StaticLevel[P] := AddStatic(Theme.Score.StaticLevel[P]); StaticLevelRound[P] := AddStatic(Theme.Score.StaticLevelRound[P]); end; + end; procedure TScreenScore.onShow; @@ -199,8 +263,44 @@ var V: array[1..6] of boolean; // visibility array MaxH: real; // maximum height of score bar Wsp: real; + ArrayStartModifier :integer; begin + case PlayersPlay of + 1: begin + ArrayStartModifier := 0; + end; + 2, 4: begin + ArrayStartModifier := 1; + end; + 3, 6: begin + ArrayStartModifier := 3; + end; + end; + + for P := 1 to PlayersPlay do + begin + // data + aPlayerScoreScreenDatas[P].Bar_X := Theme.Score.StaticBackLevel[P + ArrayStartModifier].X; + aPlayerScoreScreenDatas[P].Bar_Y := Theme.Score.StaticBackLevel[P + ArrayStartModifier].Y; + aPlayerScoreScreenDatas[P].Bar_Height := Theme.Score.StaticBackLevel[P + ArrayStartModifier].H; + aPlayerScoreScreenDatas[P].Bar_Width := Theme.Score.StaticBackLevel[P + ArrayStartModifier].W; + + aPlayerScoreScreenDatas[P].Bar_Actual_Height := 0; + aPlayerScoreScreenDatas[P].BarScore_ActualHeight := 0; + aPlayerScoreScreenDatas[P].BarLine_ActualHeight := 0; + aPlayerScoreScreenDatas[P].BarGolden_ActualHeight := 0; + + // ratings + aPlayerScoreScreenRatings[P].RatePic_X := Theme.Score.StaticRatings[P + ArrayStartModifier].X; + aPlayerScoreScreenRatings[P].RatePic_Y := Theme.Score.StaticRatings[P + ArrayStartModifier].Y; + aPlayerScoreScreenRatings[P].RatePic_Height := Theme.Score.StaticRatings[P + ArrayStartModifier].H; + aPlayerScoreScreenRatings[P].RatePic_Width := Theme.Score.StaticRatings[P + ArrayStartModifier].W; + aPlayerScoreScreenRatings[P].RateEaseStep := 1; + aPlayerScoreScreenRatings[P].RateEaseValue := 20; + end; + + // Singstar Fadeout := false; @@ -242,15 +342,18 @@ begin Text[TextScore[P]].Visible := V[P]; // We set alpha to 0 , so we can nicely blend them in when we need them - Text[TextScore[P]].Alpha := 0; - Text[TextNotesScore[P]].Alpha := 0; - Text[TextNotes[P]].Alpha := 0; - Text[TextLineBonus[P]].Alpha := 0; - Text[TextLineBonusScore[P]].Alpha := 0; - Text[TextGoldenNotes[P]].Alpha := 0; - Text[TextGoldenNotesScore[P]].Alpha := 0; - Text[TextTotal[P]].Alpha := 0; - Text[TextTotalScore[P]].Alpha := 0; + Text[TextScore[P]].Alpha := 0; + Text[TextNotesScore[P]].Alpha := 0; + Text[TextNotes[P]].Alpha := 0; + Text[TextLineBonus[P]].Alpha := 0; + Text[TextLineBonusScore[P]].Alpha := 0; + Text[TextGoldenNotes[P]].Alpha := 0; + Text[TextGoldenNotesScore[P]].Alpha := 0; + Text[TextTotal[P]].Alpha := 0; + Text[TextTotalScore[P]].Alpha := 0; + Static[StaticBoxLightest[P]].Texture.Alpha := 0; + Static[StaticBoxLight[P]].Texture.Alpha := 0; + Static[StaticBoxDark[P]].Texture.Alpha := 0; Text[TextNotes[P]].Visible := V[P]; @@ -272,7 +375,7 @@ begin Static[StaticBoxLight[P]].Visible := V[P]; Static[StaticBoxDark[P]].Visible := V[P]; -// +// we draw that on our own Static[StaticBackLevel[P]].Visible := false; Static[StaticBackLevelRound[P]].Visible := false; Static[StaticLevel[P]].Visible := false; @@ -284,11 +387,8 @@ procedure TScreenScore.onShowFinish; var index : integer; begin -for index := 0 to (PlayersPlay-1) do +for index := 1 to (PlayersPlay) do begin - BarScore_ActualHeight[index] := 0; - BarPhrase_ActualHeight[index] := 0; - BarGolden_ActualHeight[index] := 0; TextScore_ActualValue[index] := 0; TextPhrase_ActualValue[index] := 0; @@ -298,8 +398,6 @@ for index := 0 to (PlayersPlay-1) do BarScore_EaseOut_Step := 1; BarPhrase_EaseOut_Step := 1; BarGolden_EaseOut_Step := 1; - - EaseOut_MaxSteps := 100; end; function TScreenScore.Draw: boolean; @@ -314,11 +412,14 @@ var Item: integer; P: integer; - C: integer; + C, I: integer; + + CurTime: Cardinal; + + PlayerCounter : integer; - katze : integer; - ArrayStartModifier : integer; begin +{ // 0.5.0: try also use 4 players screen with nicks if PlayersPlay = 4 then begin @@ -339,7 +440,7 @@ begin FillPlayer(Item, P); -{ if ScreenAct = 1 then begin + if ScreenAct = 1 then begin LoadColor( Static[StaticBoxLightest[Item]].Texture.ColR, Static[StaticBoxLightest[Item]].Texture.ColG, @@ -353,57 +454,39 @@ begin Static[StaticBoxLightest[Item]].Texture.ColG, Static[StaticBoxLightest[Item]].Texture.ColB, 'P4Dark'); - end;} + end; end; + + end; +} +inherited Draw; - inherited Draw; + player[0].ScoreI := 7000; + player[0].ScoreLineI := 2000; + player[0].ScoreGoldenI := 1000; + player[0].ScoreTotalI := 10000; - //player[1].ScoreI := 7000; - //player[1].ScoreLineI := 2000; - //player[1].ScoreGoldenI := 1000; + player[1].ScoreI := 2500; + player[1].ScoreLineI := 1100; + player[1].ScoreGoldenI := 900; + player[1].ScoreTotalI := 4500; - //player[2].ScoreI := 2500; - //player[2].ScoreLineI := 1100; - //player[2].ScoreGoldenI := 900; // Let's arise the bars + ActualTime := GetTickCount div 33; if ((ActualTime <> OldTime) and ShowFinish )then begin OldTime := ActualTime; -// okay i hate that as much as you might do too, but there's no way around that yet (imho) -// all statics / texts are loaded at start - so that we have them all even if we change the amount of players -// array overview: - -// 1 Player -> Player[0].Score (The score for one player starts at 0) -// -> Statics[1] (The statics for the one player screen start at 0) -// 2 Player -> Player[0..1].Score -// -> Statics[2..3] -// 3 Player -> Player[0..5].Score -// -> Statics[4..6] - - case PlayersPlay of - 1: begin - ArrayStartModifier := 1; - end; - 2, 4: begin - ArrayStartModifier := 2; - end; - 3, 6: begin - ArrayStartModifier := 4; - end; - end; - - For katze:= 0 to (PlayersPlay-1) do + For PlayerCounter := 1 to PlayersPlay do begin // We actually araise them in the right order, but we have to draw them in reverse order (golden -> phrase -> mainscore) - Case BarScore_EaseOut_Step < EaseOut_MaxSteps * 10 of - true : BarScore_EaseOut_Step := BarScore_EaseOut_Step + 1; - end; + if (BarScore_EaseOut_Step < EaseOut_MaxSteps * 10) + then BarScore_EaseOut_Step := BarScore_EaseOut_Step + 1; // PhrasenBonus if (BarScore_EaseOut_Step >= (EaseOut_MaxSteps * 10)) then @@ -423,79 +506,250 @@ begin // Draw golden score bar # //######################## - BarGolden_ActualHeight[katze] := RaiseBar(katze + ArrayStartModifier, - Static[StaticBackLevel[katze + ArrayStartModifier]].Texture.y - BarScore_ActualHeight[katze] - BarPhrase_ActualHeight[katze], - BarGolden_ActualHeight[katze], - player[katze].ScoreGoldenI, - 'Lightest', - BarGolden_EaseOut_Step); - - // Increment and show total score and plain score - TextGolden_ActualValue[katze] := IncrementScore(katze, - TextGolden_ActualValue[katze], - Player[katze].ScoreGoldenI, - BarGolden_EaseOut_Step); - Text[TextGoldenNotesScore[katze + ArrayStartModifier]].Text := IntToStr(TextGolden_ActualValue[katze]); - - // Blend in - Text[TextGoldenNotesScore[katze + ArrayStartModifier]].Alpha := (BarGolden_EaseOut_Step / 100); - Text[TextGoldenNotes[katze + ArrayStartModifier]].Alpha := (BarGolden_EaseOut_Step / 100); + EaseBarIn(PlayerCounter, 'Golden'); // ease bar for golden notes in + EaseScoreIn(PlayerCounter,'Golden'); end; //######################## // Draw phrase score bar # //######################## - BarPhrase_ActualHeight[katze] := RaiseBar(katze + ArrayStartModifier, - Static[StaticBackLevel[katze + ArrayStartModifier]].Texture.y - BarScore_ActualHeight[katze], - BarPhrase_ActualHeight[katze], - Player[katze].ScoreLineI, - 'Light', - BarPhrase_EaseOut_Step); - - // Increment and show total score and plain score - TextPhrase_ActualValue[katze] := IncrementScore(katze, - TextPhrase_ActualValue[katze], - Player[katze].ScoreLineI, - BarPhrase_EaseOut_Step); - Text[TextLineBonusScore[katze + ArrayStartModifier]].Text := IntToStr(TextPhrase_ActualValue[katze]); - //Blend in - Text[TextLineBonusScore[katze + ArrayStartModifier]].Alpha := (BarPhrase_EaseOut_Step / 100); - Text[TextLineBonus[katze + ArrayStartModifier]].Alpha := (BarPhrase_EaseOut_Step / 100); + EaseBarIn(PlayerCounter, 'Line'); // ease bar for line bonus / phrasenbonus notes in + EaseScoreIn(PlayerCounter,'Line'); end; //####################### // Draw plain score bar # //####################### - BarScore_ActualHeight[katze] := RaiseBar(katze + ArrayStartModifier, - Static[StaticBackLevel[katze + ArrayStartModifier]].Texture.y, - BarScore_ActualHeight[katze], - Player[katze].ScoreI, - 'Dark', - BarScore_EaseOut_Step); - // Increment and show total score and plain score - TextScore_ActualValue[katze] := IncrementScore(katze, - TextScore_ActualValue[katze], - Player[katze].ScoreI, - BarScore_EaseOut_Step); - Text[TextNotesScore[katze + ArrayStartModifier]].Text := IntToStr(TextScore_ActualValue[katze]); - - Text[TextTotalScore[katze + ArrayStartModifier]].Text := IntToStr(TextScore_ActualValue[katze] + TextPhrase_ActualValue[katze] + TextGolden_ActualValue[katze]); - - //Blend em in - Text[TextTotalScore[katze + ArrayStartModifier]].Alpha := (BarScore_EaseOut_Step / 100); - Text[TextTotal[katze + ArrayStartModifier]].Alpha := (BarScore_EaseOut_Step / 100); - Text[TextNotesScore[katze + ArrayStartModifier]].Alpha := (BarScore_EaseOut_Step / 100); - Text[TextNotes[katze + ArrayStartModifier]].Alpha := (BarScore_EaseOut_Step / 100); - Text[TextScore[katze + ArrayStartModifier]].Alpha := (BarScore_EaseOut_Step / 100); - - end; // me loop + + + EaseBarIn(PlayerCounter, 'Note'); // ease bar for all other notes in + EaseScoreIn(PlayerCounter,'Note'); + + + FillPlayerItems(PlayerCounter,'Funky'); + + end; + end; +//todo: i need a clever method to draw statics with their z value + for I := 0 to Length(Static) - 1 do + Static[I].Draw; + for I := 0 to Length(Text) - 1 do + Text[I].Draw; +end; + +procedure TscreenScore.FillPlayerItems(PlayerNumber : Integer; ScoreType: String); +var + ArrayStartModifier : integer; +begin +// okay i hate that as much as you might do too, but there's no way around that yet (imho) +// all statics / texts are loaded at start - so that we have them all even if we change the amount of players +// array overview: + +// 1 Player -> Player[0].Score (The score for one player starts at 0) +// -> Statics[1] (The statics for the one player screen start at 0) +// 2 Player -> Player[0..1].Score +// -> Statics[2..3] +// 3 Player -> Player[0..5].Score +// -> Statics[4..6] + + case PlayersPlay of + 1: begin + ArrayStartModifier := 0; + end; + 2, 4: begin + ArrayStartModifier := 1; + end; + 3, 6: begin + ArrayStartModifier := 3; + end; + end; + +// todo: take the name from player[PlayerNumber].Name instead of the ini when this is done (mog) + Text[TextName[PlayerNumber + ArrayStartModifier]].Text := Ini.Name[PlayerNumber - 1]; +// end todo + + +//golden + Text[TextGoldenNotesScore[PlayerNumber + ArrayStartModifier]].Text := IntToStr(TextGolden_ActualValue[PlayerNumber]); + Text[TextGoldenNotesScore[PlayerNumber + ArrayStartModifier]].Alpha := (BarGolden_EaseOut_Step / 100); + + Static[StaticBoxLightest[PlayerNumber + ArrayStartModifier]].Texture.Alpha := (BarGolden_EaseOut_Step / 100); + Text[TextGoldenNotes[PlayerNumber + ArrayStartModifier]].Alpha := (BarGolden_EaseOut_Step / 100); + + // line bonus + Text[TextLineBonusScore[PlayerNumber + ArrayStartModifier]].Text := IntToStr(TextPhrase_ActualValue[PlayerNumber]); + Text[TextLineBonusScore[PlayerNumber + ArrayStartModifier]].Alpha := (BarPhrase_EaseOut_Step / 100); + + Static[StaticBoxLight[PlayerNumber + ArrayStartModifier]].Texture.Alpha := (BarPhrase_EaseOut_Step / 100); + Text[TextLineBonus[PlayerNumber + ArrayStartModifier]].Alpha := (BarPhrase_EaseOut_Step / 100); + +// plain score + Text[TextNotesScore[PlayerNumber + ArrayStartModifier]].Text := IntToStr(TextScore_ActualValue[PlayerNumber]); + Text[TextNotes[PlayerNumber + ArrayStartModifier]].Alpha := (BarScore_EaseOut_Step / 100); + + Static[StaticBoxDark[PlayerNumber + ArrayStartModifier]].Texture.Alpha := (BarScore_EaseOut_Step / 100); + Text[TextNotesScore[PlayerNumber + ArrayStartModifier]].Alpha := (BarScore_EaseOut_Step / 100); + +// total score + Text[TextTotalScore[PlayerNumber + ArrayStartModifier]].Text := IntToStr(TextScore_ActualValue[PlayerNumber] + TextPhrase_ActualValue[PlayerNumber] + TextGolden_ActualValue[PlayerNumber]); + Text[TextTotalScore[PlayerNumber + ArrayStartModifier]].Alpha := (BarScore_EaseOut_Step / 100); + + Text[TextTotal[PlayerNumber + ArrayStartModifier]].Alpha := (BarScore_EaseOut_Step / 100); + + Text[TextTotal[PlayerNumber + ArrayStartModifier]].Alpha := (BarScore_EaseOut_Step / 100); + + if(BarGolden_EaseOut_Step > 100) then + begin + ShowRating(PlayerNumber); end; + end; + + +procedure TScreenScore.ShowRating(PlayerNumber: integer); +var + ArrayStartModifier : integer; + Rating : integer; + fu : integer; + + Posx : real; + Posy : real; + width : array[1..3] of real; +begin + case PlayersPlay of + 1: begin + ArrayStartModifier := 0; + end; + 2, 4: begin + ArrayStartModifier := 1; + end; + 3, 6: begin + ArrayStartModifier := 3; + end; + end; + + fu := PlayerNumber + ArrayStartModifier; + +//todo: this could break if the width is not given, for instance when there's a skin with no picture for ratings + Text[TextScore[PlayerNumber + ArrayStartModifier]].Alpha := aPlayerScoreScreenRatings[PlayerNumber].RateEaseValue / aPlayerScoreScreenRatings[PlayerNumber].RatePic_Width; +// end todo + {{$IFDEF TRANSLATE} + case (Player[PlayerNumber-1].ScoreTotalI) of + 0..2000: + begin + Text[TextScore[fu]].Text := Language.Translate('SING_SCORE_TONE_DEAF'); + Rating := 0; + end; + 2010..4000: + begin + Text[TextScore[fu]].Text := Language.Translate('SING_SCORE_AMATEUR'); + Rating := 1; + end; + 4010..6000: + begin + Text[TextScore[fu]].Text := Language.Translate('SING_SCORE_RISING_STAR'); + Rating := 2; + end; + 6010..8000: + begin + Text[TextScore[fu]].Text := Language.Translate('SING_SCORE_LEAD_SINGER'); + Rating := 3; + end; + 8010..9000: + begin + Text[TextScore[fu]].Text := Language.Translate('SING_SCORE_HIT_ARTIST'); + Rating := 4; + end; + 9010..9800: + begin + Text[TextScore[fu]].Text := Language.Translate('SING_SCORE_SUPERSTAR'); + Rating := 5; + end; + 9810..10000: + begin + Text[TextScore[fu]].Text := Language.Translate('SING_SCORE_ULTRASTAR'); + Rating := 6; + end; + end; + {{$ELSE}{ + case (Player[P].ScoreTotalI-1) of + 0..2000: Text[TextScore[fu]].Text := 'Tone Deaf'; + 2010..4000: Text[TextScore[fu]].Text := 'Amateur'; + 4010..6000: Text[TextScore[fu]].Text := 'Rising Star'; + 6010..8000: Text[TextScore[fu]].Text := 'Lead Singer'; + 8010..9000: Text[TextScore[fu]].Text := 'Hit Artist'; + 9010..9800: Text[TextScore[fu]].Text := 'Superstar'; + 9810..10000: Text[TextScore[fu]].Text := 'Ultrastar'; + end; + {$ENDIF} + +// Bounce the rating picture in + PosX := aPlayerScoreScreenRatings[PlayerNumber].RatePic_X + (aPlayerScoreScreenRatings[PlayerNumber].RatePic_Width / 2); + PosY := aPlayerScoreScreenRatings[PlayerNumber].RatePic_Y + (aPlayerScoreScreenRatings[PlayerNumber].RatePic_Height / 2); ; + + elastique(PlayerNumber); + + width[PlayerNumber] := aPlayerScoreScreenRatings[PlayerNumber].RateEaseValue/2; + + glBindTexture(GL_TEXTURE_2D, Tex_Score_Ratings[Rating].TexNum); + + glEnable(GL_TEXTURE_2D); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + + glBegin(GL_QUADS); + glTexCoord2f(0, 0); glVertex2f(PosX - width[PlayerNumber], PosY - width[PlayerNumber]); + glTexCoord2f(Tex_Score_Ratings[Rating].TexW, 0); glVertex2f(PosX + width[PlayerNumber], PosY - width[PlayerNumber]); + glTexCoord2f(Tex_Score_Ratings[Rating].TexW, Tex_Score_Ratings[Rating].TexH); glVertex2f(PosX + width[PlayerNumber], PosY + width[PlayerNumber]); + glTexCoord2f(0, Tex_Score_Ratings[Rating].TexH); glVertex2f(PosX - width[PlayerNumber], PosY + width[PlayerNumber]); + glEnd; + + glDisable(GL_BLEND); + glDisable(GL_TEXTURE_2d); end; -function TscreenScore.RaiseBar(PlayerNumber: integer; BarStartPosY: Single; ActualHeight: real; Score: integer; ColorBrightness : String; EaseOut_Step: Real) : real; +function TscreenScore.elastique(PlayerNumber : Integer): real; +var + ReturnValue : real; + p, s : real; + + RaiseStep, Actual_Value, MaxVal : real; + EaseOut_Step : integer; +begin + + EaseOut_Step := aPlayerScoreScreenRatings[PlayerNumber].RateEaseStep; + Actual_Value := aPlayerScoreScreenRatings[PlayerNumber].RateEaseValue; + MaxVal := aPlayerScoreScreenRatings[PlayerNumber].RatePic_Width; + + RaiseStep := EaseOut_Step; + + if (RaiseStep = 0) + then ReturnValue := MaxVal; + + RaiseStep := RaiseStep / MaxVal; + + if (RaiseStep = 1) + then + begin + ReturnValue := MaxVal; + end + else + begin + p := MaxVal * 0.4; + + s := p/(2*PI) * arcsin (1); + ReturnValue := MaxVal * power(2,-5 * RaiseStep) * sin( (RaiseStep * MaxVal - s) * (2 * PI) / p) + MaxVal; + + inc(aPlayerScoreScreenRatings[PlayerNumber].RateEaseStep); + aPlayerScoreScreenRatings[PlayerNumber].RateEaseValue := ReturnValue; + end; + Result := ReturnValue; +end; + + +function TscreenScore.EaseBarIn(PlayerNumber : Integer; BarType: String) : real; const RaiseSmoothness : integer = 100; var @@ -508,25 +762,52 @@ var RaiseStep : real; BarStartPosX : Single; + BarStartPosY : Single; - R,G,B : real; lTmp : real; + Score : integer; + + //textures + TextureBar : integer; + TextureRound : integer; begin - MaxHeight := Static[StaticBackLevel[PlayerNumber]].Texture.H; - Width := Static[StaticBackLevel[PlayerNumber]].Texture.W; + MaxHeight := aPlayerScoreScreenDatas[PlayerNumber].Bar_Height; + Width := aPlayerScoreScreenDatas[PlayerNumber].Bar_Width; - BarStartPosX := Static[StaticBackLevel[PlayerNumber]].Texture.X; + BarStartPosX := aPlayerScoreScreenDatas[PlayerNumber].Bar_X; - BarStartPosY := BarStartPosY + MaxHeight; // The texture starts in the upper left corner, so let's subtract the height - so we can arise it + // The texture starts in the upper left corner, so let's subtract the height - so we can arise it + + // let's get the points according to the bar we draw + // score array starts at 0, which means the score for player 1 is in score[0] + // EaseOut_Step is the actual step in the raising process, like the 20iest step of EaseOut_MaxSteps + if (BarType = 'Note') + then + begin + Score := Player[PlayerNumber - 1].ScoreI; + RaiseStep := BarScore_EaseOut_Step; + BarStartPosY := aPlayerScoreScreenDatas[PlayerNumber].Bar_Y + MaxHeight; + end; + if (BarType = 'Line') + then + begin + Score := Player[PlayerNumber - 1].ScoreLineI; + RaiseStep := BarPhrase_EaseOut_Step; + BarStartPosY := aPlayerScoreScreenDatas[PlayerNumber].Bar_Y - aPlayerScoreScreenDatas[PlayerNumber].BarScore_ActualHeight + MaxHeight; + end; + if (BarType = 'Golden') + then + begin + Score := Player[PlayerNumber - 1].ScoreGoldenI; + RaiseStep := BarGolden_EaseOut_Step; + BarStartPosY := aPlayerScoreScreenDatas[PlayerNumber].Bar_Y - aPlayerScoreScreenDatas[PlayerNumber].BarScore_ActualHeight - aPlayerScoreScreenDatas[PlayerNumber].BarLine_ActualHeight + MaxHeight; + end; // the height dependend of the score Height2Reach := (Score / 10000) * MaxHeight; - // EaseOut_Step is the actual step in the raising process, like the 20iest step of EaseOut_MaxSteps - RaiseStep := EaseOut_Step; - - if (ActualHeight < Height2Reach) then + if (aPlayerScoreScreenDatas[PlayerNumber].Bar_Actual_Height < Height2Reach) then begin // Check http://proto.layer51.com/d.aspx?f=400 for more info on easing functions // Calculate the actual step according to the maxsteps @@ -535,58 +816,117 @@ begin // quadratic easing out - decelerating to zero velocity // -end_position * current_time * ( current_time - 2 ) + start_postion lTmp := (-Height2Reach * RaiseStep * (RaiseStep - 20) + BarStartPosY); - if ( RaiseSmoothness > 0 ) AND - ( lTmp > 0 ) then - begin - NewHeight := lTmp / RaiseSmoothness; - end; + + if ( RaiseSmoothness > 0 ) AND ( lTmp > 0 ) + then + begin + NewHeight := lTmp / RaiseSmoothness; + end; end else begin NewHeight := Height2Reach; end; - //+1 - LoadColor(R, G, B, 'P' + inttostr(PlayerNumber) + ColorBrightness); //dark, light, lightest - glColor4f(R, G, B, 1); - //the actual bar - glBindTexture(GL_TEXTURE_2D, Static[StaticLevel[PlayerNumber]].Texture.TexNum); + glColor4f(1, 1, 1, 1); + +// set the texture for the bar + if (BarType = 'Note') + then + begin + glBindTexture(GL_TEXTURE_2D, aPlayerScoreScreenTextures[PlayerNumber].Score_NoteBarLevel_Dark.TexNum); + end; + if (BarType = 'Line') + then + begin + glBindTexture(GL_TEXTURE_2D, aPlayerScoreScreenTextures[PlayerNumber].Score_NoteBarLevel_Light.TexNum); + end; + if (BarType = 'Golden') + then + begin + glBindTexture(GL_TEXTURE_2D, aPlayerScoreScreenTextures[PlayerNumber].Score_NoteBarLevel_Lightest.TexNum); + end; + //draw it glEnable(GL_TEXTURE_2D); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex2f(BarStartPosX, BarStartPosY - NewHeight); - glTexCoord2f(1, 0); glVertex2f(BarStartPosX + Width, BarStartPosY - NewHeight); - glTexCoord2f(1, 1); glVertex2f(BarStartPosX + Width, BarStartPosY); - glTexCoord2f(0, 1); glVertex2f(BarStartPosX, BarStartPosY); + glTexCoord2f(0, 0); glVertex3f(BarStartPosX, BarStartPosY - NewHeight, ZBars); + glTexCoord2f(1, 0); glVertex3f(BarStartPosX + Width, BarStartPosY - NewHeight, ZBars); + glTexCoord2f(1, 1); glVertex3f(BarStartPosX + Width, BarStartPosY, ZBars); + glTexCoord2f(0, 1); glVertex3f(BarStartPosX, BarStartPosY, ZBars); glEnd; - //the round thing on top - glBindTexture(GL_TEXTURE_2D, Static[StaticLevelRound[PlayerNumber]].Texture.TexNum); + glDisable(GL_BLEND); + glDisable(GL_TEXTURE_2d); + + //the round thing on top + if (BarType = 'Note') then + glBindTexture(GL_TEXTURE_2D, aPlayerScoreScreenTextures[PlayerNumber].Score_NoteBarRound_Dark.TexNum); + if (BarType = 'Line') then + glBindTexture(GL_TEXTURE_2D, aPlayerScoreScreenTextures[PlayerNumber].Score_NoteBarRound_Light.TexNum); + if (BarType = 'Golden') then + glBindTexture(GL_TEXTURE_2D, aPlayerScoreScreenTextures[PlayerNumber].Score_NoteBarRound_Lightest.TexNum); glEnable(GL_TEXTURE_2D); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex2f(BarStartPosX, (BarStartPosY - Static[StaticLevelRound[PlayerNumber]].Texture.h) - NewHeight); - glTexCoord2f(1, 0); glVertex2f(BarStartPosX + Width, (BarStartPosY - Static[StaticLevelRound[PlayerNumber]].Texture.h) - NewHeight); - glTexCoord2f(1, 1); glVertex2f(BarStartPosX + Width, BarStartPosY - NewHeight); - glTexCoord2f(0, 1); glVertex2f(BarStartPosX, BarStartPosY - NewHeight); + glTexCoord2f(0, 0); glVertex3f(BarStartPosX, (BarStartPosY - Static[StaticLevelRound[PlayerNumber]].Texture.h) - NewHeight, ZBars); + glTexCoord2f(1, 0); glVertex3f(BarStartPosX + Width, (BarStartPosY - Static[StaticLevelRound[PlayerNumber]].Texture.h) - NewHeight, ZBars); + glTexCoord2f(1, 1); glVertex3f(BarStartPosX + Width, BarStartPosY - NewHeight, ZBars); + glTexCoord2f(0, 1); glVertex3f(BarStartPosX, BarStartPosY - NewHeight, ZBars); glEnd; - Result := NewHeight; + glDisable(GL_BLEND); + glDisable(GL_TEXTURE_2d); + + if (BarType = 'Note') + then + aPlayerScoreScreenDatas[PlayerNumber].BarScore_ActualHeight := NewHeight; + if (BarType = 'Line') + then + aPlayerScoreScreenDatas[PlayerNumber].BarLine_ActualHeight := NewHeight; + if (BarType = 'Golden') + then + aPlayerScoreScreenDatas[PlayerNumber].BarGolden_ActualHeight := NewHeight; end; -function TScreenScore.IncrementScore(PlayerNumber: integer; ActualScoreValue: Integer; ScoreReached: integer; EaseOut_Step: Real) : integer; + +function TScreenScore.EaseScoreIn(PlayerNumber: integer; ScoreType : String) : real; const RaiseSmoothness : integer = 100; var RaiseStep : Real; lTmpA : Real; + ScoreReached :Integer; + EaseOut_Step :Real; + ActualScoreValue:integer; begin + + + if (ScoreType = 'Note') then + begin + EaseOut_Step := BarScore_EaseOut_Step; + ActualScoreValue := TextScore_ActualValue[PlayerNumber]; + ScoreReached := Player[PlayerNumber-1].ScoreI; + end; + if (ScoreType = 'Line') then + begin + EaseOut_Step := BarPhrase_EaseOut_Step; + ActualScoreValue := TextPhrase_ActualValue[PlayerNumber]; + ScoreReached := Player[PlayerNumber-1].ScoreLineI; + end; + if (ScoreType = 'Golden') then + begin + EaseOut_Step := BarGolden_EaseOut_Step; + ActualScoreValue := TextGolden_ActualValue[PlayerNumber]; + ScoreReached := Player[PlayerNumber-1].ScoreGoldenI; + end; + // EaseOut_Step is the actual step in the raising process, like the 20iest step of EaseOut_MaxSteps RaiseStep := EaseOut_Step; @@ -601,12 +941,38 @@ begin if ( lTmpA > 0 ) AND ( RaiseSmoothness > 0 ) THEN begin - Result := floor( lTmpA / RaiseSmoothness); + + if (ScoreType = 'Note') then + begin + TextScore_ActualValue[PlayerNumber] := floor( lTmpA / RaiseSmoothness); + end; + if (ScoreType = 'Line') then + begin + TextPhrase_ActualValue[PlayerNumber] := floor( lTmpA / RaiseSmoothness); + end; + if (ScoreType = 'Golden') then + begin + TextGolden_ActualValue[PlayerNumber] := floor( lTmpA / RaiseSmoothness); + end; + end; end else begin - Result := ScoreReached; + + if (ScoreType = 'Note') then + begin + TextScore_ActualValue[PlayerNumber] := ScoreReached; + end; + if (ScoreType = 'Line') then + begin + TextPhrase_ActualValue[PlayerNumber] := ScoreReached; + end; + if (ScoreType = 'Golden') then + begin + TextGolden_ActualValue[PlayerNumber] := ScoreReached; + end; + end; end; @@ -644,7 +1010,7 @@ begin Text[TextName[Item]].ColG, Text[TextName[Item]].ColB, 'P' + IntToStr(P+1) + 'Dark'); - + { LoadColor( Static[StaticBoxLightest[Item]].Texture.ColR, Static[StaticBoxLightest[Item]].Texture.ColG, @@ -662,6 +1028,7 @@ begin Static[StaticBoxDark[Item]].Texture.ColG, Static[StaticBoxDark[Item]].Texture.ColB, 'P' + IntToStr(P+1) + 'Dark'); + } end; end. diff --git a/Skins/Deluxe/Blue.ini b/Skins/Deluxe/Blue.ini index 28ead1a1..18155298 100644 --- a/Skins/Deluxe/Blue.ini +++ b/Skins/Deluxe/Blue.ini @@ -78,12 +78,42 @@ Ball = [sing]LyricsBall.bmp # # # S C O R E / T O P 5 # # # ScoreBox = [score]box.png -ScoreLevel = [score]level.png -ScoreLevelRound = [score]levelRound.png +ScoreGlassBox = [score]glass_box.png +ScoreLevel = [score]level.png +ScoreLevelRound = [score]levelround.png + +ScoreLevel_Dark = [score]level_dark.png +ScoreLevel_Dark_Round = [score]level_dark_round.png + +ScoreLevel_Light = [score]level_light.png +ScoreLevel_Light_Round = [score]level_light_round.png + +ScoreLevel_Lightest = [score]level_lightest.png +ScoreLevel_Lightest_Round = [score]level_lightest_round.png + +# Boxes near the text, that show what color is for which bar +ScoreBar_box_lightest = [score]bar_box_lightest.png +ScoreBar_box_light = [score]bar_box_light.png +ScoreBar_box_dark = [score]bar_box_dark.png + ScoreEndCap = [score]endcap.png ScoreLine = [score]line.png PlayerNumberBox = [main]playerNumberBox.jpg +PlayerIDBox01 = [sing.player1]lyric_active.png +PlayerIDBox02 = [sing.player2]lyric_active.png +PlayerIDBox03 = [sing.player3]lyric_active.png +PlayerIDBox04 = [sing.player4]lyric_active.png +PlayerIDBox05 = [sing.player5]lyric_active.png +PlayerIDBox06 = [sing.player6]lyric_active.png + +Rating_0 = [score]rating_0.png +Rating_1 = [score]rating_1.png +Rating_2 = [score]rating_2.png +Rating_3 = [score]rating_3.png +Rating_4 = [score]rating_4.png +Rating_5 = [score]rating_5.png +Rating_6 = [score]rating_6.png # # # P A R T Y # # # Joker =[party]Joker.png @@ -149,8 +179,8 @@ NoteBGRight = [sing]notesBgRight.png # # # E F F E C T S # # # -NoteStar = [effect]goldenNoteStar.png -NotePerfectStar = [effect]perfectNoteStar.png +NoteStar = [effect]goldenNoteStar.jpg +NotePerfectStar = [effect]perfectNoteStar.jpg # # # dirty helpers # # # diff --git a/Skins/Deluxe/Fall.ini b/Skins/Deluxe/Fall.ini index f9ea2bce..db1d2191 100644 --- a/Skins/Deluxe/Fall.ini +++ b/Skins/Deluxe/Fall.ini @@ -74,15 +74,45 @@ P = [sing]p.png #Pointer for lyrics Ball = [sing]LyricsBall.bmp - # # # S C O R E / T O P 5 # # # ScoreBox = [score]box.png +ScoreGlassBox = [score]glass_box.png ScoreLevel = [score]level.png ScoreLevelRound = [score]levelRound.png + +ScoreLevel_Dark = [score]level_dark.png +ScoreLevel_Dark_Round = [score]level_dark_round.png + +ScoreLevel_Light = [score]level_light.png +ScoreLevel_Light_Round = [score]level_light_round.png + +ScoreLevel_Lightest = [score]level_lightest.png +ScoreLevel_Lightest_Round = [score]level_lightest_round.png + +# Boxes near the text, that show what color is for which bar +ScoreBar_box_lightest = [score]bar_box_lightest.png +ScoreBar_box_light = [score]bar_box_light.png +ScoreBar_box_dark = [score]bar_box_dark.png + ScoreEndCap = [score]endcap.png ScoreLine = [score]line.png PlayerNumberBox = [main]playerNumberBox.jpg +PlayerIDBox01 = [sing.player1]lyric_active.png +PlayerIDBox02 = [sing.player2]lyric_active.png +PlayerIDBox03 = [sing.player3]lyric_active.png +PlayerIDBox04 = [sing.player4]lyric_active.png +PlayerIDBox05 = [sing.player5]lyric_active.png +PlayerIDBox06 = [sing.player6]lyric_active.png + +Rating_0 = [score]rating_0.png +Rating_1 = [score]rating_1.png +Rating_2 = [score]rating_2.png +Rating_3 = [score]rating_3.png +Rating_4 = [score]rating_4.png +Rating_5 = [score]rating_5.png +Rating_6 = [score]rating_6.png + # # # P A R T Y # # # Joker =[party]Joker.png @@ -148,8 +178,8 @@ NoteBGRight = [sing]notesBgRight.png # # # E F F E C T S # # # -NoteStar = [effect]goldenNoteStar.png -NotePerfectStar = [effect]perfectNoteStar.png +NoteStar = [effect]goldenNoteStar.jpg +NotePerfectStar = [effect]perfectNoteStar.jpg # # # dirty helpers # # # diff --git a/Skins/Deluxe/Summer.ini b/Skins/Deluxe/Summer.ini index 71cecce9..2c03f10a 100644 --- a/Skins/Deluxe/Summer.ini +++ b/Skins/Deluxe/Summer.ini @@ -74,15 +74,45 @@ P = [sing]p.png #Pointer for lyrics Ball = [sing]LyricsBall.bmp - # # # S C O R E / T O P 5 # # # ScoreBox = [score]box.png +ScoreGlassBox = [score]glass_box.png ScoreLevel = [score]level.png ScoreLevelRound = [score]levelRound.png + +ScoreLevel_Dark = [score]level_dark.png +ScoreLevel_Dark_Round = [score]level_dark_round.png + +ScoreLevel_Light = [score]level_light.png +ScoreLevel_Light_Round = [score]level_light_round.png + +ScoreLevel_Lightest = [score]level_lightest.png +ScoreLevel_Lightest_Round = [score]level_lightest_round.png + +# Boxes near the text, that show what color is for which bar +ScoreBar_box_lightest = [score]bar_box_lightest.png +ScoreBar_box_light = [score]bar_box_light.png +ScoreBar_box_dark = [score]bar_box_dark.png + ScoreEndCap = [score]endcap.png ScoreLine = [score]line.png PlayerNumberBox = [main]playerNumberBox.jpg +PlayerIDBox01 = [sing.player1]lyric_active.png +PlayerIDBox02 = [sing.player2]lyric_active.png +PlayerIDBox03 = [sing.player3]lyric_active.png +PlayerIDBox04 = [sing.player4]lyric_active.png +PlayerIDBox05 = [sing.player5]lyric_active.png +PlayerIDBox06 = [sing.player6]lyric_active.png + +Rating_0 = [score]rating_0.png +Rating_1 = [score]rating_1.png +Rating_2 = [score]rating_2.png +Rating_3 = [score]rating_3.png +Rating_4 = [score]rating_4.png +Rating_5 = [score]rating_5.png +Rating_6 = [score]rating_6.png + # # # P A R T Y # # # Joker =[party]Joker.png @@ -148,8 +178,8 @@ NoteBGRight = [sing]notesBgRight.png # # # E F F E C T S # # # -NoteStar = [effect]goldenNoteStar.png -NotePerfectStar = [effect]perfectNoteStar.png +NoteStar = [effect]goldenNoteStar.jpg +NotePerfectStar = [effect]perfectNoteStar.jpg # # # dirty helpers # # # diff --git a/Skins/Deluxe/Winter.ini b/Skins/Deluxe/Winter.ini index 2f26cd42..ed4175ec 100644 --- a/Skins/Deluxe/Winter.ini +++ b/Skins/Deluxe/Winter.ini @@ -77,12 +77,42 @@ Ball = [sing]LyricsBall.bmp # # # S C O R E / T O P 5 # # # ScoreBox = [score]box.png +ScoreGlassBox = [score]glass_box.png ScoreLevel = [score]level.png ScoreLevelRound = [score]levelRound.png + +ScoreLevel_Dark = [score]level_dark.png +ScoreLevel_Dark_Round = [score]level_dark_round.png + +ScoreLevel_Light = [score]level_light.png +ScoreLevel_Light_Round = [score]level_light_round.png + +ScoreLevel_Lightest = [score]level_lightest.png +ScoreLevel_Lightest_Round = [score]level_lightest_round.png + +# Boxes near the text, that show what color is for which bar +ScoreBar_box_lightest = [score]bar_box_lightest.png +ScoreBar_box_light = [score]bar_box_light.png +ScoreBar_box_dark = [score]bar_box_dark.png + ScoreEndCap = [score]endcap.png ScoreLine = [score]line.png PlayerNumberBox = [main]playerNumberBox.jpg +PlayerIDBox01 = [sing.player1]lyric_active.png +PlayerIDBox02 = [sing.player2]lyric_active.png +PlayerIDBox03 = [sing.player3]lyric_active.png +PlayerIDBox04 = [sing.player4]lyric_active.png +PlayerIDBox05 = [sing.player5]lyric_active.png +PlayerIDBox06 = [sing.player6]lyric_active.png + +Rating_0 = [score]rating_0.png +Rating_1 = [score]rating_1.png +Rating_2 = [score]rating_2.png +Rating_3 = [score]rating_3.png +Rating_4 = [score]rating_4.png +Rating_5 = [score]rating_5.png +Rating_6 = [score]rating_6.png # # # P A R T Y # # # Joker =[party]Joker.png @@ -148,8 +178,8 @@ NoteBGRight = [sing]notesBgRight.png # # # E F F E C T S # # # -NoteStar = [effect]goldenNoteStar.png -NotePerfectStar = [effect]perfectNoteStar.png +NoteStar = [effect]goldenNoteStar.jpg +NotePerfectStar = [effect]perfectNoteStar.jpg # # # dirty helpers # # # diff --git a/Skins/Deluxe/[score]Line.png b/Skins/Deluxe/[score]Line.png index 17ba6188..954caf94 100644 Binary files a/Skins/Deluxe/[score]Line.png and b/Skins/Deluxe/[score]Line.png differ diff --git a/Skins/Deluxe/[score]bar_box_dark.png b/Skins/Deluxe/[score]bar_box_dark.png new file mode 100644 index 00000000..e4fbfa41 Binary files /dev/null and b/Skins/Deluxe/[score]bar_box_dark.png differ diff --git a/Skins/Deluxe/[score]bar_box_light.png b/Skins/Deluxe/[score]bar_box_light.png new file mode 100644 index 00000000..ddc17ed8 Binary files /dev/null and b/Skins/Deluxe/[score]bar_box_light.png differ diff --git a/Skins/Deluxe/[score]bar_box_lightest.png b/Skins/Deluxe/[score]bar_box_lightest.png new file mode 100644 index 00000000..995bb9ef Binary files /dev/null and b/Skins/Deluxe/[score]bar_box_lightest.png differ diff --git a/Skins/Deluxe/[score]endcap.png b/Skins/Deluxe/[score]endcap.png index ed14185b..3cccd2e1 100644 Binary files a/Skins/Deluxe/[score]endcap.png and b/Skins/Deluxe/[score]endcap.png differ diff --git a/Skins/Deluxe/[score]glass_box.png b/Skins/Deluxe/[score]glass_box.png new file mode 100644 index 00000000..c0cf2a9c Binary files /dev/null and b/Skins/Deluxe/[score]glass_box.png differ diff --git a/Skins/Deluxe/[score]level.png b/Skins/Deluxe/[score]level.png index 7b8cfb84..1f627560 100644 Binary files a/Skins/Deluxe/[score]level.png and b/Skins/Deluxe/[score]level.png differ diff --git a/Skins/Deluxe/[score]levelRound.png b/Skins/Deluxe/[score]levelRound.png index 10e662bc..2bc7a6b8 100644 Binary files a/Skins/Deluxe/[score]levelRound.png and b/Skins/Deluxe/[score]levelRound.png differ diff --git a/Skins/Deluxe/[score]level_dark.png b/Skins/Deluxe/[score]level_dark.png new file mode 100644 index 00000000..da4fd407 Binary files /dev/null and b/Skins/Deluxe/[score]level_dark.png differ diff --git a/Skins/Deluxe/[score]level_dark_round.png b/Skins/Deluxe/[score]level_dark_round.png new file mode 100644 index 00000000..de239cb2 Binary files /dev/null and b/Skins/Deluxe/[score]level_dark_round.png differ diff --git a/Skins/Deluxe/[score]level_light.png b/Skins/Deluxe/[score]level_light.png new file mode 100644 index 00000000..1c1c8a4d Binary files /dev/null and b/Skins/Deluxe/[score]level_light.png differ diff --git a/Skins/Deluxe/[score]level_light_round.png b/Skins/Deluxe/[score]level_light_round.png new file mode 100644 index 00000000..641151a5 Binary files /dev/null and b/Skins/Deluxe/[score]level_light_round.png differ diff --git a/Skins/Deluxe/[score]level_lightest.png b/Skins/Deluxe/[score]level_lightest.png new file mode 100644 index 00000000..f02fdf7b Binary files /dev/null and b/Skins/Deluxe/[score]level_lightest.png differ diff --git a/Skins/Deluxe/[score]level_lightest_round.png b/Skins/Deluxe/[score]level_lightest_round.png new file mode 100644 index 00000000..9f1bb09e Binary files /dev/null and b/Skins/Deluxe/[score]level_lightest_round.png differ diff --git a/Skins/Deluxe/[score]rating_0.png b/Skins/Deluxe/[score]rating_0.png new file mode 100644 index 00000000..feb7e472 Binary files /dev/null and b/Skins/Deluxe/[score]rating_0.png differ diff --git a/Skins/Deluxe/[score]rating_1.png b/Skins/Deluxe/[score]rating_1.png new file mode 100644 index 00000000..4a143d83 Binary files /dev/null and b/Skins/Deluxe/[score]rating_1.png differ diff --git a/Skins/Deluxe/[score]rating_2.png b/Skins/Deluxe/[score]rating_2.png new file mode 100644 index 00000000..67258e22 Binary files /dev/null and b/Skins/Deluxe/[score]rating_2.png differ diff --git a/Skins/Deluxe/[score]rating_3.png b/Skins/Deluxe/[score]rating_3.png new file mode 100644 index 00000000..fe0b1662 Binary files /dev/null and b/Skins/Deluxe/[score]rating_3.png differ diff --git a/Skins/Deluxe/[score]rating_4.png b/Skins/Deluxe/[score]rating_4.png new file mode 100644 index 00000000..5695f8fd Binary files /dev/null and b/Skins/Deluxe/[score]rating_4.png differ diff --git a/Skins/Deluxe/[score]rating_5.png b/Skins/Deluxe/[score]rating_5.png new file mode 100644 index 00000000..38ed92c3 Binary files /dev/null and b/Skins/Deluxe/[score]rating_5.png differ diff --git a/Skins/Deluxe/[score]rating_6.png b/Skins/Deluxe/[score]rating_6.png new file mode 100644 index 00000000..f8706de3 Binary files /dev/null and b/Skins/Deluxe/[score]rating_6.png differ diff --git a/Themes/Deluxe.ini b/Themes/Deluxe.ini index fb512409..78dc101f 100644 --- a/Themes/Deluxe.ini +++ b/Themes/Deluxe.ini @@ -1268,6 +1268,12 @@ Text =P1 Color =White Align=0 +[ScoreStaticRatingPicture1] +X =235 +Y =260 +H=140 +W=140 + [ScoreTextScore1] X =150 Y =430 @@ -1355,7 +1361,7 @@ Tex =ScoreLine X =148 Y =368 W =295 -H =2 +H =1 Color =White Type =Colorized @@ -1364,10 +1370,38 @@ Tex =ScoreLine X =148 Y =398 W =295 -H =2 +H =1 Color =White Type =Colorized +#small boxes +[ScoreStaticBoxLightest1] +Tex =ScoreBox +X =200 +Y =220 +W =30 +H =30 +Color =P1Lightest +Type= colorized + +[ScoreStaticBoxLight1] +Tex =ScoreBox +X =200 +Y =260 +W =30 +H =30 +Color =P1Light +Type=colorized + +[ScoreStaticBoxDark1] +Tex =ScoreBox +X =200 +Y =300 +W =30 +H =30 +Color =P1Dark +Type=colorized + [ScoreStaticBoxDark1] Tex =PlayerNumberBox X =150 @@ -1433,7 +1467,7 @@ H =8 Color =P1Light Type =Colorized -[ScorePlayer1Static6] +[ScorePlayer1Static3] Tex =ScoreEndCap X =469 Y =460 @@ -1441,10 +1475,6 @@ W =95 H =30 Color =P1Dark Type =Colorized -TexX1=0 -TexY1=0 -TexX2=1 -TexY2=1 Reflection=1 ReflectionSpacing=4 @@ -1456,81 +1486,109 @@ W =114 H =2 Color =White Type =Colorized -TexX1=0 -TexY1=0.1 -TexX2=1 -TexY2=0.9 -Z=1 - # # # # # # # # # # # # # # # # # # Two Player Score # # # # # # # # # # # # # P L A Y E R O N E [ScoreTextName2] -X =20 -Y =260 +X =42 +Y =290 Font =0 -Size =14 +Size =10 Text =P1 Color =White Align=0 +[ScoreStaticRatingPicture2] +X =180 +Y =165 +H=75 +W=75 + [ScoreTextScore2] -X =20 -Y =430 +X=217 +Y=235 +Width=100 Color=White -Font =1 +Font =0 Size =9 Text =Tone Deaf -Align=0 +Align=1 + +[ScoreStaticBoxDark2] +Tex=ScoreBar_box_dark +X=45 +Y=327 +W=22 +H=20 +Color=P1Dark +Type=Colorized [ScoreTextNotes2] -X =20 -Y =340 +X =72 +Y =322 Color=White Font =0 -Size =9 +Size =10 Text=SING_NOTES Align=0 [ScoreTextNotesScore2] -X =300 -Y =340 +X =282 +Y =322 Color=White Font =0 Size =10 Align =2 Text =0000 +[ScoreStaticBoxLight2] +Tex =ScoreBar_box_light +X =45 +Y =358 +W =22 +H =20 +Color=P1Lightest +Type=Colorized + [ScoreTextLineBonus2] -X =20 -Y =370 +X =72 +Y =352 Color=White Font =0 -Size =9 +Size =10 Text =SING_PHRASE_BONUS Align=0 [ScoreTextLineBonusScore2] -X =300 -Y =370 +X =282 +Y =352 Color=White Font =0 Size =10 Align =2 Text =0000 +[ScoreStaticBoxLightest2] +Tex =ScoreBar_box_lightest +X =45 +Y =390 +W =22 +H =20 +Color =P1Lightest +Type=Colorized + [ScoreTextGoldenNotes2] -X =20 -Y =400 +X =72 +Y =383 Color=White Font =0 -Size =9 +Size =10 Text =SING_GOLDEN_NOTES Align=0 [ScoreTextGoldenNotesScore2] -X =300 -Y =400 +X =282 +Y =383 Color=White Font =0 Size =10 @@ -1538,17 +1596,17 @@ Align =2 Text =0000 [ScoreTextTotal2] -X =50 -Y =460 +X =82 +Y =456 Color=White Font =0 -Size =14 +Size =10 Text =SING_TOTAL Align=0 [ScoreTextTotalSCore2] -X =300 -Y =460 +X =283 +Y =448 Color=White Font =0 Size =14 @@ -1558,188 +1616,193 @@ Text =00000 # Lines [ScorePlayer2Static1] Tex =ScoreLine -X =20 -Y =338 -W =280 -H =2 +X =45 +Y =351 +W =237 +H =1 Type =Colorized Color =White [ScorePlayer2Static2] Tex =ScoreLine -X =20 -Y =368 -W =280 -H =2 -Type =Colorized -Color =White - -[ScorePlayer2Static3] -Tex =ScoreLine -X =20 -Y =398 -W =280 -H =2 -Type =Colorized -Color =White - -[ScorePlayer2Static4] -Tex =ScoreLine -X =20 -Y =428 -W =280 -H =2 +X =45 +Y =382 +W =237 +H =1 Type =Colorized Color =White [ScorePlayer2Static5] -Tex =ScoreLine -X =20 -Y =458 -W =280 -H =4 -Type =Colorized -Color =White - -[ScoreStaticBoxDark2] -Tex =PlayerNumberBox -X =20 -Y =467 -W =25 -H =25 -Type =Colorized -Color =P1Dark -Z=0.9 -Reflection=1 -ReflectionSpacing=4 - -[ScorePlayer2Text1] -X =24 -Y =472 -W =30 -H =30 -Z=1 +Tex=PlayerIDBox01 +X =45 +Y =455 +W =26 +H =23 +Type=Transparent Color=White -Font =1 -Size =5 -Align=0 -Text=P1 +Reflection=1 +ReflectionSpacing=30 #ScoreBar [ScoreStaticBackLevel2] Tex =ScoreLevel -X =308 -Y =160 -W =90 -H =300 +X =298 +Y =168 +W =95 +H =310 Color =P1Lightest Type =Colorized [ScoreStaticBackLevelRound2] Tex =ScoreLevelRound -X =308 -Y =130 -W =90 +X =298 +Y =138 +W =95 H =8 Color =P1Lightest Type =Colorized [ScoreStaticLevel2] Tex =ScoreLevel -X =308 -Y =410 -W =90 -H =30 +X =298 +Y =400 +W =95 +H =10 Color =P1Dark Type =Colorized [ScoreStaticLevelRound2] Tex =ScoreLevelRound -X =308 -Y =380 -W =90 +X =298 +Y =392 +W =95 H =8 Color =P1Dark Type =Colorized -[ScorePlayer2Static6] +[ScorePlayer2Static3] Tex =ScoreEndCap -X =308 -Y =460 -W =95 +X =294 +Y =478 +W =110 H =30 +z=1 Color =P1Dark Type =Colorized Reflection=1 -ReflectionSpacing=4 +ReflectionSpacing=0 + +[ScorePlayer2Static4] +Tex =ScoreGlassBox +X =294 +Y =148 +W =113 +H =331 +z =0.9 +Color =White +Type =Transparent # P L A Y E R T W O [ScoreTextName3] -X =780 -Y =260 +X =758 +Y =290 Font =0 -Size =14 +Size =10 Text =P2 Color =White Align=2 +[ScoreStaticRatingPicture3] +X =545 +Y =165 +H =75 +W =75 + [ScoreTextScore3] -X =780 -Y =430 +X =583 +Y =235 +width=100 Color=White -Font =1 +Font =0 Size =9 Text =Tone Deaf -Align=2 +Align=1 + +[ScoreStaticBoxDark3] +Tex=ScoreBar_box_dark +X=733 +Y=327 +W=22 +H=20 +Color=P2Dark +Type=Colorized [ScoreTextNotes3] -X =780 -Y =340 +X =728 +Y =322 Color=White Font =0 -Size =9 +Size =10 Text =SING_NOTES Align=2 [ScoreTextNotesScore3] -X =500 -Y =340 +X =518 +Y =322 Color=White Font =0 Size =10 Align =0 Text =0000 +[ScoreStaticBoxLight3] +Tex =ScoreBar_box_light +X =733 +Y =358 +W =22 +H =20 +Color=P2Lightest +Type=Colorized + [ScoreTextLineBonus3] -X =780 -Y =370 +X =728 +Y =352 Color=White Font =0 -Size =9 +Size =10 Text =SING_PHRASE_BONUS Align=2 [ScoreTextLineBonusScore3] -X =500 -Y =370 +X =518 +Y =352 Color=White Font =0 Size =10 Align =0 Text =0000 +[ScoreStaticBoxLightest3] +Tex =ScoreBar_box_lightest +X =733 +Y =390 +W =22 +H =20 +Color =P2Lightest +Type=Colorized + [ScoreTextGoldenNotes3] -X =780 -Y =400 +X =728 +Y =383 Color=White Font =0 -Size =9 +Size =10 Text =SING_GOLDEN_NOTES Align=2 [ScoreTextGoldenNotesScore3] -X =500 -Y =400 +X =518 +Y =383 Color=White Font =0 Size =10 @@ -1747,19 +1810,19 @@ Align =0 Text =0000 [ScoreTextTotal3] -X =750 -Y =460 +X =718 +Y =456 Color=White Font =0 -Size =14 +Size =10 Text =SING_TOTAL Align=2 Reflection=1 ReflectionSpacing=4 [ScoreTextTotalScore3] -X =500 -Y =460 +X =517 +Y =448 Color=White Font =0 Size =14 @@ -1771,124 +1834,91 @@ ReflectionSpacing=4 #Lines [ScorePlayer3Static1] Tex =ScoreLine -X =500 -Y =338 -W =280 -H =2 +X =518 +Y =351 +W =237 +H =1 Type =Colorized Color =White [ScorePlayer3Static2] Tex =ScoreLine -X =500 -Y =368 -W =280 -H =2 -Type =Colorized -Color =White - -[ScorePlayer3Static3] -Tex =ScoreLine -X =500 -Y =398 -W =280 -H =2 -Type =Colorized -Color =White - -[ScorePlayer3Static4] -Tex =ScoreLine -X =500 -Y =428 -W =280 -H =2 +X =518 +Y =382 +W =237 +H =1 Type =Colorized Color =White [ScorePlayer3Static5] -Tex =ScoreLine -X =500 -Y =458 -W =280 -H =4 -Type =Colorized -Color =White - -[ScoreStaticBoxDark3] -Tex =PlayerNumberBox -X =755 -Y =467 -W =25 -H =25 -Type =Colorized -Color =P2Dark -Z=0.9 -TexX1=1 -TexY1=0 -TexX2=0 -TexY2=1 -Reflection=1 -ReflectionSpacing=4 - -[ScorePlayer3Text1] -X =759 -Y =472 -W =30 -H =30 -Z=1 +Tex=PlayerIDBox02 +X =729 +Y =455 +W =26 +H =23 +Type=Transparent Color=White -Font =1 -Size =5 -Align=0 -Text=P2 +Reflection=1 +ReflectionSpacing=30 #ScoreBar [ScoreStaticBackLevel3] Tex =ScoreLevel -X =402 -Y =160 -W =90 -H =300 +X =409 +Y =168 +W =95 +H =310 Color =P2Lightest Type =Colorized [ScoreStaticBackLevelRound3] Tex =ScoreLevelRound -X =402 -Y =130 -W =90 +X =409 +Y =138 +W =95 H =8 Color =P2Lightest Type =Colorized [ScoreStaticLevel3] Tex =ScoreLevel -X =402 -Y =410 -W =90 -H =30 +X =409 +Y =400 +W =95 +H =10 Color =P2Dark Type =Colorized [ScoreStaticLevelRound3] Tex =ScoreLevelRound -X =402 -Y =380 -W =90 +X =409 +Y =392 +W =95 H =8 Color =P2Dark Type =Colorized -[ScorePlayer3Static6] +[ScorePlayer3Static3] Tex =ScoreEndCap -X =402 -Y =460 -W =95 +X =405 +Y =478 +W =110 H =30 +z=1 Color =P2Dark Type =Colorized Reflection=1 -ReflectionSpacing=4 +ReflectionSpacing=0 + +[ScorePlayer3Static4] +Tex =ScoreGlassBox +X =405 +Y =148 +W =113 +H =331 +z =0.91 +Color =White +Type =Transparent # # # # # # # # # # # # # # # # # # Three Player Score # # # # # # # # # # # # # P L A Y E R O N E -- cgit v1.2.3