Maelstrom: Added a "Continue Game" feature

https://github.com/libsdl-org/Maelstrom/commit/4b58ec2e5d78d5b470f00083fff5df911553f1eb

From 4b58ec2e5d78d5b470f00083fff5df911553f1eb Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Wed, 25 Jul 2012 13:08:31 -0700
Subject: [PATCH] Added a "Continue Game" feature

---
 Maelstrom_Data.zip       | Bin 1111939 -> 1112393 bytes
 game/MaelstromUI.cpp     |   3 ++
 game/Maelstrom_Globals.h |   2 ++
 game/Makefile.am         |   2 ++
 game/Makefile.in         |  11 +++---
 game/continue.cpp        |  75 +++++++++++++++++++++++++++++++++++++++
 game/continue.h          |  43 ++++++++++++++++++++++
 game/game.cpp            |  34 +++++++++++++++++-
 game/game.h              |   1 +
 game/gameinfo.h          |   1 +
 game/gameover.cpp        |   4 ++-
 game/player.cpp          |   8 +++++
 game/player.h            |   1 +
 game/replay.cpp          |   9 ++++-
 game/replay.h            |  10 ++++++
 15 files changed, 197 insertions(+), 7 deletions(-)
 create mode 100644 game/continue.cpp
 create mode 100644 game/continue.h

diff --git a/Maelstrom_Data.zip b/Maelstrom_Data.zip
index 8f015ddcc5294978a78286fb2e891b4e0bf4d3f0..ba492a79bdb5d284419ead38e822367489fd0867 100644
GIT binary patch
delta 13730
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

delta 13231
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

diff --git a/game/MaelstromUI.cpp b/game/MaelstromUI.cpp
index 44a30ede..52abae3b 100644
--- a/game/MaelstromUI.cpp
+++ b/game/MaelstromUI.cpp
@@ -27,6 +27,7 @@
 #include "controls.h"
 #include "about.h"
 #include "game.h"
+#include "continue.h"
 #include "gameover.h"
 #include "player.h"
 #include "lobby.h"
