[Scummvm-git-logs] scummvm master -> fd0a98a2d312ea33fa2f22e46d1b648a5162f064

athrxx noreply at scummvm.org
Sat Mar 16 22:50:00 UTC 2024


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

Summary:
dd040bf624 SCUMM: minor cleanup
fd0a98a2d3 SCUMM: (IMS) - fix speed parameter for new system


Commit: dd040bf62498ea661840dc7d68aed7357b7749f0
    https://github.com/scummvm/scummvm/commit/dd040bf62498ea661840dc7d68aed7357b7749f0
Author: athrxx (athrxx at scummvm.org)
Date: 2024-03-16T23:48:20+01:00

Commit Message:
SCUMM: minor cleanup

Changed paths:
    engines/scumm/imuse/drivers/midi.cpp
    engines/scumm/players/player_mac_indy3.cpp


diff --git a/engines/scumm/imuse/drivers/midi.cpp b/engines/scumm/imuse/drivers/midi.cpp
index a8474dad4a3..56bd2bb60ae 100644
--- a/engines/scumm/imuse/drivers/midi.cpp
+++ b/engines/scumm/imuse/drivers/midi.cpp
@@ -57,8 +57,8 @@ public:
 
 	// Control Change and SCUMM specific functions
 	void pitchBendFactor(byte value) override { pitchBend(0); _pitchBendSensitivity = value; }
-	void transpose(int8 value) override { _transpose = (int8)value; pitchBend(_pitchBendTemp); }
-	void detune(int16 value) override { _detune = (int16)value; pitchBend(_pitchBendTemp); }
+	void transpose(int8 value) override { _transpose = value; pitchBend(_pitchBendTemp); }
+	void detune(int16 value) override { _detune = value; pitchBend(_pitchBendTemp); }
 	void priority(byte value) override { _prio = value; }
 	void sustain(bool value) override;
 	void allNotesOff() override;
diff --git a/engines/scumm/players/player_mac_indy3.cpp b/engines/scumm/players/player_mac_indy3.cpp
index f90407982fb..55f0e07bdca 100644
--- a/engines/scumm/players/player_mac_indy3.cpp
+++ b/engines/scumm/players/player_mac_indy3.cpp
@@ -1027,11 +1027,11 @@ bool Indy3MacSnd::MusicChannel::ctrl_decrJumpIf(const byte *&pos) {
 	if (var == 0) {
 		pos += offs;
 		if (pos < _resource.get() || pos >= _resource.get() + _resSize)
-			error("Indy3MacSnd::MusicChannel::ctrl_jumpToSubroutine(): invalid address");
+			error("Indy3MacSnd::MusicChannel::ctrl_decrJumpIf(): invalid address");
 	} else {
 		--var;
 	}
-	return true;
+	return false;
 }
 
 bool Indy3MacSnd::MusicChannel::ctrl_writeVar(const byte *&pos) {


Commit: fd0a98a2d312ea33fa2f22e46d1b648a5162f064
    https://github.com/scummvm/scummvm/commit/fd0a98a2d312ea33fa2f22e46d1b648a5162f064
Author: athrxx (athrxx at scummvm.org)
Date: 2024-03-16T23:49:14+01:00

Commit Message:
SCUMM: (IMS) - fix speed parameter for new system

For the newer system, the value is interpreted as having
a range from 0 - 127, with 64 the default. Can be tested in
Samnmax in the Tunnel of Love, after stuffing Max into
the fuse box. Now it is like DOSBox, before it was way too slow.

Changed paths:
    engines/scumm/imuse/imuse_player.cpp
    engines/scumm/saveload.cpp


diff --git a/engines/scumm/imuse/imuse_player.cpp b/engines/scumm/imuse/imuse_player.cpp
index c86d07a30c9..7954d108b31 100644
--- a/engines/scumm/imuse/imuse_player.cpp
+++ b/engines/scumm/imuse/imuse_player.cpp
@@ -159,6 +159,7 @@ void Player::clear() {
 	_midi = nullptr;
 	_id = 0;
 	_note_offset = 0;
+	_speed = _se->_newSystem ? 64 : 128;
 }
 
 void Player::hook_clear() {
@@ -210,7 +211,9 @@ int Player::start_seq_sound(int sound, bool reset_vars) {
 	_parser->setTrack(_track_index);
 
 	ptr = _se->findStartOfSound(sound, IMuseInternal::kMDhd);
-	setSpeed(reset_vars ? (ptr ? (READ_BE_UINT32(&ptr[4]) && ptr[15] ? ptr[15] : 128) : 128) : _speed);
+
+	int defSpeed = _se->_newSystem ? 64 : 128;
+	setSpeed(reset_vars ? (ptr ? (READ_BE_UINT32(&ptr[4]) && ptr[15] ? ptr[15] : defSpeed) : defSpeed) : _speed);
 
 	return 0;
 }
@@ -257,9 +260,21 @@ void Player::uninit_parts() {
 }
 
 void Player::setSpeed(byte speed) {
+	// While the old system (MI1, MI2, DOTT) uses 128 as the default,
+	// making anything below slower and anything above faster, the new
+	// system centers on 64. Consequently, the new system does not accept
+	// values above 127, while the old one accepts anything.
+	int shift = 7;
+
+	if (_se->_newSystem) {
+		shift = 6;
+		if (speed > 127)
+			return;
+	}
+
 	_speed = speed;
 	if (_parser)
-		_parser->setTimerRate(((_midi->getBaseTempo() * speed) >> 7) * _se->_tempoFactor / 100);
+		_parser->setTimerRate(((_midi->getBaseTempo() * speed) >> shift) * _se->_tempoFactor / 100);
 }
 
 void Player::send(uint32 b) {
@@ -935,10 +950,8 @@ int Player::addParameterFader(int param, int target, int time) {
 		break;
 
 	case ParameterFader::pfSpeed: // impSpeed
-		// FIXME: Is the speed from 0-100?
-		// Right now I convert it to 0-128.
 		start = _speed;
-		target = target * 128 / 100;
+		target = target;
 		break;
 
 	case 127: {
@@ -1083,7 +1096,6 @@ void Player::metaEvent(byte type, byte *msg, uint16 len) {
 }
 
 
-
 ////////////////////////////////////////
 //
 //  Player save/load functions
@@ -1173,6 +1185,9 @@ void Player::saveLoadWithSerializer(Common::Serializer &s) {
 	s.syncBytes(_hook._part_program, 16, VER(8));
 	s.syncBytes(_hook._part_transpose, 16, VER(8));
 	s.syncArray(_parameterFaders, ARRAYSIZE(_parameterFaders), syncWithSerializer);
+
+	if (_se->_newSystem && s.isLoading() && s.getVersion() < VER(117) && _speed == 128)
+		_speed = 64;
 }
 
 } // End of namespace Scumm
diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp
index 1c3e38d3f43..31be0cd8772 100644
--- a/engines/scumm/saveload.cpp
+++ b/engines/scumm/saveload.cpp
@@ -69,7 +69,7 @@ struct SaveInfoSection {
 
 #define SaveInfoSectionSize (4+4+4 + 4+4 + 4+2)
 
-#define CURRENT_VER 116
+#define CURRENT_VER 117
 #define INFOSECTION_VERSION 2
 
 #pragma mark -




More information about the Scummvm-git-logs mailing list