diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/titanic/sound/music_object.h | 2 | ||||
-rw-r--r-- | engines/titanic/sound/music_room_handler.cpp | 27 | ||||
-rw-r--r-- | engines/titanic/sound/music_room_handler.h | 2 |
3 files changed, 29 insertions, 2 deletions
diff --git a/engines/titanic/sound/music_object.h b/engines/titanic/sound/music_object.h index aef826bdb0..6159a034d8 100644 --- a/engines/titanic/sound/music_object.h +++ b/engines/titanic/sound/music_object.h @@ -45,7 +45,7 @@ public: int size() const { return _data.size(); } - const CValuePair &operator[](int index) { return _data[index]; } + const CValuePair &operator[](int index) const { return _data[index]; } }; class CMusicParser { diff --git a/engines/titanic/sound/music_room_handler.cpp b/engines/titanic/sound/music_room_handler.cpp index 5cd02018c4..ea1aaf2b78 100644 --- a/engines/titanic/sound/music_room_handler.cpp +++ b/engines/titanic/sound/music_room_handler.cpp @@ -251,7 +251,17 @@ void CMusicRoomHandler::fn1() { if (val >= musicWave->_floatVal) { _array5[idx] += fn3(idx, _array6[idx]); - //_array3[idx]->_data[_array6[idx]]; + const CValuePair &vp = (*_array3[idx])[_array6[idx]]; + if (vp._field0 != 0x7FFFFFFF) { + int amount = getPitch(idx, _array6[idx]); + _musicWaves[idx]->start(amount); + } + + if (ins1._directionControl == ins2._directionControl) { + _array6[idx]++; + } else { + _array6[idx]--; + } } } } @@ -267,4 +277,19 @@ double CMusicRoomHandler::fn3(int index, int val) { return 0; } +int CMusicRoomHandler::getPitch(int index, int arrIndex) { + const CMusicObject &mObj = *_array3[index]; + const CValuePair &vp = mObj[arrIndex]; + int val = vp._field0; + const MusicRoomInstrument &ins1 = _array1[index]; + const MusicRoomInstrument &ins2 = _array2[index]; + + if (ins1._inversionControl != ins2._inversionControl) { + val -= mObj._minVal * 2 + mObj._range; + } + + val += ins1._pitchControl + ins2._pitchControl; + return val; +} + } // End of namespace Titanic diff --git a/engines/titanic/sound/music_room_handler.h b/engines/titanic/sound/music_room_handler.h index 52495bc7d7..dd8b62efe1 100644 --- a/engines/titanic/sound/music_room_handler.h +++ b/engines/titanic/sound/music_room_handler.h @@ -73,6 +73,8 @@ private: void fn1(); bool fn2(); double fn3(int index, int val); + int getPitch(int index, int arrIndex); + public: CMusicRoomHandler(CProjectItem *project, CSoundManager *soundManager); ~CMusicRoomHandler(); |