[Scummvm-cvs-logs] SF.net SVN: scummvm:[49518] scummvm/trunk/engines/sci

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Tue Jun 8 23:05:47 CEST 2010


Revision: 49518
          http://scummvm.svn.sourceforge.net/scummvm/?rev=49518&view=rev
Author:   thebluegr
Date:     2010-06-08 21:05:46 +0000 (Tue, 08 Jun 2010)

Log Message:
-----------
Merged the restarting_flags, script_abort_flag, and restoring members of the EngineState class into one variable, abortScriptProcessing. The flag kept to signify a game restart has been placed in a boolean, gameWasRestarted

Modified Paths:
--------------
    scummvm/trunk/engines/sci/console.cpp
    scummvm/trunk/engines/sci/engine/game.cpp
    scummvm/trunk/engines/sci/engine/kevent.cpp
    scummvm/trunk/engines/sci/engine/kmisc.cpp
    scummvm/trunk/engines/sci/engine/savegame.cpp
    scummvm/trunk/engines/sci/engine/state.cpp
    scummvm/trunk/engines/sci/engine/state.h
    scummvm/trunk/engines/sci/engine/vm.cpp
    scummvm/trunk/engines/sci/sci.cpp

Modified: scummvm/trunk/engines/sci/console.cpp
===================================================================
--- scummvm/trunk/engines/sci/console.cpp	2010-06-08 20:29:33 UTC (rev 49517)
+++ scummvm/trunk/engines/sci/console.cpp	2010-06-08 21:05:46 UTC (rev 49518)
@@ -78,7 +78,7 @@
 	DVar_Register("gc_interval",		&engine->_gamestate->script_gc_interval, DVAR_INT, 0);
 	DVar_Register("simulated_key",		&g_debug_simulated_key, DVAR_INT, 0);
 	DVar_Register("track_mouse_clicks",	&g_debug_track_mouse_clicks, DVAR_BOOL, 0);
-	DVar_Register("script_abort_flag",	&_engine->_gamestate->script_abort_flag, DVAR_INT, 0);
+	DVar_Register("script_abort_flag",	&_engine->_gamestate->abortScriptProcessing, DVAR_INT, 0);
 
 	// General
 	DCmd_Register("help",				WRAP_METHOD(Console, cmdHelp));
@@ -957,8 +957,7 @@
 }
 
 bool Console::cmdRestartGame(int argc, const char **argv) {
-	_engine->_gamestate->restarting_flags |= SCI_GAME_IS_RESTARTING_NOW;
-	_engine->_gamestate->script_abort_flag = 1;
+	_engine->_gamestate->abortScriptProcessing = kAbortRestartGame;;
 
 	return false;
 }
