From 692af23f6f0a698e9089fcef0592fcb20e56efa6 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 21 Apr 2014 20:50:05 -0400 Subject: MADS: Create a Globals base class that the games will derive from --- engines/mads/game.h | 6 ++++ engines/mads/globals.cpp | 34 ++++++++++++++++++++++ engines/mads/globals.h | 50 ++++++++++++++++++++++++++++++++ engines/mads/module.mk | 1 + engines/mads/nebular/game_nebular.h | 5 +++- engines/mads/nebular/globals_nebular.cpp | 7 +---- engines/mads/nebular/globals_nebular.h | 16 ++-------- engines/mads/nebular/nebular_scenes.h | 2 +- engines/mads/user_interface.cpp | 25 +++++----------- 9 files changed, 107 insertions(+), 39 deletions(-) create mode 100644 engines/mads/globals.cpp create mode 100644 engines/mads/globals.h (limited to 'engines/mads') diff --git a/engines/mads/game.h b/engines/mads/game.h index 44aa0dbee5..5bb7b31973 100644 --- a/engines/mads/game.h +++ b/engines/mads/game.h @@ -27,6 +27,7 @@ #include "common/str-array.h" #include "mads/scene.h" #include "mads/game_data.h" +#include "mads/globals.h" #include "mads/inventory.h" #include "mads/player.h" #include "mads/screen.h" @@ -149,6 +150,11 @@ public: void splitQuote(Common::String quote, Common::String part1, Common::String part2) {warning("TODO: splitQuote()");} Common::StringArray getMessage(uint32 id); + /** + * Returns the globals for the game + */ + virtual Globals &globals() = 0; + /** * Standard object handling across the game */ diff --git a/engines/mads/globals.cpp b/engines/mads/globals.cpp new file mode 100644 index 0000000000..68a2cf1970 --- /dev/null +++ b/engines/mads/globals.cpp @@ -0,0 +1,34 @@ +/* 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. + * + */ + +#include "common/scummsys.h" +#include "mads/globals.h" + +namespace MADS { + +void Globals::reset() { + for (uint i = 0; i < _flags.size(); ++i) + _flags[i] = 0; +} + + +} // End of namespace MADS diff --git a/engines/mads/globals.h b/engines/mads/globals.h new file mode 100644 index 0000000000..ea327b0045 --- /dev/null +++ b/engines/mads/globals.h @@ -0,0 +1,50 @@ +/* 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. + * + */ + +#ifndef MADS_GLOBALS_H +#define MADS_GLOBALS_H + +#include "common/scummsys.h" +#include "common/array.h" + +namespace MADS { + +class Globals { +protected: + Common::Array _flags; +public: + Globals() {} + + /** + * Square brackets operator for accessing flags + */ + int16 &operator[](int idx) { return _flags[idx]; } + + /* + * Resets all the globals to empty + */ + void reset(); +}; + +} // End of namespace MADS + +#endif /* MADS_GLOBALS_H */ diff --git a/engines/mads/module.mk b/engines/mads/module.mk index 716521d6ec..43853f5abb 100644 --- a/engines/mads/module.mk +++ b/engines/mads/module.mk @@ -21,6 +21,7 @@ MODULE_OBJS := \ font.o \ game.o \ game_data.o \ + globals.o \ hotspots.o \ inventory.o \ mads.o \ diff --git a/engines/mads/nebular/game_nebular.h b/engines/mads/nebular/game_nebular.h index 4d011c2f4a..7d64e3e49f 100644 --- a/engines/mads/nebular/game_nebular.h +++ b/engines/mads/nebular/game_nebular.h @@ -25,6 +25,7 @@ #include "common/scummsys.h" #include "mads/game.h" +#include "mads/globals.h" #include "mads/nebular/globals_nebular.h" namespace MADS { @@ -62,9 +63,11 @@ protected: virtual void checkShowDialog(); public: - Globals _globals; + NebularGlobals _globals; StoryMode _storyMode; + virtual Globals &globals() { return _globals; } + virtual void doObjectAction(); virtual void unhandledAction(); diff --git a/engines/mads/nebular/globals_nebular.cpp b/engines/mads/nebular/globals_nebular.cpp index 11c2b81502..3e9a9f7e2f 100644 --- a/engines/mads/nebular/globals_nebular.cpp +++ b/engines/mads/nebular/globals_nebular.cpp @@ -28,7 +28,7 @@ namespace MADS { namespace Nebular { -Globals::Globals() { +NebularGlobals::NebularGlobals(): Globals() { // Initialize lists _flags.resize(210); _spriteIndexes.resize(30); @@ -53,11 +53,6 @@ Globals::Globals() { _v84268 = 0; } -void Globals::reset() { - for (uint i = 0; i < _flags.size(); ++i) - _flags[i] = 0; -} - } // End of namespace Nebular } // End of namespace MADS diff --git a/engines/mads/nebular/globals_nebular.h b/engines/mads/nebular/globals_nebular.h index 242e0d1b7b..b8fe17f333 100644 --- a/engines/mads/nebular/globals_nebular.h +++ b/engines/mads/nebular/globals_nebular.h @@ -279,9 +279,7 @@ enum { #define TELEPORTER_WORK_COUNT 6 // Total number that actually work -class Globals { -private: - Common::Array _flags; +class NebularGlobals: public Globals { public: Common::Array _spriteIndexes; Common::Array _sequenceIndexes; @@ -302,17 +300,7 @@ public: /** * Constructor */ - Globals(); - - /** - * Square brackets operator for accessing flags - */ - int16 &operator[](int idx) { return _flags[idx]; } - - /* - * Resets all the globals to empty - */ - void reset(); + NebularGlobals(); }; } // End of namespace Nebular diff --git a/engines/mads/nebular/nebular_scenes.h b/engines/mads/nebular/nebular_scenes.h index 56ea52d2c8..a227b7658a 100644 --- a/engines/mads/nebular/nebular_scenes.h +++ b/engines/mads/nebular/nebular_scenes.h @@ -111,7 +111,7 @@ public: */ class NebularScene : public SceneLogic { protected: - Globals &_globals; + NebularGlobals &_globals; GameNebular &_game; MADSAction &_action; diff --git a/engines/mads/user_interface.cpp b/engines/mads/user_interface.cpp index f775e459b5..346ad2d688 100644 --- a/engines/mads/user_interface.cpp +++ b/engines/mads/user_interface.cpp @@ -231,18 +231,14 @@ void Conversation::setup(int globalId, ...) { if (quoteId < 0) { // For an ending value of -1, also initial the bitflags for the global // associated with the conversation entry, which enables all the quote Ids - assert(_vm->getGameID() == GType_RexNebular); - Nebular::GameNebular *game = (Nebular::GameNebular *)_vm->_game; - game->_globals[globalId] = (int16)0xffff; + _vm->_game->globals()[globalId] = (int16)0xffff; } _globalId = globalId; } void Conversation::set(int quoteId, ...) { - assert(_vm->getGameID() == GType_RexNebular); - Nebular::GameNebular *game = (Nebular::GameNebular *)_vm->_game; - game->_globals[_globalId] = 0; + _vm->_game->globals()[_globalId] = 0; va_list va; va_start(va, quoteId); @@ -252,7 +248,7 @@ void Conversation::set(int quoteId, ...) { for (uint idx = 0; idx < _quotes.size(); ++idx) { if (_quotes[idx] == quoteId) { // Found index, so set that bit in the global keeping track of conversation state - game->_globals[_globalId] |= 1 << idx; + _vm->_game->globals()[_globalId] |= 1 << idx; break; } } @@ -263,18 +259,15 @@ void Conversation::set(int quoteId, ...) { } void Conversation::write(int quoteId, bool flag) { - assert(_vm->getGameID() == GType_RexNebular); - Nebular::GameNebular *game = (Nebular::GameNebular *)_vm->_game; - for (uint idx = 0; idx < _quotes.size(); ++idx) { if (_quotes[idx] == quoteId) { // Found index, so set or clear the flag if (flag) { // Set bit - game->_globals[_globalId] |= 1 << idx; + _vm->_game->globals()[_globalId] |= 1 << idx; } else { // Clear bit - game->_globals[_globalId] &= ~(1 << idx); + _vm->_game->globals()[_globalId] &= ~(1 << idx); } return; } @@ -282,17 +275,15 @@ void Conversation::write(int quoteId, bool flag) { } void Conversation::start() { - assert(_vm->getGameID() == GType_RexNebular); - Nebular::GameNebular *game = (Nebular::GameNebular *)_vm->_game; - UserInterface &userInterface = game->_scene._userInterface; + UserInterface &userInterface = _vm->_game->_scene._userInterface; userInterface.emptyConversationList(); // Loop through each of the quotes loaded into the conversation for (uint idx = 0; idx < _quotes.size(); ++idx) { // Check whether the given quote is enabled or not - if (game->_globals[_globalId] & (1 << idx)) { + if (_vm->_game->globals()[_globalId] & (1 << idx)) { // Quote enabled, so add it to the list of talk selections - Common::String msg = game->getQuote(_quotes[idx]); + Common::String msg = _vm->_game->getQuote(_quotes[idx]); userInterface.addConversationMessage(_quotes[idx], msg); } } -- cgit v1.2.3