[Scummvm-cvs-logs] scummvm master -> 9fb28410b5ea27fa8e79ac5f0ac4ce70ae4cf3c6

Strangerke arnaud.boutonne at gmail.com
Tue Mar 8 00:21:51 CET 2011


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
9fb28410b5 HUGO: Misc savegame modifications


Commit: 9fb28410b5ea27fa8e79ac5f0ac4ce70ae4cf3c6
    https://github.com/scummvm/scummvm/commit/9fb28410b5ea27fa8e79ac5f0ac4ce70ae4cf3c6
Author: strangerke (arnaud.boutonne at gmail.com)
Date: 2011-03-07T15:21:02-08:00

Commit Message:
HUGO: Misc savegame modifications

- Add initial savegame on slot 0
- Save viewstate as it may now contain several different values when saving
- Fix loading from GMM
- Implement ctrl-N

Changed paths:
    engines/hugo/detection.cpp
    engines/hugo/file.cpp
    engines/hugo/hugo.cpp
    engines/hugo/hugo.h
    engines/hugo/menu.cpp
    engines/hugo/parser.cpp
    engines/hugo/parser_v1d.cpp
    engines/hugo/parser_v1w.cpp
    engines/hugo/parser_v2d.cpp
    engines/hugo/parser_v3d.cpp



diff --git a/engines/hugo/detection.cpp b/engines/hugo/detection.cpp
index c99db24..e862e33 100644
--- a/engines/hugo/detection.cpp
+++ b/engines/hugo/detection.cpp
@@ -292,6 +292,11 @@ SaveStateDescriptor HugoMetaEngine::querySaveMetaInfos(const char *target, int s
 
 		desc.setSaveTime(hour, minutes);
 
+		// Slot 0 is used for the 'restart game' save in all Hugo games, thus
+		// we prevent it from being deleted.
+		desc.setDeletableFlag(slot != 0);
+		desc.setWriteProtectedFlag(slot == 0);
+
 		delete file;
 		return desc;
 	}
