[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