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

dreammaster noreply at scummvm.org
Sun Jul 26 11:10:30 UTC 2026


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

Summary:
ef6f2f24fd MADS: NEBULAR: Implemented RSound7 and RSound8
af0d1d198f MADS: NEBULAR: Fix per-driver command0 initialization block pointers


Commit: ef6f2f24fd7adf3713b3f6ece0d1e08601f844d4
    https://github.com/scummvm/scummvm/commit/ef6f2f24fd7adf3713b3f6ece0d1e08601f844d4
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-07-26T20:42:45+10:00

Commit Message:
MADS: NEBULAR: Implemented RSound7 and RSound8

 Assisted-by: Claude Code:claude-opus-4.8

Changed paths:
    engines/mads/nebular/rsound_nebular.cpp
    engines/mads/nebular/rsound_nebular.h
    engines/mads/nebular/sound.cpp


diff --git a/engines/mads/nebular/rsound_nebular.cpp b/engines/mads/nebular/rsound_nebular.cpp
index bbd1e74e7c8..f38301fd5ee 100644
--- a/engines/mads/nebular/rsound_nebular.cpp
+++ b/engines/mads/nebular/rsound_nebular.cpp
@@ -1616,6 +1616,363 @@ int RSound6::command28() {
 
 /*-----------------------------------------------------------------------*/
 
+const RSound7::CommandPtr RSound7::_commandList[38] = {
+	&RSound7::command0, &RSound7::command1, &RSound7::command2, &RSound7::command3,
+	&RSound7::command4, &RSound7::command5, &RSound7::command6, &RSound7::command7,
+	&RSound7::command8, &RSound7::command9, &RSound7::nullCommand, &RSound7::nullCommand,
+	&RSound7::nullCommand, &RSound7::nullCommand, &RSound7::nullCommand, &RSound7::command15,
+	&RSound7::command16, &RSound7::command17, &RSound7::command18, &RSound7::command19,
+	&RSound7::command20, &RSound7::command21, &RSound7::command22, &RSound7::command23,
+	&RSound7::command24, &RSound7::command25, &RSound7::nullCommand, &RSound7::command27,
+	&RSound7::nullCommand, &RSound7::nullCommand, &RSound7::command30, &RSound7::nullCommand,
+	&RSound7::command32, &RSound7::command33, &RSound7::command34, &RSound7::command35,
+	&RSound7::command36, &RSound7::command37
+};
+
+RSound7::RSound7(Audio::Mixer *mixer) : RSound(mixer, "rsound.007", 0x1240, 0x1EF0) {
+}
+
+int RSound7::command(int commandId, int param) {
+	if (commandId > 37)
+		return 0;
+
+	_commandParam = param;
+	_frameCounter = 0;
+	return (this->*_commandList[commandId])();
+}
+
+int RSound7::command9() {
+	command1();
+	_channels[0].load(loadData(0x1C0E));
+	_channels[1].load(loadData(0x1C88));
+	_channels[2].load(loadData(0x1CD4));
+	_channels[3].load(loadData(0x1D4E));
+	return 0;
+}
+
+int RSound7::command15() {
+	playSound(0x125C);
+	return 0;
+}
+
+int RSound7::command16() {
+	playSound(0x12DE);
+	return 0;
+}
+
+int RSound7::command17() {
+	playSound(0x12C2);
+	return 0;
+}
+
+int RSound7::command18() {
+	_channels[7].load(loadData(0x12FC));
+	return 0;
+}
+
+int RSound7::command19() {
+	if (_channels[7]._soundData == loadData(0x12FC)) {
+		byte *pData = loadData(0x1312);
+		_channels[7]._innerLoopPtr = pData;
+		_channels[7]._outerLoopPtr = pData;
+		_channels[7]._activeCount = 1;
+	}
+	return 0;
+}
+
+int RSound7::command20() {
+	playSound(0x1324);
+	playSound(0x1324);
+	return 0;
+}
+
+int RSound7::command21() {
+	playSound(0x1336);
+	return 0;
+}
+
+int RSound7::command22() {
+	playSound(0x1340);
+	return 0;
+}
+
+int RSound7::command23() {
+	playSound(0x12B4);
+	return 0;
+}
+
+int RSound7::command24() {
+	_channels[0].load(loadData(0x137C));
+	_channels[1].load(loadData(0x1406));
+	_channels[2].load(loadData(0x1492));
+	_channels[3].load(loadData(0x1516));
+	_channels[4].load(loadData(0x1588));
+	return 0;
+}
+
+int RSound7::command25() {
+	command1();
+	_channels[0].load(loadData(0x1612));
+	_channels[1].load(loadData(0x16C8));
+	_channels[2].load(loadData(0x177E));
+	_channels[3].load(loadData(0x1838));
+	return 0;
+}
+
+int RSound7::command27() {
+	_channels[0].load(loadData(0x1932));
+	_channels[1].load(loadData(0x1986));
+	_channels[2].load(loadData(0x19EC));
+	_channels[3].load(loadData(0x1A66));
+	_channels[4].load(loadData(0x1B3C));
+	return 0;
+}
+
+int RSound7::command30() {
+	playSound(0x12AA);
+	playSound(0x12A0);
+	return 0;
+}
+
+int RSound7::command32() {
+	playSound(0x1268);
+	return 0;
+}
+
+int RSound7::command33() {
+	playSound(0x1274);
+	return 0;
+}
+
+int RSound7::command34() {
+	playSound(0x127E);
+	return 0;
+}
+
+int RSound7::command35() {
+	playSound(0x128E);
+	return 0;
+}
+
+int RSound7::command36() {
+	playSound(0x1358);
+	playSound(0x136C);
+	return 0;
+}
+
+int RSound7::command37() {
+	playSound(0x134A);
+	return 0;
+}
+
+/*-----------------------------------------------------------------------*/
+
+const RSound8::CommandPtr RSound8::_commandList[38] = {
+	&RSound8::command0, &RSound8::command1, &RSound8::command2, &RSound8::command3,
+	&RSound8::command4, &RSound8::command5, &RSound8::command6, &RSound8::command7,
+	&RSound8::command8, &RSound8::command9, &RSound8::command10, &RSound8::command11,
+	&RSound8::command12, &RSound8::command13, &RSound8::command14, &RSound8::command15,
+	&RSound8::command16, &RSound8::command17, &RSound8::command18, &RSound8::command19,
+	&RSound8::command20, &RSound8::command21, &RSound8::command22, &RSound8::command23,
+	&RSound8::command24, &RSound8::command25, &RSound8::command26, &RSound8::command27,
+	&RSound8::command28, &RSound8::command29, &RSound8::command30, &RSound8::command31,
+	&RSound8::command32, &RSound8::command33, &RSound8::command34, &RSound8::command35,
+	&RSound8::command36, &RSound8::command37
+};
+
+RSound8::RSound8(Audio::Mixer *mixer) : RSound(mixer, "rsound.008", 0x1290, 0x19A0) {
+}
+
+int RSound8::command(int commandId, int param) {
+	if (commandId > 37)
+		return 0;
+
+	_commandParam = param;
+	_frameCounter = 0;
+	return (this->*_commandList[commandId])();
+}
+
+int RSound8::command9() {
+	playSound(0x10BA);
+	return 0;
+}
+
+int RSound8::command10() {
+	_channels[0].load(loadData(0x115A));
+	_channels[1].load(loadData(0x115A));
+	_channels[2].load(loadData(0x115A));
+	_channels[3].load(loadData(0x1150));
+	return 0;
+}
+
+int RSound8::command11() {
+	playSound(0x1194);
+	return 0;
+}
+
+int RSound8::command12() {
+	playSound(0x11B2);
+	return 0;
+}
+
+int RSound8::command13() {
+	playSound(0x11D0);
+	playSound(0x11D0);
+	playSound(0x11D0);
+	playSound(0x11D0);
+	return 0;
+}
+
+void RSound8::setCommand1415Variant(byte v1, byte v2) {
+	byte *pData = loadData(0x1204);
+	pData[3] = v1;
+	pData[6] = v2;
+	pData[9] = v2;
+	playSound(0x1204);
+	playSound(0x1204);
+	playSound(0x1204);
+	playSound(0x1204);
+}
+
+int RSound8::command14() {
+	setCommand1415Variant(40, 1);
+	return 0;
+}
+
+int RSound8::command15() {
+	setCommand1415Variant(100, 255);
+	return 0;
+}
+
+int RSound8::command16() {
+	playSound(0x112E);
+	playSound(0x112E);
+	return 0;
+}
+
+int RSound8::command17() {
+	playSound(0x1234);
+	return 0;
+}
+
+int RSound8::command18() {
+	playSound(0x1244);
+	return 0;
+}
+
+int RSound8::command19() {
+	playSound(0x1254);
+	return 0;
+}
+
+int RSound8::command20() {
+	playSound(0x125E);
+	return 0;
+}
+
+int RSound8::command21() {
+	playSound(0x126E);
+	return 0;
+}
+
+int RSound8::command22() {
+	playSound(0x1278);
+	return 0;
+}
+
+int RSound8::command23() {
+	_channels[0].load(loadData(0x128E));
+	_channels[1].load(loadData(0x128E));
+	_channels[2].load(loadData(0x128E));
+	_channels[3].load(loadData(0x128E));
+	return 0;
+}
+
+int RSound8::command24() {
+	playSound(0x12B4);
+	return 0;
+}
+
+int RSound8::command25() {
+	playSound(0x12CA);
+	return 0;
+}
+
+int RSound8::command26() {
+	playSound(0x12DC);
+	return 0;
+}
+
+int RSound8::command27() {
+	playSound(0x1112);
+	return 0;
+}
+
+int RSound8::command28() {
+	byte *pData = loadData(0x130A);
+	if (!isSoundActive(pData)) {
+		command1();
+		_channels[0].load(pData);
+		_channels[1].load(loadData(0x1480));
+		_channels[8].load(loadData(0x154C));
+	}
+	return 0;
+}
+
+int RSound8::command29() {
+	byte *pData = loadData(0x15FC);
+	if (!isSoundActive(pData)) {
+		command1();
+		_channels[2].load(pData);
+		_channels[8].load(loadData(0x1652));
+	}
+	return 0;
+}
+
+int RSound8::command30() {
+	playSound(0x1108);
+	playSound(0x10FE);
+	return 0;
+}
+
+int RSound8::command31() {
+	playSound(0x1140);
+	return 0;
+}
+
+int RSound8::command32() {
+	playSound(0x10C6);
+	return 0;
+}
+
+int RSound8::command33() {
+	playSound(0x10D2);
+	return 0;
+}
+
+int RSound8::command34() {
+	playSound(0x10DC);
+	return 0;
+}
+
+int RSound8::command35() {
+	playSound(0x10EC);
+	return 0;
+}
+
+int RSound8::command36() {
+	playSound(0x12E6);
+	playSound(0x12FA);
+	return 0;
+}
+
+int RSound8::command37() {
+	playSound(0x1120);
+	return 0;
+}
+
+/*-----------------------------------------------------------------------*/
+
 const RSound9::CommandPtr RSound9::_commandList[52] = {
 	&RSound9::command0, &RSound9::command1, &RSound9::command2, &RSound9::command3,
 	&RSound9::command4, &RSound9::command5, &RSound9::command6, &RSound9::command7,
diff --git a/engines/mads/nebular/rsound_nebular.h b/engines/mads/nebular/rsound_nebular.h
index b84a5b9d1f4..094ba7bb26e 100644
--- a/engines/mads/nebular/rsound_nebular.h
+++ b/engines/mads/nebular/rsound_nebular.h
@@ -471,6 +471,83 @@ public:
 	int command(int commandId, int param) override;
 };
 
+class RSound7 : public RSound {
+private:
+	typedef int (RSound7:: *CommandPtr)();
+	static const CommandPtr _commandList[38];
+
+	int command9();
+	int command15();
+	int command16();
+	int command17();
+	int command18();
+	int command19();
+	int command20();
+	int command21();
+	int command22();
+	int command23();
+	int command24();
+	int command25();
+	int command27();
+	int command30();
+	int command32();
+	int command33();
+	int command34();
+	int command35();
+	int command36();
+	int command37();
+public:
+	RSound7(Audio::Mixer *mixer);
+
+	int command(int commandId, int param) override;
+};
+
+class RSound8 : public RSound {
+private:
+	typedef int (RSound8:: *CommandPtr)();
+	static const CommandPtr _commandList[38];
+
+	/**
+	 * Shared tail (loc_109E2 in the disassembly) of command14/command15 -
+	 * mutates three bytes of the shared sound data then plays it 4 times.
+	 */
+	void setCommand1415Variant(byte v1, byte v2);
+
+	int command9();
+	int command10();
+	int command11();
+	int command12();
+	int command13();
+	int command14();
+	int command15();
+	int command16();
+	int command17();
+	int command18();
+	int command19();
+	int command20();
+	int command21();
+	int command22();
+	int command23();
+	int command24();
+	int command25();
+	int command26();
+	int command27();
+	int command28();
+	int command29();
+	int command30();
+	int command31();
+	int command32();
+	int command33();
+	int command34();
+	int command35();
+	int command36();
+	int command37();
+public:
+	RSound8(Audio::Mixer *mixer);
+
+	int command(int commandId, int param) override;
+};
+
 class RSound9 : public RSound {
 private:
 	/**
diff --git a/engines/mads/nebular/sound.cpp b/engines/mads/nebular/sound.cpp
index cc18da4f072..5f5abc72114 100644
--- a/engines/mads/nebular/sound.cpp
+++ b/engines/mads/nebular/sound.cpp
@@ -38,9 +38,37 @@ void RexSoundManager::loadDriver(int sectionNumber) {
 
 	if (_isMT32) {
 		// Roland MT32 drivers
-		assert(sectionNumber == 9);
-		_driver = new RexNebular::RSound9(_mixer);
-
+		switch (sectionNumber) {
+		case 1:
+			_driver = new RexNebular::RSound1(_mixer);
+			break;
+		case 2:
+			_driver = new RexNebular::RSound2(_mixer);
+			break;
+		case 3:
+			_driver = new RexNebular::RSound3(_mixer);
+			break;
+		case 4:
+			_driver = new RexNebular::RSound4(_mixer);
+			break;
+		case 5:
+			_driver = new RexNebular::RSound5(_mixer);
+			break;
+		case 6:
+			_driver = new RexNebular::RSound6(_mixer);
+			break;
+		case 7:
+			_driver = new RexNebular::RSound7(_mixer);
+			break;
+		case 8:
+			_driver = new RexNebular::RSound8(_mixer);
+			break;
+		case 9:
+			_driver = new RexNebular::RSound9(_mixer);
+			break;
+		default:
+			return;
+		}
 	} else {
 		// Adlib drivers
 		switch (sectionNumber) {


Commit: af0d1d198f9c771f9864d604b6b85e59494878d5
    https://github.com/scummvm/scummvm/commit/af0d1d198f9c771f9864d604b6b85e59494878d5
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-07-26T21:09:48+10:00

Commit Message:
MADS: NEBULAR: Fix per-driver command0 initialization block pointers

Assisted-by: Claude Code:claude-opus-4.8

Changed paths:
    engines/mads/nebular/rsound.cpp
    engines/mads/nebular/rsound.h
    engines/mads/nebular/rsound_nebular.cpp


diff --git a/engines/mads/nebular/rsound.cpp b/engines/mads/nebular/rsound.cpp
index 1ebbbfc5dbe..034539e3812 100644
--- a/engines/mads/nebular/rsound.cpp
+++ b/engines/mads/nebular/rsound.cpp
@@ -22,6 +22,7 @@
 #include "common/file.h"
 #include "common/md5.h"
 #include "common/memstream.h"
+#include "common/util.h"
 #include "mads/nebular/rsound.h"
 
 namespace MADS {
@@ -64,8 +65,10 @@ void Channel::load(byte *pData) {
 
 /*-----------------------------------------------------------------------*/
 
+const byte RSound::_sysExHeader[5] = { 0xF0, 0x41, 0x10, 0x16, 0x12 };
+
 RSound::RSound(Audio::Mixer *mixer, const Common::Path &filename,
-		int dataOffset, int dataSize) : SoundDriver(mixer, filename, dataOffset, dataSize) {
+		int dataOffset, int dataSize, int sysExOffset) : SoundDriver(mixer, filename, dataOffset, dataSize) {
 	_commandParam = 0;
 	_frameCounter = 0;
 	_isDisabled = false;
@@ -75,6 +78,7 @@ RSound::RSound(Audio::Mixer *mixer, const Common::Path &filename,
 	_noteTriggeredThisPoll = false;
 	_pollResult = 0;
 	_resultFlag = 0;
+	_sysExOffset = sysExOffset;
 
 	for (int i = 0; i < RSOUND_CHANNEL_COUNT; ++i) {
 		_channels[i]._owner = this;
@@ -257,7 +261,27 @@ void RSound::restoreChannelVolume(int midiChannel, int volume) {
 }
 
 void RSound::sendSysEx(int offset) {
-	warning("RSound: SysEx block at offset %04X not yet implemented (device init handshake)", offset);
+	if (offset < 0) {
+		// _sysExOffset wasn't given a confirmed value for this driver yet
+		// (see the constructor) - deliberately not scanning for a 0xFF
+		// terminator from an unconfirmed/arbitrary offset, since that
+		// could read well past the actual command0_array table.
+		warning("RSound::sendSysEx: command0_array offset not yet known for this driver");
+		return;
+	}
+
+	for (int i = 0; i < ARRAYSIZE(_sysExHeader); ++i)
+		sendMidiByte(_sysExHeader[i]);
+
+	byte checksum = 0;
+	byte *pData = loadData(offset);
+	for (int i = 0; pData[i] != 0xFF; ++i) {
+		sendMidiByte(pData[i]);
+		checksum += pData[i];
+	}
+
+	sendMidiByte((~checksum + 1) & 0x7F);
+	sendMidiByte(0xF7);
 }
 
 /*-----------------------------------------------------------------------*/
@@ -630,10 +654,11 @@ int RSound::command0() {
 	sendGmReset(1, RSOUND_CHANNEL_COUNT);
 
 	// Matches the trailing "lea ax, unk_1138F; jmp sub_1041E" in rsound_command0.
-	// TODO: 0x6F is unk_1138F's address (0x1138F) relative to seg001's load
-	// address (0x11320) - the exact data-segment offset convention still
-	// needs verifying once dataOffset/dataSize below are confirmed.
-	sendSysEx(0x6F);
+	// _sysExOffset is this driver's own command0_array offset, supplied
+	// via the constructor (0x67 for rsound.001, 0x87 for rsound.002, 0x6F
+	// for rsound.009) - each driver's own resource file carries its own
+	// copy of this table, so no per-driver command0() override is needed.
+	sendSysEx(_sysExOffset);
 
 	_isDisabled = isDisabled;
 	return 0;
diff --git a/engines/mads/nebular/rsound.h b/engines/mads/nebular/rsound.h
index f95bc459292..9787d04be72 100644
--- a/engines/mads/nebular/rsound.h
+++ b/engines/mads/nebular/rsound.h
@@ -136,6 +136,25 @@ private:
 	bool _noteTriggeredThisPoll;      // throttles note-on dispatch to at most one per update() tick, across all channels
 	byte _heldNotes[RSOUND_CHANNEL_COUNT + 1][4]; // per-MIDI-channel held-note slots (index 0 unused; channels are 1-9)
 
+	/**
+	 * Data-segment offset of this driver's own "command0_array" (the
+	 * MT-32 title-display + patch-init SysEx table sent by command0()).
+	 * Each driver has its own copy of this table at its own offset
+	 * within its own resource file - unlike the fixed 5-byte SysEx
+	 * header (_sysExHeader below), the table's content differs per
+	 * driver beyond a shared prefix, so it can't be hardcoded once;
+	 * parameterizing the offset via the constructor avoids needing a
+	 * command0() override in every derived class.
+	 */
+	int _sysExOffset;
+
+	/**
+	 * Fixed Roland SysEx header (F0 41 10 16 12) - sendSysEx_array in the
+	 * disassembly, confirmed byte-for-byte identical across multiple
+	 * drivers (checked against rsound.001/002/009).
+	 */
+	static const byte _sysExHeader[5];
+
 	void update();
 	void pollAllChannels();
 	void Channel_pollActive(Channel *channel);
@@ -239,11 +258,17 @@ protected:
 	void sendGmReset(int first, int last);
 
 	/**
-	 * Sends a device-specific SysEx block (device init/handshake data).
-	 * TODO: the original's sendSysEx (sub_1041E) uses a two-pointer scheme
-	 * (a fixed header table plus a per-call payload table used only for
-	 * checksum purposes) that isn't fully resolved without the raw data
-	 * segment. Currently just logs a placeholder.
+	 * Sends a single Roland DT1-style SysEx message: the fixed
+	 * _sysExHeader (F0 41 10 16 12), then bytes from loadData(offset)
+	 * up to (but not including) a 0xFF terminator - each byte sent and
+	 * folded into a running checksum - then the two's-complement/7-bit
+	 * checksum byte and a closing F7. Matches sub_1041E exactly.
+	 *
+	 * The original follows this with a busy-wait delay loop
+	 * (_sysexDelayCount iterations) to give the MT-32 time to process
+	 * the message before the next one arrives; irrelevant while
+	 * sendMidiByte() is just a warning() stub, so not ported - will need
+	 * a real (non-blocking) delay once actual MIDI output exists.
 	 */
 	void sendSysEx(int offset);
 
@@ -278,9 +303,10 @@ public:
 	 * @param filename		Specifies the Roland sound player file to use
 	 * @param dataOffset	Offset in the file of the data segment
 	 * @param dataSize		Size of the data segment
+	 * @param sysExOffset	Offset of this driver's own command0_array
 	 */
 	RSound(Audio::Mixer *mixer, const Common::Path &filename,
-		int dataOffset, int dataSize);
+		int dataOffset, int dataSize, int sysExOffset);
 
 	~RSound() override {
 	}
diff --git a/engines/mads/nebular/rsound_nebular.cpp b/engines/mads/nebular/rsound_nebular.cpp
index f38301fd5ee..27d2317dbd1 100644
--- a/engines/mads/nebular/rsound_nebular.cpp
+++ b/engines/mads/nebular/rsound_nebular.cpp
@@ -38,7 +38,7 @@ const RSound1::CommandPtr RSound1::_commandList[42] = {
 	&RSound1::command40, &RSound1::command41
 };
 
-RSound1::RSound1(Audio::Mixer *mixer) : RSound(mixer, "rsound.001", 0x1350, 0x1A90) {
+RSound1::RSound1(Audio::Mixer *mixer) : RSound(mixer, "rsound.001", 0x1350, 0x1A90, 0x67) {
 }
 
 int RSound1::command(int commandId, int param) {
@@ -320,7 +320,7 @@ const RSound2::CommandPtr RSound2::_commandList[44] = {
 	&RSound2::command40, &RSound2::command41, &RSound2::command42, &RSound2::command43
 };
 
-RSound2::RSound2(Audio::Mixer *mixer) : RSound(mixer, "rsound.002", 0x1390, 0x42F0) {
+RSound2::RSound2(Audio::Mixer *mixer) : RSound(mixer, "rsound.002", 0x1390, 0x42F0, 0x87) {
 }
 
 int RSound2::command(int commandId, int param) {
@@ -629,7 +629,7 @@ const RSound3::CommandPtr RSound3::_commandList[61] = {
 	&RSound3::command60
 };
 
-RSound3::RSound3(Audio::Mixer *mixer) : RSound(mixer, "rsound.003", 0x14E0, 0x4C60) {
+RSound3::RSound3(Audio::Mixer *mixer) : RSound(mixer, "rsound.003", 0x14E0, 0x4C60, 0x67) {
 }
 
 int RSound3::command(int commandId, int param) {
@@ -1034,7 +1034,7 @@ const RSound4::CommandPtr RSound4::_commandList[60] = {
 	&RSound4::command56, &RSound4::command57, &RSound4::command58, &RSound4::command59
 };
 
-RSound4::RSound4(Audio::Mixer *mixer) : RSound(mixer, "rsound.004", 0x1340, 0x2E20) {
+RSound4::RSound4(Audio::Mixer *mixer) : RSound(mixer, "rsound.004", 0x1340, 0x2E20, 0x67) {
 }
 
 int RSound4::command(int commandId, int param) {
@@ -1244,7 +1244,7 @@ const RSound5::CommandPtr RSound5::_commandList[42] = {
 	&RSound5::command40, &RSound5::command41
 };
 
-RSound5::RSound5(Audio::Mixer *mixer) : RSound(mixer, "rsound.005", 0x12A0, 0x1FD0) {
+RSound5::RSound5(Audio::Mixer *mixer) : RSound(mixer, "rsound.005", 0x12A0, 0x1FD0, 0x67) {
 }
 
 int RSound5::command(int commandId, int param) {
@@ -1456,7 +1456,7 @@ const RSound6::CommandPtr RSound6::_commandList[30] = {
 	&RSound6::nullCommand, &RSound6::command28
 };
 
-RSound6::RSound6(Audio::Mixer *mixer) : RSound(mixer, "rsound.006", 0x12D0, 0x1EF0) {
+RSound6::RSound6(Audio::Mixer *mixer) : RSound(mixer, "rsound.006", 0x12D0, 0x1EF0, 0x67) {
 }
 
 int RSound6::command(int commandId, int param) {
@@ -1629,7 +1629,7 @@ const RSound7::CommandPtr RSound7::_commandList[38] = {
 	&RSound7::command36, &RSound7::command37
 };
 
-RSound7::RSound7(Audio::Mixer *mixer) : RSound(mixer, "rsound.007", 0x1240, 0x1EF0) {
+RSound7::RSound7(Audio::Mixer *mixer) : RSound(mixer, "rsound.007", 0x1240, 0x1EF0, 0x67) {
 }
 
 int RSound7::command(int commandId, int param) {
@@ -1780,7 +1780,7 @@ const RSound8::CommandPtr RSound8::_commandList[38] = {
 	&RSound8::command36, &RSound8::command37
 };
 
-RSound8::RSound8(Audio::Mixer *mixer) : RSound(mixer, "rsound.008", 0x1290, 0x19A0) {
+RSound8::RSound8(Audio::Mixer *mixer) : RSound(mixer, "rsound.008", 0x1290, 0x19A0, 0x67) {
 }
 
 int RSound8::command(int commandId, int param) {
@@ -1989,7 +1989,7 @@ const RSound9::CommandPtr RSound9::_commandList[52] = {
 	&RSound9::command48, &RSound9::command49, &RSound9::command50, &RSound9::command51
 };
 
-RSound9::RSound9(Audio::Mixer *mixer) : RSound(mixer, "rsound.009", 0x1520, 0x8920) {
+RSound9::RSound9(Audio::Mixer *mixer) : RSound(mixer, "rsound.009", 0x1520, 0x8920, 0x6F) {
 	_callbackCounter = 0;
 	_callbackPeriod = 0;
 	_callbackFnPtr = nullptr;




More information about the Scummvm-git-logs mailing list