aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2017-08-17 19:57:42 -0400
committerPaul Gilbert2017-08-17 19:57:42 -0400
commitee458e557eeb1c5efea03fc3e6180808b0fe5ecd (patch)
treea77411ff14b41c730e95b822c2f3ffb71959efb7
parent7b0db9e1ec5bb4769bd6ba2f850f618a1ed2a673 (diff)
downloadscummvm-rg350-ee458e557eeb1c5efea03fc3e6180808b0fe5ecd.tar.gz
scummvm-rg350-ee458e557eeb1c5efea03fc3e6180808b0fe5ecd.tar.bz2
scummvm-rg350-ee458e557eeb1c5efea03fc3e6180808b0fe5ecd.zip
TITANIC: Fix magazine being winnable multiple times
-rw-r--r--engines/titanic/core/game_object.cpp2
-rw-r--r--engines/titanic/core/game_object.h2
-rw-r--r--engines/titanic/game/television.cpp26
3 files changed, 19 insertions, 11 deletions
diff --git a/engines/titanic/core/game_object.cpp b/engines/titanic/core/game_object.cpp
index 5abc9f0f76..11b8b58451 100644
--- a/engines/titanic/core/game_object.cpp
+++ b/engines/titanic/core/game_object.cpp
@@ -912,7 +912,7 @@ bool CGameObject::compareViewNameTo(const CString &name) const {
return !getViewFullName().compareToIgnoreCase(name);
}
-int CGameObject::compareRoomNameTo(const CString &name) {
+bool CGameObject::compareRoomNameTo(const CString &name) {
CRoomItem *room = getGameManager()->getRoom();
return !room->getName().compareToIgnoreCase(name);
}
diff --git a/engines/titanic/core/game_object.h b/engines/titanic/core/game_object.h
index 619c56bc50..f79c9e1d1e 100644
--- a/engines/titanic/core/game_object.h
+++ b/engines/titanic/core/game_object.h
@@ -329,7 +329,7 @@ protected:
/**
* Compare the name of the parent room to the item to a passed string
*/
- int compareRoomNameTo(const CString &name);
+ bool compareRoomNameTo(const CString &name);
/**
* Gets the first object under the system MailMan
diff --git a/engines/titanic/game/television.cpp b/engines/titanic/game/television.cpp
index 1380b441d7..80404fa9d3 100644
--- a/engines/titanic/game/television.cpp
+++ b/engines/titanic/game/television.cpp
@@ -236,23 +236,31 @@ bool CTelevision::MovieEndMsg(CMovieEndMsg *msg) {
}
if (_channelNum == 3 && compareRoomNameTo("SGTState") && getPassengerClass() == THIRD_CLASS) {
- // You may be a winner
- CProximity prox1, prox2;
- prox1._soundType = prox2._soundType = Audio::Mixer::kSpeechSoundType;
- playSound("z#47.wav", prox1);
- _soundHandle = playSound("b#20.wav", prox2);
- CMagazine *magazine = dynamic_cast<CMagazine *>(getRoot()->findByName("Magazine"));
+ // WORKAROUND: The original allowed the magazine to be "won" multiple times. We
+ // now search for magazine within the room (which is it's initial, hidden location).
+ // That way, when it's 'Won', it's no longer present and can't be won again
+ CMagazine *magazine = dynamic_cast<CMagazine *>(findRoom()->findByName("Magazine"));
if (magazine) {
+ // You may be a winner
+ CProximity prox1, prox2;
+ prox1._soundType = prox2._soundType = Audio::Mixer::kSpeechSoundType;
+ playSound("z#47.wav", prox1);
+ _soundHandle = playSound("b#20.wav", prox2);
+
+ // Get the room flags for the SGT floor we're on
CPetControl *pet = getPetControl();
uint roomFlags = pet->getRoomFlags();
- debugC(kDebugScripts, "Assigned room - %d", roomFlags);
+ // Send the magazine to the SuccUBus
+ debugC(DEBUG_INTERMEDIATE, kDebugScripts, "Assigned room - %d", roomFlags);
magazine->addMail(roomFlags);
magazine->sendMail(roomFlags, roomFlags);
- }
- loadFrame(561);
+ loadFrame(561);
+ } else {
+ petDisplayMessage(NOTHING_ON_CHANNEL);
+ }
} else if (_channelNum == 2) {
loadFrame(_seasonFrame);
} else if (_channelNum == 4 && _channel4Glyph) {