ScummVM API documentation
MADS::Phantom::RSound4 Class Reference

#include <rsound_phantom.h>

Inheritance diagram for MADS::Phantom::RSound4:
MADS::Phantom::RSound MADS::SoundDriver

Public Member Functions

 RSound4 (Audio::Mixer *mixer)
 
int command (int commandId, int param) override
 
- Public Member Functions inherited from MADS::Phantom::RSound
 RSound (Audio::Mixer *mixer, const Common::Path &filename, int dataOffset, int dataSize, int sysExOffset)
 
int stop () override
 
int poll () override
 
void noise () override
 
void setVolume (int volume) override
 
int getFrameCounter ()
 
- Public Member Functions inherited from MADS::SoundDriver
 SoundDriver (Audio::Mixer *mixer, const Common::Path &filename, int dataOffset, int dataSize)
 

Additional Inherited Members

- Public Attributes inherited from MADS::Phantom::RSound
Channel _channels [9]
 
int _frameCounter
 
bool _isDisabled
 
int _pollResult
 
- Protected Member Functions inherited from MADS::Phantom::RSound
byte * loadData (int offset)
 
void resetChannelRange (int first, int last)
 
virtual void checkRandomAmbianceTrigger ()
 
void resultCheck ()
 
ChannelplaySound (int offset)
 
ChannelplaySoundChannels1To5 (int offset)
 
ChannelplaySoundAny (int offset)
 
ChannelplaySoundChannels5To8 (int offset)
 
ChannelplaySoundChannels1To6 (int offset)
 
ChannelplaySoundData (byte *pData, int startingChannel, int freeScanEnd, int fallbackScanEnd)
 
bool isSoundActive (byte *pData)
 
int getRandomNumber ()
 
void sendMidiByte (byte value)
 
void sendStatus (int midiChannel, byte statusNibble)
 
void sendNoteOn (int midiChannel, int note, int velocity)
 
void sendProgramChange (int midiChannel, int program)
 
void sendVolume (int midiChannel, int volume)
 
void sendVolumeCC (int midiChannel, int volume)
 
void resetPitchBend (int midiChannel)
 
void sendPitchBend (int midiChannel, int value)
 
void sendPan (int midiChannel, int value)
 
void muteChannel (int midiChannel)
 
void sendGmReset (int count)
 
void sendSysExData (const byte *pData)
 
void sendSysEx (int offset)
 
void sendPatchInitSequence ()
 
void sendReverbSysEx (int mode, int time, int level)
 
void noOpHandler (int param)
 
virtual int command0 ()
 
int command1 ()
 
int command2 ()
 
int command3 ()
 
void enableUpperChannels ()
 
void resetAndGmResetUpperChannels ()
 
int command6 ()
 
int command7 ()
 
int command8 ()
 
int nullCommand ()
 
- Protected Member Functions inherited from MADS::SoundDriver
Common::MemoryReadStream getDataStream (int offset) const
 
- Protected Attributes inherited from MADS::Phantom::RSound
int _commandParam
 
int _randomAmbianceTriggerFlag
 
int _fadeCheckPeriod
 
- Protected Attributes inherited from MADS::SoundDriver
Audio::Mixer_mixer
 
Common::Array< byte > _soundData
 
Common::Mutex _driverMutex
 

Detailed Description

RSound4 (rsound.ph4)

Dispatch table layout (funcs_109CE/109E4/109FA/10A10/10A26 in the disassembly - same 5-bucket sparse-dispatch shape as RSound1-3, represented here as a single flat array): commands 0-8 (base class, except command4/5 - see RSound::command4/5) command 16 (this class) commands 24-27 (this class) command 32 (confirmed nullsub_1 - this driver has no command32-39 at all, unlike RSound1-3, which all had a populated 32+ bucket) commands 64-70 (this class); 71 is confirmed nullsub_1

command0/1/2/3/6/7/8 confirmed to match the shared RSound base exactly (no overrides needed) - including command3, which (unlike RSound3) is NOT aliased to command1's dispatch slot; this driver's dispatch table has a genuine, separate rsound_command3 entry matching the base class's command3() exactly.

command4() is a genuinely new shape: unlike every driver confirmed so far, it has NO isSoundActive() gate at all - it unconditionally resets channels 6-9 (0-based indices 5-8, confirmed via explicit Channel._activeCount/_volumeFadeStep-labeled writes in sub_107FC) via resetChannelRange(), then sends a full sendGmReset(9). A third distinct channel range for this reset (RSound1/RSound2 used 4-9, RSound3 used 5-9), reinforcing that this range is always driver-specific.

command1/command3 confirmed to match the shared RSound base exactly (no overrides needed) - sub_10838 (called at the top of both) is confirmed to be exactly "_fadeCheckPeriod = 1", and command5's four channel-enable targets are confirmed to be channels 5-8, matching enableUpperChannels() exactly.

Member Function Documentation

◆ command()

int MADS::Phantom::RSound4::command ( int  commandId,
int  param 
)
overridevirtual

Execute a player command. Most commands represent sounds to play, but some low number commands also provide control operations.

Parameters
commandIdPlayer ommand to execute.
paramOptional parameter used by a few commands

Implements MADS::SoundDriver.


The documentation for this class was generated from the following file: