[Scummvm-git-logs] scummvm master -> 996811181063d1920454e0e09115b49e33bc8f5d
dreammaster
dreammaster at scummvm.org
Sat Aug 27 04:16:06 CEST 2016
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
9968111810 TITANIC: Implemented other parrot related game classes
Commit: 996811181063d1920454e0e09115b49e33bc8f5d
https://github.com/scummvm/scummvm/commit/996811181063d1920454e0e09115b49e33bc8f5d
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2016-08-26T22:15:58-04:00
Commit Message:
TITANIC: Implemented other parrot related game classes
Changed paths:
engines/titanic/carry/perch.cpp
engines/titanic/carry/perch.h
engines/titanic/game/parrot/parrot_lobby_view_object.cpp
engines/titanic/game/parrot/parrot_lobby_view_object.h
engines/titanic/game/parrot/parrot_loser.cpp
engines/titanic/game/parrot/parrot_loser.h
engines/titanic/game/parrot/parrot_nut_bowl_actor.cpp
engines/titanic/game/parrot/parrot_nut_bowl_actor.h
engines/titanic/game/parrot/parrot_nut_eater.cpp
engines/titanic/game/parrot/parrot_nut_eater.h
engines/titanic/game/parrot/parrot_perch_holder.cpp
engines/titanic/game/parrot/parrot_perch_holder.h
engines/titanic/game/parrot/parrot_trigger.cpp
engines/titanic/game/parrot/parrot_trigger.h
engines/titanic/messages/messages.h
diff --git a/engines/titanic/carry/perch.cpp b/engines/titanic/carry/perch.cpp
index 281b3fc..4f0e76b 100644
--- a/engines/titanic/carry/perch.cpp
+++ b/engines/titanic/carry/perch.cpp
@@ -24,6 +24,10 @@
namespace Titanic {
+BEGIN_MESSAGE_MAP(CPerch, CCentralCore)
+ ON_MESSAGE(UseWithOtherMsg)
+END_MESSAGE_MAP()
+
void CPerch::save(SimpleFile *file, int indent) {
file->writeNumberLine(1, indent);
CCentralCore::save(file, indent);
@@ -34,4 +38,13 @@ void CPerch::load(SimpleFile *file) {
CCentralCore::load(file);
}
+bool CPerch::UseWithOtherMsg(CUseWithOtherMsg *msg) {
+ if (msg->_other->isEquals("SpeechCentre")) {
+ CShowTextMsg textMsg("This does not reach.");
+ textMsg.execute("PET");
+ }
+
+ return CCentralCore::UseWithOtherMsg(msg);
+}
+
} // End of namespace Titanic
diff --git a/engines/titanic/carry/perch.h b/engines/titanic/carry/perch.h
index d23868d..8941c8e 100644
--- a/engines/titanic/carry/perch.h
+++ b/engines/titanic/carry/perch.h
@@ -28,6 +28,8 @@
namespace Titanic {
class CPerch : public CCentralCore {
+ DECLARE_MESSAGE_MAP;
+ bool UseWithOtherMsg(CUseWithOtherMsg *msg);
public:
CLASSDEF;
diff --git a/engines/titanic/game/parrot/parrot_lobby_view_object.cpp b/engines/titanic/game/parrot/parrot_lobby_view_object.cpp
index ae39803..1151325 100644
--- a/engines/titanic/game/parrot/parrot_lobby_view_object.cpp
+++ b/engines/titanic/game/parrot/parrot_lobby_view_object.cpp
@@ -24,16 +24,28 @@
namespace Titanic {
+BEGIN_MESSAGE_MAP(CParrotLobbyViewObject, CParrotLobbyObject)
+ ON_MESSAGE(ActMsg)
+END_MESSAGE_MAP()
+
void CParrotLobbyViewObject::save(SimpleFile *file, int indent) {
file->writeNumberLine(1, indent);
- file->writeNumberLine(_fieldBC, indent);
+ file->writeNumberLine(_flag, indent);
CParrotLobbyObject::save(file, indent);
}
void CParrotLobbyViewObject::load(SimpleFile *file) {
file->readNumber();
- _fieldBC = file->readNumber();
+ _flag = file->readNumber();
CParrotLobbyObject::load(file);
}
+bool CParrotLobbyViewObject::ActMsg(CActMsg *msg) {
+ if (msg->_action != "Refresh")
+ return false;
+
+ setVisible(_flag ? _haveParrot : _haveStick);
+ return true;
+}
+
} // End of namespace Titanic
diff --git a/engines/titanic/game/parrot/parrot_lobby_view_object.h b/engines/titanic/game/parrot/parrot_lobby_view_object.h
index 3179bb9..484d709 100644
--- a/engines/titanic/game/parrot/parrot_lobby_view_object.h
+++ b/engines/titanic/game/parrot/parrot_lobby_view_object.h
@@ -28,11 +28,13 @@
namespace Titanic {
class CParrotLobbyViewObject : public CParrotLobbyObject {
+ DECLARE_MESSAGE_MAP;
+ bool ActMsg(CActMsg *msg);
public:
- int _fieldBC;
+ bool _flag;
public:
CLASSDEF;
- CParrotLobbyViewObject() : CParrotLobbyObject(), _fieldBC(1) {}
+ CParrotLobbyViewObject() : CParrotLobbyObject(), _flag(true) {}
/**
* Save the data for the class to file
diff --git a/engines/titanic/game/parrot/parrot_loser.cpp b/engines/titanic/game/parrot/parrot_loser.cpp
index 6e23ef8..dc854ee 100644
--- a/engines/titanic/game/parrot/parrot_loser.cpp
+++ b/engines/titanic/game/parrot/parrot_loser.cpp
@@ -24,6 +24,10 @@
namespace Titanic {
+BEGIN_MESSAGE_MAP(CParrotLoser, CGameObject)
+ ON_MESSAGE(LeaveRoomMsg)
+END_MESSAGE_MAP()
+
void CParrotLoser::save(SimpleFile *file, int indent) {
file->writeNumberLine(1, indent);
CGameObject::save(file, indent);
@@ -34,4 +38,10 @@ void CParrotLoser::load(SimpleFile *file) {
CGameObject::load(file);
}
+bool CParrotLoser::LeaveRoomMsg(CLeaveRoomMsg *msg) {
+ CActMsg actMsg("FreeParrot");
+ actMsg.execute("CarryParrot");
+ return true;
+}
+
} // End of namespace Titanic
diff --git a/engines/titanic/game/parrot/parrot_loser.h b/engines/titanic/game/parrot/parrot_loser.h
index 819fd66..e03bfb0 100644
--- a/engines/titanic/game/parrot/parrot_loser.h
+++ b/engines/titanic/game/parrot/parrot_loser.h
@@ -28,6 +28,8 @@
namespace Titanic {
class CParrotLoser : public CGameObject {
+ DECLARE_MESSAGE_MAP;
+ bool LeaveRoomMsg(CLeaveRoomMsg *msg);
public:
CLASSDEF;
diff --git a/engines/titanic/game/parrot/parrot_nut_bowl_actor.cpp b/engines/titanic/game/parrot/parrot_nut_bowl_actor.cpp
index c83d66c..9dfc866 100644
--- a/engines/titanic/game/parrot/parrot_nut_bowl_actor.cpp
+++ b/engines/titanic/game/parrot/parrot_nut_bowl_actor.cpp
@@ -21,27 +21,95 @@
*/
#include "titanic/game/parrot/parrot_nut_bowl_actor.h"
+#include "titanic/core/room_item.h"
namespace Titanic {
+BEGIN_MESSAGE_MAP(CParrotNutBowlActor, CGameObject)
+ ON_MESSAGE(MouseButtonUpMsg)
+ ON_MESSAGE(BowlStateChangeMsg)
+ ON_MESSAGE(IsEarBowlPuzzleDone)
+ ON_MESSAGE(MouseButtonDownMsg)
+ ON_MESSAGE(ReplaceBowlAndNutsMsg)
+ ON_MESSAGE(LeaveViewMsg)
+ ON_MESSAGE(NutPuzzleMsg)
+END_MESSAGE_MAP()
+
CParrotNutBowlActor::CParrotNutBowlActor() : CGameObject(),
- _value1(0), _value2(0) {
+ _puzzleDone(0), _state(0) {
}
void CParrotNutBowlActor::save(SimpleFile *file, int indent) {
file->writeNumberLine(1, indent);
- file->writeNumberLine(_value1, indent);
- file->writeNumberLine(_value2, indent);
+ file->writeNumberLine(_puzzleDone, indent);
+ file->writeNumberLine(_state, indent);
CGameObject::save(file, indent);
}
void CParrotNutBowlActor::load(SimpleFile *file) {
file->readNumber();
- _value1 = file->readNumber();
- _value2 = file->readNumber();
+ _puzzleDone = file->readNumber();
+ _state = file->readNumber();
CGameObject::load(file);
}
+bool CParrotNutBowlActor::MouseButtonUpMsg(CMouseButtonUpMsg *msg) {
+ if (!_state) {
+ CActMsg actMsg("Jiggle");
+ actMsg.execute("BowlNutsRustler");
+ }
+
+ return true;
+}
+
+bool CParrotNutBowlActor::BowlStateChangeMsg(CBowlStateChangeMsg *msg) {
+ _state = msg->_state;
+ if (msg->_state == 3) {
+ if (!_puzzleDone) {
+ CReplaceBowlAndNutsMsg replaceMsg;
+ replaceMsg.execute(findRoom(), nullptr, MSGFLAG_SCAN);
+ playSound("z#47.wav");
+ }
+
+ _puzzleDone = true;
+ }
+
+ return true;
+}
+
+bool CParrotNutBowlActor::CParrotNutBowlActor::IsEarBowlPuzzleDone(CIsEarBowlPuzzleDone *msg) {
+ msg->_value = _puzzleDone;
+ return true;
+}
+
+bool CParrotNutBowlActor::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
+ return true;
+}
+
+bool CParrotNutBowlActor::ReplaceBowlAndNutsMsg(CReplaceBowlAndNutsMsg *msg) {
+ if (!_puzzleDone)
+ _state = 0;
+ return true;
+}
+
+bool CParrotNutBowlActor::LeaveViewMsg(CLeaveViewMsg *msg) {
+ if (!_puzzleDone && _state) {
+ CReplaceBowlAndNutsMsg replaceMsg;
+ replaceMsg.execute(findRoom(), nullptr, MSGFLAG_SCAN);
+ }
+
+ return true;
+}
+
+bool CParrotNutBowlActor::NutPuzzleMsg(CNutPuzzleMsg *msg) {
+ if (msg->_value == "NutsGone")
+ _state = 1;
+ else if (msg->_value == "BowlUnlocked")
+ _state = 2;
+
+ return true;
+}
+
} // End of namespace Titanic
diff --git a/engines/titanic/game/parrot/parrot_nut_bowl_actor.h b/engines/titanic/game/parrot/parrot_nut_bowl_actor.h
index d8395bb..b228c0e 100644
--- a/engines/titanic/game/parrot/parrot_nut_bowl_actor.h
+++ b/engines/titanic/game/parrot/parrot_nut_bowl_actor.h
@@ -28,8 +28,17 @@
namespace Titanic {
class CParrotNutBowlActor : public CGameObject {
+ DECLARE_MESSAGE_MAP;
+ bool MouseButtonUpMsg(CMouseButtonUpMsg *msg);
+ bool BowlStateChangeMsg(CBowlStateChangeMsg *msg);
+ bool IsEarBowlPuzzleDone(CIsEarBowlPuzzleDone *msg);
+ bool MouseButtonDownMsg(CMouseButtonDownMsg *msg);
+ bool ReplaceBowlAndNutsMsg(CReplaceBowlAndNutsMsg *msg);
+ bool LeaveViewMsg(CLeaveViewMsg *msg);
+ bool NutPuzzleMsg(CNutPuzzleMsg *msg);
public:
- int _value1, _value2;
+ bool _puzzleDone;
+ int _state;
public:
CLASSDEF;
CParrotNutBowlActor();
diff --git a/engines/titanic/game/parrot/parrot_nut_eater.cpp b/engines/titanic/game/parrot/parrot_nut_eater.cpp
index 309b379..751da93 100644
--- a/engines/titanic/game/parrot/parrot_nut_eater.cpp
+++ b/engines/titanic/game/parrot/parrot_nut_eater.cpp
@@ -21,9 +21,17 @@
*/
#include "titanic/game/parrot/parrot_nut_eater.h"
+#include "titanic/core/room_item.h"
namespace Titanic {
+BEGIN_MESSAGE_MAP(CParrotNutEater, CGameObject)
+ ON_MESSAGE(MovieEndMsg)
+ ON_MESSAGE(ReplaceBowlAndNutsMsg)
+ ON_MESSAGE(NutPuzzleMsg)
+ ON_MESSAGE(MovieFrameMsg)
+END_MESSAGE_MAP()
+
CParrotNutEater::CParrotNutEater() : CGameObject(), _fieldBC(0),
_fieldC0(69), _fieldC4(132), _fieldC8(0), _fieldCC(68) {
}
@@ -42,4 +50,48 @@ void CParrotNutEater::load(SimpleFile *file) {
CGameObject::load(file);
}
+bool CParrotNutEater::MovieEndMsg(CMovieEndMsg *msg) {
+ setVisible(false);
+ CNutPuzzleMsg nutMsg("NutsGone");
+ nutMsg.execute(getRoom(), nullptr, MSGFLAG_SCAN);
+
+ playSound("z#47.wav");
+ return true;
+}
+
+bool CParrotNutEater::ReplaceBowlAndNutsMsg(CReplaceBowlAndNutsMsg *msg) {
+ setVisible(false);
+ return true;
+}
+
+bool CParrotNutEater::NutPuzzleMsg(CNutPuzzleMsg *msg) {
+ if (msg->_value == "Jiggle") {
+ playMovie(MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE);
+ movieEvent(68);
+ movieEvent(132);
+ playSound("z#215.wav");
+
+ CTrueTalkTriggerActionMsg triggerMsg;
+ triggerMsg._param1 = triggerMsg._param2 = 0;
+ triggerMsg.execute("PerchedParrot");
+ }
+
+ return true;
+}
+
+bool CParrotNutEater::MovieFrameMsg(CMovieFrameMsg *msg) {
+ switch (msg->_frameNumber) {
+ case 68:
+ playSound("z#214.wav");
+ break;
+ case 132:
+ playSound("z#216.wav");
+ break;
+ default:
+ break;
+ }
+
+ return true;
+}
+
} // End of namespace Titanic
diff --git a/engines/titanic/game/parrot/parrot_nut_eater.h b/engines/titanic/game/parrot/parrot_nut_eater.h
index 5dcb01c..e09ad63 100644
--- a/engines/titanic/game/parrot/parrot_nut_eater.h
+++ b/engines/titanic/game/parrot/parrot_nut_eater.h
@@ -28,6 +28,11 @@
namespace Titanic {
class CParrotNutEater : public CGameObject {
+ DECLARE_MESSAGE_MAP;
+ bool MovieEndMsg(CMovieEndMsg *msg);
+ bool ReplaceBowlAndNutsMsg(CReplaceBowlAndNutsMsg *msg);
+ bool NutPuzzleMsg(CNutPuzzleMsg *msg);
+ bool MovieFrameMsg(CMovieFrameMsg *msg);
public:
int _fieldBC;
int _fieldC0;
diff --git a/engines/titanic/game/parrot/parrot_perch_holder.cpp b/engines/titanic/game/parrot/parrot_perch_holder.cpp
index dd85239..d594446 100644
--- a/engines/titanic/game/parrot/parrot_perch_holder.cpp
+++ b/engines/titanic/game/parrot/parrot_perch_holder.cpp
@@ -21,9 +21,19 @@
*/
#include "titanic/game/parrot/parrot_perch_holder.h"
+#include "titanic/game/cage.h"
+#include "titanic/core/project_item.h"
+#include "titanic/npcs/parrot.h"
namespace Titanic {
+BEGIN_MESSAGE_MAP(CParrotPerchHolder, CMultiDropTarget)
+ ON_MESSAGE(MouseButtonDownMsg)
+ ON_MESSAGE(StatusChangeMsg)
+ ON_MESSAGE(DropObjectMsg)
+ ON_MESSAGE(ActMsg)
+END_MESSAGE_MAP()
+
void CParrotPerchHolder::save(SimpleFile *file, int indent) {
file->writeNumberLine(1, indent);
CMultiDropTarget::save(file, indent);
@@ -34,4 +44,39 @@ void CParrotPerchHolder::load(SimpleFile *file) {
CMultiDropTarget::load(file);
}
+bool CParrotPerchHolder::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
+ if (CParrot::_v1) {
+ if (CCage::_open) {
+ petDisplayMessage("You cannot take this because the cage is locked shut.");
+ } else if (!CParrot::_v4) {
+ CTrueTalkTriggerActionMsg triggerMsg(280252, 0, 0);
+ triggerMsg.execute(getRoot(), CParrot::_type,
+ MSGFLAG_CLASS_DEF | MSGFLAG_BREAK_IF_HANDLED | MSGFLAG_SCAN);
+ }
+ }
+
+ return true;
+}
+
+bool CParrotPerchHolder::StatusChangeMsg(CStatusChangeMsg *msg) {
+ _fieldF4 = msg->_newStatus;
+ return true;
+}
+
+bool CParrotPerchHolder::DropObjectMsg(CDropObjectMsg *msg) {
+ if (CCage::_open)
+ return false;
+ else
+ return CMultiDropTarget::DropObjectMsg(msg);
+}
+
+bool CParrotPerchHolder::ActMsg(CActMsg *msg) {
+ if (msg->_action == "FlashCore") {
+ playMovie(2, 2, 0);
+ playMovie(1, 1, 0);
+ }
+
+ return true;
+}
+
} // End of namespace Titanic
diff --git a/engines/titanic/game/parrot/parrot_perch_holder.h b/engines/titanic/game/parrot/parrot_perch_holder.h
index ff618f0..c1fe243 100644
--- a/engines/titanic/game/parrot/parrot_perch_holder.h
+++ b/engines/titanic/game/parrot/parrot_perch_holder.h
@@ -28,6 +28,11 @@
namespace Titanic {
class CParrotPerchHolder : public CMultiDropTarget {
+ DECLARE_MESSAGE_MAP;
+ bool MouseButtonDownMsg(CMouseButtonDownMsg *msg);
+ bool StatusChangeMsg(CStatusChangeMsg *msg);
+ bool DropObjectMsg(CDropObjectMsg *msg);
+ bool ActMsg(CActMsg *msg);
public:
CLASSDEF;
diff --git a/engines/titanic/game/parrot/parrot_trigger.cpp b/engines/titanic/game/parrot/parrot_trigger.cpp
index 36e99ad..b7287eb 100644
--- a/engines/titanic/game/parrot/parrot_trigger.cpp
+++ b/engines/titanic/game/parrot/parrot_trigger.cpp
@@ -21,9 +21,15 @@
*/
#include "titanic/game/parrot/parrot_trigger.h"
+#include "titanic/npcs/parrot.h"
+#include "titanic/core/project_item.h"
namespace Titanic {
+BEGIN_MESSAGE_MAP(CParrotTrigger, CGameObject)
+ ON_MESSAGE(MouseButtonDownMsg)
+END_MESSAGE_MAP()
+
void CParrotTrigger::save(SimpleFile *file, int indent) {
file->writeNumberLine(1, indent);
file->writeNumberLine(_value, indent);
@@ -36,4 +42,11 @@ void CParrotTrigger::load(SimpleFile *file) {
CGameObject::load(file);
}
+bool CParrotTrigger::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
+ CTrueTalkTriggerActionMsg triggerMsg(_value, 0, 0);
+ triggerMsg.execute(getRoot(), CParrot::_type,
+ MSGFLAG_CLASS_DEF | MSGFLAG_BREAK_IF_HANDLED | MSGFLAG_SCAN);
+ return true;
+}
+
} // End of namespace Titanic
diff --git a/engines/titanic/game/parrot/parrot_trigger.h b/engines/titanic/game/parrot/parrot_trigger.h
index 28a1663..6fba77b 100644
--- a/engines/titanic/game/parrot/parrot_trigger.h
+++ b/engines/titanic/game/parrot/parrot_trigger.h
@@ -28,6 +28,8 @@
namespace Titanic {
class CParrotTrigger : public CGameObject {
+ DECLARE_MESSAGE_MAP;
+ bool MouseButtonDownMsg(CMouseButtonDownMsg *msg);
public:
int _value;
public:
diff --git a/engines/titanic/messages/messages.h b/engines/titanic/messages/messages.h
index afe1c2c..dd4e381 100644
--- a/engines/titanic/messages/messages.h
+++ b/engines/titanic/messages/messages.h
@@ -189,7 +189,7 @@ MESSAGE1(CAnimateMaitreDMsg, int, value, 0);
MESSAGE1(CArboretumGateMsg, int, value, 0);
MESSAGE0(CArmPickedUpFromTableMsg);
MESSAGE0(CBodyInBilgeRoomMsg);
-MESSAGE1(CBowlStateChangeMsg, int, value, 0);
+MESSAGE1(CBowlStateChangeMsg, int, state, 0);
MESSAGE2(CCarryObjectArrivedMsg, CString, strValue, "", int, numValue, 0);
MESSAGE2(CChangeMusicMsg, CString, filename, "", int, flags, 0);
MESSAGE1(CChangeSeasonMsg, CString, season, "Summer");
More information about the Scummvm-git-logs
mailing list