[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