aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/titanic/messages/auto_sound_event.cpp14
-rw-r--r--engines/titanic/messages/auto_sound_event.h4
-rw-r--r--engines/titanic/messages/bilge_dispensor_event.cpp26
-rw-r--r--engines/titanic/messages/bilge_dispensor_event.h5
4 files changed, 31 insertions, 18 deletions
diff --git a/engines/titanic/messages/auto_sound_event.cpp b/engines/titanic/messages/auto_sound_event.cpp
index bc2cd7d074..942a85ec99 100644
--- a/engines/titanic/messages/auto_sound_event.cpp
+++ b/engines/titanic/messages/auto_sound_event.cpp
@@ -28,28 +28,28 @@ BEGIN_MESSAGE_MAP(CAutoSoundEvent, CGameObject)
ON_MESSAGE(FrameMsg)
END_MESSAGE_MAP()
-CAutoSoundEvent::CAutoSoundEvent() : CGameObject(), _value1(0), _value2(0xFFFFFF) {
+CAutoSoundEvent::CAutoSoundEvent() : CGameObject(), _counter(0), _mask(0xFFFFFF) {
}
void CAutoSoundEvent::save(SimpleFile *file, int indent) {
file->writeNumberLine(1, indent);
- file->writeNumberLine(_value1, indent);
- file->writeNumberLine(_value2, indent);
+ file->writeNumberLine(_counter, indent);
+ file->writeNumberLine(_mask, indent);
CGameObject::save(file, indent);
}
void CAutoSoundEvent::load(SimpleFile *file) {
file->readNumber();
- _value1 = file->readNumber();
- _value2 = file->readNumber();
+ _counter = file->readNumber();
+ _mask = file->readNumber();
CGameObject::load(file);
}
bool CAutoSoundEvent::FrameMsg(CFrameMsg *msg) {
- if (_value1 >= 0)
- _value1 = (_value1 + 1) & _value2;
+ if (_counter >= 0)
+ _counter = (_counter + 1) & _mask;
return true;
}
diff --git a/engines/titanic/messages/auto_sound_event.h b/engines/titanic/messages/auto_sound_event.h
index d88976708e..085e6242cc 100644
--- a/engines/titanic/messages/auto_sound_event.h
+++ b/engines/titanic/messages/auto_sound_event.h
@@ -31,8 +31,8 @@ class CAutoSoundEvent : public CGameObject {
DECLARE_MESSAGE_MAP;
bool FrameMsg(CFrameMsg *msg);
public:
- int _value1;
- int _value2;
+ int _counter;
+ int _mask;
public:
CLASSDEF;
CAutoSoundEvent();
diff --git a/engines/titanic/messages/bilge_dispensor_event.cpp b/engines/titanic/messages/bilge_dispensor_event.cpp
index 584da00a6f..336a1caf0d 100644
--- a/engines/titanic/messages/bilge_dispensor_event.cpp
+++ b/engines/titanic/messages/bilge_dispensor_event.cpp
@@ -21,6 +21,7 @@
*/
#include "titanic/messages/bilge_dispensor_event.h"
+#include "titanic/titanic.h"
namespace Titanic {
@@ -42,22 +43,31 @@ void CBilgeDispensorEvent::load(SimpleFile *file) {
}
bool CBilgeDispensorEvent::EnterRoomMsg(CEnterRoomMsg *msg) {
- _value1 = 0;
+ _counter = 0;
+ _ticksDelayEnd = 0;
+ _soundHandle = -1;
return true;
}
bool CBilgeDispensorEvent::LeaveRoomMsg(CLeaveRoomMsg *msg) {
- _value1 = -1;
+ _counter = -1;
return true;
}
bool CBilgeDispensorEvent::FrameMsg(CFrameMsg *msg) {
- if (_value1 >= 0 && (_value1 & 0xffff) == 0x4000) {
- int volume = 20 + getRandomNumber(30);
- int val3 = getRandomNumber(20) - 10;
+ uint32 ticks = g_vm->_events->getTicksCount();
+
+ if ((_ticksDelayEnd && ticks >= _ticksDelayEnd) ||
+ _soundHandle == -1 || !isSoundActive(_soundHandle)) {
+ _soundHandle = -1;
+ _ticksDelayEnd = 0;
if (getRandomNumber(2) == 0) {
- playSound("b#18.wav", volume, val3);
+ int volume = 20 + getRandomNumber(30);
+ int balance = getRandomNumber(20) - 10;
+ _soundHandle = playSound("b#18.wav", volume, balance);
+ } else {
+ _ticksDelayEnd = ticks + 1000;
}
}
@@ -67,9 +77,9 @@ bool CBilgeDispensorEvent::FrameMsg(CFrameMsg *msg) {
bool CBilgeDispensorEvent::StatusChangeMsg(CStatusChangeMsg *msg) {
if (msg->_newStatus == 1)
- _value1 = -1;
+ _counter = -1;
else if (msg->_newStatus == 2)
- _value1 = 0;
+ _counter = 0;
return true;
}
diff --git a/engines/titanic/messages/bilge_dispensor_event.h b/engines/titanic/messages/bilge_dispensor_event.h
index 61d3116db4..64e0f30b53 100644
--- a/engines/titanic/messages/bilge_dispensor_event.h
+++ b/engines/titanic/messages/bilge_dispensor_event.h
@@ -34,9 +34,12 @@ class CBilgeDispensorEvent : public CAutoSoundEvent {
bool LeaveRoomMsg(CLeaveRoomMsg *msg);
bool FrameMsg(CFrameMsg *msg);
bool StatusChangeMsg(CStatusChangeMsg *msg);
+private:
+ uint _ticksDelayEnd;
+ int _soundHandle;
public:
CLASSDEF;
- CBilgeDispensorEvent() : CAutoSoundEvent() {}
+ CBilgeDispensorEvent() : CAutoSoundEvent(), _ticksDelayEnd(0), _soundHandle(-1) {}
/**
* Save the data for the class to file