aboutsummaryrefslogtreecommitdiff
path: root/engines/mads/phantom/game_phantom.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/mads/phantom/game_phantom.cpp')
-rw-r--r--engines/mads/phantom/game_phantom.cpp70
1 files changed, 68 insertions, 2 deletions
diff --git a/engines/mads/phantom/game_phantom.cpp b/engines/mads/phantom/game_phantom.cpp
index ca2d68713b..05127147ea 100644
--- a/engines/mads/phantom/game_phantom.cpp
+++ b/engines/mads/phantom/game_phantom.cpp
@@ -291,12 +291,33 @@ void GamePhantom::synchronize(Common::Serializer &s, bool phase1) {
}
}
-void GamePhantom::enterCatacombs(int val) {
+void GamePhantom::enterCatacombs(bool val) {
warning("TODO: enterCatacombs");
+
+ setupCatacombs();
+
+ int var4, var2;
+ if (_scene._currentSceneId == 409) {
+ if (val) {
+ var4 = _globals[kCatacombs409b];
+ var2 = _globals[kCatacombs409bFrom];
+ } else {
+ var4 = _globals[kCatacombs409a];
+ var2 = _globals[kCatacombs409aFrom];
+ }
+ } else if (_scene._currentSceneId == 501) {
+ var4 = _globals[kCatacombs501];
+ var2 = _globals[kCatacombs501From];
+ } else {
+ var4 = _globals[kCatacombs309];
+ var2 = _globals[kCatacombs309From];
+ }
+
+ newCatacombRoom(var4, var2);
}
void GamePhantom::initCatacombs() {
- warning("TODO: initCatacombs");
+ _globals[kCatacombsRoom] = _globals[kCatacombsNextRoom];
}
void GamePhantom::setupCatacombs() {
@@ -337,6 +358,51 @@ int GamePhantom::exitCatacombs(int dir) {
return (_catacombs[scene]._exit[dir]);
};
+void GamePhantom::moveCatacombs(int dir) {
+ assert(_globals[kCatacombsRoom] = CLIP(_globals[kCatacombsRoom], 0, _catacombSize));
+ assert(dir = CLIP(dir, 0, 3));
+
+ newCatacombRoom(_catacombs[_globals[kCatacombsRoom]]._fromDirection[dir], _catacombs[_globals[kCatacombsRoom]]._exit[dir]);
+};
+
+void GamePhantom::newCatacombRoom(int toRoom, int fromExit) {
+ _globals[kCatacombsNextRoom] = toRoom;
+ _globals[kCatacombsFrom] = fromExit & 0x03;
+ _globals[kCatacombsFlag] = fromExit & 0xFC;
+
+ int newSceneNum = -1;
+
+ if (toRoom < 0) {
+ switch (toRoom) {
+ case -5:
+ newSceneNum = 501;
+ break;
+
+ case -4:
+ case -3:
+ newSceneNum = 409;
+ break;
+
+ case -2:
+ newSceneNum = 309;
+ break;
+
+ default:
+ error("Unexpected room in newCatacombRoom");
+ }
+ } else {
+ newSceneNum = _catacombs[toRoom]._sceneNum;
+ _globals[81] = _catacombs[toRoom]._flags;
+ }
+
+ if (_triggerSetupMode == SEQUENCE_TRIGGER_PREPARE) {
+ _player._walkOffScreenSceneId = newSceneNum;
+ } else {
+ _scene._reloadSceneFlag = -1;
+ _scene._nextSceneId = newSceneNum;
+ }
+}
+
} // End of namespace Phantom
} // End of namespace MADS