Add Acorn version of Simon the Sorcerer 1 Talkie

svn-id: r10389
This commit is contained in:
Travis Howell 2003-09-24 06:19:30 +00:00
parent 908eb0823f
commit 3854ce8f3d
5 changed files with 40 additions and 6 deletions

View file

@ -71,6 +71,10 @@ FILE *File::fopenNoCase(const char *filename, const char *directory, const char
"DATA/", "DATA/",
"resource/", "resource/",
"RESOURCE/", "RESOURCE/",
// Simon the Sorcerer 1 Acorn
"execute/",
"EXECUTE/",
// Simon the Sorcerer 2 Amiga/Mac
"voices/", "voices/",
"VOICES/", "VOICES/",
// sword2 stuff if user just copied files without putting // sword2 stuff if user just copied files without putting

View file

@ -140,7 +140,8 @@ enum {
GF_TALKIE = 1 << 2, GF_TALKIE = 1 << 2,
GF_DEMO = 1 << 3, GF_DEMO = 1 << 3,
GF_MAC = 1 << 4, GF_MAC = 1 << 4,
GF_AMIGA = 1 << 5 GF_AMIGA = 1 << 5,
GF_ACORN = 1 << 6
}; };
enum { enum {
@ -153,7 +154,8 @@ enum {
GAME_SIMON1DEMO = GF_DEMO, GAME_SIMON1DEMO = GF_DEMO,
GAME_SIMON2MAC = GF_SIMON2 | GF_WIN | GF_TALKIE | GF_MAC, GAME_SIMON2MAC = GF_SIMON2 | GF_WIN | GF_TALKIE | GF_MAC,
GAME_SIMON1AMIGA = GF_AMIGA, GAME_SIMON1AMIGA = GF_AMIGA,
GAME_SIMON1CD32 = GF_TALKIE | GF_AMIGA GAME_SIMON1CD32 = GF_TALKIE | GF_AMIGA,
GAME_SIMON1ACORN = GF_TALKIE | GF_ACORN
}; };
#endif #endif

View file

@ -147,7 +147,10 @@ void SimonEngine::loadGamePcFile(const char *filename) {
_tablesheap_curpos_org = _tablesheap_curpos; _tablesheap_curpos_org = _tablesheap_curpos;
/* Read list of TEXT resources */ /* Read list of TEXT resources */
in.open("STRIPPED.TXT", _gameDataPath); if (_game == GAME_SIMON1ACORN)
in.open("STRIPPED", _gameDataPath);
else
in.open("STRIPPED.TXT", _gameDataPath);
if (in.isOpen() == false) if (in.isOpen() == false)
error("Can't open text resources file 'STRIPPED.TXT'"); error("Can't open text resources file 'STRIPPED.TXT'");
@ -259,6 +262,7 @@ byte *SimonEngine::readSingleOpcode(File *in, byte *ptr) {
case GAME_SIMON1TALKIE: case GAME_SIMON1TALKIE:
case GAME_SIMON1WIN: case GAME_SIMON1WIN:
case GAME_SIMON1CD32: case GAME_SIMON1CD32:
case GAME_SIMON1ACORN:
table = opcode_arg_table_simon1win; table = opcode_arg_table_simon1win;
break; break;
case GAME_SIMON2DOS: case GAME_SIMON2DOS:

View file

@ -47,6 +47,7 @@ extern bool draw_keyboard;
static const TargetSettings simon_settings[] = { static const TargetSettings simon_settings[] = {
// Simon the Sorcerer 1 & 2 (not SCUMM games) // Simon the Sorcerer 1 & 2 (not SCUMM games)
{"simon1acorn", "Simon the Sorcerer 1 (Acorn)", GID_SIMON_FIRST, 99, MDT_ADLIB | MDT_NATIVE, GAME_SIMON1ACORN, "DATA"},
{"simon1dos", "Simon the Sorcerer 1 (DOS)", GID_SIMON_FIRST, 99, MDT_ADLIB | MDT_NATIVE, GAME_SIMON1DOS, "GAMEPC"}, {"simon1dos", "Simon the Sorcerer 1 (DOS)", GID_SIMON_FIRST, 99, MDT_ADLIB | MDT_NATIVE, GAME_SIMON1DOS, "GAMEPC"},
{"simon1amiga", "Simon the Sorcerer 1 (Amiga)", GID_SIMON_FIRST, 99, MDT_NONE, GAME_SIMON1AMIGA, "gameamiga"}, {"simon1amiga", "Simon the Sorcerer 1 (Amiga)", GID_SIMON_FIRST, 99, MDT_NONE, GAME_SIMON1AMIGA, "gameamiga"},
{"simon2dos", "Simon the Sorcerer 2 (DOS)", GID_SIMON_FIRST, 99, MDT_ADLIB | MDT_NATIVE, GAME_SIMON2DOS, "GAME32"}, {"simon2dos", "Simon the Sorcerer 2 (DOS)", GID_SIMON_FIRST, 99, MDT_ADLIB | MDT_NATIVE, GAME_SIMON2DOS, "GAME32"},
@ -89,6 +90,24 @@ static const GameSpecificSettings simon1_settings = {
"GAMEPC", // gamepc_filename "GAMEPC", // gamepc_filename
}; };
static const GameSpecificSettings simon1acorn_settings = {
1, // VGA_DELAY_BASE
1576 / 4, // TABLE_INDEX_BASE
1460 / 4, // TEXT_INDEX_BASE
64, // NUM_VIDEO_OP_CODES
1000000, // VGA_MEM_SIZE
50000, // TABLES_MEM_SIZE
1316 / 4, // MUSIC_INDEX_BASE
0, // SOUND_INDEX_BASE
"DATA", // gme_filename
"", // wav_filename
"SIMON", // voc_filename
"SIMON.MP3", // mp3_filename
"EFFECTS", // voc_effects_filename
"EFFECTS.MP3", // mp3_effects_filename
"GAMEBASE", // gamepc_filename
};
static const GameSpecificSettings simon1amiga_settings = { static const GameSpecificSettings simon1amiga_settings = {
1, // VGA_DELAY_BASE 1, // VGA_DELAY_BASE
1576 / 4, // TABLE_INDEX_BASE 1576 / 4, // TABLE_INDEX_BASE
@ -197,6 +216,8 @@ SimonEngine::SimonEngine(GameDetector *detector, OSystem *syst)
gss = &simon2win_settings; gss = &simon2win_settings;
} else if (_game == GAME_SIMON2DOS) { } else if (_game == GAME_SIMON2DOS) {
gss = &simon2dos_settings; gss = &simon2dos_settings;
} else if (_game == GAME_SIMON1ACORN) {
gss =&simon1acorn_settings;
} else if (_game & GF_AMIGA) { } else if (_game & GF_AMIGA) {
gss = &simon1amiga_settings; gss = &simon1amiga_settings;
} else if (_game == GAME_SIMON1DEMO) { } else if (_game == GAME_SIMON1DEMO) {
@ -1697,7 +1718,9 @@ uint SimonEngine::item_get_icon_number(Item *item) {
void SimonEngine::loadIconFile() { void SimonEngine::loadIconFile() {
File in; File in;
if (_game & GF_AMIGA) if (_game & GF_ACORN)
in.open("ICONDATA", _gameDataPath);
else if (_game & GF_AMIGA)
in.open("icon.pkd", _gameDataPath); in.open("icon.pkd", _gameDataPath);
else else
in.open("ICON.DAT", _gameDataPath); in.open("ICON.DAT", _gameDataPath);
@ -2092,6 +2115,7 @@ void SimonEngine::o_print_str() {
case GAME_SIMON1TALKIE: case GAME_SIMON1TALKIE:
case GAME_SIMON1WIN: case GAME_SIMON1WIN:
case GAME_SIMON1CD32: case GAME_SIMON1CD32:
case GAME_SIMON1ACORN:
if (speech_id != 0) if (speech_id != 0)
talk_with_speech(speech_id, num_1); talk_with_speech(speech_id, num_1);
if (string_ptr != NULL && (speech_id == 0 || _subtitles)) if (string_ptr != NULL && (speech_id == 0 || _subtitles))
@ -4834,7 +4858,7 @@ void SimonEngine::loadMusic (uint music) {
if (_game & GF_AMIGA) { if (_game & GF_AMIGA) {
if (_game != GAME_SIMON1CD32) { if (_game != GAME_SIMON1CD32) {
// TODO Add support for decruncher // TODO Add support for decruncher
debug(5,"playMusic - Decrunch %dtune attempt", music); debug(5,"loadMusic - Decrunch %dtune attempt", music);
} }
// TODO Add Protracker support for simon1amiga/cd32 // TODO Add Protracker support for simon1amiga/cd32
debug(5,"playMusic - Load %dtune attempt", music); debug(5,"playMusic - Load %dtune attempt", music);

View file

@ -312,7 +312,7 @@ SimonSound::SimonSound(const byte game, const GameSpecificSettings *gss, const c
} }
#endif #endif
if (_game == GAME_SIMON1TALKIE) { if (_game == GAME_SIMON1ACORN || _game == GAME_SIMON1TALKIE) {
file = new File(); file = new File();
#ifdef USE_MAD #ifdef USE_MAD
file->open(gss->mp3_effects_filename, gameDataPath); file->open(gss->mp3_effects_filename, gameDataPath);