MADS: Phantom: Add more Catacombs functions

This commit is contained in:
Strangerke 2015-11-04 14:45:22 +01:00
parent cdc564b060
commit d073f5767c
3 changed files with 72 additions and 5 deletions

View File

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

View File

@ -121,10 +121,11 @@ public:
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);
};

View File

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