diff options
Diffstat (limited to 'simon')
-rw-r--r-- | simon/intern.h | 13 | ||||
-rw-r--r-- | simon/res.cpp | 24 | ||||
-rw-r--r-- | simon/saveload.cpp | 8 | ||||
-rw-r--r-- | simon/simon.cpp | 26 |
4 files changed, 59 insertions, 12 deletions
diff --git a/simon/intern.h b/simon/intern.h index a50b92e841..8e168b0c40 100644 --- a/simon/intern.h +++ b/simon/intern.h @@ -160,14 +160,17 @@ enum { enum { GAME_SIMON1DOS = GF_SIMON1 | GF_OLD_BUNDLE, - GAME_SIMON2DOS = GF_SIMON2, - GAME_SIMON1TALKIE = GF_SIMON1 | GF_TALKIE, - GAME_SIMON2TALKIE = GF_SIMON2 | GF_TALKIE, - GAME_SIMON2WIN = GF_SIMON2 | GF_WIN | GF_TALKIE, GAME_SIMON1DEMO = GF_SIMON1 | GF_DEMO | GF_OLD_BUNDLE, GAME_SIMON1AMIGA = GF_SIMON1 | GF_AMIGA | GF_OLD_BUNDLE, GAME_SIMON1CD32 = GF_SIMON1 | GF_TALKIE | GF_AMIGA | GF_OLD_BUNDLE, - GAME_SIMON1ACORN = GF_SIMON1 | GF_TALKIE | GF_ACORN + GAME_SIMON1ACORN = GF_SIMON1 | GF_TALKIE | GF_ACORN, + GAME_SIMON1TALKIE = GF_SIMON1 | GF_TALKIE, + + GAME_SIMON2DOS = GF_SIMON2, + GAME_SIMON2TALKIE = GF_SIMON2 | GF_TALKIE, + GAME_SIMON2WIN = GF_SIMON2 | GF_WIN | GF_TALKIE, + + GAME_FEEBLEFILES = GF_SIMON2 | GF_WIN | GF_TALKIE | GF_OLD_BUNDLE }; #endif diff --git a/simon/res.cpp b/simon/res.cpp index 96afbee696..3845f2fa2e 100644 --- a/simon/res.cpp +++ b/simon/res.cpp @@ -96,6 +96,23 @@ static const char *const opcode_arg_table_simon2dos[256] = { " ", " ", "BT ", " ", "B " }; +static const char *const opcode_arg_table_feeblefiles[256] = { + " ", "I ", "I ", "I ", "I ", "I ", "I ", "II ", "II ", "II ", "II ", "B ", "B ", "BN ", "BN ", + "BN ", "BN ", "BB ", "BB ", "BB ", "BB ", "II ", "II ", "N ", "I ", "I ", "I ", "IN ", "IB ", + "II ", "I ", "I ", "II ", "II ", "IBB ", "BIB ", "BB ", "B ", "BI ", "IB ", "B ", "B ", "BN ", + "BN ", "BN ", "BB ", "BB ", "BN ", "BN ", "BB ", "BB ", "BN ", "BB ", "BN ", "B ", "I ", "IB ", + "IB ", "II ", "I ", "I ", "IN ", "B ", "T ", "T ", "NNNNNB ", "BT ", "BTS ", "T ", " ", "B ", + "N ", "IBN ", "I ", "I ", "I ", "NN ", " ", " ", "IT ", "II ", "I ", "B ", " ", "IB ", "IBB ", + "IIB ", "T ", " ", " ", "IB ", "IB ", "IB ", "B ", "BB ", "IBB ", "NB ", "N ", "NNBNNN ", "NN ", + " ", "BNNNNNN ", "B ", " ", "B ", "B ", "BB ", "NNNNNIN ", "N ", "N ", "N ", "NNN ", "NBNN ", + "IBNN ", "IB ", "IB ", "IB ", "IB ", "N ", "N ", "N ", "BI ", " ", " ", "N ", "I ", "IBB ", + "NNB ", "N ", "N ", "Ban ", " ", " ", " ", " ", " ", "IB ", "B ", " ", "II ", " ", "BI ", + "N ", "I ", "IB ", "IB ", "IB ", "IB ", "IB ", "IB ", "IB ", "BI ", "BB ", "B ", "B ", "B ", + "B ", "IBB ", "IBN ", "IB ", "B ", "BNNN ", "BBTS ", "N ", " ", "Ian ", "B ", "B ", "B ", "B ", + "T ", "N ", " ", " ", "I ", " ", " ", "BBI ", "NNBB ", "BBB ", " ", " ", "T ", " ", "N ", "N ", + " ", " ", "BT ", " ", "B ", " ", "BBBB ", " ", " ", "BBBB ", "B ", "B ", "B ", "B " +}; + void SimonEngine::loadGamePcFile(const char *filename) { Common::File in; int num_inited_objects; @@ -148,6 +165,9 @@ void SimonEngine::loadGamePcFile(const char *filename) { _tablesHeapPtrOrg = _tablesHeapPtr; _tablesHeapCurPosOrg = _tablesHeapCurPos; + if (_game == GAME_FEEBLEFILES) + return; + /* Read list of TEXT resources */ if (_game == GAME_SIMON1ACORN) in.open("STRIPPED"); @@ -260,7 +280,9 @@ byte *SimonEngine::readSingleOpcode(Common::File *in, byte *ptr) { const char *const *table; - if ((_game & GF_SIMON2) && (_game & GF_TALKIE)) + if (_game == GAME_FEEBLEFILES) { + table = opcode_arg_table_feeblefiles; + } else if ((_game & GF_SIMON2) && (_game & GF_TALKIE)) table = opcode_arg_table_simon2win; else if (_game & GF_SIMON2) table = opcode_arg_table_simon2dos; diff --git a/simon/saveload.cpp b/simon/saveload.cpp index bc95eea4c4..8d09144477 100644 --- a/simon/saveload.cpp +++ b/simon/saveload.cpp @@ -496,7 +496,7 @@ char *SimonEngine::gen_savename(int slot) { } bool SimonEngine::load_game(uint slot) { - char ident[18]; + char ident[100]; Common::InSaveFile *f; uint num, item_index, i, j; @@ -508,7 +508,11 @@ bool SimonEngine::load_game(uint slot) { return false; } - f->read(ident, 18); + if (_game == GAME_FEEBLEFILES) { + f->read(ident, 18); + } else { + f->read(ident, 100); + } num = f->readUint32BE(); diff --git a/simon/simon.cpp b/simon/simon.cpp index e72ea3ac5d..cd5032ac46 100644 --- a/simon/simon.cpp +++ b/simon/simon.cpp @@ -75,6 +75,7 @@ static const SimonGameSettings simon_settings[] = { {"simon2mac", "Simon the Sorcerer 2 Talkie (Amiga or Mac)", GAME_SIMON2WIN, 0}, {"simon1cd32", "Simon the Sorcerer 1 Talkie (Amiga CD32)", GAME_SIMON1CD32, "gameamiga"}, {"simon1demo", "Simon the Sorcerer 1 (DOS Demo)", GAME_SIMON1DEMO, "GDEMO"}, + {"ff", "The Feeble Files", GAME_FEEBLEFILES, "GAME22"}, {NULL, NULL, 0, NULL} }; @@ -261,6 +262,20 @@ static const GameSpecificSettings simon2dos_settings = { "", // flac_effects_filename "GAME32", // gamepc_filename }; + +static const GameSpecificSettings feeblefiles_settings = { + "", // gme_filename + "", // wav_filename + "", // voc_filename + "", // mp3_filename + "", // vorbis_filename + "", // flac_filename + "", // voc_effects_filename + "", // mp3_effects_filename + "", // vorbis_effects_filename + "", // flac_effects_filename + "GAME22", // gamepc_filename +}; #endif static const char* bad_versions[3] = { @@ -378,7 +393,9 @@ SimonEngine::SimonEngine(GameDetector *detector, OSystem *syst) } _language = Common::parseLanguage(ConfMan.get("language")); - if (_game & GF_SIMON2) { + if (_game == GAME_FEEBLEFILES) { + gss = PTR(feeblefiles_settings); + } else if (_game & GF_SIMON2) { if (_game & GF_TALKIE) { gss = PTR(simon2win_settings); @@ -1367,9 +1384,9 @@ void SimonEngine::loadTablesIntoMem(uint subr_id) { readSubroutineBlock(in); closeTablesFile(in); - if (_game & GF_SIMON2) { + if (_game == GAME_SIMON2DOS || _game == GAME_SIMON2WIN) { _sound->loadSfxTable(_gameFile, _gameOffsetsPtr[atoi(filename + 6) - 1 + SOUND_INDEX_BASE]); - } else if (_game & GF_TALKIE) { + } else if (_game == GAME_SIMON1TALKIE) { memcpy(filename, "SFXXXX", 6); _sound->readSfxFile(filename); } @@ -3815,7 +3832,8 @@ void SimonEngine::openGameFile() { #endif } - loadIconFile(); + if (_game != GAME_FEEBLEFILES) + loadIconFile(); vc34_setMouseOff(); |