aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/titanic/npcs/parrot.cpp31
-rw-r--r--engines/titanic/npcs/parrot.h5
2 files changed, 20 insertions, 16 deletions
diff --git a/engines/titanic/npcs/parrot.cpp b/engines/titanic/npcs/parrot.cpp
index a0f80ca69b..d1ca4781b1 100644
--- a/engines/titanic/npcs/parrot.cpp
+++ b/engines/titanic/npcs/parrot.cpp
@@ -122,12 +122,8 @@ bool CParrot::ActMsg(CActMsg *msg) {
if (msg->_action == "Chicken") {
// Nothing to do
} else if (msg->_action == "CarryParrotLeftView") {
- if (!_takeOff) {
- _eatingChicken = false;
- CStatusChangeMsg statusMsg;
- statusMsg._newStatus = 1;
- statusMsg.execute("PerchCoreHolder");
- }
+ if (!_takeOff)
+ setEatingChicken(false);
} else if (msg->_action == "StartChickenDrag") {
if (_state == PARROT_IN_CAGE) {
stopMovie();
@@ -258,11 +254,7 @@ bool CParrot::MovieEndMsg(CMovieEndMsg *msg) {
playClip("Eat Chicken 2", MOVIE_NOTIFY_OBJECT);
if (chicken) {
- _eatingChicken = true;
-
- CStatusChangeMsg statusMsg;
- statusMsg._newStatus = 0;
- statusMsg.execute("PerchCoreHolder");
+ setEatingChicken(true);
CTrueTalkTriggerActionMsg actionMsg;
actionMsg._action = 280266;
@@ -280,11 +272,7 @@ bool CParrot::MovieEndMsg(CMovieEndMsg *msg) {
if (clipExistsByEnd("Eat Chicken 2", msg->_endFrame)) {
// Parrot has finished eating Chicken
- _eatingChicken = false;
-
- CStatusChangeMsg statusMsg;
- statusMsg._newStatus = 1;
- statusMsg.execute("PerchCoreHolder");
+ setEatingChicken(false);
if (_takeOff) {
// Perch has been taken, so take off
@@ -587,6 +575,10 @@ bool CParrot::FrameMsg(CFrameMsg *msg) {
_npcFlags |= NPCFLAG_MOVING | NPCFLAG_MOVE_START;
if (_newXc >= xp) {
+ // WORKAROUND: Original did not properly reset the eating chicken
+ // flag when the player turns away from the cage
+ setEatingChicken(false);
+
setPosition(Point(_bounds.left + 30, _bounds.top));
_npcFlags |= NPCFLAG_MOVE_RIGHT;
playClip("Walk Right Intro", MOVIE_NOTIFY_OBJECT);
@@ -708,6 +700,7 @@ bool CParrot::PreEnterViewMsg(CPreEnterViewMsg *msg) {
}
bool CParrot::PanningAwayFromParrotMsg(CPanningAwayFromParrotMsg *msg) {
+ warning("PAN");
if (_state != PARROT_IN_CAGE) {
CActMsg actMsg("PanAwayFromParrot");
actMsg.execute(msg->_target);
@@ -744,5 +737,11 @@ bool CParrot::TrueTalkNotifySpeechEndedMsg(CTrueTalkNotifySpeechEndedMsg *msg) {
return CTrueTalkNPC::TrueTalkNotifySpeechEndedMsg(msg);
}
+void CParrot::setEatingChicken(bool eating) {
+ _eatingChicken = eating;
+ CStatusChangeMsg statusMsg;
+ statusMsg._newStatus = eating ? 0 : 1;
+ statusMsg.execute("PerchCoreHolder");
+}
} // End of namespace Titanic
diff --git a/engines/titanic/npcs/parrot.h b/engines/titanic/npcs/parrot.h
index c3ba5a5fd6..6fc4d6a182 100644
--- a/engines/titanic/npcs/parrot.h
+++ b/engines/titanic/npcs/parrot.h
@@ -69,6 +69,11 @@ private:
bool _triedEatChicken;
int _eatOffsetX;
CMovePlayerTo *_panTarget;
+private:
+ /**
+ * Called for the Parrot to start or finish eating
+ */
+ void setEatingChicken(bool eating);
public:
CLASSDEF;
CParrot();