aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/sound/music_room_handler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/titanic/sound/music_room_handler.cpp')
-rw-r--r--engines/titanic/sound/music_room_handler.cpp27
1 files changed, 26 insertions, 1 deletions
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