diff options
-rw-r--r-- | engines/titanic/core/game_object.cpp | 13 | ||||
-rw-r--r-- | engines/titanic/core/game_object.h | 5 | ||||
-rw-r--r-- | engines/titanic/sound/bird_song.cpp | 21 | ||||
-rw-r--r-- | engines/titanic/sound/bird_song.h | 7 | ||||
-rw-r--r-- | engines/titanic/sound/dome_from_top_of_well.cpp | 8 | ||||
-rw-r--r-- | engines/titanic/sound/dome_from_top_of_well.h | 1 | ||||
-rw-r--r-- | engines/titanic/sound/enter_view_toggles_other_music.cpp | 22 | ||||
-rw-r--r-- | engines/titanic/sound/enter_view_toggles_other_music.h | 4 | ||||
-rw-r--r-- | engines/titanic/sound/trigger_auto_music_player.cpp | 26 | ||||
-rw-r--r-- | engines/titanic/sound/trigger_auto_music_player.h | 4 |
10 files changed, 100 insertions, 11 deletions
diff --git a/engines/titanic/core/game_object.cpp b/engines/titanic/core/game_object.cpp index c7742cb8db..95ebe6a1e7 100644 --- a/engines/titanic/core/game_object.cpp +++ b/engines/titanic/core/game_object.cpp @@ -1248,6 +1248,19 @@ CRoomItem *CGameObject::getHiddenRoom() const { return root ? root->findHiddenRoom() : nullptr; } +CRoomItem *CGameObject::locateRoom(const CString &name) const { + if (name.empty()) + return nullptr; + + CProjectItem *project = getRoot(); + for (CRoomItem *room = project->findFirstRoom(); room; room = project->findNextRoom(room)) { + if (!room->getName().compareToIgnoreCase(name)) + return room; + } + + return nullptr; +} + CGameObject *CGameObject::getHiddenObject(const CString &name) const { CRoomItem *room = getHiddenRoom(); return room ? static_cast<CGameObject *>(findUnder(room, name)) : nullptr; diff --git a/engines/titanic/core/game_object.h b/engines/titanic/core/game_object.h index bcfc989288..322b62636c 100644 --- a/engines/titanic/core/game_object.h +++ b/engines/titanic/core/game_object.h @@ -393,6 +393,11 @@ protected: CRoomItem *getHiddenRoom() const; /** + * Locates a room with the given name + */ + CRoomItem *locateRoom(const CString &name) const; + + /** * Scan the specified room for an item by name */ CTreeItem *findUnder(CTreeItem *parent, const CString &name) const; diff --git a/engines/titanic/sound/bird_song.cpp b/engines/titanic/sound/bird_song.cpp index 7f7d0ad5ce..53a25e2dbe 100644 --- a/engines/titanic/sound/bird_song.cpp +++ b/engines/titanic/sound/bird_song.cpp @@ -24,16 +24,33 @@ namespace Titanic { +BEGIN_MESSAGE_MAP(CBirdSong, CAutoSoundPlayer) + ON_MESSAGE(TurnOn) + ON_MESSAGE(SignalObject) +END_MESSAGE_MAP() + void CBirdSong::save(SimpleFile *file, int indent) { file->writeNumberLine(1, indent); - file->writeNumberLine(_value, indent); + file->writeNumberLine(_flag, indent); CRoomAutoSoundPlayer::save(file, indent); } void CBirdSong::load(SimpleFile *file) { file->readNumber(); - _value = file->readNumber(); + _flag = file->readNumber(); CRoomAutoSoundPlayer::load(file); } +bool CBirdSong::TurnOn(CTurnOn *msg) { + if (!_flag) + CAutoSoundPlayer::TurnOn(msg); + return true; +} + +bool CBirdSong::SignalObject(CSignalObject *msg) { + _flag = true; + CAutoSoundPlayer::SignalObject(msg); + return true; +} + } // End of namespace Titanic diff --git a/engines/titanic/sound/bird_song.h b/engines/titanic/sound/bird_song.h index 35758e5b77..52af94b180 100644 --- a/engines/titanic/sound/bird_song.h +++ b/engines/titanic/sound/bird_song.h @@ -28,11 +28,14 @@ namespace Titanic { class CBirdSong : public CRoomAutoSoundPlayer { + DECLARE_MESSAGE_MAP; + bool TurnOn(CTurnOn *msg); + bool SignalObject(CSignalObject *msg); public: - int _value; + bool _flag; public: CLASSDEF; - CBirdSong() : CRoomAutoSoundPlayer(), _value(0) {} + CBirdSong() : CRoomAutoSoundPlayer(), _flag(false) {} /** * Save the data for the class to file diff --git a/engines/titanic/sound/dome_from_top_of_well.cpp b/engines/titanic/sound/dome_from_top_of_well.cpp index 3721b9f3b7..789d7fa4cb 100644 --- a/engines/titanic/sound/dome_from_top_of_well.cpp +++ b/engines/titanic/sound/dome_from_top_of_well.cpp @@ -26,6 +26,14 @@ namespace Titanic { EMPTY_MESSAGE_MAP(CDomeFromTopOfWell, CViewAutoSoundPlayer); +CDomeFromTopOfWell::CDomeFromTopOfWell() : CViewAutoSoundPlayer() { + _filename = "z#227.wav"; + _volume = 25; + _repeated = true; + _stopSeconds = 1; + _startSeconds = 1; +} + void CDomeFromTopOfWell::save(SimpleFile *file, int indent) { file->writeNumberLine(1, indent); CViewAutoSoundPlayer::save(file, indent); diff --git a/engines/titanic/sound/dome_from_top_of_well.h b/engines/titanic/sound/dome_from_top_of_well.h index e3d2877379..001f66a1a8 100644 --- a/engines/titanic/sound/dome_from_top_of_well.h +++ b/engines/titanic/sound/dome_from_top_of_well.h @@ -31,6 +31,7 @@ class CDomeFromTopOfWell : public CViewAutoSoundPlayer { DECLARE_MESSAGE_MAP; public: CLASSDEF; + CDomeFromTopOfWell(); /** * Save the data for the class to file diff --git a/engines/titanic/sound/enter_view_toggles_other_music.cpp b/engines/titanic/sound/enter_view_toggles_other_music.cpp index 0b149993a3..2f0091a0a3 100644 --- a/engines/titanic/sound/enter_view_toggles_other_music.cpp +++ b/engines/titanic/sound/enter_view_toggles_other_music.cpp @@ -24,21 +24,37 @@ namespace Titanic { -CEnterViewTogglesOtherMusic::CEnterViewTogglesOtherMusic() : CTriggerAutoMusicPlayer(), _fieldC8(0) { +BEGIN_MESSAGE_MAP(CEnterViewTogglesOtherMusic, CTriggerAutoMusicPlayer) + ON_MESSAGE(EnterViewMsg) +END_MESSAGE_MAP() + +CEnterViewTogglesOtherMusic::CEnterViewTogglesOtherMusic() : + CTriggerAutoMusicPlayer(), _value(2) { } void CEnterViewTogglesOtherMusic::save(SimpleFile *file, int indent) { file->writeNumberLine(1, indent); - file->writeNumberLine(_fieldC8, indent); + file->writeNumberLine(_value, indent); CTriggerAutoMusicPlayer::save(file, indent); } void CEnterViewTogglesOtherMusic::load(SimpleFile *file) { file->readNumber(); - _fieldC8 = file->readNumber(); + _value = file->readNumber(); CTriggerAutoMusicPlayer::load(file); } +bool CEnterViewTogglesOtherMusic::EnterViewMsg(CEnterViewMsg *msg) { + CViewItem *view = findView(); + if (view == msg->_newView) { + CTriggerAutoMusicPlayerMsg triggerMsg; + triggerMsg._value = _value; + triggerMsg.execute(this); + } + + return true; +} + } // End of namespace Titanic diff --git a/engines/titanic/sound/enter_view_toggles_other_music.h b/engines/titanic/sound/enter_view_toggles_other_music.h index 6bbeea4890..a91b1e1933 100644 --- a/engines/titanic/sound/enter_view_toggles_other_music.h +++ b/engines/titanic/sound/enter_view_toggles_other_music.h @@ -28,8 +28,10 @@ namespace Titanic { class CEnterViewTogglesOtherMusic : public CTriggerAutoMusicPlayer { + DECLARE_MESSAGE_MAP; + bool EnterViewMsg(CEnterViewMsg *msg); protected: - int _fieldC8; + int _value; public: CLASSDEF; CEnterViewTogglesOtherMusic(); diff --git a/engines/titanic/sound/trigger_auto_music_player.cpp b/engines/titanic/sound/trigger_auto_music_player.cpp index 21050e0877..a332570aba 100644 --- a/engines/titanic/sound/trigger_auto_music_player.cpp +++ b/engines/titanic/sound/trigger_auto_music_player.cpp @@ -21,19 +21,41 @@ */ #include "titanic/sound/trigger_auto_music_player.h" +#include "titanic/sound/auto_music_player.h" +#include "titanic/core/room_item.h" namespace Titanic { +BEGIN_MESSAGE_MAP(CTriggerAutoMusicPlayer, CGameObject) + ON_MESSAGE(TriggerAutoMusicPlayerMsg) +END_MESSAGE_MAP() + void CTriggerAutoMusicPlayer::save(SimpleFile *file, int indent) { file->writeNumberLine(1, indent); - file->writeQuotedLine(_fieldBC, indent); + file->writeQuotedLine(_roomName, indent); CGameObject::save(file, indent); } void CTriggerAutoMusicPlayer::load(SimpleFile *file) { file->readNumber(); - _fieldBC = file->readString(); + _roomName = file->readString(); CGameObject::load(file); } +bool CTriggerAutoMusicPlayer::TriggerAutoMusicPlayerMsg(CTriggerAutoMusicPlayerMsg *msg) { + CRoomItem *room1 = msg->_value == 1 ? locateRoom(_roomName) : findRoom(); + CRoomItem *room2 = msg->_value == 2 ? locateRoom(_roomName) : findRoom(); + + CChangeMusicMsg changeMsg; + changeMsg._flags = 1; + changeMsg.execute(room1, CAutoMusicPlayer::_type, + MSGFLAG_CLASS_DEF | MSGFLAG_BREAK_IF_HANDLED | MSGFLAG_SCAN); + + changeMsg._flags = 2; + changeMsg.execute(room2, CAutoMusicPlayer::_type, + MSGFLAG_CLASS_DEF | MSGFLAG_BREAK_IF_HANDLED | MSGFLAG_SCAN); + + return true; +} + } // End of namespace Titanic diff --git a/engines/titanic/sound/trigger_auto_music_player.h b/engines/titanic/sound/trigger_auto_music_player.h index 537e780db6..45631e08fc 100644 --- a/engines/titanic/sound/trigger_auto_music_player.h +++ b/engines/titanic/sound/trigger_auto_music_player.h @@ -28,8 +28,10 @@ namespace Titanic { class CTriggerAutoMusicPlayer : public CGameObject { + DECLARE_MESSAGE_MAP; + bool TriggerAutoMusicPlayerMsg(CTriggerAutoMusicPlayerMsg *msg); protected: - CString _fieldBC; + CString _roomName; public: CLASSDEF; |