aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/mads/dialogs.cpp2
-rw-r--r--engines/mads/dialogs.h4
-rw-r--r--engines/mads/game.cpp20
-rw-r--r--engines/mads/game.h18
-rw-r--r--engines/mads/nebular/dialogs_nebular.h10
-rw-r--r--engines/mads/nebular/game_nebular.cpp4
-rw-r--r--engines/mads/nebular/game_nebular.h2
-rw-r--r--engines/mads/scene.cpp17
-rw-r--r--engines/mads/scene.h11
9 files changed, 44 insertions, 44 deletions
diff --git a/engines/mads/dialogs.cpp b/engines/mads/dialogs.cpp
index fd42eb5db0..c865e048da 100644
--- a/engines/mads/dialogs.cpp
+++ b/engines/mads/dialogs.cpp
@@ -333,7 +333,7 @@ void MessageDialog::show() {
Dialogs *Dialogs::init(MADSEngine *vm) {
if (vm->getGameID() == GType_RexNebular)
- return new Dialogs(vm);
+ return new Nebular::DialogsNebular(vm);
error("Unknown game");
}
diff --git a/engines/mads/dialogs.h b/engines/mads/dialogs.h
index f77590deee..a915ed3452 100644
--- a/engines/mads/dialogs.h
+++ b/engines/mads/dialogs.h
@@ -174,7 +174,7 @@ enum DialogId {
};
class Dialogs {
-private:
+protected:
MADSEngine *_vm;
Dialogs(MADSEngine *vm);
@@ -183,6 +183,8 @@ public:
public:
Common::Point _defaultPosition;
DialogId _pendingDialog;
+
+ virtual void showDialog() = 0;
};
} // End of namespace MADS
diff --git a/engines/mads/game.cpp b/engines/mads/game.cpp
index 14dbcde01f..4e0be59122 100644
--- a/engines/mads/game.cpp
+++ b/engines/mads/game.cpp
@@ -75,7 +75,7 @@ void Game::run() {
_statusFlag = _scene._sectionNum != 1;
_vm->_dialogs->_pendingDialog = DIALOG_DIFFICULTY;
- showDialog();
+ _vm->_dialogs->showDialog();
_vm->_dialogs->_pendingDialog = DIALOG_NONE;
_vm->_events->freeCursors();
@@ -138,7 +138,7 @@ void Game::sectionLoop() {
_player._stepEnabled = true;
_player._visible = true;
_vm->_dialogs->_defaultPosition = Common::Point(-1, -1);
- _scene.addVisitedScene(_scene._nextSceneId);
+ addVisitedScene(_scene._nextSceneId);
// TODO: main section loop logic goes here
@@ -151,7 +151,7 @@ void Game::sectionLoop() {
// Check whether to show a dialog
if (_vm->_dialogs->_pendingDialog && _player._stepEnabled && !_globalFlags[5]) {
_scene.releasePlayerSprites();
- showDialog();
+ _vm->_dialogs->showDialog();
_vm->_dialogs->_pendingDialog = DIALOG_NONE;
}
}
@@ -213,6 +213,20 @@ void Game::loadResourceSequence(const Common::String prefix, int v) {
warning("TODO: loadResourceSequence");
}
+void Game::addVisitedScene(int sceneId) {
+ if (!visitedScenesExists(sceneId))
+ _visitedScenes.push_back(sceneId);
+}
+
+bool Game::visitedScenesExists(int sceneId) {
+ for (int i = 0; i < _visitedScenes.size(); ++i) {
+ if (_visitedScenes[i] == sceneId)
+ return true;
+ }
+
+ return false;
+}
+
/*------------------------------------------------------------------------*/
void InventoryObject::load(Common::SeekableReadStream &f) {
diff --git a/engines/mads/game.h b/engines/mads/game.h
index 58b6ff968a..e2b8deede5 100644
--- a/engines/mads/game.h
+++ b/engines/mads/game.h
@@ -95,6 +95,16 @@ private:
* Inner game loop for executing gameplay within a game section
*/
void sectionLoop();
+
+ /**
+ * Returns true if a given Scene Id exists in the listed of previously visited scenes.
+ */
+ bool visitedScenesExists(int sceneId);
+
+ /**
+ * Adds a scene Id to the list of previously visited scenes, if it doesn't already exist
+ */
+ void addVisitedScene(int sceneId);
protected:
MADSEngine *_vm;
MSurface *_surface;
@@ -107,13 +117,14 @@ protected:
int _saveSlot;
int _statusFlag;
SectionHandler *_sectionHandler;
+ Common::Array<int> _visitedScenes;
+ byte *_quotes;
int _v1;
int _v2;
int _v3;
int _v4;
int _v5;
int _v6;
- byte *_quotes;
/**
* Constructor
@@ -156,11 +167,6 @@ protected:
virtual void initialiseGlobals() = 0;
/**
- * Show a game dialog
- */
- virtual void showDialog() = 0;
-
- /**
* Set up the section handler specific to each section
*/
virtual void setSectionHandler() = 0;
diff --git a/engines/mads/nebular/dialogs_nebular.h b/engines/mads/nebular/dialogs_nebular.h
index 53f377ae0a..d4e4fe921e 100644
--- a/engines/mads/nebular/dialogs_nebular.h
+++ b/engines/mads/nebular/dialogs_nebular.h
@@ -31,6 +31,16 @@ namespace MADS {
namespace Nebular {
+class DialogsNebular: public Dialogs {
+ friend class Dialogs;
+protected:
+ DialogsNebular(MADSEngine *vm): Dialogs(vm) {}
+public:
+ virtual void showDialog() {
+ warning("TODO: showDialog");
+ }
+};
+
struct HOGANUS {
int _bookId;
int _pageNum;
diff --git a/engines/mads/nebular/game_nebular.cpp b/engines/mads/nebular/game_nebular.cpp
index 2e27eaea0f..6e2b77d477 100644
--- a/engines/mads/nebular/game_nebular.cpp
+++ b/engines/mads/nebular/game_nebular.cpp
@@ -152,10 +152,6 @@ void GameNebular::initialiseGlobals() {
loadResourceSequence("ROX", 1);
}
-void GameNebular::showDialog() {
- warning("TODO: showDialog");
-}
-
void GameNebular::setSectionHandler() {
delete _sectionHandler;
diff --git a/engines/mads/nebular/game_nebular.h b/engines/mads/nebular/game_nebular.h
index 31bd4ae2b2..9232b26969 100644
--- a/engines/mads/nebular/game_nebular.h
+++ b/engines/mads/nebular/game_nebular.h
@@ -39,8 +39,6 @@ protected:
virtual void initialiseGlobals();
- virtual void showDialog();
-
virtual void setSectionHandler();
};
diff --git a/engines/mads/scene.cpp b/engines/mads/scene.cpp
index 46190d12be..406c3cc616 100644
--- a/engines/mads/scene.cpp
+++ b/engines/mads/scene.cpp
@@ -34,7 +34,6 @@ Scene::Scene(MADSEngine *vm): _vm(vm) {
_priorSceneId = 0;
_nextSceneId = 0;
_currentSceneId = 0;
- _vocabCount = 0;
_vocabBuffer = nullptr;
_sceneLogic = nullptr;
}
@@ -81,7 +80,7 @@ void Scene::clearDynamicHotspots() {
void Scene::clearVocab() {
freeVocab();
- _vocabCount = 0;
+ _activeVocabs.clear();
}
void Scene::freeVocab() {
@@ -105,20 +104,6 @@ int Scene::activeVocabIndexOf(int vocabId) {
return -1;
}
-void Scene::addVisitedScene(int sceneId) {
- if (!visitedScenesExists(sceneId))
- _visitedScenes.push_back(sceneId);
-}
-
-bool Scene::visitedScenesExists(int sceneId) {
- for (int i = 0; i < _visitedScenes.size(); ++i) {
- if (_visitedScenes[i] == sceneId)
- return true;
- }
-
- return false;
-}
-
void Scene::loadScene() {
delete _sceneLogic;
diff --git a/engines/mads/scene.h b/engines/mads/scene.h
index 9f4f392289..775517b2e6 100644
--- a/engines/mads/scene.h
+++ b/engines/mads/scene.h
@@ -136,10 +136,6 @@ private:
*/
int activeVocabIndexOf(int vocabId);
- /**
- * Returns true if a given Scene Id exists in the listed of previously visited scenes.
- */
- bool visitedScenesExists(int sceneId);
protected:
MADSEngine *_vm;
public:
@@ -157,9 +153,7 @@ public:
Common::Array<DynamicHotspot> _dynamicHotspots;
bool _dynamicHotspotsChanged;
byte *_vocabBuffer;
- int _vocabCount;
Common::Array<int> _activeVocabs;
- Common::Array<int> _visitedScenes;
/**
* Constructor
@@ -203,11 +197,6 @@ public:
void addActiveVocab(int vocabId);
/**
- * Add a scene to the visited scene list if it doesn't already exist
- */
- void addVisitedScene(int sceneId);
-
- /**
* Loads the scene logic for a given scene
*/
void loadScene();