aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/game/long_stick_dispenser.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2016-08-24 18:42:32 -0400
committerPaul Gilbert2016-08-24 18:42:32 -0400
commite733f8113f69f37b14e8a2447f5e7dce89a1670d (patch)
tree085e260735f91cedc9a6572baad64e51ec4b6400 /engines/titanic/game/long_stick_dispenser.cpp
parentfaf52df0653006ad8107e91bb24bc747e4b01e29 (diff)
downloadscummvm-rg350-e733f8113f69f37b14e8a2447f5e7dce89a1670d.tar.gz
scummvm-rg350-e733f8113f69f37b14e8a2447f5e7dce89a1670d.tar.bz2
scummvm-rg350-e733f8113f69f37b14e8a2447f5e7dce89a1670d.zip
TITANIC: Implemented more game classes
Diffstat (limited to 'engines/titanic/game/long_stick_dispenser.cpp')
-rw-r--r--engines/titanic/game/long_stick_dispenser.cpp99
1 files changed, 99 insertions, 0 deletions
diff --git a/engines/titanic/game/long_stick_dispenser.cpp b/engines/titanic/game/long_stick_dispenser.cpp
index cb562ec3ca..08a29f2e4b 100644
--- a/engines/titanic/game/long_stick_dispenser.cpp
+++ b/engines/titanic/game/long_stick_dispenser.cpp
@@ -21,9 +21,21 @@
*/
#include "titanic/game/long_stick_dispenser.h"
+#include "titanic/core/project_item.h"
namespace Titanic {
+BEGIN_MESSAGE_MAP(CLongStickDispenser, CGameObject)
+ ON_MESSAGE(PuzzleSolvedMsg)
+ ON_MESSAGE(MovieEndMsg)
+ ON_MESSAGE(VisibleMsg)
+ ON_MESSAGE(EnterRoomMsg)
+ ON_MESSAGE(MouseButtonDownMsg)
+ ON_MESSAGE(LeaveViewMsg)
+ ON_MESSAGE(EnterViewMsg)
+ ON_MESSAGE(MouseDragStartMsg)
+END_MESSAGE_MAP()
+
void CLongStickDispenser::save(SimpleFile *file, int indent) {
file->writeNumberLine(1, indent);
file->writeNumberLine(_fieldBC, indent);
@@ -42,10 +54,97 @@ void CLongStickDispenser::load(SimpleFile *file) {
CGameObject::load(file);
}
+bool CLongStickDispenser::PuzzleSolvedMsg(CPuzzleSolvedMsg *msg) {
+ if (!_fieldBC && !_fieldC4 && !_fieldC0) {
+ CStatusChangeMsg statusMsg;
+ statusMsg.execute("ShatterGlass");
+ _fieldC0 = 1;
+ loadFrame(19);
+ } else if (_fieldC0) {
+ playSound("z#63.wav");
+ petDisplayMessage(1, "'This glass is totally and utterly unbreakable.");
+ }
+
+ return true;
+}
+
+bool CLongStickDispenser::MovieEndMsg(CMovieEndMsg *msg) {
+ CPuzzleSolvedMsg puzzleMsg;
+ puzzleMsg.execute("LongStick");
+ _fieldC0 = 1;
+ return true;
+}
+
+bool CLongStickDispenser::VisibleMsg(CVisibleMsg *msg) {
+ setVisible(msg->_visible);
+ return true;
+}
+
bool CLongStickDispenser::EnterRoomMsg(CEnterRoomMsg *msg) {
_fieldC0 = 0;
_fieldC4 = 1;
return true;
}
+bool CLongStickDispenser::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
+ if (!_fieldC0) {
+ playSound("z#62.wav");
+
+ switch (_fieldBC) {
+ case 0:
+ petDisplayMessage(1, "For emergency long stick, smash glass.");
+ break;
+ case 1:
+ petDisplayMessage(1, "This dispenser has suddenly been fitted with unbreakable glass "
+ "to prevent unseemly hoarding of sticks.");
+ break;
+ default:
+ break;
+ }
+ }
+
+ return true;
+}
+
+bool CLongStickDispenser::LeaveViewMsg(CLeaveViewMsg *msg) {
+ if (_fieldC0 == 1) {
+ if (_fieldC4) {
+ playMovie(19, 38, MOVIE_GAMESTATE);
+ } else {
+ playMovie(0, 18, MOVIE_GAMESTATE);
+ _fieldBC = 1;
+ }
+
+ _fieldC4 = 1;
+ _fieldC0 = 0;
+ }
+
+ return true;
+}
+
+bool CLongStickDispenser::EnterViewMsg(CEnterViewMsg *msg) {
+ setVisible(true);
+ loadFrame(38);
+ _cursorId = CURSOR_HAND;
+ return true;
+}
+
+bool CLongStickDispenser::MouseDragStartMsg(CMouseDragStartMsg *msg) {
+ if (!checkStartDragging(msg)) {
+ return false;
+ } else if (_fieldC0 == 1 && _fieldC4 == 1) {
+ CVisibleMsg visibleMsg(true);
+ visibleMsg.execute("LongStick");
+ CPassOnDragStartMsg dragMsg(msg->_mousePos, 1);
+ dragMsg.execute("LongStick");
+
+ msg->_dragItem = getRoot()->findByName("LongStick");
+ loadFrame(0);
+ _fieldC4 = 0;
+ _cursorId = CURSOR_ARROW;
+ }
+
+ return true;
+}
+
} // End of namespace Titanic