diff options
-rw-r--r-- | engines/titanic/messages/auto_sound_event.cpp | 14 | ||||
-rw-r--r-- | engines/titanic/messages/auto_sound_event.h | 4 | ||||
-rw-r--r-- | engines/titanic/messages/bilge_dispensor_event.cpp | 26 | ||||
-rw-r--r-- | engines/titanic/messages/bilge_dispensor_event.h | 5 |
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 |