@@ -180,6 +181,8 @@ MaelstromUI::CreatePanelDelegate(UIPanel *panel, const char *delegate)
 		return new LobbyDialogDelegate(panel);
 	} else if (SDL_strcasecmp(delegate, "GamePanel") == 0) {
 		return new GamePanelDelegate(panel);
+	} else if (SDL_strcasecmp(delegate, "ContinuePanel") == 0) {
+		return new ContinuePanelDelegate(panel);
 	} else if (SDL_strcasecmp(delegate, "GameOverPanel") == 0) {
 		return new GameOverPanelDelegate(panel);
 	} else if (SDL_strcasecmp(delegate, "ControlsDialog") == 0) {
diff --git a/game/Maelstrom_Globals.h b/game/Maelstrom_Globals.h
index e2d8c49d..25bb03f4 100644
--- a/game/Maelstrom_Globals.h
+++ b/game/Maelstrom_Globals.h
@@ -47,6 +47,7 @@
 #define PREFERENCES_HANDLE "Handle"
 #define PREFERENCES_DEATHMATCH "Network.Deathmatch"
 #define PREFERENCES_KIDMODE "Cheat.KidMode"
+#define PREFERENCES_CONTINUES "Cheat.Continues"
 
 // The Font Server :)
 extern FontServ *fontserv;
@@ -156,6 +157,7 @@ extern int	gNumSprites;
 #define PANEL_MAIN	"main"
 #define PANEL_GAME	"game"
 #define PANEL_BONUS	"bonus"
+#define PANEL_CONTINUE	"continue"
 #define PANEL_GAMEOVER	"gameover"
 #define PANEL_ABOUT	"about_story"
 #define DIALOG_LOBBY	"lobby"
diff --git a/game/Makefile.am b/game/Makefile.am
index 8ad6fe4c..2fd6ee95 100644
--- a/game/Makefile.am
+++ b/game/Makefile.am
@@ -11,6 +11,8 @@ libgame_a_SOURCES =		\
 	about.cpp		\
 	about.h			\
 	colortable.h		\
+	continue.cpp		\
+	continue.h		\
 	controls.cpp		\
 	controls.h		\
 	fastrand.cpp		\
diff --git a/game/Makefile.in b/game/Makefile.in
index 06c469ce..cb1cb509 100644
--- a/game/Makefile.in
+++ b/game/Makefile.in
@@ -49,10 +49,10 @@ ARFLAGS = cru
 libgame_a_AR = $(AR) $(ARFLAGS)
 libgame_a_LIBADD =
 am_libgame_a_OBJECTS = MacDialog.$(OBJEXT) MaelstromUI.$(OBJEXT) \
-	about.$(OBJEXT) controls.$(OBJEXT) fastrand.$(OBJEXT) \
-	features.$(OBJEXT) game.$(OBJEXT) gameinfo.$(OBJEXT) \
-	gameover.$(OBJEXT) init.$(OBJEXT) load.$(OBJEXT) \
-	lobby.$(OBJEXT) main.$(OBJEXT) make.$(OBJEXT) \
+	about.$(OBJEXT) continue.$(OBJEXT) controls.$(OBJEXT) \
+	fastrand.$(OBJEXT) features.$(OBJEXT) game.$(OBJEXT) \
+	gameinfo.$(OBJEXT) gameover.$(OBJEXT) init.$(OBJEXT) \
+	load.$(OBJEXT) lobby.$(OBJEXT) main.$(OBJEXT) make.$(OBJEXT) \
 	myerror.$(OBJEXT) netplay.$(OBJEXT) object.$(OBJEXT) \
 	objects.$(OBJEXT) player.$(OBJEXT) rect.$(OBJEXT) \
 	replay.$(OBJEXT) scores.$(OBJEXT)
@@ -194,6 +194,8 @@ libgame_a_SOURCES = \
 	about.cpp		\
 	about.h			\
 	colortable.h		\
+	continue.cpp		\
+	continue.h		\
 	controls.cpp		\
 	controls.h		\
 	fastrand.cpp		\
@@ -286,6 +288,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MacDialog.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MaelstromUI.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/about.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/continue.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/controls.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fastrand.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/features.Po@am__quote@
diff --git a/game/continue.cpp b/game/continue.cpp
new file mode 100644
index 00000000..d1f98e8f
--- /dev/null
+++ b/game/continue.cpp
@@ -0,0 +1,75 @@
+/*
+    Maelstrom: Open Source version of the classic game by Ambrosia Software
+    Copyright (C) 1997-2011  Sam Lantinga
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+    Sam Lantinga
+    slouken@libsdl.org
+*/
+
+#include "Maelstrom_Globals.h"
+#include "continue.h"
+#include "game.h"
+
+#define CONTINUE_TIME 10
+
+/* ----------------------------------------------------------------- */
+/* -- Do the continue game display */
+
+void ContinuePanelDelegate::OnShow()
+{
+	m_timeoutLabel = m_panel->GetElement<UIElement>("timeout");
+	m_showTime = SDL_GetTicks();
+	if (!m_showTime) {
+		m_showTime = 1;
+	}
+	screen->ShowCursor();
+	gGameInfo.SetLocalState(STATE_DIALOG, true);
+}
+
+void ContinuePanelDelegate::OnHide()
+{
+	screen->HideCursor();
+	gGameInfo.SetLocalState(STATE_DIALOG, false);
+
+	if (m_dialog->GetDialogStatus() == 1) {
+		ContinueGame();
+	}
+}
+
+void ContinuePanelDelegate::OnTick()
+{
+	if (m_showTime == 0) {
+		// Timer is stopped, stay up until dismissed.
+		return;
+	}
+
+	int remaining = CONTINUE_TIME - (SDL_GetTicks() - m_showTime) / 1000;
+	if (remaining <= 0) {
+		ui->HidePanel(m_panel);
+		return;
+	}
+
+	if (m_timeoutLabel) {
+		char num[32];
+		SDL_itoa(remaining, num, 10);
+		m_timeoutLabel->SetText(num);
+	}
+}
+
+bool ContinuePanelDelegate::HandleEvent(const SDL_Event &event)
+{
+}
diff --git a/game/continue.h b/game/continue.h
new file mode 100644
index 00000000..bae253f5
--- /dev/null
+++ b/game/continue.h
@@ -0,0 +1,43 @@
+/*
+    Maelstrom: Open Source version of the classic game by Ambrosia Software
+    Copyright (C) 1997-2011  Sam Lantinga
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+    Sam Lantinga
+    slouken@libsdl.org
+*/
+
+#ifndef _continue_h
+#define _continue_h
+
+#include "protocol.h"
+
+class ContinuePanelDelegate : public UIDialogDelegate
+{
+public:
+	ContinuePanelDelegate(UIPanel *panel) : UIDialogDelegate(panel) { }
+
+	virtual void OnShow();
+	virtual void OnHide();
+	virtual void OnTick();
+	virtual bool HandleEvent(const SDL_Event &event);
+
+protected:
+	UIElement *m_timeoutLabel;
+	Uint32 m_showTime;
+};
+
+#endif // _continue_h
diff --git a/game/game.cpp b/game/game.cpp
index 5e662a67..edee104d 100644
--- a/game/game.cpp
+++ b/game/game.cpp
@@ -55,6 +55,8 @@ int	gFreezeTime;
 Object *gEnemySprite;
 int	gWhenEnemy;
 
+int	gShownContinue;
+
 /* ----------------------------------------------------------------- */
 /* -- Setup the players for a new game */
 
@@ -107,6 +109,7 @@ void NewGame(void)
 			return;
 		}
 	}
