aboutsummaryrefslogtreecommitdiffstats
path: root/Game/Code/Screens/UScreenSing.pas
diff options
context:
space:
mode:
Diffstat (limited to 'Game/Code/Screens/UScreenSing.pas')
-rw-r--r--Game/Code/Screens/UScreenSing.pas92
1 files changed, 82 insertions, 10 deletions
diff --git a/Game/Code/Screens/UScreenSing.pas b/Game/Code/Screens/UScreenSing.pas
index 06cb048c..e07d5023 100644
--- a/Game/Code/Screens/UScreenSing.pas
+++ b/Game/Code/Screens/UScreenSing.pas
@@ -21,8 +21,9 @@ type
MP3Volume: integer;
MP3VolumeHandler: THandler;
- //Lyric bar for Duet mode
- StaticLyricDuetBar: integer;
+ //Lyric bars
+ StaticLyricBar: integer;
+ StaticLyricDuetBar: integer;
//TimeBar mod
StaticTimeProgress: integer;
@@ -34,6 +35,8 @@ type
TextP1: integer;
TextP1Score: integer;
+ Alpha: TAlpha;
+
//moveable singbar mod
StaticP1SingBar: integer;
StaticP1ThreePSingBar: integer;
@@ -100,7 +103,7 @@ type
//OnSentenceEnd for LineBonus + Singbar
procedure onSentenceEnd(CP: integer; S: Cardinal);
//OnSentenceChange (for Golden Notes)
- procedure onSentenceChange(S: Cardinal);
+ procedure onSentenceChange(CP: integer; S: Cardinal);
procedure SongError();
procedure LoadNextSong;
@@ -258,6 +261,7 @@ begin
LoadFromTheme(Theme.Sing);
+ StaticLyricBar := AddStatic(Theme.Sing.StaticLyricBar);
StaticLyricDuetBar := AddStatic(Theme.Sing.StaticLyricDuetBar);
//TimeBar mod
@@ -921,6 +925,10 @@ begin
Czas.Razem := AktSong.Finish / 1000;
end;
+ Czas.AktBeat := 0;
+ Czas.AktBeatC := 0;
+ Czas.AktBeatD := 0;
+
// main text
LyricMain[0].Clear;
LyricMain[0].X := 400;
@@ -987,7 +995,9 @@ begin
//Kill all Stars not Killed yet
//GoldenStarsTwinkle Mod
- GoldenRec.SentenceChange;
+ GoldenRec.SentenceChange(0);
+ if AktSong.isDuet then
+ GoldenRec.SentenceChange(1);
//GoldenStarsTwinkle Mod End
//Set Num of Empty Sentences for Phrasen Bonus
@@ -1014,6 +1024,9 @@ begin
end;
Music.CaptureStart;
+
+ for I := 0 to 3 - 1 do
+ Alpha[I] := 0;
if ((ScreenSong.Mode = smMedley) or ScreenSong.PartyMedley)
and (PlaylistMedley.CurrentMedleySong>1) then
@@ -1021,9 +1034,11 @@ begin
end;
procedure TScreenSing.onShowFinish;
+var
+ I: integer;
+
begin
// play movie (II)
-
if AktSong.VideoLoaded then
begin
try
@@ -1054,6 +1069,9 @@ begin
end;
function TScreenSing.Draw: boolean;
+Const
+ dt = 5;
+
var
Min: integer;
Sec: integer;
@@ -1061,6 +1079,8 @@ var
Flash: real;
S: integer;
T: integer;
+ I, J, K:integer;
+ ab: real;
lastLine, LastWord: integer;
medley_end: boolean;
medley_start_applause: boolean;
@@ -1385,12 +1405,64 @@ begin
end;
end;
end;
-
+
+ for I := 0 to Length(Czesci) - 1 do
+ begin
+ K := Czesci[I].Akt;
+ for J := 0 to Czesci[I].High do
+ begin
+ if Czas.AktBeat >= Czesci[I].Czesc[J].Start then
+ K := J;
+ end;
+
+ ab := GetTimeFromBeat(Czesci[I].Czesc[K].StartNote) - Czas.Teraz;
+
+ 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
+ begin
+ Alpha[I] := Alpha[I]-TimeSkip/dt;
+ if (Alpha[I]<0) then
+ Alpha[I] := 0;
+ end else if (ab>dt) then
+ begin
+ Alpha[I] := Alpha[I]+TimeSkip/dt;
+ if (Alpha[I]>1) then
+ Alpha[I] := 1;
+ end else
+ Alpha[I] := 1;
+
+ if (K < Czesci[I].High) then
+ begin
+ ab := GetTimeFromBeat(Czesci[I].Czesc[K+1].StartNote) - Czas.Teraz;
+
+ if (ab>2*dt) then
+ Alpha[I+2] := 0
+ else if (ab>dt) then
+ Alpha[I+2] := (1-(ab-dt)/dt)
+ else
+ Alpha[I+2] := 1;
+ end;
+ end;
+
+ if not AktSong.isDuet then
+ begin
+ Alpha[1] := Alpha[0];
+ Alpha[3] := Alpha[2];
+ end;
+
+ Static[StaticLyricBar].Texture.Alpha := Alpha[1];
+
+ if AktSong.isDuet then
+ Static[StaticLyricDuetBar].Texture.Alpha := Alpha[0];
+
// draw custom items
- SingDraw; // always draw
+ SingDraw(Alpha); // always draw
//GoldenNoteStarsTwinkle Mod
- GoldenRec.SpawnRec;
+ GoldenRec.SpawnRec(Alpha);
//GoldenNoteStarsTwinkle Mod
// back stereo
@@ -1766,10 +1838,10 @@ begin
end;
//Called on Sentence Change S= New Current Sentence
-procedure TScreenSing.onSentenceChange(S: Cardinal);
+procedure TScreenSing.onSentenceChange(CP: integer; S: Cardinal);
begin
//GoldenStarsTwinkle Mod
- GoldenRec.SentenceChange;
+ GoldenRec.SentenceChange(CP);
//GoldenStarsTwinkle Mod End
end;