From cdfdd0ea3fa2eb92893db46c158cf61b7a9411d7 Mon Sep 17 00:00:00 2001
From: jaybinks <jaybinks@b956fd51-792f-4845-bead-9b4dfca2ff2c>
Date: Thu, 20 Dec 2007 01:33:30 +0000
Subject: fixed divide by 0 bugs in score screen.

git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@734 b956fd51-792f-4845-bead-9b4dfca2ff2c
---
 Game/Code/Screens/UScreenScore.pas | 331 +++++++++++++++++++------------------
 1 file changed, 170 insertions(+), 161 deletions(-)

(limited to 'Game')

diff --git a/Game/Code/Screens/UScreenScore.pas b/Game/Code/Screens/UScreenScore.pas
index 7273a06c..84fd4e15 100644
--- a/Game/Code/Screens/UScreenScore.pas
+++ b/Game/Code/Screens/UScreenScore.pas
@@ -267,15 +267,15 @@ var
 begin
 
   case PlayersPlay of
-    1:    begin
-            ArrayStartModifier := 0;
-          end;
-    2, 4: begin
-            ArrayStartModifier := 1;
-          end;
-    3, 6: begin
-            ArrayStartModifier := 3;
-          end;
+    1:    begin
+            ArrayStartModifier := 0;
+          end;
+    2, 4: begin
+            ArrayStartModifier := 1;
+          end;
+    3, 6: begin
+            ArrayStartModifier := 3;
+          end;
     end;
 
   for P := 1 to PlayersPlay do
@@ -309,36 +309,36 @@ begin
   Text[TextArtistTitle].Text := AktSong.Artist + ' - ' + AktSong.Title;
 
   // set visibility
-  case PlayersPlay of
-    1:  begin
-          V[1] := true;
-          V[2] := false;
-          V[3] := false;
-          V[4] := false;
-          V[5] := false;
-          V[6] := false;
-        end;
-    2, 4:  begin
-          V[1] := false;
-          V[2] := true;
-          V[3] := true;
-          V[4] := false;
-          V[5] := false;
-          V[6] := false;
-        end;
-    3, 6:  begin
-          V[1] := false;
-          V[2] := false;
-          V[3] := false;
-          V[4] := true;
-          V[5] := true;
-          V[6] := true;
-        end;
+  case PlayersPlay of
+    1:  begin
+          V[1] := true;
+          V[2] := false;
+          V[3] := false;
+          V[4] := false;
+          V[5] := false;
+          V[6] := false;
+        end;
+    2, 4:  begin
+          V[1] := false;
+          V[2] := true;
+          V[3] := true;
+          V[4] := false;
+          V[5] := false;
+          V[6] := false;
+        end;
+    3, 6:  begin
+          V[1] := false;
+          V[2] := false;
+          V[3] := false;
+          V[4] := true;
+          V[5] := true;
+          V[6] := true;
+        end;
   end;
 
   for P := 1 to 6 do
     begin
-     Text[TextName[P]].Visible               := V[P];
+     Text[TextName[P]].Visible               := V[P];
      Text[TextScore[P]].Visible              := V[P];
 
       // We set alpha to 0 , so we can nicely blend them in when we need them
@@ -352,27 +352,27 @@ begin
       Text[TextTotal[P]].Alpha                   := 0;
       Text[TextTotalScore[P]].Alpha              := 0;
       Static[StaticBoxLightest[P]].Texture.Alpha := 0;
-      Static[StaticBoxLight[P]].Texture.Alpha    := 0;
+      Static[StaticBoxLight[P]].Texture.Alpha    := 0;
       Static[StaticBoxDark[P]].Texture.Alpha     := 0;
 
 
       Text[TextNotes[P]].Visible              := V[P];
-      Text[TextNotesScore[P]].Visible         := V[P];
-      Text[TextLineBonus[P]].Visible          := V[P];
-      Text[TextLineBonusScore[P]].Visible     := V[P];
-      Text[TextGoldenNotes[P]].Visible        := V[P];
-      Text[TextGoldenNotesScore[P]].Visible   := V[P];
-      Text[TextTotal[P]].Visible              := V[P];
-      Text[TextTotalScore[P]].Visible         := V[P];
-
-      for I := 0 to high(PlayerStatic[P]) do
-        Static[PlayerStatic[P, I]].Visible    := V[P];
-
-      for I := 0 to high(PlayerTexts[P]) do
-        Text[PlayerTexts[P, I]].Visible       := V[P];
-
-      Static[StaticBoxLightest[P]].Visible    := V[P];
-      Static[StaticBoxLight[P]].Visible       := V[P];
+      Text[TextNotesScore[P]].Visible         := V[P];
+      Text[TextLineBonus[P]].Visible          := V[P];
+      Text[TextLineBonusScore[P]].Visible     := V[P];
+      Text[TextGoldenNotes[P]].Visible        := V[P];
+      Text[TextGoldenNotesScore[P]].Visible   := V[P];
+      Text[TextTotal[P]].Visible              := V[P];
+      Text[TextTotalScore[P]].Visible         := V[P];
+
+      for I := 0 to high(PlayerStatic[P]) do
+        Static[PlayerStatic[P, I]].Visible    := V[P];
+
+      for I := 0 to high(PlayerTexts[P]) do
+        Text[PlayerTexts[P, I]].Visible       := V[P];
+
+      Static[StaticBoxLightest[P]].Visible    := V[P];
+      Static[StaticBoxLight[P]].Visible       := V[P];
       Static[StaticBoxDark[P]].Visible        := V[P];
 
 // we draw that on our own
@@ -555,19 +555,19 @@ begin
 //          -> Statics[4..6]
 
   case PlayersPlay of
-    1:  begin
-          ArrayStartModifier := 0;
-        end;
-    2, 4:  begin
-          ArrayStartModifier := 1;
-        end;
-    3, 6:  begin
-          ArrayStartModifier := 3;
-        end;
+    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];
+   Text[TextName[PlayerNumber + ArrayStartModifier]].Text := Ini.Name[PlayerNumber - 1];
 // end todo
 
 
@@ -618,70 +618,75 @@ var
   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;
+    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;
+    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
+    if ( aPlayerScoreScreenRatings[PlayerNumber].RatePic_Width > 0 ) AND   // JB :)
+       ( aPlayerScoreScreenRatings[PlayerNumber].RateEaseValue > 0 ) then
+    begin
+      Text[TextScore[PlayerNumber + ArrayStartModifier]].Alpha := aPlayerScoreScreenRatings[PlayerNumber].RateEaseValue / aPlayerScoreScreenRatings[PlayerNumber].RatePic_Width;
+    end;
+    
+// 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
@@ -710,43 +715,47 @@ begin
 end;
 
 
-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.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;
+
+  if ( MaxVal    > 0 ) AND  // JB :)
+     ( RaiseStep > 0 ) then
+  begin
+    RaiseStep := RaiseStep / MaxVal;
+  end;
+
+  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;
-- 
cgit v1.2.3