From ac12e8ff541b2d30f0b5dd070f83fc43d9b2116d Mon Sep 17 00:00:00 2001 From: brunzelchen Date: Sun, 4 Jul 2010 17:06:14 +0000 Subject: - possible/remainings score bar in singscreen: red at start, decreasing with lost score, filling green from left with score - added session log. log all played songs with player names and score - fixed calculation of possible scores - change tabs on/off: now with CTRL+T (songscreen) git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/branches/1.0.1 Challenge MOD@2573 b956fd51-792f-4845-bead-9b4dfca2ff2c --- Game/Code/Classes/UDraw.pas | 134 ++++++++++++++++++++-------------- Game/Code/Classes/UFiles.pas | 5 ++ Game/Code/Classes/UIni.pas | 17 ++++- Game/Code/Classes/ULog.pas | 67 +++++++++++++++++ Game/Code/Classes/UMain.pas | 28 +++---- Game/Code/Screens/UScreenSing.pas | 61 ++++++++++++++-- Game/Code/Screens/UScreenSingModi.pas | 15 +++- Game/Code/Screens/UScreenSong.pas | 6 +- Game/Code/UltraStar.bdsproj | 3 +- Game/Code/UltraStar.dpr | 2 +- 10 files changed, 253 insertions(+), 85 deletions(-) (limited to 'Game/Code') diff --git a/Game/Code/Classes/UDraw.pas b/Game/Code/Classes/UDraw.pas index 8fe6a85e..74b8e6b7 100644 --- a/Game/Code/Classes/UDraw.pas +++ b/Game/Code/Classes/UDraw.pas @@ -41,7 +41,7 @@ procedure SingDrawStar(X, Y, A: real); procedure SingGoldenStar(X, Y, A: real); } // The Singbar -procedure SingDrawSingbar(X, Y, W, H: real; Percent: integer; ScoreMax: integer); +procedure SingDrawSingbar(X, Y, W, H: real; Percent, ScoreMax, ScoreCurrent: integer); //Phrasen Bonus - Line Bonus procedure SingDrawLineBonus( const X, Y: Single; Color: TRGB; Alpha: Single; Text: string; Age: Integer); @@ -773,23 +773,23 @@ begin if PlayersPlay = 1 then begin //SingDrawSingbar( 75 + 10*ScreenX, 95, 100, 8, Player[0].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP1SingBar.x, Theme.Sing.StaticP1SingBar.y, Theme.Sing.StaticP1SingBar.w, Theme.Sing.StaticP1SingBar.h , Player[0].ScorePercent, Player[0].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP1SingBar.x, Theme.Sing.StaticP1SingBar.y, Theme.Sing.StaticP1SingBar.w, Theme.Sing.StaticP1SingBar.h , Player[0].ScorePercent, Player[0].ScoreMax, Player[0].ScoreTotalI); end; if PlayersPlay = 2 then begin //SingDrawSingbar( 75 + 10*ScreenX, 95, 100, 8, Player[0].ScorePercent); //SingDrawSingbar(620 + 10*ScreenX, 95, 100, 8, Player[1].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP1TwoPSingBar.x, Theme.Sing.StaticP1TwoPSingBar.y, Theme.Sing.StaticP1TwoPSingBar.w, Theme.Sing.StaticP1TwoPSingBar.h , Player[0].ScorePercent, Player[0].ScoreMax); - SingDrawSingbar(Theme.Sing.StaticP2RSingBar.x, Theme.Sing.StaticP2RSingBar.y, Theme.Sing.StaticP2RSingBar.w, Theme.Sing.StaticP2RSingBar.h , Player[1].ScorePercent, Player[1].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP1TwoPSingBar.x, Theme.Sing.StaticP1TwoPSingBar.y, Theme.Sing.StaticP1TwoPSingBar.w, Theme.Sing.StaticP1TwoPSingBar.h , Player[0].ScorePercent, Player[0].ScoreMax, Player[0].ScoreTotalI); + SingDrawSingbar(Theme.Sing.StaticP2RSingBar.x, Theme.Sing.StaticP2RSingBar.y, Theme.Sing.StaticP2RSingBar.w, Theme.Sing.StaticP2RSingBar.h , Player[1].ScorePercent, Player[1].ScoreMax, Player[1].ScoreTotalI); end; if PlayersPlay = 3 then begin //SingDrawSingbar( 75 + 10*ScreenX, 95, 100, 8, Player[0].ScorePercent); //SingDrawSingbar(370 + 10*ScreenX, 95, 100, 8, Player[1].ScorePercent); //SingDrawSingbar(670 + 10*ScreenX, 95, 100, 8, Player[2].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP1ThreePSingBar.x, Theme.Sing.StaticP1ThreePSingBar.y, Theme.Sing.StaticP1ThreePSingBar.w, Theme.Sing.StaticP1ThreePSingBar.h , Player[0].ScorePercent, Player[0].ScoreMax); - SingDrawSingbar(Theme.Sing.StaticP2MSingBar.x, Theme.Sing.StaticP2MSingBar.y, Theme.Sing.StaticP2MSingBar.w, Theme.Sing.StaticP2MSingBar.h , Player[1].ScorePercent, Player[1].ScoreMax); - SingDrawSingbar(Theme.Sing.StaticP3SingBar.x, Theme.Sing.StaticP3SingBar.y, Theme.Sing.StaticP3SingBar.w, Theme.Sing.StaticP3SingBar.h , Player[2].ScorePercent, Player[2].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP1ThreePSingBar.x, Theme.Sing.StaticP1ThreePSingBar.y, Theme.Sing.StaticP1ThreePSingBar.w, Theme.Sing.StaticP1ThreePSingBar.h , Player[0].ScorePercent, Player[0].ScoreMax, Player[0].ScoreTotalI); + SingDrawSingbar(Theme.Sing.StaticP2MSingBar.x, Theme.Sing.StaticP2MSingBar.y, Theme.Sing.StaticP2MSingBar.w, Theme.Sing.StaticP2MSingBar.h , Player[1].ScorePercent, Player[1].ScoreMax, Player[1].ScoreTotalI); + SingDrawSingbar(Theme.Sing.StaticP3SingBar.x, Theme.Sing.StaticP3SingBar.y, Theme.Sing.StaticP3SingBar.w, Theme.Sing.StaticP3SingBar.h , Player[2].ScorePercent, Player[2].ScoreMax, Player[2].ScoreTotalI); end; if PlayersPlay = 4 then begin @@ -797,15 +797,15 @@ begin begin //SingDrawSingbar( 75 + 10*ScreenX, 95, 100, 8, Player[0].ScorePercent); //SingDrawSingbar(620 + 10*ScreenX, 95, 100, 8, Player[1].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP1TwoPSingBar.x, Theme.Sing.StaticP1TwoPSingBar.y, Theme.Sing.StaticP1TwoPSingBar.w, Theme.Sing.StaticP1TwoPSingBar.h , Player[0].ScorePercent, Player[0].ScoreMax); - SingDrawSingbar(Theme.Sing.StaticP2RSingBar.x, Theme.Sing.StaticP2RSingBar.y, Theme.Sing.StaticP2RSingBar.w, Theme.Sing.StaticP2RSingBar.h , Player[1].ScorePercent, Player[1].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP1TwoPSingBar.x, Theme.Sing.StaticP1TwoPSingBar.y, Theme.Sing.StaticP1TwoPSingBar.w, Theme.Sing.StaticP1TwoPSingBar.h , Player[0].ScorePercent, Player[0].ScoreMax, Player[0].ScoreTotalI); + SingDrawSingbar(Theme.Sing.StaticP2RSingBar.x, Theme.Sing.StaticP2RSingBar.y, Theme.Sing.StaticP2RSingBar.w, Theme.Sing.StaticP2RSingBar.h , Player[1].ScorePercent, Player[1].ScoreMax, Player[1].ScoreTotalI); end; if ScreenAct = 2 then begin //SingDrawSingbar( 75 + 10*ScreenX, 95, 100, 8, Player[2].ScorePercent); //SingDrawSingbar(620 + 10*ScreenX, 95, 100, 8, Player[3].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP1TwoPSingBar.x, Theme.Sing.StaticP1TwoPSingBar.y, Theme.Sing.StaticP1TwoPSingBar.w, Theme.Sing.StaticP1TwoPSingBar.h , Player[2].ScorePercent, Player[2].ScoreMax); - SingDrawSingbar(Theme.Sing.StaticP2RSingBar.x, Theme.Sing.StaticP2RSingBar.y, Theme.Sing.StaticP2RSingBar.w, Theme.Sing.StaticP2RSingBar.h , Player[3].ScorePercent, Player[3].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP1TwoPSingBar.x, Theme.Sing.StaticP1TwoPSingBar.y, Theme.Sing.StaticP1TwoPSingBar.w, Theme.Sing.StaticP1TwoPSingBar.h , Player[2].ScorePercent, Player[2].ScoreMax, Player[2].ScoreTotalI); + SingDrawSingbar(Theme.Sing.StaticP2RSingBar.x, Theme.Sing.StaticP2RSingBar.y, Theme.Sing.StaticP2RSingBar.w, Theme.Sing.StaticP2RSingBar.h , Player[3].ScorePercent, Player[3].ScoreMax, Player[3].ScoreTotalI); end; end; if PlayersPlay = 6 then @@ -815,18 +815,18 @@ begin //SingDrawSingbar( 75 + 10*ScreenX, 95, 100, 8, Player[0].ScorePercent); //SingDrawSingbar(370 + 10*ScreenX, 95, 100, 8, Player[1].ScorePercent); //SingDrawSingbar(670 + 10*ScreenX, 95, 100, 8, Player[2].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP1ThreePSingBar.x, Theme.Sing.StaticP1ThreePSingBar.y, Theme.Sing.StaticP1ThreePSingBar.w, Theme.Sing.StaticP1ThreePSingBar.h , Player[0].ScorePercent, Player[0].ScoreMax); - SingDrawSingbar(Theme.Sing.StaticP2MSingBar.x, Theme.Sing.StaticP2MSingBar.y, Theme.Sing.StaticP2MSingBar.w, Theme.Sing.StaticP2MSingBar.h , Player[1].ScorePercent, Player[1].ScoreMax); - SingDrawSingbar(Theme.Sing.StaticP3SingBar.x, Theme.Sing.StaticP3SingBar.y, Theme.Sing.StaticP3SingBar.w, Theme.Sing.StaticP3SingBar.h , Player[2].ScorePercent, Player[2].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP1ThreePSingBar.x, Theme.Sing.StaticP1ThreePSingBar.y, Theme.Sing.StaticP1ThreePSingBar.w, Theme.Sing.StaticP1ThreePSingBar.h , Player[0].ScorePercent, Player[0].ScoreMax, Player[0].ScoreTotalI); + SingDrawSingbar(Theme.Sing.StaticP2MSingBar.x, Theme.Sing.StaticP2MSingBar.y, Theme.Sing.StaticP2MSingBar.w, Theme.Sing.StaticP2MSingBar.h , Player[1].ScorePercent, Player[1].ScoreMax, Player[1].ScoreTotalI); + SingDrawSingbar(Theme.Sing.StaticP3SingBar.x, Theme.Sing.StaticP3SingBar.y, Theme.Sing.StaticP3SingBar.w, Theme.Sing.StaticP3SingBar.h , Player[2].ScorePercent, Player[2].ScoreMax, Player[2].ScoreTotalI); end; if ScreenAct = 2 then begin //SingDrawSingbar( 75 + 10*ScreenX, 95, 100, 8, Player[3].ScorePercent); //SingDrawSingbar(370 + 10*ScreenX, 95, 100, 8, Player[4].ScorePercent); //SingDrawSingbar(670 + 10*ScreenX, 95, 100, 8, Player[5].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP1ThreePSingBar.x, Theme.Sing.StaticP1ThreePSingBar.y, Theme.Sing.StaticP1ThreePSingBar.w, Theme.Sing.StaticP1ThreePSingBar.h , Player[3].ScorePercent, Player[3].ScoreMax); - SingDrawSingbar(Theme.Sing.StaticP2MSingBar.x, Theme.Sing.StaticP2MSingBar.y, Theme.Sing.StaticP2MSingBar.w, Theme.Sing.StaticP2MSingBar.h , Player[4].ScorePercent, Player[4].ScoreMax); - SingDrawSingbar(Theme.Sing.StaticP3SingBar.x, Theme.Sing.StaticP3SingBar.y, Theme.Sing.StaticP3SingBar.w, Theme.Sing.StaticP3SingBar.h , Player[5].ScorePercent, Player[5].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP1ThreePSingBar.x, Theme.Sing.StaticP1ThreePSingBar.y, Theme.Sing.StaticP1ThreePSingBar.w, Theme.Sing.StaticP1ThreePSingBar.h , Player[3].ScorePercent, Player[3].ScoreMax, Player[3].ScoreTotalI); + SingDrawSingbar(Theme.Sing.StaticP2MSingBar.x, Theme.Sing.StaticP2MSingBar.y, Theme.Sing.StaticP2MSingBar.w, Theme.Sing.StaticP2MSingBar.h , Player[4].ScorePercent, Player[4].ScoreMax, Player[4].ScoreTotalI); + SingDrawSingbar(Theme.Sing.StaticP3SingBar.x, Theme.Sing.StaticP3SingBar.y, Theme.Sing.StaticP3SingBar.w, Theme.Sing.StaticP3SingBar.h , Player[5].ScorePercent, Player[5].ScoreMax, Player[5].ScoreTotalI); end; end; end; @@ -1312,67 +1312,67 @@ begin if PlayersPlay = 1 then begin if PlayerInfo.Playerinfo[0].Enabled then //SingDrawSingbar( 75 + 10*ScreenX, 95, 100, 8, Player[0].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP1SingBar.x, Theme.Sing.StaticP1SingBar.y, Theme.Sing.StaticP1SingBar.w, Theme.Sing.StaticP1SingBar.h , Player[0].ScorePercent, Player[0].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP1SingBar.x, Theme.Sing.StaticP1SingBar.y, Theme.Sing.StaticP1SingBar.w, Theme.Sing.StaticP1SingBar.h , Player[0].ScorePercent, Player[0].ScoreMax, Player[0].ScoreTotalI); end; if PlayersPlay = 2 then begin if PlayerInfo.Playerinfo[0].Enabled then //SingDrawSingbar( 75 + 10*ScreenX, 95, 100, 8, Player[0].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP1TwoPSingBar.x, Theme.Sing.StaticP1TwoPSingBar.y, Theme.Sing.StaticP1TwoPSingBar.w, Theme.Sing.StaticP1TwoPSingBar.h , Player[0].ScorePercent, Player[0].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP1TwoPSingBar.x, Theme.Sing.StaticP1TwoPSingBar.y, Theme.Sing.StaticP1TwoPSingBar.w, Theme.Sing.StaticP1TwoPSingBar.h , Player[0].ScorePercent, Player[0].ScoreMax, Player[0].ScoreTotalI); if PlayerInfo.Playerinfo[1].Enabled then //SingDrawSingbar(620 + 10*ScreenX, 95, 100, 8, Player[1].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP2RSingBar.x, Theme.Sing.StaticP2RSingBar.y, Theme.Sing.StaticP2RSingBar.w, Theme.Sing.StaticP2RSingBar.h , Player[1].ScorePercent, Player[1].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP2RSingBar.x, Theme.Sing.StaticP2RSingBar.y, Theme.Sing.StaticP2RSingBar.w, Theme.Sing.StaticP2RSingBar.h , Player[1].ScorePercent, Player[1].ScoreMax, Player[1].ScoreTotalI); end; if PlayersPlay = 3 then begin if PlayerInfo.Playerinfo[0].Enabled then //SingDrawSingbar( 75 + 10*ScreenX, 95, 100, 8, Player[0].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP1ThreePSingBar.x, Theme.Sing.StaticP1ThreePSingBar.y, Theme.Sing.StaticP1ThreePSingBar.w, Theme.Sing.StaticP1ThreePSingBar.h , Player[0].ScorePercent, Player[0].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP1ThreePSingBar.x, Theme.Sing.StaticP1ThreePSingBar.y, Theme.Sing.StaticP1ThreePSingBar.w, Theme.Sing.StaticP1ThreePSingBar.h , Player[0].ScorePercent, Player[0].ScoreMax, Player[0].ScoreTotalI); if PlayerInfo.Playerinfo[1].Enabled then //SingDrawSingbar(370 + 10*ScreenX, 95, 100, 8, Player[1].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP2MSingBar.x, Theme.Sing.StaticP2MSingBar.y, Theme.Sing.StaticP2MSingBar.w, Theme.Sing.StaticP2MSingBar.h , Player[1].ScorePercent, Player[1].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP2MSingBar.x, Theme.Sing.StaticP2MSingBar.y, Theme.Sing.StaticP2MSingBar.w, Theme.Sing.StaticP2MSingBar.h , Player[1].ScorePercent, Player[1].ScoreMax, Player[1].ScoreTotalI); if PlayerInfo.Playerinfo[2].Enabled then //SingDrawSingbar(670 + 10*ScreenX, 95, 100, 8, Player[2].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP3SingBar.x, Theme.Sing.StaticP3SingBar.y, Theme.Sing.StaticP3SingBar.w, Theme.Sing.StaticP3SingBar.h , Player[2].ScorePercent, Player[2].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP3SingBar.x, Theme.Sing.StaticP3SingBar.y, Theme.Sing.StaticP3SingBar.w, Theme.Sing.StaticP3SingBar.h , Player[2].ScorePercent, Player[2].ScoreMax, Player[2].ScoreTotalI); end; if PlayersPlay = 4 then begin if ScreenAct = 1 then begin if PlayerInfo.Playerinfo[0].Enabled then //SingDrawSingbar( 75 + 10*ScreenX, 95, 100, 8, Player[0].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP1TwoPSingBar.x, Theme.Sing.StaticP1TwoPSingBar.y, Theme.Sing.StaticP1TwoPSingBar.w, Theme.Sing.StaticP1TwoPSingBar.h , Player[0].ScorePercent, Player[0].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP1TwoPSingBar.x, Theme.Sing.StaticP1TwoPSingBar.y, Theme.Sing.StaticP1TwoPSingBar.w, Theme.Sing.StaticP1TwoPSingBar.h , Player[0].ScorePercent, Player[0].ScoreMax, Player[0].ScoreTotalI); if PlayerInfo.Playerinfo[1].Enabled then //SingDrawSingbar(620 + 10*ScreenX, 95, 100, 8, Player[1].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP2RSingBar.x, Theme.Sing.StaticP2RSingBar.y, Theme.Sing.StaticP2RSingBar.w, Theme.Sing.StaticP2RSingBar.h , Player[1].ScorePercent, Player[1].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP2RSingBar.x, Theme.Sing.StaticP2RSingBar.y, Theme.Sing.StaticP2RSingBar.w, Theme.Sing.StaticP2RSingBar.h , Player[1].ScorePercent, Player[1].ScoreMax, Player[1].ScoreTotalI); end; if ScreenAct = 2 then begin if PlayerInfo.Playerinfo[2].Enabled then //SingDrawSingbar( 75 + 10*ScreenX, 95, 100, 8, Player[2].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP1TwoPSingBar.x, Theme.Sing.StaticP1TwoPSingBar.y, Theme.Sing.StaticP1TwoPSingBar.w, Theme.Sing.StaticP1TwoPSingBar.h , Player[2].ScorePercent, Player[2].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP1TwoPSingBar.x, Theme.Sing.StaticP1TwoPSingBar.y, Theme.Sing.StaticP1TwoPSingBar.w, Theme.Sing.StaticP1TwoPSingBar.h , Player[2].ScorePercent, Player[2].ScoreMax, Player[2].ScoreTotalI); if PlayerInfo.Playerinfo[3].Enabled then //SingDrawSingbar(620 + 10*ScreenX, 95, 100, 8, Player[3].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP2RSingBar.x, Theme.Sing.StaticP2RSingBar.y, Theme.Sing.StaticP2RSingBar.w, Theme.Sing.StaticP2RSingBar.h , Player[3].ScorePercent, Player[3].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP2RSingBar.x, Theme.Sing.StaticP2RSingBar.y, Theme.Sing.StaticP2RSingBar.w, Theme.Sing.StaticP2RSingBar.h , Player[3].ScorePercent, Player[3].ScoreMax, Player[3].ScoreTotalI); end; end; if PlayersPlay = 6 then begin if ScreenAct = 1 then begin if PlayerInfo.Playerinfo[0].Enabled then //SingDrawSingbar( 75 + 10*ScreenX, 95, 100, 8, Player[0].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP1ThreePSingBar.x, Theme.Sing.StaticP1ThreePSingBar.y, Theme.Sing.StaticP1ThreePSingBar.w, Theme.Sing.StaticP1ThreePSingBar.h , Player[0].ScorePercent, Player[0].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP1ThreePSingBar.x, Theme.Sing.StaticP1ThreePSingBar.y, Theme.Sing.StaticP1ThreePSingBar.w, Theme.Sing.StaticP1ThreePSingBar.h , Player[0].ScorePercent, Player[0].ScoreMax, Player[0].ScoreTotalI); if PlayerInfo.Playerinfo[1].Enabled then //SingDrawSingbar(370 + 10*ScreenX, 95, 100, 8, Player[1].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP2MSingBar.x, Theme.Sing.StaticP2MSingBar.y, Theme.Sing.StaticP2MSingBar.w, Theme.Sing.StaticP2MSingBar.h , Player[1].ScorePercent, Player[1].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP2MSingBar.x, Theme.Sing.StaticP2MSingBar.y, Theme.Sing.StaticP2MSingBar.w, Theme.Sing.StaticP2MSingBar.h , Player[1].ScorePercent, Player[1].ScoreMax, Player[1].ScoreTotalI); if PlayerInfo.Playerinfo[2].Enabled then //SingDrawSingbar(670 + 10*ScreenX, 95, 100, 8, Player[2].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP3SingBar.x, Theme.Sing.StaticP3SingBar.y, Theme.Sing.StaticP3SingBar.w, Theme.Sing.StaticP3SingBar.h , Player[2].ScorePercent, Player[2].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP3SingBar.x, Theme.Sing.StaticP3SingBar.y, Theme.Sing.StaticP3SingBar.w, Theme.Sing.StaticP3SingBar.h , Player[2].ScorePercent, Player[2].ScoreMax, Player[2].ScoreTotalI); end; if ScreenAct = 2 then begin if PlayerInfo.Playerinfo[3].Enabled then //SingDrawSingbar( 75 + 10*ScreenX, 95, 100, 8, Player[3].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP1ThreePSingBar.x, Theme.Sing.StaticP1ThreePSingBar.y, Theme.Sing.StaticP1ThreePSingBar.w, Theme.Sing.StaticP1ThreePSingBar.h , Player[3].ScorePercent, Player[3].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP1ThreePSingBar.x, Theme.Sing.StaticP1ThreePSingBar.y, Theme.Sing.StaticP1ThreePSingBar.w, Theme.Sing.StaticP1ThreePSingBar.h , Player[3].ScorePercent, Player[3].ScoreMax, Player[3].ScoreTotalI); if PlayerInfo.Playerinfo[4].Enabled then //SingDrawSingbar(370 + 10*ScreenX, 95, 100, 8, Player[4].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP2MSingBar.x, Theme.Sing.StaticP2MSingBar.y, Theme.Sing.StaticP2MSingBar.w, Theme.Sing.StaticP2MSingBar.h , Player[4].ScorePercent, Player[4].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP2MSingBar.x, Theme.Sing.StaticP2MSingBar.y, Theme.Sing.StaticP2MSingBar.w, Theme.Sing.StaticP2MSingBar.h , Player[4].ScorePercent, Player[4].ScoreMax, Player[4].ScoreTotalI); if PlayerInfo.Playerinfo[5].Enabled then //SingDrawSingbar(670 + 10*ScreenX, 95, 100, 8, Player[5].ScorePercent); - SingDrawSingbar(Theme.Sing.StaticP3SingBar.x, Theme.Sing.StaticP3SingBar.y, Theme.Sing.StaticP3SingBar.w, Theme.Sing.StaticP3SingBar.h , Player[5].ScorePercent, Player[5].ScoreMax); + SingDrawSingbar(Theme.Sing.StaticP3SingBar.x, Theme.Sing.StaticP3SingBar.y, Theme.Sing.StaticP3SingBar.w, Theme.Sing.StaticP3SingBar.h , Player[5].ScorePercent, Player[5].ScoreMax, Player[5].ScoreTotalI); end; end; end; @@ -1596,7 +1596,7 @@ end; //SingBar Mod -procedure SingDrawSingbar(X, Y, W, H: real; Percent: integer; ScoreMax: integer); +procedure SingDrawSingbar(X, Y, W, H: real; Percent, ScoreMax, ScoreCurrent: integer); var R: Real; G: Real; @@ -1678,28 +1678,52 @@ begin; if (Ini.PossibleScore=0) then Exit; - - //possible score Front - glColor4f(1, 1, 1, 0.8); - glEnable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glBindTexture(GL_TEXTURE_2D, Tex_SingBar_Back.TexNum); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex2f(X, Y+H); - glTexCoord2f(0, 1); glVertex2f(X, Y+H*3); - glTexCoord2f(1, 1); glVertex2f(X+W, Y+H*3); - glTexCoord2f(1, 0); glVertex2f(X+W, Y+H); - glEnd; - glColor4f(0, 0, 0, 1); - SetFontStyle(1); - SetFontItalic(false); - SetFontSize(H*0.7); - str := 'max: ' + IntToStr(ScoreMax); - wd := glTextWidth(PChar(str)); - SetFontPos (X+W/2-wd/2, Y+H); - glPrint(PChar(str)); + + if (Ini.PossibleScore=1) then + begin + glEnable(GL_TEXTURE_2D); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glBindTexture(GL_TEXTURE_2D, Tex_SingBar_Bar.TexNum); + glColor4f(1, 0, 0, 0.6); + glBegin(GL_QUADS); + glTexCoord2f(0, 0); glVertex2f(X, Y+H); + glTexCoord2f(0, 1); glVertex2f(X, Y+H*2); + glTexCoord2f(1, 1); glVertex2f(X+W*ScoreMax/9990, Y+H*2); + glTexCoord2f(1, 0); glVertex2f(X+W*ScoreMax/9990, Y+H); + glEnd; + + glColor4f(0, 1, 0, 0.6); + glBegin(GL_QUADS); + glTexCoord2f(0, 0); glVertex2f(X, Y+H); + glTexCoord2f(0, 1); glVertex2f(X, Y+H*2); + glTexCoord2f(1, 1); glVertex2f(X+W*ScoreCurrent/9990, Y+H*2); + glTexCoord2f(1, 0); glVertex2f(X+W*ScoreCurrent/9990, Y+H); + glEnd; + end else + begin + glColor4f(1, 1, 1, 0.8); + glEnable(GL_TEXTURE_2D); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glBindTexture(GL_TEXTURE_2D, Tex_SingBar_Back.TexNum); + glBegin(GL_QUADS); + glTexCoord2f(0, 0); glVertex2f(X, Y+H); + glTexCoord2f(0, 1); glVertex2f(X, Y+H*3); + glTexCoord2f(1, 1); glVertex2f(X+W, Y+H*3); + glTexCoord2f(1, 0); glVertex2f(X+W, Y+H); + glEnd; + + glColor4f(0, 0, 0, 0.7); + SetFontStyle(1); + SetFontItalic(false); + SetFontSize(H*0.7); + str := 'max: ' + IntToStr(ScoreMax); + wd := glTextWidth(PChar(str)); + SetFontPos (X+W/2-wd/2, Y+H); + glPrint(PChar(str)); + end; end; //end Singbar Mod diff --git a/Game/Code/Classes/UFiles.pas b/Game/Code/Classes/UFiles.pas index 242fe092..a8fa8076 100644 --- a/Game/Code/Classes/UFiles.pas +++ b/Game/Code/Classes/UFiles.pas @@ -41,6 +41,7 @@ var PluginPath: string; PlayListPath: string; RecordingsPath: string; + SessionLogPath: string; SongFile: TextFile; // all procedures in this unit operates on this file FileLineNo: integer; //Line which is readed at Last, for error reporting @@ -74,6 +75,7 @@ begin PluginPath := GamePath + 'Plugins\'; PlaylistPath := GamePath + 'Playlists\'; RecordingsPath := GamePath + 'Recordings\'; + SessionLogPath := GamePath + 'SessionLog\'; Writeable := true; @@ -105,6 +107,9 @@ begin If Writeable And (not DirectoryExists(RecordingsPath)) then Writeable := ForceDirectories(RecordingsPath); + If Writeable And (not DirectoryExists(SessionLogPath)) then + Writeable := ForceDirectories(SessionLogPath); + if not Writeable then Log.LogError('Error: Dir is Readonly'); diff --git a/Game/Code/Classes/UIni.pas b/Game/Code/Classes/UIni.pas index 6e2f1b16..2c84cec3 100644 --- a/Game/Code/Classes/UIni.pas +++ b/Game/Code/Classes/UIni.pas @@ -83,6 +83,7 @@ type SumPlayers: integer; DuelRatio: integer; PossibleScore: integer; + LogSession: integer; // Soundcards SoundCard: array[0..7, 1..2] of integer; @@ -170,14 +171,15 @@ const // Advanced ILoadAnimation: array[0..1] of string = ('Off', 'On'); IEffectSing: array[0..1] of string = ('Off', 'On'); - IScreenFade: array[0..1] of String =('Off', 'On'); + IScreenFade: array[0..1] of String = ('Off', 'On'); IAskbeforeDel: array[0..1] of string = ('Off', 'On'); IOnSongClick: array[0..2] of string = ('Sing', 'Select Players', 'Open Menu'); ILineBonus: array[0..2] of string = ('Off', 'At Score', 'At Notes'); IPartyPopup: array[0..1] of string = ('Off', 'On'); ISumPlayers: array[0..2] of string = ('Never', 'Dynamic', 'Always'); IDuelRatio: array[0..9] of string = ('normal', '10%', '20%', '30%', '40%', '50%', '60%', '70%', '80%', '90%'); - IPossibleScore: array[0..1] of string = ('Off', 'On'); + IPossibleScore: array[0..2] of string = ('Off', 'Bar', 'Numbers'); + ILogSession: array[0..1] of string = ('Off', 'On'); IChannel: array[0..6] of string = ('Off', '1', '2', '3', '4', '5', '6'); @@ -607,10 +609,15 @@ begin if Tekst = IDuelRatio[Pet] then Ini.DuelRatio := Pet; // PossibleScore - Tekst := IniFile.ReadString('Advanced', 'PossibleScore', IPossibleScore[0]); + Tekst := IniFile.ReadString('Advanced', 'PossibleScore', IPossibleScore[1]); for Pet := 0 to High(IPossibleScore) do if Tekst = IPossibleScore[Pet] then Ini.PossibleScore := Pet; + // LogSession + Tekst := IniFile.ReadString('Advanced', 'LogSession', ILogSession[0]); + for Pet := 0 to High(ILogSession) do + if Tekst = ILogSession[Pet] then Ini.LogSession := Pet; + // SongPath if (Params.SongPath <> '') then SongPath := IncludeTrailingPathDelimiter(Params.SongPath) @@ -842,6 +849,10 @@ begin Tekst := IPossibleScore[Ini.PossibleScore]; IniFile.WriteString('Advanced', 'PossibleScore', Tekst); + //LogSession + Tekst := ILogSession[Ini.LogSession]; + IniFile.WriteString('Advanced', 'LogSession', Tekst); + IniFile.Free; end; end; diff --git a/Game/Code/Classes/ULog.pas b/Game/Code/Classes/ULog.pas index 39c334ce..62414999 100644 --- a/Game/Code/Classes/ULog.pas +++ b/Game/Code/Classes/ULog.pas @@ -14,7 +14,11 @@ type FileError: TextFile; FileErrorO: boolean; // opened + FileSession: TextFile; + FileSessionO: boolean; // opened + NumErrors: integer; + NumSungSongs: integer; Title: String; //Application Title @@ -38,6 +42,8 @@ type // voice function LogVoice(SoundNr: Integer; Player, Artist, Title, Points: string): string; + procedure LogSession(names: array of string; points: array of string; Artist, Title, singmode: string); + // compability procedure LogStatus(Log1, Log2: string); procedure LogError(Log1, Log2: string); overload; @@ -54,6 +60,8 @@ begin if FileBenchmarkO then CloseFile(FileBenchmark); // if FileAnalyzeO then CloseFile(FileAnalyze); if FileErrorO then CloseFile(FileError); + if FileSessionO then CloseFile(FileSession); + end; procedure TLog.BenchmarkStart(Number: integer); @@ -281,6 +289,65 @@ begin LogVoice := FileName; end; +procedure TLog.LogSession(names: array of string; points: array of string; Artist, Title, singmode: string); +var + Num: integer; + FileName: string; + I: integer; + +begin + if not FileSessionO then + begin + FileSessionO := false; + NumSungSongs := 0; + + for Num := 1 to 99999 do + begin + FileName := IntToStr(Num); + while Length(FileName) < 5 do FileName := '0' + FileName; + FileName := SessionLogPath + 'Session_' + FileName + '.log'; + if not FileExists(FileName) then break + end; + + AssignFile(FileSession, FileName); + {$I-} + Rewrite(FileSession); + if IOResult = 0 then FileSessionO := true; + {$I+} + + //If File is opened write Date to File + If (FileSessionO) then + begin + WriteLn(FileSession, 'Session Log'); + WriteLn(FileSession, 'Date: ' + DatetoStr(Now) + ' Time: ' + TimetoStr(Now)); + + Flush(FileSession); + end; + end; + + if FileSessionO then + begin + try + Inc(NumSungSongs); + WriteLn(FileSession, ''); + WriteLn(FileSession, ''); + WriteLn(FileSession, '#----------------------------------------------------------------'); + WriteLn(FileSession, '# ' + IntToStr(NumSungSongs) + ') ' + 'Date: ' + DatetoStr(Now) + ' Time: ' + TimetoStr(Now)); + WriteLn(FileSession, '# Sing mode: ' + singmode); + WriteLn(FileSession, '#----------------------------------------------------------------'); + WriteLn(FileSession, '# Song: ' + Artist + ' - ' + Title + ':'); + for I := 0 to Length(names) - 1 do + begin + WriteLn(FileSession, '# ' + names[I] + ' - ' + points[I]); + end; + WriteLn(FileSession, '#-----------------------------------------------------------------'); + Flush(FileSession); + except + FileSessionO := false; + end; + end; +end; + procedure TLog.LogStatus(Log1, Log2: string); begin //Just for Debugging diff --git a/Game/Code/Classes/UMain.pas b/Game/Code/Classes/UMain.pas index a1df643e..2b947908 100644 --- a/Game/Code/Classes/UMain.pas +++ b/Game/Code/Classes/UMain.pas @@ -553,6 +553,7 @@ var N: integer; SumN: real; NumS: integer; + tap: integer; SMin: integer; SMax: integer; SDet: integer; // temporary: sentence of detected note @@ -562,7 +563,6 @@ var Range: integer; NoteHit:boolean; begin - for CP := 0 to PlayersPlay-1 do begin if (not AktSong.isDuet) then @@ -711,17 +711,18 @@ begin begin for N := 0 to Czesci[P].Czesc[S].HighNut do begin - if (Czesci[P].Czesc[S].Nuta[N].Start+Czesci[P].Czesc[S].Nuta[N].Dlugosc - >= Czas.AktBeatD) then + if (Czesci[P].Czesc[S].Nuta[N].Start > Czas.AktBeatD) then begin + tap := Czesci[P].Czesc[S].Nuta[N].Dlugosc; + if (Czesci[P].Czesc[S].Nuta[N].Start + tap < Czas.AktBeatD) then + tap := Czas.AktBeatD - Czesci[P].Czesc[S].Nuta[N].Start - tap; + if (Ini.LineBonus = 0) then // add points without LineBonus - SumN := SumN + 10000 / Czesci[P].Wartosc * Czesci[P].Czesc[S].Nuta[N].Wartosc * - Czesci[P].Czesc[S].Nuta[N].Dlugosc + SumN := SumN + 10000 / Czesci[P].Wartosc * Czesci[P].Czesc[S].Nuta[N].Wartosc * tap else // add points with Line Bonus - SumN := SumN + 9000 / Czesci[P].Wartosc * Czesci[P].Czesc[S].Nuta[N].Wartosc * - Czesci[P].Czesc[S].Nuta[N].Dlugosc; + SumN := SumN + 9000 / Czesci[P].Wartosc * Czesci[P].Czesc[S].Nuta[N].Wartosc * tap; end; end; @@ -884,17 +885,18 @@ begin begin for N := 0 to Czesci[P].Czesc[S].HighNut do begin - if (Czesci[P].Czesc[S].Nuta[N].Start+Czesci[P].Czesc[S].Nuta[N].Dlugosc - >=Czas.AktBeat) then + if (Czesci[P].Czesc[S].Nuta[N].Start > Czas.AktBeatD) then begin + tap := Czesci[P].Czesc[S].Nuta[N].Dlugosc; + if (Czesci[P].Czesc[S].Nuta[N].Start + tap < Czas.AktBeatD) then + tap := Czas.AktBeatD - Czesci[P].Czesc[S].Nuta[N].Start - tap; + if (Ini.LineBonus = 0) then // add points without LineBonus - SumN := SumN + 10000 / Czesci[P].Wartosc * Czesci[P].Czesc[S].Nuta[N].Wartosc * - Czesci[P].Czesc[S].Nuta[N].Dlugosc + SumN := SumN + 10000 / Czesci[P].Wartosc * Czesci[P].Czesc[S].Nuta[N].Wartosc * tap else // add points with Line Bonus - SumN := SumN + 9000 / Czesci[P].Wartosc * Czesci[P].Czesc[S].Nuta[N].Wartosc * - Czesci[P].Czesc[S].Nuta[N].Dlugosc; + SumN := SumN + 9000 / Czesci[P].Wartosc * Czesci[P].Czesc[S].Nuta[N].Wartosc * tap; end; end; diff --git a/Game/Code/Screens/UScreenSing.pas b/Game/Code/Screens/UScreenSing.pas index fbf128b0..94c5d162 100644 --- a/Game/Code/Screens/UScreenSing.pas +++ b/Game/Code/Screens/UScreenSing.pas @@ -216,7 +216,7 @@ begin SDLK_S: begin - Ini.PossibleScore := (Ini.PossibleScore+1) mod 2; + Ini.PossibleScore := (Ini.PossibleScore+1) mod 3; Ini.Save; end; @@ -1040,9 +1040,6 @@ begin end; procedure TScreenSing.onShowFinish; -var - I: integer; - begin // play movie (II) if AktSong.VideoLoaded then @@ -1414,20 +1411,26 @@ begin for I := 0 to Length(Czesci) - 1 do begin + //init K ... K := Czesci[I].Akt; + + //find actual line for J := 0 to Czesci[I].High do begin if Czas.AktBeat >= Czesci[I].Czesc[J].Start then K := J; end; + //time diff ab := GetTimeFromBeat(Czesci[I].Czesc[K].StartNote) - Czas.Teraz; + //last line if (K = Czesci[I].High) then ab := Czas.Teraz - GetTimeFromBeat(Czesci[I].Czesc[K].Nuta[Czesci[I].Czesc[K].HighNut].Start+ Czesci[I].Czesc[K].Nuta[Czesci[I].Czesc[K].HighNut].Dlugosc); - if (ab>2*dt) then + //lyric main and other nice things + if (ab>2.5*dt) or ((K = Czesci[I].High) and (ab>dt)) then begin Alpha[I] := Alpha[I]-TimeSkip/dt; if (Alpha[I]<0) then @@ -1440,6 +1443,7 @@ begin end else Alpha[I] := 1; + //lyric sub if (K < Czesci[I].High) then begin ab := GetTimeFromBeat(Czesci[I].Czesc[K+1].StartNote) - Czas.Teraz; @@ -1579,12 +1583,16 @@ var I, J: integer; len, num: integer; points: string; + scores: array of string; + names: array of string; + singmode: string; begin Music.CaptureStop; Music.Stop; - if Ini.SavePlayback = 1 then begin + if (Ini.SavePlayback = 1) and not FadeOut then + begin Log.BenchmarkStart(0); for I := 0 to PlayersPlay - 1 do @@ -1600,7 +1608,46 @@ begin Log.LogBenchmark('Creating files', 0); end; - if AktSong.VideoLoaded then begin + if (Ini.LogSession=1) and not FadeOut then + begin + SetLength(scores, PlayersPlay); + SetLength(names, PlayersPlay); + for I := 0 to PlayersPlay - 1 do + begin + points := IntToStr(Player[I].ScoreTotalI); + while Length(points) < 5 do + points := '0'+points; + + scores[I] := points; + names[I] := Ini.Name[I]; + end; + + if (ScreenSong.Mode = smParty) then + singmode := PartySession.Plugins[PartySession.Rounds[PartySession.CurRound].PluginNr].Name + else if (ScreenSong.Mode = smChallenge) then + singmode := PartySessionM2.Plugins[PartySessionM2.Rounds[PartySessionM2.CurRound].PluginNr].Name; + + if (ScreenSong.Mode = smMedley) or ScreenSong.PartyMedley then + begin + if (ScreenSong.Mode = smMedley) then + singmode := 'Medley'; + + if (PlaylistMedley.CurrentMedleySong<=PlaylistMedley.NumMedleySongs) then + singmode := singmode + ' (' + IntToStr(PlaylistMedley.CurrentMedleySong) + + '/' + IntToStr(PlaylistMedley.NumMedleySongs) + ')' + else + singmode := singmode + ' (' + IntToStr(PlaylistMedley.NumMedleySongs) + + '/' + IntToStr(PlaylistMedley.NumMedleySongs) + ')'; + + end else if(ScreenSong.Mode = smNormal) then + begin + singmode := 'Normal'; + end; + Log.LogSession(names, scores, AktSong.Artist, AktSong.Title, singmode); + end; + + if AktSong.VideoLoaded then + begin acClose; AktSong.VideoLoaded := false; // to prevent drawing closed video end; diff --git a/Game/Code/Screens/UScreenSingModi.pas b/Game/Code/Screens/UScreenSingModi.pas index 6144c27f..0370509e 100644 --- a/Game/Code/Screens/UScreenSingModi.pas +++ b/Game/Code/Screens/UScreenSingModi.pas @@ -83,6 +83,7 @@ begin begin PlaylistMedley.CurrentMedleySong:=PlaylistMedley.NumMedleySongs+1; Finish; + FadeOut := true; Music.PlayBack; for I := 0 to PlayersPlay-1 do //TODO: leave all this? @@ -106,6 +107,7 @@ begin end else begin Finish; + FadeOut := true; Music.PlayBack; if (ScreenSong.Mode=smParty) then @@ -624,21 +626,28 @@ end; end; end; - for I := 0 to Length(Czesci) - 1 do + for I := 0 to Length(Czesci) - 1 do begin + //init K ... K := Czesci[I].Akt; + + //find actual line for J := 0 to Czesci[I].High do begin if Czas.AktBeat >= Czesci[I].Czesc[J].Start then K := J; end; + + //time diff ab := GetTimeFromBeat(Czesci[I].Czesc[K].StartNote) - Czas.Teraz; + //last line if (K = Czesci[I].High) then ab := Czas.Teraz - GetTimeFromBeat(Czesci[I].Czesc[K].Nuta[Czesci[I].Czesc[K].HighNut].Start+ Czesci[I].Czesc[K].Nuta[Czesci[I].Czesc[K].HighNut].Dlugosc); - if (ab>2*dt) then + //lyric main and other nice things + if (ab>2.5*dt) or ((K = Czesci[I].High) and (ab>dt)) then begin Alpha[I] := Alpha[I]-TimeSkip/dt; if (Alpha[I]<0) then @@ -651,6 +660,7 @@ end; end else Alpha[I] := 1; + //lyric sub if (K < Czesci[I].High) then begin ab := GetTimeFromBeat(Czesci[I].Czesc[K+1].StartNote) - Czas.Teraz; @@ -664,6 +674,7 @@ end; end; end; + if not AktSong.isDuet then begin Alpha[1] := Alpha[0]; diff --git a/Game/Code/Screens/UScreenSong.pas b/Game/Code/Screens/UScreenSong.pas index 56590166..226ae532 100644 --- a/Game/Code/Screens/UScreenSong.pas +++ b/Game/Code/Screens/UScreenSong.pas @@ -1118,7 +1118,7 @@ begin ChangeSorting(Ini.Tabs=1, Ini.Sorting+1) else ChangeSorting(Ini.Tabs=1, 0); - end else + end else if (SDL_ModState = KMOD_LCTRL) then begin //Change Tabs (on/off) if (Ini.Tabs=1) then @@ -1413,7 +1413,6 @@ begin else Interaction := I - 1; - //Show Cat in Top Left Mod HideCatTL; //Show Wrong Song when Tabs on Fix @@ -1445,6 +1444,9 @@ begin ChangeMusic; end; + if (Ini.Tabs=0) then + HideCatTL; + Ini.Save; InfoHandler.changed := true; diff --git a/Game/Code/UltraStar.bdsproj b/Game/Code/UltraStar.bdsproj index acdabdad..c08bee96 100644 --- a/Game/Code/UltraStar.bdsproj +++ b/Game/Code/UltraStar.bdsproj @@ -170,8 +170,7 @@ 1.0.0.0 - - + Borland InterBase Express Components Intraweb 8.0 Design Package for Borland Development Studio 2006 Indy 10 Core Design Time diff --git a/Game/Code/UltraStar.dpr b/Game/Code/UltraStar.dpr index 954b0387..f9dae482 100644 --- a/Game/Code/UltraStar.dpr +++ b/Game/Code/UltraStar.dpr @@ -119,7 +119,7 @@ uses UVideo in 'Classes\UVideo.pas'; const - Version = 'UltraStar Deluxe Challenge, Medley & Duet Edition r9 beta 4'; + Version = 'UltraStar Deluxe Challenge, Medley & Duet Edition r9 RC'; var WndTitle: string; -- cgit v1.2.3