+	gShownContinue = 0;
 
 	ui->ShowPanel(PANEL_GAME);
 #ifdef USE_TOUCHCONTROL
@@ -114,6 +117,24 @@ void NewGame(void)
 #endif
 }	/* -- NewGame */
 
+void ContinueGame(void)
+{
+	int i;
+
+	if (gReplay.IsPlaying()) {
+		gReplay.ConsumeContinue();
+	} else {
+		gReplay.RecordContinue();
+	}
+	OBJ_LOOP(i, MAX_PLAYERS) {
+		if (!gPlayers[i]->IsValid()) {
+			continue;
+		}
+		gPlayers[i]->Continue(gGameInfo.lives);
+	}
+	gShownContinue = 0;
+}
+
 bool
 GamePanelDelegate::OnLoad()
 {
@@ -650,7 +671,18 @@ GamePanelDelegate::DoHousekeeping()
 		}
 	}
 	if ( !PlayersLeft ) {
-		GameOver();
+		if (gReplay.IsPlaying()) {
+			if (gReplay.HasContinues()) {
+				ContinueGame();
+			} else {
+				GameOver();
+			}
+		} else if (!gGameInfo.IsMultiplayer() && !gShownContinue) {
+			gShownContinue = 1;
+			ui->ShowPanel(PANEL_CONTINUE);
+		} else {
+			GameOver();
+		}
 	}
 
 }	/* -- DoHousekeeping */
diff --git a/game/game.h b/game/game.h
index 7dbfdc52..a6575b3f 100644
--- a/game/game.h
+++ b/game/game.h
@@ -71,5 +71,6 @@ class GamePanelDelegate : public UIPanelDelegate
 /* -- Game functions */
 
 extern void NewGame(void);
+extern void ContinueGame(void);
 
 #endif // _game_h
