aboutsummaryrefslogtreecommitdiff
path: root/engines/xeen/scripts.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2018-05-05 17:14:06 -0400
committerPaul Gilbert2018-05-05 17:14:06 -0400
commit856b6a08f1010b6df8ec7cdcd2ad0c8fa21370b9 (patch)
tree5509d15f101d9c6d83792c074d8a89068dae66f4 /engines/xeen/scripts.cpp
parent057fb9bc6eb0afe9349ebe17bbcd819b003c078c (diff)
downloadscummvm-rg350-856b6a08f1010b6df8ec7cdcd2ad0c8fa21370b9.tar.gz
scummvm-rg350-856b6a08f1010b6df8ec7cdcd2ad0c8fa21370b9.tar.bz2
scummvm-rg350-856b6a08f1010b6df8ec7cdcd2ad0c8fa21370b9.zip
XEEN: Properly convert script CD times to ScummVM CD frames
Diffstat (limited to 'engines/xeen/scripts.cpp')
-rw-r--r--engines/xeen/scripts.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/engines/xeen/scripts.cpp b/engines/xeen/scripts.cpp
index a023fe5066..6702364556 100644
--- a/engines/xeen/scripts.cpp
+++ b/engines/xeen/scripts.cpp
@@ -1473,15 +1473,28 @@ bool Scripts::cmdFlipWorld(ParamsIterator &params) {
bool Scripts::cmdPlayCD(ParamsIterator &params) {
int trackNum = params.readByte();
- int start = params.readUint16LE() * 60 / 75;
- int finish = params.readUint16LE() * 60 / 75;
+ int start = params.readUint16LE();
+ int finish = params.readUint16LE();
+
if (_vm->_files->_ccNum)
trackNum += 30;
+ assert(trackNum <= 60);
+
+ start = convertCDTime(start);
+ finish = convertCDTime(finish);
g_system->getAudioCDManager()->play(trackNum, 1, start, finish - start, false, Audio::Mixer::kSpeechSoundType);
return true;
}
+#define CD_FRAME_RATE 75
+uint Scripts::convertCDTime(uint srcTime) {
+ // Times are encoded as MMSSCC - MM=Minutes, SS=Seconds, CC=Centiseconds (1/100th second)
+ uint mins = srcTime / 10000;
+ uint csec = srcTime % 10000;
+ return (mins * 6000 + csec) * CD_FRAME_RATE / 100;
+}
+
void Scripts::doCloudsEnding() {
g_vm->_party->_cloudsCompleted = true;
doEnding("ENDGAME");