aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/player_towns.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/scumm/player_towns.h')
-rw-r--r--engines/scumm/player_towns.h71
1 files changed, 61 insertions, 10 deletions
diff --git a/engines/scumm/player_towns.h b/engines/scumm/player_towns.h
index 3a36ea5daf..4635a436f0 100644
--- a/engines/scumm/player_towns.h
+++ b/engines/scumm/player_towns.h
@@ -27,24 +27,39 @@
#define SCUMM_PLAYER_TOWNS_H
#include "scumm/scumm.h"
-#include "scumm/music.h"
+#include "scumm/imuse/imuse.h"
#include "sound/softsynth/fmtowns_pc98/towns_euphony.h"
namespace Scumm {
-class Player_Towns {
+class Player_Towns : public MusicEngine {
public:
- Player_Towns(ScummEngine *vm);
+ Player_Towns(ScummEngine *vm, bool isVersion2);
virtual ~Player_Towns() {}
+ virtual bool init() = 0;
+
+ void setSfxVolume(int vol);
+
+ int getSoundStatus(int sound) const;
+
+ virtual int32 doCommand(int numargs, int args[]) = 0;
+
virtual void saveLoadWithSerializer(Serializer *ser);
virtual void restoreAfterLoad();
+ // version 1 specific
+ virtual int getCurrentCdaSound() { return 0; }
+ virtual int getCurrentCdaVolume() { return 0; }
+ virtual void setVolumeCD(int left, int right) {}
+ virtual void setSoundVolume(int sound, int left, int right) {}
+ virtual void setSoundNote(int sound, int note) {}
+
protected:
- void playPcmTrack(int sound, const uint8 *data, int velo = 0, int pan = 64, int note = 0);
+ void playPcmTrack(int sound, const uint8 *data, int velo = 0, int pan = 64, int note = 0, int priority = 0);
void stopPcmTrack(int sound);
- int getNextFreePcmChannel(int sound, int sfxChanRelIndex);
+ int getNextFreePcmChannel(int sound, int sfxChanRelIndex, int priority);
struct PcmCurrentSound {
uint16 index;
@@ -63,24 +78,34 @@ protected:
uint8 note;
};
- uint8 _unkFlags;
-
SoundOvrParameters *_soundOverride;
SoundOvrParameters _ovrCur;
+ struct SoundOvrParameters2 {
+ uint8 velo;
+ uint8 pan;
+ uint8 type;
+ };
+
+ SoundOvrParameters2 *_soundOverride2;
+
+ uint8 _unkFlags;
+
TownsAudioInterface *_intf;
ScummEngine *_vm;
+
+ const int _numSoundMax;
+ const bool _v2;
};
-class Player_Towns_v1 : public Player_Towns, public MusicEngine {
+class Player_Towns_v1 : public Player_Towns {
public:
Player_Towns_v1(ScummEngine *vm, Audio::Mixer *mixer);
- virtual ~Player_Towns_v1();
+ ~Player_Towns_v1();
bool init();
void setMusicVolume(int vol);
- void setSfxVolume(int vol);
void startSound(int sound);
void stopSound(int sound);
void stopAllSounds();
@@ -126,6 +151,32 @@ private:
TownsEuphonyDriver *_driver;
};
+class Player_Towns_v2 : public Player_Towns {
+public:
+ Player_Towns_v2(ScummEngine *vm, IMuse *imuse, Audio::Mixer *mixer, bool disposeIMuse);
+ ~Player_Towns_v2();
+
+ bool init();
+
+ void setMusicVolume(int vol);
+
+ int getSoundStatus(int sound) const;
+ void startSound(int sound);
+ void stopSound(int sound);
+ void stopAllSounds();
+
+ int32 doCommand(int numargs, int args[]);
+
+ void saveLoadWithSerializer(Serializer *ser);
+
+private:
+ void playPcmTrackSBL(int sound, const uint8 *data);
+
+ uint8 *_sblData;
+ IMuse *_imuse;
+ const bool _imuseDispose;
+};
+
} // End of namespace Scumm
#endif