aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/game/hammer_dispensor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/titanic/game/hammer_dispensor.cpp')
-rw-r--r--engines/titanic/game/hammer_dispensor.cpp61
1 files changed, 58 insertions, 3 deletions
diff --git a/engines/titanic/game/hammer_dispensor.cpp b/engines/titanic/game/hammer_dispensor.cpp
index 440fe1bc7b..bc6a3d5ad8 100644
--- a/engines/titanic/game/hammer_dispensor.cpp
+++ b/engines/titanic/game/hammer_dispensor.cpp
@@ -24,15 +24,22 @@
namespace Titanic {
+BEGIN_MESSAGE_MAP(CHammerDispensor, CBackground)
+ ON_MESSAGE(ActMsg)
+ ON_MESSAGE(EnterViewMsg)
+ ON_MESSAGE(LeaveViewMsg)
+ ON_MESSAGE(MovieEndMsg)
+END_MESSAGE_MAP()
+
CHammerDispensor::CHammerDispensor() : CBackground(),
- _fieldE0(0), _fieldE4(0), _fieldE8(0) {
+ _fieldE0(false), _fieldE4(true), _state(0) {
}
void CHammerDispensor::save(SimpleFile *file, int indent) {
file->writeNumberLine(1, indent);
file->writeNumberLine(_fieldE0, indent);
file->writeNumberLine(_fieldE4, indent);
- file->writeNumberLine(_fieldE8, indent);
+ file->writeNumberLine(_state, indent);
CBackground::save(file, indent);
}
@@ -41,9 +48,57 @@ void CHammerDispensor::load(SimpleFile *file) {
file->readNumber();
_fieldE0 = file->readNumber();
_fieldE4 = file->readNumber();
- _fieldE8 = file->readNumber();
+ _state = file->readNumber();
CBackground::load(file);
}
+bool CHammerDispensor::ActMsg(CActMsg *msg) {
+ if (msg->_action == "DispenseHammer" && !_fieldE0) {
+ _state = 1;
+ playMovie(15, 31, MOVIE_NOTIFY_OBJECT);
+ _fieldE0 = true;
+ }
+
+ if (msg->_action == "HammerTaken" && _fieldE0)
+ loadFrame(32);
+
+ return true;
+}
+
+bool CHammerDispensor::EnterViewMsg(CEnterViewMsg *msg) {
+ if (_fieldE4) {
+ playMovie(7, 14, 0);
+ _fieldE4 = false;
+ }
+
+ return true;
+}
+
+bool CHammerDispensor::LeaveViewMsg(CLeaveViewMsg *msg) {
+ _fieldE4 = true;
+ _fieldE0 = 0;
+ _state = 2;
+
+ if (_fieldE0)
+ playMovie(32, 50, MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE);
+ else
+ playMovie(0, 7, MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE);
+ return true;
+}
+
+bool CHammerDispensor::MovieEndMsg(CMovieEndMsg *msg) {
+ if (_state == 1) {
+ CStatusChangeMsg statusMsg;
+ statusMsg._newStatus = 1;
+ statusMsg.execute("HammerClip");
+ } else if (_state == 2) {
+ CStatusChangeMsg statusMsg;
+ statusMsg._newStatus = 2;
+ statusMsg.execute("HammerClip");
+ }
+
+ return true;
+}
+
} // End of namespace Titanic