Skip to content

Commit

Permalink
MADS: Phantom: Add more Catacombs functions
Browse files Browse the repository at this point in the history
  • Loading branch information
Strangerke committed Nov 4, 2015
1 parent cdc564b commit d073f57
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 5 deletions.
70 changes: 68 additions & 2 deletions engines/mads/phantom/game_phantom.cpp
Expand Up @@ -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() {
Expand Down Expand Up @@ -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
5 changes: 3 additions & 2 deletions engines/mads/phantom/game_phantom.h
Expand Up @@ -121,10 +121,11 @@ class GamePhantom : public Game {
virtual void synchronize(Common::Serializer &s, bool phase1);

void setupCatacombs();
void enterCatacombs(int val);
void enterCatacombs(bool val);
void initCatacombs();
void moveCatacombs(int dir) { warning("TODO: moveCataCombs"); };
void moveCatacombs(int dir);
int exitCatacombs(int dir);
void newCatacombRoom(int fromRoom, int fromExit);
};


Expand Down
2 changes: 1 addition & 1 deletion engines/mads/phantom/phantom_scenes3.cpp
Expand Up @@ -2351,7 +2351,7 @@ void Scene309::actions() {
_boatStatus = 0;
_talkCount = 0;
} else if (_globals[kLanternStatus] == 1)
_game.enterCatacombs(0);
_game.enterCatacombs(false);

_action._inProgress = false;
return;
Expand Down

0 comments on commit d073f57

Please sign in to comment.