aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/lab/detection.cpp7
-rw-r--r--engines/lab/lab.cpp5
-rw-r--r--engines/lab/lab.h17
-rw-r--r--engines/lab/savegame.cpp66
-rw-r--r--engines/lab/savegame.h53
5 files changed, 49 insertions, 99 deletions
diff --git a/engines/lab/detection.cpp b/engines/lab/detection.cpp
index afdf5a1625..ff8679c489 100644
--- a/engines/lab/detection.cpp
+++ b/engines/lab/detection.cpp
@@ -31,7 +31,6 @@
#include "engines/advancedDetector.h"
#include "lab/lab.h"
-#include "lab/savegame.h"
static const PlainGameDescriptor lab_setting[] = {
{ "lab", "Labyrith of Time" },
@@ -184,9 +183,9 @@ SaveStateList LabMetaEngine::listSaves(const char *target) const {
if (slotNum >= 0 && slotNum <= 999) {
Common::InSaveFile *in = saveFileMan->openForLoading(file->c_str());
if (in) {
- if (Lab::readSaveGameHeader(in, header))
- saveList.push_back(SaveStateDescriptor(slotNum, header._descr.getDescription()));
- delete in;
+ if (Lab::readSaveGameHeader(in, header))
+ saveList.push_back(SaveStateDescriptor(slotNum, header._descr.getDescription()));
+ delete in;
}
}
}
diff --git a/engines/lab/lab.cpp b/engines/lab/lab.cpp
index 18b8b3d065..1decad0000 100644
--- a/engines/lab/lab.cpp
+++ b/engines/lab/lab.cpp
@@ -47,13 +47,8 @@
#include "lab/utils.h"
namespace Lab {
-
-LabEngine *g_lab;
-
LabEngine::LabEngine(OSystem *syst, const ADGameDescription *gameDesc)
: Engine(syst), _gameDescription(gameDesc), _extraGameFeatures(0), _rnd("lab") {
- g_lab = this;
-
_lastWaitTOFTicks = 0;
_isHiRes = false;
diff --git a/engines/lab/lab.h b/engines/lab/lab.h
index d968c18013..756f6e1a36 100644
--- a/engines/lab/lab.h
+++ b/engines/lab/lab.h
@@ -34,8 +34,9 @@
#include "common/system.h"
#include "common/random.h"
#include "common/rect.h"
-
+#include "common/savefile.h"
#include "engines/engine.h"
+#include "engines/savestate.h"
#include "lab/image.h"
@@ -64,6 +65,13 @@ class Resource;
class TilePuzzle;
class Utils;
+struct SaveGameHeader {
+ byte _version;
+ SaveStateDescriptor _descr;
+ uint16 _roomNumber;
+ uint16 _direction;
+};
+
enum GameFeatures {
GF_LOWRES = 1 << 0,
GF_WINDOWS_TRIAL = 1 << 1
@@ -244,9 +252,14 @@ private:
void setCurrentClose(Common::Point pos, CloseDataPtr *closePtrList, bool useAbsoluteCoords);
bool takeItem(uint16 x, uint16 y, CloseDataPtr *closePtrList);
void turnPage(bool fromLeft);
+
+private:
+ bool saveGame(int slot, Common::String desc);
+ bool loadGame(int slot);
+ void writeSaveGameHeader(Common::OutSaveFile *out, const Common::String &saveName);
};
-extern LabEngine *g_lab;
+bool readSaveGameHeader(Common::InSaveFile *in, SaveGameHeader &header);
} // End of namespace Lab
diff --git a/engines/lab/savegame.cpp b/engines/lab/savegame.cpp
index 9ead742200..957bfdbf58 100644
--- a/engines/lab/savegame.cpp
+++ b/engines/lab/savegame.cpp
@@ -38,12 +38,10 @@
#include "engines/savestate.h"
#include "lab/lab.h"
-
#include "lab/dispman.h"
#include "lab/labsets.h"
#include "lab/music.h"
#include "lab/processroom.h"
-#include "lab/savegame.h"
#include "lab/tilepuzzle.h"
namespace Lab {
@@ -51,7 +49,7 @@ namespace Lab {
#define SAVEGAME_ID MKTAG('L', 'O', 'T', 'S')
#define SAVEGAME_VERSION 1
-void writeSaveGameHeader(Common::OutSaveFile *out, const Common::String &saveName) {
+void LabEngine::writeSaveGameHeader(Common::OutSaveFile *out, const Common::String &saveName) {
out->writeUint32BE(SAVEGAME_ID);
// Write version
@@ -123,9 +121,9 @@ bool readSaveGameHeader(Common::InSaveFile *in, SaveGameHeader &header) {
/**
* Writes the game out to disk.
*/
-bool saveGame(int slot, Common::String desc) {
+bool LabEngine::saveGame(int slot, Common::String desc) {
uint16 i;
- Common::String fileName = g_lab->generateSaveFileName(slot);
+ Common::String fileName = generateSaveFileName(slot);
Common::SaveFileManager *saveFileManager = g_system->getSavefileManager();
Common::OutSaveFile *file = saveFileManager->openForSaving(fileName);
@@ -134,27 +132,27 @@ bool saveGame(int slot, Common::String desc) {
// Load scene pic
CloseDataPtr closePtr = nullptr;
- g_lab->_graphics->readPict(g_lab->getPictName(&closePtr), true);
+ _graphics->readPict(getPictName(&closePtr), true);
writeSaveGameHeader(file, desc);
- file->writeUint16LE(g_lab->_roomNum);
- file->writeUint16LE(g_lab->getDirection());
- file->writeUint16LE(g_lab->getQuarters());
+ file->writeUint16LE(_roomNum);
+ file->writeUint16LE(getDirection());
+ file->writeUint16LE(getQuarters());
// Conditions
- for (i = 0; i < g_lab->_conditions->_lastElement / (8 * 2); i++)
- file->writeUint16LE(g_lab->_conditions->_array[i]);
+ for (i = 0; i < _conditions->_lastElement / (8 * 2); i++)
+ file->writeUint16LE(_conditions->_array[i]);
// Rooms found
- for (i = 0; i < g_lab->_roomsFound->_lastElement / (8 * 2); i++)
- file->writeUint16LE(g_lab->_roomsFound->_array[i]);
+ for (i = 0; i < _roomsFound->_lastElement / (8 * 2); i++)
+ file->writeUint16LE(_roomsFound->_array[i]);
- g_lab->_tilePuzzle->save(file);
+ _tilePuzzle->save(file);
// Breadcrumbs
- for (i = 0; i < sizeof(g_lab->_breadCrumbs); i++) {
- file->writeUint16LE(g_lab->_breadCrumbs[i]._roomNum);
- file->writeUint16LE(g_lab->_breadCrumbs[i]._direction);
+ for (i = 0; i < sizeof(_breadCrumbs); i++) {
+ file->writeUint16LE(_breadCrumbs[i]._roomNum);
+ file->writeUint16LE(_breadCrumbs[i]._direction);
}
file->flush();
@@ -167,9 +165,9 @@ bool saveGame(int slot, Common::String desc) {
/**
* Reads the game from disk.
*/
-bool loadGame(int slot) {
+bool LabEngine::loadGame(int slot) {
uint16 i;
- Common::String fileName = g_lab->generateSaveFileName(slot);
+ Common::String fileName = generateSaveFileName(slot);
Common::SaveFileManager *saveFileManager = g_system->getSavefileManager();
Common::InSaveFile *file = saveFileManager->openForLoading(fileName);
@@ -178,33 +176,33 @@ bool loadGame(int slot) {
SaveGameHeader header;
readSaveGameHeader(file, header);
- g_lab->_roomNum = file->readUint16LE();
- g_lab->setDirection(file->readUint16LE());
- g_lab->setQuarters(file->readUint16LE());
+ _roomNum = file->readUint16LE();
+ setDirection(file->readUint16LE());
+ setQuarters(file->readUint16LE());
// Conditions
- for (i = 0; i < g_lab->_conditions->_lastElement / (8 * 2); i++)
- g_lab->_conditions->_array[i] = file->readUint16LE();
+ for (i = 0; i < _conditions->_lastElement / (8 * 2); i++)
+ _conditions->_array[i] = file->readUint16LE();
// Rooms found
- for (i = 0; i < g_lab->_roomsFound->_lastElement / (8 * 2); i++)
- g_lab->_roomsFound->_array[i] = file->readUint16LE();
+ for (i = 0; i < _roomsFound->_lastElement / (8 * 2); i++)
+ _roomsFound->_array[i] = file->readUint16LE();
- g_lab->_tilePuzzle->load(file);
+ _tilePuzzle->load(file);
// Breadcrumbs
for (i = 0; i < 128; i++) {
- g_lab->_breadCrumbs[i]._roomNum = file->readUint16LE();
- g_lab->_breadCrumbs[i]._direction = file->readUint16LE();
+ _breadCrumbs[i]._roomNum = file->readUint16LE();
+ _breadCrumbs[i]._direction = file->readUint16LE();
}
- g_lab->_droppingCrumbs = (g_lab->_breadCrumbs[0]._roomNum != 0);
- g_lab->_followingCrumbs = false;
+ _droppingCrumbs = (_breadCrumbs[0]._roomNum != 0);
+ _followingCrumbs = false;
for (i = 0; i < 128; i++) {
- if (g_lab->_breadCrumbs[i]._roomNum == 0)
+ if (_breadCrumbs[i]._roomNum == 0)
break;
- g_lab->_numCrumbs = i;
+ _numCrumbs = i;
}
delete file;
@@ -215,8 +213,6 @@ bool loadGame(int slot) {
bool LabEngine::saveRestoreGame() {
bool isOK = false;
- //g_lab->showMainMenu();
-
// The original had one screen for saving/loading. We have two.
// Ask the user which screen to use.
GUI::MessageDialog saveOrLoad(_("Would you like to save or restore a game?"), _("Save"), _("Restore"));
diff --git a/engines/lab/savegame.h b/engines/lab/savegame.h
deleted file mode 100644
index f4f08b6368..0000000000
--- a/engines/lab/savegame.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-/*
- * This code is based on Labyrinth of Time code with assistance of
- *
- * Copyright (c) 1993 Terra Nova Development
- * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
- *
- */
-
-#ifndef LAB_SAVEGAME_H
-#define LAB_SAVEGAME_H
-
-#include "common/savefile.h"
-
-namespace Lab {
-
-class LabEngine;
-
-struct SaveGameHeader {
- byte _version;
- SaveStateDescriptor _descr;
- uint16 _roomNumber;
- uint16 _direction;
-};
-
-bool saveGame(int slot, Common::String desc);
-bool loadGame(int slot);
-bool readSaveGameHeader(Common::InSaveFile *in, SaveGameHeader &header);
-
-} // End of namespace Lab
-
-#endif // LAB_SAVEGAME_H