[Scummvm-git-logs] scummvm master -> 856b6a08f1010b6df8ec7cdcd2ad0c8fa21370b9

dreammaster dreammaster at scummvm.org
Sat May 5 23:14:12 CEST 2018


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
856b6a08f1 XEEN: Properly convert script CD times to ScummVM CD frames


Commit: 856b6a08f1010b6df8ec7cdcd2ad0c8fa21370b9
    https://github.com/scummvm/scummvm/commit/856b6a08f1010b6df8ec7cdcd2ad0c8fa21370b9
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2018-05-05T17:14:06-04:00

Commit Message:
XEEN: Properly convert script CD times to ScummVM CD frames

Changed paths:
    engines/xeen/scripts.cpp
    engines/xeen/scripts.h


diff --git a/engines/xeen/scripts.cpp b/engines/xeen/scripts.cpp
index a023fe5..6702364 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");
diff --git a/engines/xeen/scripts.h b/engines/xeen/scripts.h
index 1bdf836..9cd4b6f 100644
--- a/engines/xeen/scripts.h
+++ b/engines/xeen/scripts.h
@@ -544,6 +544,11 @@ private:
 	 * Displays a message
 	 */
 	void display(bool justifyFlag, int var46);
+
+	/**
+	 * Convert a CD time from the World of Xeen playCD opcodes to ScummVM CD frame number (which is at 75Hz)
+	 */
+	uint convertCDTime(uint srcTime);
 public:
 	int _animCounter;
 	bool _eventSkipped;





More information about the Scummvm-git-logs mailing list