mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-20 08:53:51 +00:00
Add warning when voice files are missing in simon2amiga/mac
Work if voice file is missing in simon2amiga/mac svn-id: r6411
This commit is contained in:
parent
47fe35819a
commit
93184025d9
@ -90,6 +90,24 @@ static const GameSpecificSettings simon2win_settings = {
|
||||
"GSPTR30", /* gamepc_filename */
|
||||
};
|
||||
|
||||
static const GameSpecificSettings simon2mac_settings = {
|
||||
5, /* VGA_DELAY_BASE */
|
||||
1580 / 4, /* TABLE_INDEX_BASE */
|
||||
1500 / 4, /* TEXT_INDEX_BASE */
|
||||
75, /* NUM_VIDEO_OP_CODES */
|
||||
2000000, /* VGA_MEM_SIZE */
|
||||
100000, /* TABLES_MEM_SIZE */
|
||||
1128 / 4, /* MUSIC_INDEX_BASE */
|
||||
1660 / 4, /* SOUND_INDEX_BASE */
|
||||
"Simon2.gme", /* gme_filename */
|
||||
"", /* wav_filename */
|
||||
"", /* voc_filename */
|
||||
"SIMON2.MP3", /* mp3_filename */
|
||||
"", /* voc_effects_filename */
|
||||
"", /* mp3_effects_filename */
|
||||
"gsptr30", /* gamepc_filename */
|
||||
};
|
||||
|
||||
static const GameSpecificSettings simon2dos_settings = {
|
||||
5, /* VGA_DELAY_BASE */
|
||||
1580 / 4, /* TABLE_INDEX_BASE */
|
||||
@ -4496,7 +4514,9 @@ void SimonState::go()
|
||||
_sdl_buf = (byte *)calloc(320 * 200, 1);
|
||||
_sdl_buf_attached = (byte *)calloc(320 * 200, 1);
|
||||
|
||||
if (_game == GAME_SIMON2TALKIE || _game & GAME_SIMON2WIN) {
|
||||
if (_game == GAME_SIMON2MAC) {
|
||||
gss = &simon2mac_settings;
|
||||
} else if (_game == GAME_SIMON2TALKIE || _game == GAME_SIMON2WIN) {
|
||||
gss = &simon2win_settings;
|
||||
} else if (_game == GAME_SIMON2DOS) {
|
||||
gss = &simon2dos_settings;
|
||||
@ -4511,6 +4531,8 @@ void SimonState::go()
|
||||
|
||||
setup_vga_file_buf_pointers();
|
||||
|
||||
_vk_t_toggle = true;
|
||||
|
||||
_sound = new SimonSound(_game, gss, _gameDataPath, _mixer);
|
||||
|
||||
loadGamePcFile(gss->gamepc_filename);
|
||||
@ -4535,7 +4557,7 @@ void SimonState::go()
|
||||
if (_sound->hasVoice()) {
|
||||
_vk_t_toggle = false;
|
||||
} else {
|
||||
_vk_t_toggle = false;
|
||||
_vk_t_toggle = true;
|
||||
}
|
||||
|
||||
midi._midi_sfx_toggle = false;
|
||||
|
@ -37,6 +37,8 @@ SimonSound::SimonSound(const byte game, const GameSpecificSettings *gss, const c
|
||||
|
||||
_ambient_playing = 0;
|
||||
|
||||
_voice_file = false;
|
||||
|
||||
File *file = new File();
|
||||
File *file2 = new File();
|
||||
const char *s;
|
||||
@ -44,15 +46,20 @@ SimonSound::SimonSound(const byte game, const GameSpecificSettings *gss, const c
|
||||
// for simon2 mac/amiga, only read index file
|
||||
if (_game == GAME_SIMON2MAC) {
|
||||
file->open("voices.idx", gameDataPath);
|
||||
file->seek(0, SEEK_END);
|
||||
int end = file->pos();
|
||||
file->seek(0, SEEK_SET);
|
||||
_filenums = (uint16 *)malloc(end / 3 + 1);
|
||||
_offsets = (uint32 *)malloc((end / 6) * 4 + 1);
|
||||
if (file->isOpen() == false) {
|
||||
warning("Can't open voice index file 'voices.idx'");
|
||||
} else {
|
||||
file->seek(0, SEEK_END);
|
||||
int end = file->pos();
|
||||
file->seek(0, SEEK_SET);
|
||||
_filenums = (uint16 *)malloc(end / 3 + 1);
|
||||
_offsets = (uint32 *)malloc((end / 6) * 4 + 1);
|
||||
|
||||
for (int i = 1; i <= end / 6; i++) {
|
||||
_filenums[i] = file->readUint16BE();
|
||||
_offsets[i] = file->readUint32BE();
|
||||
for (int i = 1; i <= end / 6; i++) {
|
||||
_filenums[i] = file->readUint16BE();
|
||||
_offsets[i] = file->readUint32BE();
|
||||
}
|
||||
_voice_file = true;
|
||||
}
|
||||
} else {
|
||||
#ifdef USE_MAD
|
||||
@ -63,21 +70,24 @@ SimonSound::SimonSound(const byte game, const GameSpecificSettings *gss, const c
|
||||
s = gss->wav_filename;
|
||||
file->open(s, gameDataPath);
|
||||
if (file->isOpen() == false) {
|
||||
warning("Cannot open voice file %s", s);
|
||||
warning("Can't open voice file %s", s);
|
||||
} else {
|
||||
_voice_file = true;
|
||||
_voice = new WavSound(_mixer, file);
|
||||
}
|
||||
} else if (_game & GAME_TALKIE) {
|
||||
s = gss->voc_filename;
|
||||
file->open(s, gameDataPath);
|
||||
if (file->isOpen() == false) {
|
||||
warning("Cannot open voice file %s", s);
|
||||
warning("Can't open voice file %s", s);
|
||||
} else {
|
||||
_voice_file = true;
|
||||
_voice = new VocSound(_mixer, file);
|
||||
}
|
||||
}
|
||||
#ifdef USE_MAD
|
||||
} else {
|
||||
_voice_file = true;
|
||||
_voice = new MP3Sound(_mixer, file);
|
||||
}
|
||||
#endif
|
||||
@ -90,7 +100,7 @@ SimonSound::SimonSound(const byte game, const GameSpecificSettings *gss, const c
|
||||
s = gss->voc_effects_filename;
|
||||
file2->open(s, gameDataPath);
|
||||
if (file2->isOpen() == false) {
|
||||
warning("Cannot open effects file %s", s);
|
||||
warning("Can't open effects file %s", s);
|
||||
} else {
|
||||
_effects = new VocSound(_mixer, file2);
|
||||
}
|
||||
@ -119,7 +129,7 @@ void SimonSound::readSfxFile(const char *filename, const char *gameDataPath)
|
||||
free(filename2);
|
||||
if (file->isOpen() == false) {
|
||||
if (atoi(filename + 6) != 1 && atoi(filename + 6) != 30)
|
||||
warning("readSfxFile: Cannot load sfx file %s", filename);
|
||||
warning("readSfxFile: Can't load sfx file %s", filename);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -144,7 +154,11 @@ void SimonSound::playVoice(uint sound)
|
||||
sprintf(filename, "voices%d.dat", _filenums[sound]);
|
||||
File *file = new File();
|
||||
file->open(filename, _gameDataPath);
|
||||
_voice = new WavSound(_mixer, file, _offsets);
|
||||
if (file->isOpen() == false) {
|
||||
warning("Can't open voice file %s", filename);
|
||||
} else {
|
||||
_voice = new WavSound(_mixer, file, _offsets);
|
||||
}
|
||||
}
|
||||
|
||||
if (!_voice)
|
||||
@ -185,7 +199,7 @@ void SimonSound::playAmbient(uint sound)
|
||||
|
||||
bool SimonSound::hasVoice()
|
||||
{
|
||||
return _voice != NULL;
|
||||
return _voice_file;
|
||||
}
|
||||
|
||||
void SimonSound::stopVoice()
|
||||
@ -237,7 +251,7 @@ SimonSound::Sound::Sound(SoundMixer *mixer, File *file, uint32 base)
|
||||
_file->seek(base, SEEK_SET);
|
||||
|
||||
if (_file->read(_offsets, size) != size)
|
||||
error("Cannot read offsets");
|
||||
error("Can't read offsets");
|
||||
|
||||
for (uint i = 0; i < res; i++) {
|
||||
#if defined(SCUMM_BIG_ENDIAN)
|
||||
@ -331,7 +345,7 @@ int SimonSound::VocSound::playSound(uint sound, PlayingSoundHandle *handle, byte
|
||||
|
||||
if (_file->read(&voc_hdr, sizeof(voc_hdr)) != sizeof(voc_hdr) ||
|
||||
strncmp((char *)voc_hdr.desc, "Creative Voice File\x1A", 10) != 0) {
|
||||
error("playVoc(%d): cannot read voc header", sound);
|
||||
error("playVoc(%d): can't read voc header", sound);
|
||||
}
|
||||
|
||||
_file->read(&voc_block_hdr, sizeof(voc_block_hdr));
|
||||
@ -372,7 +386,7 @@ int SimonSound::WavSound::playSound(uint sound, PlayingSoundHandle *handle, byte
|
||||
|| wave_hdr.fmt != MKID('fmt ') || READ_LE_UINT16(&wave_hdr.format_tag) != 1
|
||||
|| READ_LE_UINT16(&wave_hdr.channels) != 1
|
||||
|| READ_LE_UINT16(&wave_hdr.bits_per_sample) != 8) {
|
||||
error("playWav(%d): cannot read RIFF header", sound);
|
||||
error("playWav(%d): can't read RIFF header", sound);
|
||||
}
|
||||
|
||||
_file->seek(FROM_LE_32(wave_hdr.size) - sizeof(wave_hdr) + 20, SEEK_CUR);
|
||||
@ -381,7 +395,7 @@ int SimonSound::WavSound::playSound(uint sound, PlayingSoundHandle *handle, byte
|
||||
data[1] = _file->readUint32LE();
|
||||
if (//fread(data, sizeof(data), 1, sound_file) != 1 ||
|
||||
data[0] != 'atad') {
|
||||
error("playWav(%d): cannot read data header", sound);
|
||||
error("playWav(%d): can't read data header", sound);
|
||||
}
|
||||
|
||||
byte *buffer = (byte *)malloc(data[1]);
|
||||
|
@ -74,6 +74,7 @@ public:
|
||||
PlayingSoundHandle _effects_handle;
|
||||
PlayingSoundHandle _ambient_handle;
|
||||
|
||||
bool _voice_file;
|
||||
uint _ambient_playing;
|
||||
|
||||
SimonSound(const byte game, const GameSpecificSettings *gss, const char *gameDataPath, SoundMixer *mixer);
|
||||
|
Loading…
x
Reference in New Issue
Block a user