mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-01 08:23:15 +00:00
Prevent analog sound driver to be created for Kyra3.
svn-id: r31771
This commit is contained in:
parent
a55d13e0a3
commit
4d5c6d1afb
@ -41,22 +41,22 @@ struct KYRAGameDescription {
|
||||
|
||||
namespace {
|
||||
|
||||
#define FLAGS(x, y, z, a, id) { Common::UNK_LANG, Common::kPlatformUnknown, x, y, z, a, id }
|
||||
#define FLAGS(x, y, z, a, b, id) { Common::UNK_LANG, Common::kPlatformUnknown, x, y, z, a, b, id }
|
||||
|
||||
#define KYRA1_FLOPPY_FLAGS FLAGS(false, false, false, false, Kyra::GI_KYRA1)
|
||||
#define KYRA1_AMIGA_FLAGS FLAGS(false, false, false, false, Kyra::GI_KYRA1)
|
||||
#define KYRA1_TOWNS_FLAGS FLAGS(false, true, false, false, Kyra::GI_KYRA1)
|
||||
#define KYRA1_TOWNS_SJIS_FLAGS FLAGS(false, true, false, true, Kyra::GI_KYRA1)
|
||||
#define KYRA1_CD_FLAGS FLAGS(false, true, true, false, Kyra::GI_KYRA1)
|
||||
#define KYRA1_DEMO_FLAGS FLAGS(true, false, false, false, Kyra::GI_KYRA1)
|
||||
#define KYRA1_FLOPPY_FLAGS FLAGS(false, false, false, false, false, Kyra::GI_KYRA1)
|
||||
#define KYRA1_AMIGA_FLAGS FLAGS(false, false, false, false, false, Kyra::GI_KYRA1)
|
||||
#define KYRA1_TOWNS_FLAGS FLAGS(false, true, false, false, false, Kyra::GI_KYRA1)
|
||||
#define KYRA1_TOWNS_SJIS_FLAGS FLAGS(false, true, false, true, false, Kyra::GI_KYRA1)
|
||||
#define KYRA1_CD_FLAGS FLAGS(false, true, true, false, false, Kyra::GI_KYRA1)
|
||||
#define KYRA1_DEMO_FLAGS FLAGS(true, false, false, false, false, Kyra::GI_KYRA1)
|
||||
|
||||
#define KYRA2_CD_FLAGS FLAGS(false, false, true, false, Kyra::GI_KYRA2)
|
||||
#define KYRA2_CD_DEMO_FLAGS FLAGS(true, false, true, false, Kyra::GI_KYRA2)
|
||||
#define KYRA2_DEMO_FLAGS FLAGS(true, false, false, false, Kyra::GI_KYRA2)
|
||||
#define KYRA2_TOWNS_FLAGS FLAGS(false, false, false, false, Kyra::GI_KYRA2)
|
||||
#define KYRA2_TOWNS_SJIS_FLAGS FLAGS(false, false, false, true, Kyra::GI_KYRA2)
|
||||
#define KYRA2_CD_FLAGS FLAGS(false, false, true, false, false, Kyra::GI_KYRA2)
|
||||
#define KYRA2_CD_DEMO_FLAGS FLAGS(true, false, true, false, false, Kyra::GI_KYRA2)
|
||||
#define KYRA2_DEMO_FLAGS FLAGS(true, false, false, false, false, Kyra::GI_KYRA2)
|
||||
#define KYRA2_TOWNS_FLAGS FLAGS(false, false, false, false, false, Kyra::GI_KYRA2)
|
||||
#define KYRA2_TOWNS_SJIS_FLAGS FLAGS(false, false, false, true, false, Kyra::GI_KYRA2)
|
||||
|
||||
#define KYRA3_CD_FLAGS FLAGS(false, false, true, false, Kyra::GI_KYRA3)
|
||||
#define KYRA3_CD_FLAGS FLAGS(false, false, true, false, true, Kyra::GI_KYRA3)
|
||||
|
||||
const KYRAGameDescription adGameDescs[] = {
|
||||
{
|
||||
@ -435,7 +435,7 @@ const KYRAGameDescription adGameDescs[] = {
|
||||
KYRA3_CD_FLAGS
|
||||
},
|
||||
|
||||
{ AD_TABLE_END_MARKER, FLAGS(0, 0, 0, 0, 0) }
|
||||
{ AD_TABLE_END_MARKER, FLAGS(0, 0, 0, 0, 0, 0) }
|
||||
};
|
||||
|
||||
const PlainGameDescriptor gameList[] = {
|
||||
|
@ -39,7 +39,7 @@
|
||||
namespace Kyra {
|
||||
|
||||
KyraEngine::KyraEngine(OSystem *system, const GameFlags &flags)
|
||||
: Engine(system) {
|
||||
: Engine(system), _flags(flags) {
|
||||
_res = 0;
|
||||
_sound = 0;
|
||||
_text = 0;
|
||||
@ -47,7 +47,6 @@ KyraEngine::KyraEngine(OSystem *system, const GameFlags &flags)
|
||||
_timer = 0;
|
||||
_scriptInterpreter = 0;
|
||||
|
||||
_flags = flags;
|
||||
_gameSpeed = 60;
|
||||
_tickLength = (uint8)(1000.0 / _gameSpeed);
|
||||
|
||||
@ -87,50 +86,53 @@ int KyraEngine::init() {
|
||||
_mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, ConfMan.getInt("music_volume"));
|
||||
_mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, ConfMan.getInt("speech_volume"));
|
||||
|
||||
// We prefer AdLib over native MIDI, since our AdLib playback code is much
|
||||
// more mature than our MIDI player. For example we are missing MT-32 support
|
||||
// and it seems our MIDI playback code has threading issues (see bug #1506583
|
||||
// "KYRA1: Crash on exceeded polyphony" for more information).
|
||||
int midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB/* | MDT_PREFER_MIDI*/);
|
||||
if (!_flags.useDigSound) {
|
||||
// We prefer AdLib over native MIDI, since our AdLib playback code is much
|
||||
// more mature than our MIDI player. For example we are missing MT-32 support
|
||||
// and it seems our MIDI playback code has threading issues (see bug #1506583
|
||||
// "KYRA1: Crash on exceeded polyphony" for more information).
|
||||
int midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB/* | MDT_PREFER_MIDI*/);
|
||||
|
||||
if (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98) {
|
||||
// TODO: currently we don't support the PC98 sound data,
|
||||
// but since it has the FM-Towns data files, we just use the
|
||||
// FM-Towns driver
|
||||
if (_flags.gameID == GI_KYRA1)
|
||||
_sound = new SoundTowns(this, _mixer);
|
||||
else
|
||||
_sound = new SoundTowns_v2(this, _mixer);
|
||||
} else if (midiDriver == MD_ADLIB) {
|
||||
_sound = new SoundAdlibPC(this, _mixer);
|
||||
assert(_sound);
|
||||
} else {
|
||||
bool native_mt32 = ((midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));
|
||||
|
||||
MidiDriver *driver = MidiDriver::createMidi(midiDriver);
|
||||
assert(driver);
|
||||
if (native_mt32)
|
||||
driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
|
||||
|
||||
SoundMidiPC *soundMidiPc = new SoundMidiPC(this, _mixer, driver);
|
||||
_sound = soundMidiPc;
|
||||
assert(_sound);
|
||||
soundMidiPc->hasNativeMT32(native_mt32);
|
||||
|
||||
// Unlike some SCUMM games, it's not that the MIDI sounds are
|
||||
// missing. It's just that at least at the time of writing they
|
||||
// are decidedly inferior to the Adlib ones.
|
||||
if (ConfMan.getBool("multi_midi")) {
|
||||
SoundAdlibPC *adlib = new SoundAdlibPC(this, _mixer);
|
||||
assert(adlib);
|
||||
|
||||
_sound = new MixedSoundDriver(this, _mixer, soundMidiPc, adlib);
|
||||
if (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98) {
|
||||
// TODO: currently we don't support the PC98 sound data,
|
||||
// but since it has the FM-Towns data files, we just use the
|
||||
// FM-Towns driver
|
||||
if (_flags.gameID == GI_KYRA1)
|
||||
_sound = new SoundTowns(this, _mixer);
|
||||
else
|
||||
_sound = new SoundTowns_v2(this, _mixer);
|
||||
} else if (midiDriver == MD_ADLIB) {
|
||||
_sound = new SoundAdlibPC(this, _mixer);
|
||||
assert(_sound);
|
||||
} else {
|
||||
bool native_mt32 = ((midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));
|
||||
|
||||
MidiDriver *driver = MidiDriver::createMidi(midiDriver);
|
||||
assert(driver);
|
||||
if (native_mt32)
|
||||
driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
|
||||
|
||||
SoundMidiPC *soundMidiPc = new SoundMidiPC(this, _mixer, driver);
|
||||
_sound = soundMidiPc;
|
||||
assert(_sound);
|
||||
soundMidiPc->hasNativeMT32(native_mt32);
|
||||
|
||||
// Unlike some SCUMM games, it's not that the MIDI sounds are
|
||||
// missing. It's just that at least at the time of writing they
|
||||
// are decidedly inferior to the Adlib ones.
|
||||
if (ConfMan.getBool("multi_midi")) {
|
||||
SoundAdlibPC *adlib = new SoundAdlibPC(this, _mixer);
|
||||
assert(adlib);
|
||||
|
||||
_sound = new MixedSoundDriver(this, _mixer, soundMidiPc, adlib);
|
||||
assert(_sound);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (_sound)
|
||||
_sound->updateVolumeSettings();
|
||||
|
||||
_res = new Resource(this);
|
||||
assert(_res);
|
||||
_res->reset();
|
||||
|
@ -47,10 +47,13 @@ namespace Kyra {
|
||||
struct GameFlags {
|
||||
Common::Language lang;
|
||||
Common::Platform platform;
|
||||
bool isDemo;
|
||||
bool useAltShapeHeader; // alternative shape header (uses 2 bytes more, those are unused though)
|
||||
bool isTalkie;
|
||||
bool useHiResOverlay;
|
||||
|
||||
bool isDemo : 1;
|
||||
bool useAltShapeHeader : 1; // alternative shape header (uses 2 bytes more, those are unused though)
|
||||
bool isTalkie : 1;
|
||||
bool useHiResOverlay : 1;
|
||||
bool useDigSound : 1;
|
||||
|
||||
byte gameID;
|
||||
};
|
||||
|
||||
|
@ -49,7 +49,6 @@ namespace Kyra {
|
||||
KyraEngine_v1::KyraEngine_v1(OSystem *system, const GameFlags &flags)
|
||||
: KyraEngine(system, flags) {
|
||||
_skipFlag = false;
|
||||
_flags = flags;
|
||||
|
||||
_seq_Forest = _seq_KallakWriting = _seq_KyrandiaLogo = _seq_KallakMalcolm =
|
||||
_seq_MalcolmTree = _seq_WestwoodLogo = _seq_Demo1 = _seq_Demo2 = _seq_Demo3 =
|
||||
|
Loading…
x
Reference in New Issue
Block a user