[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