@@ -2731,7 +2730,7 @@
 
 	if (!scumm_stricmp(argv[1], "game")) {
 		// Quit gracefully
-		_engine->_gamestate->script_abort_flag = 1; // Terminate VM
+		_engine->_gamestate->abortScriptProcessing = kAbortQuitGame; // Terminate VM
 		g_debugState.seeking = kDebugSeekNothing;
 		g_debugState.runningStep = 0;
 

Modified: scummvm/trunk/engines/sci/engine/game.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/game.cpp	2010-06-08 20:29:33 UTC (rev 49517)
+++ scummvm/trunk/engines/sci/engine/game.cpp	2010-06-08 21:05:46 UTC (rev 49518)
@@ -75,7 +75,7 @@
 	s->_executionStack.clear();    // Start without any execution stack
 	s->execution_stack_base = -1; // No vm is running yet
 
-	s->restarting_flags = SCI_GAME_IS_NOT_RESTARTING;
+	s->gameWasRestarted = false;
 
 	debug(2, "Engine initialized");
 
@@ -111,8 +111,6 @@
 	if (g_sci->_gfxMenu)
 		g_sci->_gfxMenu->reset();
 
-	s->restoring = false;
-
 	s->game_start_time = g_system->getMillis();
 	s->last_wait_time = s->game_start_time;
 
@@ -134,7 +132,7 @@
 }
 
 int game_exit(EngineState *s) {
-	if (!s->restoring) {
+	if (s->abortScriptProcessing != kAbortLoadGame) {
 		s->_executionStack.clear();
 #ifdef USE_OLD_MUSIC_FUNCTIONS
 		s->_sound.sfx_exit();
@@ -152,7 +150,7 @@
 	// the segment manager has already been initialized from the
 	// save game. Deleting or resetting it here will result in
 	// invalidating the loaded save state
-	if (s->restarting_flags & SCI_GAME_IS_RESTARTING_NOW)
+	if (s->abortScriptProcessing == kAbortRestartGame)
 		s->_segMan->resetSegMan();
 
 	// TODO Free parser segment here

Modified: scummvm/trunk/engines/sci/engine/kevent.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kevent.cpp	2010-06-08 20:29:33 UTC (rev 49517)
+++ scummvm/trunk/engines/sci/engine/kevent.cpp	2010-06-08 21:05:46 UTC (rev 49518)
@@ -79,7 +79,7 @@
 
 	switch (curEvent.type) {
 	case SCI_EVENT_QUIT:
-		s->script_abort_flag = 1; // Terminate VM
+		s->abortScriptProcessing = kAbortQuitGame; // Terminate VM
 		g_debugState.seeking = kDebugSeekNothing;
 		g_debugState.runningStep = 0;
 		break;

Modified: scummvm/trunk/engines/sci/engine/kmisc.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kmisc.cpp	2010-06-08 20:29:33 UTC (rev 49517)
+++ scummvm/trunk/engines/sci/engine/kmisc.cpp	2010-06-08 21:05:46 UTC (rev 49518)
@@ -37,11 +37,9 @@
 namespace Sci {
 
 reg_t kRestartGame(EngineState *s, int argc, reg_t *argv) {
-	s->restarting_flags |= SCI_GAME_IS_RESTARTING_NOW;
-
 	s->shrinkStackToBase();
 
-	s->script_abort_flag = 1; // Force vm to abort ASAP
+	s->abortScriptProcessing = kAbortRestartGame; // Force vm to abort ASAP
 	return NULL_REG;
 }
 
@@ -49,11 +47,11 @@
 ** Returns the restarting_flag in acc
 */
 reg_t kGameIsRestarting(EngineState *s, int argc, reg_t *argv) {
-	s->r_acc = make_reg(0, (s->restarting_flags & SCI_GAME_WAS_RESTARTED));
+	s->r_acc = make_reg(0, s->gameWasRestarted);
 
 	if (argc) { // Only happens during replay
 		if (!argv[0].toUint16()) // Set restarting flag
-			s->restarting_flags &= ~SCI_GAME_WAS_RESTARTED;
+			s->gameWasRestarted = false;
 	}
 
 	uint32 neededSleep = 30;

Modified: scummvm/trunk/engines/sci/engine/savegame.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/savegame.cpp	2010-06-08 20:29:33 UTC (rev 49517)
+++ scummvm/trunk/engines/sci/engine/savegame.cpp	2010-06-08 21:05:46 UTC (rev 49518)
@@ -880,8 +880,6 @@
 	s->last_wait_time = g_system->getMillis();
 	s->game_start_time = g_system->getMillis();
 
-	s->restoring = false;
-
 #ifdef USE_OLD_MUSIC_FUNCTIONS
 	s->_sound._it = NULL;
 	s->_sound._flags = s->_sound._flags;
@@ -906,9 +904,7 @@
 	}
 #endif
 
-
-	s->restoring = true;
-	s->script_abort_flag = 2; // Abort current game with replay
+	s->abortScriptProcessing = kAbortLoadGame;
 	s->shrinkStackToBase();
 }
 

Modified: scummvm/trunk/engines/sci/engine/state.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/state.cpp	2010-06-08 20:29:33 UTC (rev 49517)
+++ scummvm/trunk/engines/sci/engine/state.cpp	2010-06-08 21:05:46 UTC (rev 49518)
@@ -91,8 +91,6 @@
 		_memorySegmentSize = 0;
 		_soundCmd = 0;
 
-		restarting_flags = 0;
-
 		execution_stack_base = 0;
 		_executionStackPosChanged = false;
 
@@ -104,6 +102,7 @@
 
 		stack_base = 0;
 		stack_top = 0;
+		abortScriptProcessing = kAbortNone;
 	}
 
 	last_wait_time = 0;
@@ -114,11 +113,8 @@
 	_throttleLastTime = 0;
 	_throttleTrigger = false;
 
-	script_abort_flag = 0;
 	script_step_counter = 0;
 	script_gc_interval = GC_INTERVAL;
-
-	restoring = false;
 }
 
 void EngineState::wait(int16 ticks) {

Modified: scummvm/trunk/engines/sci/engine/state.h
===================================================================
--- scummvm/trunk/engines/sci/engine/state.h	2010-06-08 20:29:33 UTC (rev 49517)
+++ scummvm/trunk/engines/sci/engine/state.h	2010-06-08 21:05:46 UTC (rev 49518)
@@ -52,6 +52,13 @@
 class MessageState;
 class SoundCommandParser;
 
+enum AbortGameState {
+	kAbortNone = 0,
+	kAbortLoadGame = 1,
+	kAbortRestartGame = 2,
+	kAbortQuitGame = 3
+};
+
 class DirSeeker {
 protected:
 	reg_t _outbuffer;
@@ -113,8 +120,6 @@
 #endif
 	SoundCommandParser *_soundCmd;
 
-	byte restarting_flags; /**< Flags used for restarting */
-
 	uint32 game_start_time; /**< The time at which the interpreter was started */
 	uint32 last_wait_time; /**< The last time the game invoked Wait() */
 
@@ -160,12 +165,9 @@
 
 	int loadFromLauncher;
 
-	/**
-	 * Set this to 1 to abort script execution immediately. Aborting will
-	 * leave the debug exec stack intact.
-	 * Set it to 2 to force a replay afterwards.
-	 */
-	int script_abort_flag; // Set to 1 to abort execution. Set to 2 to force a replay afterwards
+	AbortGameState abortScriptProcessing;
+	bool gameWasRestarted;
+
 	int script_step_counter; // Counts the number of steps executed
 	int script_gc_interval; // Number of steps in between gcs
 
@@ -197,8 +199,6 @@
 	 * Resets the engine state.
 	 */
 	void reset(bool isRestoring);
-
-	bool restoring;	/**< A flag to indicate if a game is being restored */
 };
 
 } // End of namespace Sci

Modified: scummvm/trunk/engines/sci/engine/vm.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/vm.cpp	2010-06-08 20:29:33 UTC (rev 49517)
+++ scummvm/trunk/engines/sci/engine/vm.cpp	2010-06-08 21:05:46 UTC (rev 49518)
@@ -816,7 +816,7 @@
 
 		}
 
-		if (s->script_abort_flag || g_engine->shouldQuit())
+		if (s->abortScriptProcessing != kAbortNone || g_engine->shouldQuit())
 			return; // Emergency
 
 		// Debug if this has been requested:
@@ -1708,14 +1708,14 @@
 
 	do {
 		s->_executionStackPosChanged = false;
-		run_vm(s, s->restoring);
+		run_vm(s, (s->abortScriptProcessing == kAbortLoadGame));
+		game_exit(s);
 
-		if (s->restarting_flags & SCI_GAME_IS_RESTARTING_NOW) { // Restart was requested?
-			s->restoring = false;
+		if (s->abortScriptProcessing == kAbortRestartGame) {
+			s->abortScriptProcessing = kAbortNone;
 			s->_executionStack.clear();
 			s->_executionStackPosChanged = false;
 
-			game_exit(s);
 			script_init_engine(s);
 			game_init(s);
 #ifdef USE_OLD_MUSIC_FUNCTIONS
@@ -1725,24 +1725,16 @@
 
 			send_selector(s, s->_gameObj, s->_gameObj, s->stack_base, 2, s->stack_base);
 
-			s->script_abort_flag = 0;
-			s->restarting_flags = SCI_GAME_WAS_RESTARTED;
+			s->gameWasRestarted = true;
 
 		} else {
-			if (s->restoring) {
-				game_exit(s);
-				s->restoring = false;
-				if (s->script_abort_flag == 2) {
-					debugC(2, kDebugLevelVM, "Restarting with replay()");
-					s->_executionStack.clear(); // Restart with replay
-
-					_init_stack_base_with_selector(s, g_sci->getKernel()->_selectorCache.replay);
-
-					send_selector(s, s->_gameObj, s->_gameObj, s->stack_base, 2, s->stack_base);
-				}
-
-				s->script_abort_flag = 0;
-
+			if (s->abortScriptProcessing == kAbortLoadGame) {
+				s->abortScriptProcessing = kAbortNone;
+				debugC(2, kDebugLevelVM, "Restarting with replay()");
+				s->_executionStack.clear();
+				// Restart with replay
+				_init_stack_base_with_selector(s, g_sci->getKernel()->_selectorCache.replay);
+				send_selector(s, s->_gameObj, s->_gameObj, s->stack_base, 2, s->stack_base);
 			} else
 				break;	// exit loop
 		}

Modified: scummvm/trunk/engines/sci/sci.cpp
===================================================================
--- scummvm/trunk/engines/sci/sci.cpp	2010-06-08 20:29:33 UTC (rev 49517)
+++ scummvm/trunk/engines/sci/sci.cpp	2010-06-08 21:05:46 UTC (rev 49518)
@@ -219,6 +219,8 @@
 	_gfxCache = cache;
 	_gfxCursor = cursor;
 
+	_gamestate->abortScriptProcessing = kAbortNone;
+
 	if (game_init(_gamestate)) { /* Initialize */
 		warning("Game initialization failed: Aborting...");
 		// TODO: Add an "init failed" error?
@@ -264,8 +266,6 @@
 
 	game_run(&_gamestate); // Run the game
 
-	game_exit(_gamestate);
-
 	ConfMan.flushToDisk();
 
 	delete _gamestate->_soundCmd;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list