LAB: Finally get rid of g_lab

This commit is contained in:
Strangerke 2015-12-13 23:22:34 +01:00 committed by Willem Jan Palenstijn
parent 974740d307
commit a784e2bd5c
5 changed files with 49 additions and 99 deletions

View file

@ -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" },

View file

@ -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;

View file

@ -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

View file

@ -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"));

View file

@ -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