diff --git a/engines/hugo/file.cpp b/engines/hugo/file.cpp
index c287ebf..94e1756 100644
--- a/engines/hugo/file.cpp
+++ b/engines/hugo/file.cpp
@@ -411,6 +411,8 @@ bool FileManager::saveGame(const int16 slot, const Common::String &descrip) {
 	out->writeSint16BE(_vm->_maze.x4);
 	out->writeByte(_vm->_maze.firstScreenIndex);
 
+	out->writeByte((byte)_vm->getGameStatus().viewState);
+
 	out->finalize();
 
 	delete out;
@@ -507,6 +509,11 @@ bool FileManager::restoreGame(const int16 slot) {
 	_vm->_maze.x4 = in->readSint16BE();
 	_vm->_maze.firstScreenIndex = in->readByte();
 
+	_vm->_scheduler->restoreScreen(*_vm->_screen_p);
+	if ((_vm->getGameStatus().viewState = (vstate_t) in->readByte()) != kViewPlay)
+		_vm->_screen->hideCursor();
+
+
 	delete in;
 	return true;
 }
diff --git a/engines/hugo/hugo.cpp b/engines/hugo/hugo.cpp
index 9a62229..231b2a5 100644
--- a/engines/hugo/hugo.cpp
+++ b/engines/hugo/hugo.cpp
@@ -259,8 +259,8 @@ Common::Error HugoEngine::run() {
 	if (loadSlot >= 0) {
 		_status.skipIntroFl = true;
 		_file->restoreGame(loadSlot);
-		_scheduler->restoreScreen(*_screen_p);
-		_status.viewState = kViewPlay;
+	} else {
+		_file->saveGame(0, "New Game");
 	}
 
 	while (!_status.doQuitFl) {
diff --git a/engines/hugo/hugo.h b/engines/hugo/hugo.h
index 2de442e..566cb75 100644
--- a/engines/hugo/hugo.h
+++ b/engines/hugo/hugo.h
@@ -58,7 +58,7 @@ class RandomSource;
  */
 namespace Hugo {
 
-static const int kSavegameVersion = 5;
+static const int kSavegameVersion = 6;
 static const int kInvDx = 32;                       // Width of an inventory icon
 static const int kInvDy = 32;                       // Height of inventory icon
 static const int kMaxTunes = 16;                    // Max number of tunes
diff --git a/engines/hugo/menu.cpp b/engines/hugo/menu.cpp
index 428a3e0..7bcdea5 100644
--- a/engines/hugo/menu.cpp
+++ b/engines/hugo/menu.cpp
@@ -196,8 +196,6 @@ void TopMenu::handleCommand(GUI::CommandSender *sender, uint32 command, uint32 d
 	case kCmdLoad:
 		close();
 		_vm->_file->restoreGame(-1);
-		_vm->_scheduler->restoreScreen(*_vm->_screen_p);
-		_vm->getGameStatus().viewState = kViewPlay;
 		break;
 	case kCmdRecall:
 		close();
diff --git a/engines/hugo/parser.cpp b/engines/hugo/parser.cpp
index c845e03..a0a3ee3 100644
--- a/engines/hugo/parser.cpp
+++ b/engines/hugo/parser.cpp
@@ -286,11 +286,10 @@ void Parser::keyHandler(Common::Event event) {
 			break;
 		case Common::KEYCODE_l:
 			_vm->_file->restoreGame(-1);
-			_vm->_scheduler->restoreScreen(*_vm->_screen_p);
-			gameStatus.viewState = kViewPlay;
 			break;
 		case Common::KEYCODE_n:
-			warning("STUB: CTRL-N (WIN) - New Game");
+			if (Utils::Box(kBoxYesNo, "%s", "Are you sure you want to start a new game?") != 0)
+				_vm->_file->restoreGame(0);
 			break;
 		case Common::KEYCODE_s:
 			if (gameStatus.viewState == kViewPlay) {
@@ -360,8 +359,6 @@ void Parser::keyHandler(Common::Event event) {
 		break;
 	case Common::KEYCODE_F5:                        // Restore game
 		_vm->_file->restoreGame(-1);
-		_vm->_scheduler->restoreScreen(*_vm->_screen_p);
-		gameStatus.viewState = kViewPlay;
 		break;
 	case Common::KEYCODE_F6:                        // Inventory
 		showInventory();
diff --git a/engines/hugo/parser_v1d.cpp b/engines/hugo/parser_v1d.cpp
index 424ca66..df3a73f 100644
--- a/engines/hugo/parser_v1d.cpp
+++ b/engines/hugo/parser_v1d.cpp
@@ -380,8 +380,6 @@ void Parser_v1d::lineHandler() {
 
 	if (!strcmp("restore", _vm->_line)) {
 		_vm->_file->restoreGame(-1);
-		_vm->_scheduler->restoreScreen(*_vm->_screen_p);
-		gameStatus.viewState = kViewPlay;
 		return;
 	}
 
diff --git a/engines/hugo/parser_v1w.cpp b/engines/hugo/parser_v1w.cpp
index 5d901e8..d342427 100644
--- a/engines/hugo/parser_v1w.cpp
+++ b/engines/hugo/parser_v1w.cpp
@@ -132,8 +132,6 @@ void Parser_v1w::lineHandler() {
 
 	if (!strcmp("restore", _vm->_line) && (gameStatus.viewState == kViewPlay || gameStatus.viewState == kViewIdle)) {
 		_vm->_file->restoreGame(-1);
-		_vm->_scheduler->restoreScreen(*_vm->_screen_p);
-		gameStatus.viewState = kViewPlay;
 		return;
 	}
 
diff --git a/engines/hugo/parser_v2d.cpp b/engines/hugo/parser_v2d.cpp
index 580d781..d19b8b1 100644
--- a/engines/hugo/parser_v2d.cpp
+++ b/engines/hugo/parser_v2d.cpp
@@ -132,8 +132,6 @@ void Parser_v2d::lineHandler() {
 	if (!strcmp("restore", _vm->_line)) {
 		_vm->_config.soundFl = false;
 		_vm->_file->restoreGame(-1);
-		_vm->_scheduler->restoreScreen(*_vm->_screen_p);
-		gameStatus.viewState = kViewPlay;
 		return;
 	}
 
diff --git a/engines/hugo/parser_v3d.cpp b/engines/hugo/parser_v3d.cpp
index b3d0125..fcd9378 100644
--- a/engines/hugo/parser_v3d.cpp
+++ b/engines/hugo/parser_v3d.cpp
@@ -134,8 +134,6 @@ void Parser_v3d::lineHandler() {
 	if (!strcmp("restore", _vm->_line)) {
 		_vm->_config.soundFl = false;
 		_vm->_file->restoreGame(-1);
-		_vm->_scheduler->restoreScreen(*_vm->_screen_p);
-		gameStatus.viewState = kViewPlay;
 		return;
 	}
 






More information about the Scummvm-git-logs mailing list