TITANIC: Fix magazine being winnable multiple times

This commit is contained in:
Paul Gilbert 2017-08-17 19:57:42 -04:00
parent 7b0db9e1ec
commit ee458e557e
3 changed files with 19 additions and 11 deletions

View File

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

View File

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

View File

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