diff --git a/game/gameinfo.h b/game/gameinfo.h
index d211e54b..55d9d068 100644
--- a/game/gameinfo.h
+++ b/game/gameinfo.h
@@ -60,6 +60,7 @@ enum NODE_STATE_FLAG {
 	STATE_PAUSE	= 0x02,
 	STATE_BONUS	= 0x04,
 	STATE_MINIMIZE	= 0x08,
+	STATE_DIALOG	= 0x10,
 };
 
 enum PING_STATUS {
diff --git a/game/gameover.cpp b/game/gameover.cpp
index 4bd931d3..56a82880 100644
--- a/game/gameover.cpp
+++ b/game/gameover.cpp
@@ -121,7 +121,7 @@ void GameOverPanelDelegate::OnShow()
 
 	/* -- See if they got a high score */
 	m_handleLabel = NULL;
-	if (gReplay.IsRecording() &&
+	if (gReplay.IsRecording() && !gReplay.HasContinues() &&
 	    !gGameInfo.IsMultiplayer() && !gGameInfo.IsKidMode() &&
 	    (gGameInfo.wave == 1) && (gGameInfo.lives == 3) &&
 	    TheShip->GetScore() > 0) {
@@ -132,6 +132,8 @@ void GameOverPanelDelegate::OnShow()
 				break;
 			}
 		}
+	} else {
+		gLastHigh = -1;
 	}
 
 	m_showTime = SDL_GetTicks();
diff --git a/game/player.cpp b/game/player.cpp
index 74bafc9d..4670c0ae 100644
--- a/game/player.cpp
+++ b/game/player.cpp
@@ -85,6 +85,14 @@ Player::NewGame(int lives)
 	Ghost = 0;
 	NewShip();
 }
+void
+Player::Continue(int lives)
+{
+	Playing = 1;
+	Lives = lives;
+	Ghost = 0;
+	NewShip();
+}
 void 
 Player::NewWave(void)
 {
diff --git a/game/player.h b/game/player.h
index 6e79f3da..8a396be2 100644
--- a/game/player.h
+++ b/game/player.h
@@ -57,6 +57,7 @@ class Player : public Object {
 		return(Playing && !IsGhost());
 	}
 	virtual void NewGame(int lives);
+	        void Continue(int lives);
 	virtual void NewWave(void);
 	/* NewShip() MUST be called before Move() */
 	virtual int NewShip(void);
diff --git a/game/replay.cpp b/game/replay.cpp
index 797096a6..314fc8eb 100644
--- a/game/replay.cpp
+++ b/game/replay.cpp
@@ -161,6 +161,9 @@ Replay::Load(const char *file, bool headerOnly)
 	if (!PHYSFS_readBytes(fp, &m_finalWave, 1)) {
 		goto physfs_read_error;
 	}
+	if (!PHYSFS_readBytes(fp, &m_finalContinues, 1)) {
+		goto physfs_read_error;
+	}
 	for (int i = 0; i < MAX_PLAYERS; ++i) {
 		if (!PHYSFS_readULE32(fp, &m_finalScore[i].Score)) {
 			goto physfs_read_error;
@@ -180,7 +183,7 @@ Replay::Load(const char *file, bool headerOnly)
 	}
 	data.len = size;
 	if (!m_game.ReadFromPacket(data)) {
-		fprintf(stderr, "Couldn't read game information from %s", file);
+		fprintf(stderr, "Couldn't read game information from %s\n", file);
 		goto error_return;
 	}
 
@@ -257,6 +260,9 @@ Replay::Save(const char *file)
 	if (!PHYSFS_writeBytes(fp, &m_finalWave, 1)) {
 		goto physfs_write_error;
 	}
+	if (!PHYSFS_writeBytes(fp, &m_finalContinues, 1)) {
+		goto physfs_write_error;
+	}
 	for (int i = 0; i < MAX_PLAYERS; ++i) {
 		if (!PHYSFS_writeULE32(fp, m_finalScore[i].Score)) {
 			goto physfs_write_error;
@@ -324,6 +330,7 @@ Replay::HandleNewGame()
 		m_frameCount = 0;
 		m_finalPlayer = 0;
 		m_finalWave = 0;
+		m_finalContinues = 0;
 		SDL_zero(m_finalScore);
 
 	} else if (m_mode == REP

(Patch may be truncated, please check the link at the top of this post.)