aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage
diff options
context:
space:
mode:
authorPaul Gilbert2011-09-10 11:22:39 +1000
committerPaul Gilbert2011-09-10 11:22:39 +1000
commitb3773f7c378ccf1ff43091af16c068944f357479 (patch)
tree93538cb9e6eb57c649ba707a199ed619aefc3296 /engines/tsage
parentc75da8051cd81548d112201c347c422fa570ea0b (diff)
downloadscummvm-rg350-b3773f7c378ccf1ff43091af16c068944f357479.tar.gz
scummvm-rg350-b3773f7c378ccf1ff43091af16c068944f357479.tar.bz2
scummvm-rg350-b3773f7c378ccf1ff43091af16c068944f357479.zip
TSAGE: Cleaned up the savegame code, and enabled it for Blue Force
Diffstat (limited to 'engines/tsage')
-rw-r--r--engines/tsage/core.cpp5
-rw-r--r--engines/tsage/events.cpp2
-rw-r--r--engines/tsage/globals.cpp19
-rw-r--r--engines/tsage/globals.h4
-rw-r--r--engines/tsage/ringworld/ringworld_logic.cpp47
-rw-r--r--engines/tsage/ringworld/ringworld_logic.h6
-rw-r--r--engines/tsage/scenes.cpp49
-rw-r--r--engines/tsage/scenes.h10
8 files changed, 78 insertions, 64 deletions
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp
index 78a4cef146..bee2214337 100644
--- a/engines/tsage/core.cpp
+++ b/engines/tsage/core.cpp
@@ -3790,8 +3790,9 @@ void SceneHandler::process(Event &event) {
}
// Mouse press handling
- if (_globals->_player._uiEnabled && (event.eventType == EVENT_BUTTON_DOWN) &&
- !_globals->_sceneItems.empty()) {
+ bool enabled = (_vm->getGameID() == GType_BlueForce) ? _globals->_player._enabled :
+ _globals->_player._uiEnabled;
+ if (enabled && (event.eventType == EVENT_BUTTON_DOWN) && !_globals->_sceneItems.empty()) {
// Check if the mouse is on the player
if (_globals->_player.contains(event.mousePos)) {
playerAction(event);
diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp
index 00c200eeea..d2ade971fa 100644
--- a/engines/tsage/events.cpp
+++ b/engines/tsage/events.cpp
@@ -196,7 +196,7 @@ void EventsClass::setCursor(CursorType cursorType) {
// Exit cursor (Blue Force)
assert(_vm->getGameID() == GType_BlueForce);
cursor = _resourceManager->getSubResource(1, 5, 7, &size);
- _currentCursor = CURSOR_TALK;
+ _currentCursor = CURSOR_EXIT;
break;
case CURSOR_ARROW:
diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp
index 050ad4994b..b13cd98700 100644
--- a/engines/tsage/globals.cpp
+++ b/engines/tsage/globals.cpp
@@ -188,7 +188,24 @@ BlueForceGlobals::BlueForceGlobals(): Globals() {
void BlueForceGlobals::synchronize(Serializer &s) {
Globals::synchronize(s);
- error("Sync variables");
+
+ s.syncAsSint16LE(_dayNumber);
+ s.syncAsSint16LE(_v4CEA4);
+ s.syncAsSint16LE(_v4CEA8);
+ s.syncAsSint16LE(_driveFromScene);
+ s.syncAsSint16LE(_driveToScene);
+ s.syncAsSint16LE(_v4CF9E);
+ s.syncAsSint16LE(_v4E238);
+ s.syncAsSint16LE(_v501FC);
+ s.syncAsSint16LE(_v50696);
+ s.syncAsSint16LE(_v51C42);
+ s.syncAsSint16LE(_v51C44);
+ s.syncAsSint16LE(_interfaceY);
+ s.syncAsSint16LE(_bookmark);
+ s.syncAsSint16LE(_mapLocationId);
+ s.syncAsSint16LE(_clip1Bullets);
+ s.syncAsSint16LE(_clip2Bullets);
+
}
void BlueForceGlobals::reset() {
diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h
index 99388027d1..2ddbfb30b9 100644
--- a/engines/tsage/globals.h
+++ b/engines/tsage/globals.h
@@ -166,6 +166,7 @@ class BlueForceGlobals: public Globals {
public:
ASoundExt _sound1, _sound2, _sound3;
UIElements _uiElements;
+ StripProxy _stripProxy;
int _dayNumber;
int _v4CEA4;
int _v4CEA8;
@@ -173,15 +174,14 @@ public:
int _driveToScene;
int _v4CF9E;
int _v4E238;
- int _v50696;
int _v501FC;
+ int _v50696;
int _v51C42;
int _v51C44;
int _interfaceY;
Bookmark _bookmark;
int _mapLocationId;
int _clip1Bullets, _clip2Bullets;
- StripProxy _stripProxy;
BlueForceGlobals();
void reset();
diff --git a/engines/tsage/ringworld/ringworld_logic.cpp b/engines/tsage/ringworld/ringworld_logic.cpp
index 4bd0b0a7f6..a131969633 100644
--- a/engines/tsage/ringworld/ringworld_logic.cpp
+++ b/engines/tsage/ringworld/ringworld_logic.cpp
@@ -21,8 +21,6 @@
*/
#include "common/config-manager.h"
-#include "common/translation.h"
-#include "gui/saveload.h"
#include "tsage/ringworld/ringworld_logic.h"
#include "tsage/scenes.h"
#include "tsage/tsage.h"
@@ -406,51 +404,6 @@ RingworldInvObjectList::RingworldInvObjectList() :
/*--------------------------------------------------------------------------*/
-void RingworldGame::restartGame() {
- if (MessageDialog::show(RESTART_MSG, CANCEL_BTN_STRING, RESTART_BTN_STRING) == 1)
- _globals->_game->restart();
-}
-
-void RingworldGame::saveGame() {
- if (!_vm->canSaveGameStateCurrently())
- MessageDialog::show(SAVING_NOT_ALLOWED_MSG, OK_BTN_STRING);
- else {
- // Show the save dialog
- handleSaveLoad(true, _globals->_sceneHandler->_saveGameSlot, _globals->_sceneHandler->_saveName);
- }
-}
-
-void RingworldGame::restoreGame() {
- if (!_vm->canLoadGameStateCurrently())
- MessageDialog::show(RESTORING_NOT_ALLOWED_MSG, OK_BTN_STRING);
- else {
- // Show the load dialog
- handleSaveLoad(false, _globals->_sceneHandler->_loadGameSlot, _globals->_sceneHandler->_saveName);
- }
-}
-
-void RingworldGame::quitGame() {
- if (MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING) == 1)
- _vm->quitGame();
-}
-
-void RingworldGame::handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName) {
- const EnginePlugin *plugin = 0;
- EngineMan.findGame(_vm->getGameId(), &plugin);
- GUI::SaveLoadChooser *dialog;
- if (saveFlag)
- dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"));
- else
- dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load"));
-
- dialog->setSaveMode(saveFlag);
-
- saveSlot = dialog->runModalWithPluginAndTarget(plugin, ConfMan.getActiveDomainName());
- saveName = dialog->getResultString();
-
- delete dialog;
-}
-
void RingworldGame::start() {
// Set some default flags
_globals->setFlag(12);
diff --git a/engines/tsage/ringworld/ringworld_logic.h b/engines/tsage/ringworld/ringworld_logic.h
index 286abd38a1..40b202bd7f 100644
--- a/engines/tsage/ringworld/ringworld_logic.h
+++ b/engines/tsage/ringworld/ringworld_logic.h
@@ -147,15 +147,9 @@ public:
#define RING_INVENTORY (*((::TsAGE::Ringworld::RingworldInvObjectList *)_globals->_inventory))
class RingworldGame: public Game {
-protected:
- virtual void handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName);
public:
virtual void start();
virtual void restart();
- virtual void restartGame();
- virtual void saveGame();
- virtual void restoreGame();
- virtual void quitGame();
virtual void endGame(int resNum, int lineNum);
virtual Scene *createScene(int sceneNumber);
diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp
index e8b3189481..d68f5c2ee5 100644
--- a/engines/tsage/scenes.cpp
+++ b/engines/tsage/scenes.cpp
@@ -20,11 +20,15 @@
*
*/
+#include "common/config-manager.h"
+#include "common/translation.h"
+#include "gui/saveload.h"
#include "tsage/scenes.h"
#include "tsage/globals.h"
#include "tsage/ringworld/ringworld_logic.h"
#include "tsage/tsage.h"
#include "tsage/saveload.h"
+#include "tsage/staticres.h"
namespace TsAGE {
@@ -505,6 +509,51 @@ void Scene::setZoomPercents(int yStart, int minPercent, int yEnd, int maxPercent
/*--------------------------------------------------------------------------*/
+void Game::restartGame() {
+ if (MessageDialog::show(RESTART_MSG, CANCEL_BTN_STRING, RESTART_BTN_STRING) == 1)
+ _globals->_game->restart();
+}
+
+void Game::saveGame() {
+ if (!_vm->canSaveGameStateCurrently())
+ MessageDialog::show(SAVING_NOT_ALLOWED_MSG, OK_BTN_STRING);
+ else {
+ // Show the save dialog
+ handleSaveLoad(true, _globals->_sceneHandler->_saveGameSlot, _globals->_sceneHandler->_saveName);
+ }
+}
+
+void Game::restoreGame() {
+ if (!_vm->canLoadGameStateCurrently())
+ MessageDialog::show(RESTORING_NOT_ALLOWED_MSG, OK_BTN_STRING);
+ else {
+ // Show the load dialog
+ handleSaveLoad(false, _globals->_sceneHandler->_loadGameSlot, _globals->_sceneHandler->_saveName);
+ }
+}
+
+void Game::quitGame() {
+ if (MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING) == 1)
+ _vm->quitGame();
+}
+
+void Game::handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName) {
+ const EnginePlugin *plugin = 0;
+ EngineMan.findGame(_vm->getGameId(), &plugin);
+ GUI::SaveLoadChooser *dialog;
+ if (saveFlag)
+ dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"));
+ else
+ dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load"));
+
+ dialog->setSaveMode(saveFlag);
+
+ saveSlot = dialog->runModalWithPluginAndTarget(plugin, ConfMan.getActiveDomainName());
+ saveName = dialog->getResultString();
+
+ delete dialog;
+}
+
void Game::execute() {
// Main game loop
bool activeFlag = false;
diff --git a/engines/tsage/scenes.h b/engines/tsage/scenes.h
index 793013b603..b03b8fa906 100644
--- a/engines/tsage/scenes.h
+++ b/engines/tsage/scenes.h
@@ -115,7 +115,7 @@ protected:
SynchronizedList<GameHandler *> _handlers;
static bool notLockedFn(GameHandler *g);
- virtual void handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName) {}
+ virtual void handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName);
public:
virtual ~Game() {}
@@ -125,10 +125,10 @@ public:
void execute();
virtual void start() = 0;
virtual void restart() {}
- virtual void restartGame() {}
- virtual void saveGame() {}
- virtual void restoreGame() {}
- virtual void quitGame() {}
+ virtual void restartGame();
+ virtual void saveGame();
+ virtual void restoreGame();
+ virtual void quitGame();
virtual void endGame(int resNum, int lineNum) {}
virtual Scene *createScene(int sceneNumber) = 0;
virtual void processEvent(Event &event) {}