aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/npcs/succubus.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/titanic/npcs/succubus.cpp')
-rw-r--r--engines/titanic/npcs/succubus.cpp199
1 files changed, 101 insertions, 98 deletions
diff --git a/engines/titanic/npcs/succubus.cpp b/engines/titanic/npcs/succubus.cpp
index af859f9f3c..a05cc71d00 100644
--- a/engines/titanic/npcs/succubus.cpp
+++ b/engines/titanic/npcs/succubus.cpp
@@ -57,22 +57,22 @@ CSuccUBus::CSuccUBus() : CTrueTalkNPC() {
_endFrame8 = -1;
_startFrame11 = -1;
_endFrame11 = -1;
- _startFrame3 = 68;
- _endFrame3 = 168;
- _startFrame4 = 168;
- _endFrame4 = 248;
- _startFrame9 = 0;
- _endFrame9 = 0x0E;
- _startFrame10 = 0x0E;
- _endFrame10 = 27;
- _startFrame2 = 40;
- _endFrame2 = 68;
+ _sendStartFrame = 68;
+ _sendEndFrame = 168;
+ _receiveStartFrame = 168;
+ _receiveEndFrame = 248;
+ _onStartFrame = 0;
+ _onEndFrame = 0x0E;
+ _offStartFrame = 0x0E;
+ _offEndFrame = 27;
+ _okStartFrame = 40;
+ _okEndFrame = 68;
_field140 = 1;
_mailP = nullptr;
- _startFrame5 = 0;
- _endFrame5 = 0;
- _startFrame12 = 224;
- _endFrame12 = 248;
+ _afterReceiveStartFrame = 0;
+ _afterReceiveEndFrame = 0;
+ _trayOutStartFrame = 224;
+ _trayOutEndFrame = 248;
_field158 = 0;
_field15C = 0;
_string2 = "NULL";
@@ -82,16 +82,16 @@ CSuccUBus::CSuccUBus() : CTrueTalkNPC() {
_field184 = 15;
_field188 = 0;
_rect2 = Rect(0, 0, 240, 340);
- _field19C = 0;
+ _sendLost = false;
_soundHandle = -1;
_isChicken = false;
_isFeathers = false;
_field1AC = 0;
_field1B0 = 0;
- _startFrame6 = 303;
- _endFrame6 = 312;
- _startFrame7 = 313;
- _endFrame7 = 325;
+ _emptyStartFrame = 303;
+ _emptyEndFrame = 312;
+ _smokeStartFrame = 313;
+ _smokeEndFrame = 325;
_field1C4 = 326;
_field1C8 = 347;
_field1CC = 348;
@@ -108,23 +108,23 @@ void CSuccUBus::save(SimpleFile *file, int indent) {
file->writeNumberLine(_endFrame8, indent);
file->writeNumberLine(_startFrame11, indent);
file->writeNumberLine(_endFrame11, indent);
- file->writeNumberLine(_startFrame3, indent);
- file->writeNumberLine(_endFrame3, indent);
- file->writeNumberLine(_startFrame4, indent);
- file->writeNumberLine(_endFrame4, indent);
- file->writeNumberLine(_startFrame9, indent);
- file->writeNumberLine(_endFrame9, indent);
- file->writeNumberLine(_startFrame10, indent);
- file->writeNumberLine(_endFrame10, indent);
- file->writeNumberLine(_startFrame2, indent);
- file->writeNumberLine(_endFrame2, indent);
+ file->writeNumberLine(_sendStartFrame, indent);
+ file->writeNumberLine(_sendEndFrame, indent);
+ file->writeNumberLine(_receiveStartFrame, indent);
+ file->writeNumberLine(_receiveEndFrame, indent);
+ file->writeNumberLine(_onStartFrame, indent);
+ file->writeNumberLine(_onEndFrame, indent);
+ file->writeNumberLine(_offStartFrame, indent);
+ file->writeNumberLine(_offEndFrame, indent);
+ file->writeNumberLine(_okStartFrame, indent);
+ file->writeNumberLine(_okEndFrame, indent);
file->writeNumberLine(_field140, indent);
file->writeNumberLine(_v2, indent);
- file->writeNumberLine(_startFrame5, indent);
- file->writeNumberLine(_endFrame5, indent);
- file->writeNumberLine(_startFrame12, indent);
- file->writeNumberLine(_endFrame12, indent);
+ file->writeNumberLine(_afterReceiveStartFrame, indent);
+ file->writeNumberLine(_afterReceiveEndFrame, indent);
+ file->writeNumberLine(_trayOutStartFrame, indent);
+ file->writeNumberLine(_trayOutEndFrame, indent);
file->writeNumberLine(_field158, indent);
file->writeNumberLine(_field15C, indent);
@@ -141,16 +141,16 @@ void CSuccUBus::save(SimpleFile *file, int indent) {
file->writeNumberLine(_rect2.top, indent);
file->writeNumberLine(_rect2.right, indent);
file->writeNumberLine(_rect2.bottom, indent);
- file->writeNumberLine(_field19C, indent);
+ file->writeNumberLine(_sendLost, indent);
file->writeNumberLine(_soundHandle, indent);
file->writeNumberLine(_isChicken, indent);
file->writeNumberLine(_isFeathers, indent);
file->writeNumberLine(_field1AC, indent);
file->writeNumberLine(_field1B0, indent);
- file->writeNumberLine(_startFrame6, indent);
- file->writeNumberLine(_endFrame6, indent);
- file->writeNumberLine(_startFrame7, indent);
- file->writeNumberLine(_endFrame7, indent);
+ file->writeNumberLine(_emptyStartFrame, indent);
+ file->writeNumberLine(_emptyEndFrame, indent);
+ file->writeNumberLine(_smokeStartFrame, indent);
+ file->writeNumberLine(_smokeEndFrame, indent);
file->writeNumberLine(_field1C4, indent);
file->writeNumberLine(_field1C8, indent);
file->writeNumberLine(_field1CC, indent);
@@ -172,23 +172,23 @@ void CSuccUBus::load(SimpleFile *file) {
_endFrame8 = file->readNumber();
_startFrame11 = file->readNumber();
_endFrame11 = file->readNumber();
- _startFrame3 = file->readNumber();
- _endFrame3 = file->readNumber();
- _startFrame4 = file->readNumber();
- _endFrame4 = file->readNumber();
- _startFrame9 = file->readNumber();
- _endFrame9 = file->readNumber();
- _startFrame10 = file->readNumber();
- _endFrame10 = file->readNumber();
- _startFrame2 = file->readNumber();
- _endFrame2 = file->readNumber();
+ _sendStartFrame = file->readNumber();
+ _sendEndFrame = file->readNumber();
+ _receiveStartFrame = file->readNumber();
+ _receiveEndFrame = file->readNumber();
+ _onStartFrame = file->readNumber();
+ _onEndFrame = file->readNumber();
+ _offStartFrame = file->readNumber();
+ _offEndFrame = file->readNumber();
+ _okStartFrame = file->readNumber();
+ _okEndFrame = file->readNumber();
_field140 = file->readNumber();
_v2 = file->readNumber();
- _startFrame5 = file->readNumber();
- _endFrame5 = file->readNumber();
- _startFrame12 = file->readNumber();
- _endFrame12 = file->readNumber();
+ _afterReceiveStartFrame = file->readNumber();
+ _afterReceiveEndFrame = file->readNumber();
+ _trayOutStartFrame = file->readNumber();
+ _trayOutEndFrame = file->readNumber();
_field158 = file->readNumber();
_field15C = file->readNumber();
@@ -205,16 +205,16 @@ void CSuccUBus::load(SimpleFile *file) {
_rect2.top = file->readNumber();
_rect2.right = file->readNumber();
_rect2.bottom = file->readNumber();
- _field19C = file->readNumber();
+ _sendLost = file->readNumber();
_soundHandle = file->readNumber();
_isChicken = file->readNumber();
_isFeathers = file->readNumber();
_field1AC = file->readNumber();
_field1B0 = file->readNumber();
- _startFrame6 = file->readNumber();
- _endFrame6 = file->readNumber();
- _startFrame7 = file->readNumber();
- _endFrame7 = file->readNumber();
+ _emptyStartFrame = file->readNumber();
+ _emptyEndFrame = file->readNumber();
+ _smokeStartFrame = file->readNumber();
+ _smokeEndFrame = file->readNumber();
_field1C4 = file->readNumber();
_field1C8 = file->readNumber();
_field1CC = file->readNumber();
@@ -297,13 +297,13 @@ bool CSuccUBus::SubAcceptCCarryMsg(CSubAcceptCCarryMsg *msg) {
CSUBTransition transMsg;
transMsg.execute(this);
} else {
- if (_startFrame2 >= 0) {
+ if (_okStartFrame >= 0) {
startTalking(this, 70219, findView());
- playMovie(_startFrame2, _endFrame2, 0);
+ playMovie(_okStartFrame, _okEndFrame, 0);
}
- if (_startFrame3 >= 0) {
- playMovie(_startFrame3, _endFrame3, MOVIE_NOTIFY_OBJECT);
+ if (_sendStartFrame >= 0) {
+ playMovie(_sendStartFrame, _sendEndFrame, MOVIE_NOTIFY_OBJECT);
_field158 = 2;
}
@@ -340,8 +340,8 @@ bool CSuccUBus::LeaveViewMsg(CLeaveViewMsg *msg) {
petDisplayMessage(2, BLANK);
if (_startFrame8 >= 0)
loadFrame(_startFrame8);
- else if (!_field15C && _startFrame9 >= 0)
- loadFrame(_startFrame9);
+ else if (!_field15C && _onStartFrame >= 0)
+ loadFrame(_onStartFrame);
petClear();
if (_soundHandle != -1) {
@@ -351,7 +351,7 @@ bool CSuccUBus::LeaveViewMsg(CLeaveViewMsg *msg) {
if (_enabled) {
_enabled = false;
- if (_startFrame10 >= 0)
+ if (_offStartFrame >= 0)
playSound("z#27.wav", 100);
if (_field15C)
@@ -397,14 +397,12 @@ bool CSuccUBus::PETDeliverMsg(CPETDeliverMsg *msg) {
petDisplayMessage(2, NOTHING_IN_SUCCUBUS_TRAY);
} else {
- _field19C = 0;
+ _sendLost = false;
CRoomFlags roomFlags = _roomFlags;
- if (!pet->testRooms5(roomFlags) || getPassengerClass() > 0) {
+ if (!pet->isSuccUBusDest(roomFlags) || pet->getMailDestClass(roomFlags) < getPassengerClass()) {
roomFlags = pet->getSpecialRoomFlags("BilgeRoom");
- _field19C = 1;
- } else {
- pet->getMailDest(roomFlags);
+ _sendLost = true;
}
_isFeathers = mailObject->getName() == "Feathers";
@@ -415,38 +413,40 @@ bool CSuccUBus::PETDeliverMsg(CPETDeliverMsg *msg) {
incTransitions();
if (_isFeathers) {
- _field19C = 0;
- removeMail(destRoomFlags, roomFlags);
+ // The feather has special handling to be rejected by the SuccUBus
+ _sendLost = false;
+ sendMail(destRoomFlags, roomFlags);
pet->phonographAction("");
- if (_startFrame2 >= 0) {
- playMovie(_startFrame2, _endFrame2, 0);
+ if (_okStartFrame >= 0) {
+ playMovie(_okStartFrame, _okEndFrame, 0);
startTalking(this, 230022, findView());
}
_field158 = 1;
- if (_startFrame3 >= 0)
- playMovie(_startFrame3, _endFrame3, 0);
+ if (_sendStartFrame >= 0)
+ playMovie(_sendStartFrame, _sendEndFrame, 0);
- if (_startFrame4 >= 0) {
+ if (_receiveStartFrame >= 0) {
_mailP = mailObject;
- playMovie(_startFrame4, _endFrame4, MOVIE_NOTIFY_OBJECT);
+ playMovie(_receiveStartFrame, _receiveEndFrame, MOVIE_NOTIFY_OBJECT);
}
- if (_startFrame5 >= 0) {
- playMovie(_startFrame5, _endFrame5, 0);
+ if (_afterReceiveStartFrame >= 0) {
+ playMovie(_afterReceiveStartFrame, _afterReceiveEndFrame, 0);
}
} else {
- removeMail(pet->getRoomFlags(), roomFlags);
+ // Send the mail to the destination
+ sendMail(pet->getRoomFlags(), roomFlags);
pet->phonographAction("");
- if (_startFrame2 >= 0) {
- playMovie(_startFrame2, _endFrame2, 0);
+ if (_okStartFrame >= 0) {
+ playMovie(_okStartFrame, _okEndFrame, 0);
startTalking(this, 230012, findView());
}
- if (_startFrame3 >= 0)
- playMovie(_startFrame3, _endFrame3, MOVIE_NOTIFY_OBJECT);
+ if (_sendStartFrame >= 0)
+ playMovie(_sendStartFrame, _sendEndFrame, MOVIE_NOTIFY_OBJECT);
}
}
@@ -465,6 +465,7 @@ bool CSuccUBus::PETReceiveMsg(CPETReceiveMsg *msg) {
uint petRoomFlags = pet->getRoomFlags();
if (mailExists(petRoomFlags)) {
+ // There's already something to send in the tray, so you can't receive
switch (getRandomNumber(2)) {
case 0:
startTalking(this, 70080, findView());
@@ -482,24 +483,26 @@ bool CSuccUBus::PETReceiveMsg(CPETReceiveMsg *msg) {
CGameObject *mailObject = findMailByFlags(
_v3 && compareRoomNameTo("Titania") ? 3 : _field140, petRoomFlags);
if (!mailObject) {
+ // No mail for this SuccUBus
if (getRandomNumber(1) == 0) {
startTalking(this, 70104, findView());
} else {
startTalking(this, 70105, findView());
}
- playMovie(_startFrame6, _endFrame6, 0);
- playMovie(_startFrame7, _endFrame7, 0);
+ playMovie(_emptyStartFrame, _emptyEndFrame, 0);
+ playMovie(_smokeStartFrame, _smokeEndFrame, 0);
petDisplayMessage(2, NOTHING_TO_DELIVER);
} else {
+ // Receive the mail addressed to this SuccUBus
_mailP = mailObject;
startTalking(this, 230004, findView());
- if (_startFrame4 >= 0) {
+ if (_receiveStartFrame >= 0) {
_field158 = 1;
_field1D8 = 1;
incTransitions();
- playMovie(_startFrame4, _endFrame4, MOVIE_NOTIFY_OBJECT);
+ playMovie(_receiveStartFrame, _receiveEndFrame, MOVIE_NOTIFY_OBJECT);
}
}
}
@@ -511,7 +514,7 @@ bool CSuccUBus::MovieEndMsg(CMovieEndMsg *msg) {
CPetControl *pet = getPetControl();
uint petRoomFlags = pet ? pet->getRoomFlags() : 0;
- if (msg->_endFrame == _endFrame10) {
+ if (msg->_endFrame == _offEndFrame) {
if (_startFrame11 >= 0)
playSound("z#30.wav", 100);
@@ -524,7 +527,7 @@ bool CSuccUBus::MovieEndMsg(CMovieEndMsg *msg) {
}
}
- if (msg->_endFrame == _endFrame9) {
+ if (msg->_endFrame == _onEndFrame) {
bool flag = false;
if (pet && !mailExists(petRoomFlags)) {
@@ -585,14 +588,14 @@ bool CSuccUBus::MovieEndMsg(CMovieEndMsg *msg) {
}
}
- if (msg->_endFrame == _endFrame3) {
+ if (msg->_endFrame == _sendEndFrame) {
if (_field158 == 1) {
startTalking(this, 230022, findView());
} else if (_field158 == 2) {
startTalking(this, 230017, findView());
- } else if (_field19C) {
+ } else if (_sendLost) {
startTalking(this, 230019, findView());
- _field19C = 0;
+ _sendLost = false;
} else if (_isChicken) {
startTalking(this, 230018, findView());
_isChicken = false;
@@ -609,7 +612,7 @@ bool CSuccUBus::MovieEndMsg(CMovieEndMsg *msg) {
transMsg.execute(this);
}
- if (msg->_endFrame == _endFrame4) {
+ if (msg->_endFrame == _receiveEndFrame) {
// SuccUBus disgorged mail
if (pet && _mailP) {
_mailP->setMailDest(petRoomFlags);
@@ -661,8 +664,8 @@ bool CSuccUBus::TurnOn(CTurnOn *msg) {
playSound("z#30.wav", 100);
}
- if (_startFrame9 >= 0) {
- playMovie(_startFrame9, _endFrame9, MOVIE_NOTIFY_OBJECT);
+ if (_onStartFrame >= 0) {
+ playMovie(_onStartFrame, _onEndFrame, MOVIE_NOTIFY_OBJECT);
playSound("z#26.wav", 100);
}
@@ -689,9 +692,9 @@ bool CSuccUBus::TurnOff(CTurnOff *msg) {
_soundHandle = -1;
}
- if (_startFrame10 >= 0) {
+ if (_offStartFrame >= 0) {
playSound("z#27.wav", 100);
- playMovie(_startFrame10, _endFrame10, MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE);
+ playMovie(_offStartFrame, _offEndFrame, MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE);
}
if (!_field15C && _startFrame11 >= 0)