Maelstrom: Use the REAL last score, now that we have it. :)

https://github.com/libsdl-org/Maelstrom/commit/63436aba4291fa34f4ec1283764e96cb38fd79bd

From 63436aba4291fa34f4ec1283764e96cb38fd79bd Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Sun, 20 Nov 2011 22:34:06 -0500
Subject: [PATCH] Use the REAL last score, now that we have it. :)

---
 game/Maelstrom_Globals.h |  1 -
 game/game.cpp            |  4 +---
 game/main.cpp            | 10 +++++++---
 game/replay.cpp          | 30 +++++++++++++++---------------
 game/replay.h            | 24 +++++++++++++++++++++---
 5 files changed, 44 insertions(+), 25 deletions(-)

diff --git a/game/Maelstrom_Globals.h b/game/Maelstrom_Globals.h
index 8e078a94..5a466331 100644
--- a/game/Maelstrom_Globals.h
+++ b/game/Maelstrom_Globals.h
@@ -111,7 +111,6 @@ extern StarPtr	gTheStars[MAX_STARS];
 extern Uint32	gStarColors[];
 
 // in game.cpp :
-extern int	gScore;
 extern int	gDisplayed;
 extern int	gGameOn;
 extern int	gPaused;
diff --git a/game/game.cpp b/game/game.cpp
index d139db41..7bc3bc51 100644
--- a/game/game.cpp
+++ b/game/game.cpp
@@ -32,7 +32,6 @@
 // Global variables set in this file...
 GameInfo gGameInfo;
 Replay  gReplay;
-int	gScore;
 int	gGameOn;
 int	gPaused;
 int	gWave;
@@ -1056,10 +1055,9 @@ static void DoGameOver(void)
 		Delay(SOUND_DELAY);
 
 	/* -- See if they got a high score */
-	gScore = TheShip->GetScore();
 	LoadScores();
 	for ( i = 0; i<10; ++i ) {
-		if ( gScore > (int)hScores[i].score ) {
+		if ( TheShip->GetScore() >= (int)hScores[i].score ) {
 			which = i;
 			break;
 		}
diff --git a/game/main.cpp b/game/main.cpp
index a355e723..4f41936d 100644
--- a/game/main.cpp
+++ b/game/main.cpp
@@ -89,7 +89,7 @@ static void RunReplayGame(const char *file)
 }
 static void RunLastReplay(void*)
 {
-	RunReplayGame("LastScore");
+	RunReplayGame(LAST_REPLAY);
 }
 static void RunQuitGame(void*)
 {
@@ -515,8 +515,12 @@ MainPanelDelegate::OnTick()
 
 	label = m_panel->GetElement<UIElement>("last_score");
 	if (label) {
-		sprintf(text, "%d", gScore);
-		label->SetText(text);
+		if (gReplay.Load(LAST_REPLAY, true)) {
+			sprintf(text, "%d", gReplay.GetFinalScore());
+			label->SetText(text);
+		} else {
+			label->SetText("0");
+		}
 	}
 
 	label = m_panel->GetElement<UIElement>("volume");
diff --git a/game/replay.cpp b/game/replay.cpp
index f0a88738..51c2c2a0 100644
--- a/game/replay.cpp
+++ b/game/replay.cpp
@@ -170,21 +170,21 @@ Replay::Load(const char *file, bool headerOnly)
 		}
 	}
 
-	if (!headerOnly) {
-		if (!PHYSFS_readULE32(fp, &size)) {
-			goto physfs_read_error;
-		}
-		data.Reset();
-		data.Grow(size);
-		if (!PHYSFS_readBytes(fp, data.data, size)) {
-			goto physfs_read_error;
-		}
-		data.len = size;
-		if (!m_game.ReadFromPacket(data)) {
-			fprintf(stderr, "Couldn't read game information from %s", file);
-			goto error_return;
-		}
+	if (!PHYSFS_readULE32(fp, &size)) {
+		goto physfs_read_error;
+	}
+	data.Reset();
+	data.Grow(size);
+	if (!PHYSFS_readBytes(fp, data.data, size)) {
+		goto physfs_read_error;
+	}
+	data.len = size;
+	if (!m_game.ReadFromPacket(data)) {
+		fprintf(stderr, "Couldn't read game information from %s", file);
+		goto error_return;
+	}
 
+	if (!headerOnly) {
 		if (!PHYSFS_readULE32(fp, &size)) {
 			goto physfs_read_error;
 		}
@@ -445,5 +445,5 @@ Replay::HandleGameOver()
 	}
 
 	// Save this as the last score
-	Save("LastScore");
+	Save(LAST_REPLAY);
 }
diff --git a/game/replay.h b/game/replay.h
index 6a2457e1..4e514470 100644
--- a/game/replay.h
+++ b/game/replay.h
@@ -35,6 +35,7 @@
 #define REPLAY_VERSION	1
 #define REPLAY_DIRECTORY "Scores"
 #define REPLAY_FILETYPE "mreplay"
+#define LAST_REPLAY	"LastScore"
 
 enum REPLAY_MODE {
 	REPLAY_IDLE,
@@ -50,15 +51,32 @@ class Replay
 	// You should never change this while the game is running
 	void SetMode(REPLAY_MODE mode);
 
-	bool IsPlaying() {
+	bool IsPlaying() const {
 		return m_mode == REPLAY_PLAYBACK;
 	}
-	bool IsRecording() {
+	bool IsRecording() const {
 		return m_mode == REPLAY_RECORDING;
 	}
-	int GetDisplayPlayer() {
+
+	int GetDisplayPlayer() const {
 		return m_finalPlayer;
 	}
+	const char *GetDisplayName() const {
+		return m_game.GetPlayer(GetDisplayPlayer())->name;
+	}
+	int GetFinalWave() const {
+		return m_finalWave;
+	}
+	int GetFinalScore() const {
+		return m_finalScore[GetDisplayPlayer()].Score;
+	}
+	int GetFinalFrags() const {
+		return m_finalScore[GetDisplayPlayer()].Frags;
+	}
+	float GetReplayTime() const {
+		// Return the approximage length of the replay, in seconds
+		return (float)m_frameCount / 30.0f;
+	}
 
 	bool Load(const char *file, bool headerOnly = false);
 	bool Save(const char *file);