aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStrangerke2017-11-14 07:39:10 +0100
committerThierry Crozat2018-01-23 02:15:39 +0000
commitd1d1d988b08ba19f4daa095eff6ee64ef9c19c77 (patch)
tree9a0e752a0c8cd526a877891f6ab88fd47bf5cd6b
parenteed616a4aa43d4c128b2dd21371b50a942dad755 (diff)
downloadscummvm-rg350-d1d1d988b08ba19f4daa095eff6ee64ef9c19c77.tar.gz
scummvm-rg350-d1d1d988b08ba19f4daa095eff6ee64ef9c19c77.tar.bz2
scummvm-rg350-d1d1d988b08ba19f4daa095eff6ee64ef9c19c77.zip
SUPERNOVA: Add interaction logic for AxacussIntersection
-rw-r--r--engines/supernova/rooms.cpp28
-rw-r--r--engines/supernova/state.cpp18
-rw-r--r--engines/supernova/state.h1
3 files changed, 45 insertions, 2 deletions
diff --git a/engines/supernova/rooms.cpp b/engines/supernova/rooms.cpp
index 1c7b647cd1..8c0cbd62be 100644
--- a/engines/supernova/rooms.cpp
+++ b/engines/supernova/rooms.cpp
@@ -2831,8 +2831,32 @@ bool AxacussBcorridor::interact(Action verb, Object &obj1, Object &obj2) {
}
bool AxacussIntersection::interact(Action verb, Object &obj1, Object &obj2) {
- // STUB
- return false;
+ if (((verb == ACTION_WALK) || (verb == ACTION_OPEN)) && (obj1._id == DOOR) && !isSectionVisible(1))
+ _gm->guardShot();
+ else if ((verb == ACTION_OPEN) && (obj1._id == DOOR) && !obj1.hasProperty(OPENED)) {
+ _gm->_rooms[CORRIDOR9]->setSectionVisible(27, true);
+ _gm->_rooms[CORRIDOR9]->setSectionVisible(28, false);
+ _gm->_rooms[CORRIDOR9]->getObject(1)->setProperty(OPENED);
+ return false;
+ } else if ((verb == ACTION_CLOSE) && (obj1._id == DOOR) && obj1.hasProperty(OPENED)) {
+ _gm->_rooms[CORRIDOR9]->setSectionVisible(27, false);
+ _gm->_rooms[CORRIDOR9]->setSectionVisible(28, true);
+ _gm->_rooms[CORRIDOR9]->getObject(1)->disableProperty(OPENED);
+ return false;
+ } else if ((verb == ACTION_TALK) && (obj1._id == GUARDIAN)) {
+ // FIXME: refactor _rowsX and _dialogsX
+ // _gm->dialog(3, &rowsx, &_dialogsX, 0);
+ _gm->guardShot();
+ } else if ((verb == ACTION_TAKE) && (obj1._id == MASTERKEYCARD)) {
+ _gm->great(0);
+ setSectionVisible(7, false);
+ return false;
+ } else if ((verb == ACTION_USE) && (Object::combine(obj1, obj2, MAGNET, GUARDIAN) || Object::combine(obj1, obj2, KNIFE, GUARDIAN)))
+ _vm->renderMessage(kStringArsanoEntrance27);
+ else
+ return false;
+
+ return true;
}
bool AxacussExit::interact(Action verb, Object &obj1, Object &obj2) {
diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp
index 7886225fd8..4c697c802e 100644
--- a/engines/supernova/state.cpp
+++ b/engines/supernova/state.cpp
@@ -1930,4 +1930,22 @@ void GameManager::executeRoom() {
_currentRoom->onEntrance();
}
+void GameManager::guardShot() {
+ drawImage(2);
+ drawImage(5);
+ wait2(3);
+ drawImage(2);
+
+ _vm->playSound(kAudioVoiceHalt);
+ while (_vm->_mixer->isSoundHandleActive(_vm->_soundHandle))
+ wait2(1);
+
+ drawImage(5);
+ wait2(5);
+ drawImage(3);
+ wait2(3);
+
+ shot(4, 3);
+}
+
}
diff --git a/engines/supernova/state.h b/engines/supernova/state.h
index 1b993d145b..30bb7eb4a7 100644
--- a/engines/supernova/state.h
+++ b/engines/supernova/state.h
@@ -214,6 +214,7 @@ public:
void taxiEvent();
void searchStartEvent();
void outro();
+ void guardShot();
};
}