diff options
Diffstat (limited to 'engines/lab')
| -rw-r--r-- | engines/lab/detection.cpp | 7 | ||||
| -rw-r--r-- | engines/lab/lab.cpp | 5 | ||||
| -rw-r--r-- | engines/lab/lab.h | 17 | ||||
| -rw-r--r-- | engines/lab/savegame.cpp | 66 | ||||
| -rw-r--r-- | engines/lab/savegame.h | 53 | 
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  | 
