ResidualVM logo ResidualVM website - Forums - Contact us BuildBot - Doxygen - Wiki curved edge

detection.cpp

Go to the documentation of this file.
00001 /* ResidualVM - A 3D game interpreter
00002  *
00003  * ResidualVM is the legal property of its developers, whose names
00004  * are too numerous to list here. Please refer to the COPYRIGHT
00005  * file distributed with this source distribution.
00006  *
00007  * This program is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU General Public License
00009  * as published by the Free Software Foundation; either version 2
00010  * of the License, or (at your option) any later version.
00011  *
00012  * This program is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015  * GNU General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU General Public License
00018  * along with this program; if not, write to the Free Software
00019  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00020  *
00021  */
00022 
00023 #include "engines/advancedDetector.h"
00024 #include "engines/obsolete.h"
00025 
00026 #include "engines/grim/grim.h"
00027 #include "engines/grim/savegame.h"
00028 #include "engines/grim/emi/emi.h"
00029 
00030 #include "common/config-manager.h"
00031 #include "common/system.h"
00032 #include "common/savefile.h"
00033 #include "common/translation.h"
00034 
00035 namespace Grim {
00036 
00037 struct GrimGameDescription {
00038     ADGameDescription desc;
00039     GrimGameType gameType;
00040 };
00041 
00042 static const PlainGameDescriptor grimGames[] = {
00043     {"grim", "Grim Fandango"},
00044     {"monkey4", "Escape From Monkey Island"},
00045     {nullptr, nullptr}
00046 };
00047 
00048 #define GAMEOPTION_LOAD_DATAUSR GUIO_GAMEOPTIONS1
00049 #define GAMEOPTION_SHOW_FPS GUIO_GAMEOPTIONS2
00050 
00051 #define GUI_OPTIONS_GRIME GUIO2(GAMEOPTION_LOAD_DATAUSR, GAMEOPTION_SHOW_FPS)
00052 
00053 static const ADExtraGuiOptionsMap gameGuiOptions[] = {
00054     {
00055         GAMEOPTION_LOAD_DATAUSR,
00056         {
00057             _s("Load user patch (unsupported)"),
00058             _s("Load an user patch. Please note that the ResidualVM-team doesn't provide support for using such patches."),
00059             "datausr_load",
00060             false
00061         }
00062     },
00063     {
00064         GAMEOPTION_SHOW_FPS,
00065         {
00066             _s("Show FPS"),
00067             _s("Show the current FPS-rate, while you play."),
00068             "show_fps",
00069             false
00070         }
00071     },
00072 
00073     AD_EXTRA_GUI_OPTIONS_TERMINATOR
00074 };
00075 
00076 static const GrimGameDescription gameDescriptions[] = {
00077     {
00078         // Grim Fandango English version (patched)
00079         {
00080             "grim",
00081             "",
00082             AD_ENTRY1s("VOX0001.LAB", "444f05f2af689c1bffd179b8b6a632bd", 57993159),
00083             Common::EN_ANY,
00084             Common::kPlatformWindows,
00085             ADGF_NO_FLAGS,
00086             GUI_OPTIONS_GRIME
00087         },
00088         GType_GRIM
00089     },
00090     {
00091         // Grim Fandango English version (unpatched)
00092         {
00093             "grim",
00094             "",
00095             AD_ENTRY1s("VOX0001.LAB", "8b12ed530195c6c577436df27df62ecb", 58011176),
00096             Common::EN_ANY,
00097             Common::kPlatformWindows,
00098             ADGF_NO_FLAGS,
00099             GUI_OPTIONS_GRIME
00100         },
00101         GType_GRIM
00102     },
00103     {
00104         // Grim Fandango French version (un/patched ???)
00105         {
00106             "grim",
00107             "",
00108             AD_ENTRY1s("VOX0001.LAB", "19bc0dc9554257b1f021463de54f359f", 56268691),
00109             Common::FR_FRA,
00110             Common::kPlatformWindows,
00111             ADGF_NO_FLAGS,
00112             GUI_OPTIONS_GRIME
00113         },
00114         GType_GRIM
00115     },
00116     {
00117         // Grim Fandango Portuguese version
00118         {
00119             "grim",
00120             "",
00121             AD_ENTRY1s("VOX0001.LAB", "89da4d4f4f90a8ea390450ed5a617f08", 57875710),
00122             Common::PT_BRA,
00123             Common::kPlatformWindows,
00124             ADGF_NO_FLAGS,
00125             GUI_OPTIONS_GRIME
00126         },
00127         GType_GRIM
00128     },
00129     {
00130         // Grim Fandango Italian version
00131         {
00132             "grim",
00133             "",
00134             AD_ENTRY1s("VOX0001.LAB", "9e7075f3fb0427ae8136b290538d07dd", 62185775),
00135             Common::IT_ITA,
00136             Common::kPlatformWindows,
00137             ADGF_NO_FLAGS,
00138             GUI_OPTIONS_GRIME
00139         },
00140         GType_GRIM
00141     },
00142     {
00143         // Grim Fandango Spanish version (patched)
00144         {
00145             "grim",
00146             "",
00147             AD_ENTRY1s("VOX0001.LAB", "85d3e9504c481c5ccf2119ea6e0f4e2f", 53831340),
00148             Common::ES_ESP,
00149             Common::kPlatformWindows,
00150             ADGF_NO_FLAGS,
00151             GUI_OPTIONS_GRIME
00152         },
00153         GType_GRIM
00154     },
00155     {
00156         // Grim Fandango German version
00157         {
00158             "grim",
00159             "",
00160             AD_ENTRY1s("VOX0001.LAB", "d304aa402098de5966816c0a11e45816", 66829347),
00161             Common::DE_DEU,
00162             Common::kPlatformWindows,
00163             ADGF_NO_FLAGS,
00164             GUI_OPTIONS_GRIME
00165         },
00166         GType_GRIM
00167     },
00168 /*  {
00169         // Grim Fandango German version (patched)
00170         {
00171             "grim",
00172             "",
00173             AD_ENTRY1s("grim.tab", "464138caf47e580cbb237dee10674b16", 398671),
00174             Common::DE_DEU,
00175             Common::kPlatformWindows,
00176             ADGF_NO_FLAGS,
00177             GUI_OPTIONS_GRIME
00178         },
00179         GType_GRIM
00180     },
00181     {
00182         // Grim Fandango Spanish version
00183         {
00184             "grim",
00185             "",
00186             AD_ENTRY1s("grim.tab", "b1460cd029f13718f7f62c2403e047ec", 372709),
00187             Common::ES_ESP,
00188             Common::kPlatformWindows,
00189             ADGF_NO_FLAGS,
00190             GUI_OPTIONS_GRIME
00191         },
00192         GType_GRIM
00193     },
00194     {
00195         // Grim Fandango Spanish version (patched)
00196         {
00197             "grim",
00198             "",
00199             AD_ENTRY1s("grim.tab", "b1460cd029f13718f7f62c2403e047ec", 372020),
00200             Common::ES_ESP,
00201             Common::kPlatformWindows,
00202             ADGF_NO_FLAGS,
00203             GUI_OPTIONS_GRIME
00204         },
00205         GType_GRIM
00206     },
00207     {
00208         // Grim Fandango Italian version (patched)
00209         {
00210             "grim",
00211             "",
00212             AD_ENTRY1s("grim.tab", "2d99c796b7a4e5c421cae49dc29dab6c", 369242),
00213             Common::IT_ITA,
00214             Common::kPlatformWindows,
00215             ADGF_NO_FLAGS,
00216             GUI_OPTIONS_GRIME
00217         },
00218         GType_GRIM
00219     },
00220     {
00221         // Grim Fandango French version (patched)
00222         {
00223             "grim",
00224             "",
00225             AD_ENTRY1s("grim.tab", "3bd00ca87214862c012ac99e1758dd83", 386292),
00226             Common::FR_FRA,
00227             Common::kPlatformWindows,
00228             ADGF_NO_FLAGS,
00229             GUI_OPTIONS_GRIME
00230         },
00231         GType_GRIM
00232     },
00233     {
00234         // Grim Fandango Portuguese version (patched)
00235         {
00236             "grim",
00237             "",
00238             AD_ENTRY1s("grim.tab", "4dc16be476bb6036b423bc331ca8281a", 362994),
00239             Common::PT_BRA,
00240             Common::kPlatformWindows,
00241             ADGF_NO_FLAGS,
00242             GUI_OPTIONS_GRIME
00243         },
00244         GType_GRIM
00245     },
00246 */  {
00247         // Grim Fandango English demo version
00248         {
00249             "grim",
00250             "Demo",
00251             AD_ENTRY1s("gfdemo01.lab", "755cdac083f7f751bec7506402278f1a", 29489930),
00252             Common::EN_ANY,
00253             Common::kPlatformWindows,
00254             ADGF_DEMO,
00255             GUI_OPTIONS_GRIME
00256         },
00257         GType_GRIM
00258     },
00259     {
00260         // Grim Fandango English demo version (with intro video)
00261         {
00262             "grim",
00263             "Demo",
00264             AD_ENTRY1s("gdemo001.lab", "c04c814093be829c4811a3a0aa80833d", 46615911),
00265             Common::EN_ANY,
00266             Common::kPlatformWindows,
00267             ADGF_DEMO,
00268             GUI_OPTIONS_GRIME
00269         },
00270         GType_GRIM
00271     },
00272     {
00273         // Grim Fandango French demo version
00274         {
00275             "grim",
00276             "Demo",
00277             {
00278                 {"gfdemo01.lab", 0, "7df813f3809f2c0234213cfa4f6da062", 29533695},
00279                 {"voice001.lab", 0, "7df474e03c23692ed02e4ce45f1a6b30", 13764168},
00280             },
00281             Common::FR_FRA,
00282             Common::kPlatformWindows,
00283             ADGF_DEMO,
00284             GUI_OPTIONS_GRIME
00285         },
00286         GType_GRIM
00287     },
00288 
00289     {
00290         // Grim Fandango German demo version
00291         {
00292             "grim",
00293             "Demo",
00294             {
00295                 {"gfdemo01.lab", 0, "7df813f3809f2c0234213cfa4f6da062", 29533695},
00296                 {"voice001.lab", 0, "2788dc7fd226787f3a68ac9c853d2580", 16561196},
00297             },
00298             Common::DE_DEU,
00299             Common::kPlatformWindows,
00300             ADGF_DEMO,
00301             GUI_OPTIONS_GRIME
00302         },
00303         GType_GRIM
00304     },
00305 
00306     {
00307         // Grim Fandango Italian demo version
00308         {
00309             "grim",
00310             "Demo",
00311             {
00312                 {"gfdemo01.lab", 0, "7df813f3809f2c0234213cfa4f6da062", 29533695},
00313                 {"voice001.lab", 0, "3b8ace62584380c66b73981e014ea40e", 14907410},
00314             },
00315             Common::IT_ITA,
00316             Common::kPlatformWindows,
00317             ADGF_DEMO,
00318             GUI_OPTIONS_GRIME
00319         },
00320         GType_GRIM
00321     },
00322 
00323     {
00324         // Grim Fandango Spanish demo version
00325         {
00326             "grim",
00327             "Demo",
00328             {
00329                 {"gfdemo01.lab", 0, "7df813f3809f2c0234213cfa4f6da062", 29533695},
00330                 {"voice001.lab", 0, "a810ec11acaf9d76cd04d2f68fcdc912", 13367206},
00331             },
00332             Common::ES_ESP,
00333             Common::kPlatformWindows,
00334             ADGF_DEMO,
00335             GUI_OPTIONS_GRIME
00336         },
00337         GType_GRIM
00338     },
00339 #ifdef ENABLE_MONKEY4
00340     {
00341         // Escape from Monkey Island English
00342         {
00343             "monkey4",
00344             "",
00345             AD_ENTRY1s("artAll.m4b", "61959da91d864bf5f4588daa4a5a3019", 18515664),
00346             Common::EN_ANY,
00347             Common::kPlatformWindows,
00348             ADGF_UNSTABLE,
00349             GUI_OPTIONS_GRIME
00350         },
00351         GType_MONKEY4
00352     },
00353     {
00354         // Escape from Monkey Island German
00355         {
00356             "monkey4",
00357             "",
00358             AD_ENTRY1s("artAll.m4b", "007a33881478be6b6e0228d8888536ae", 18512568),
00359             Common::DE_DEU,
00360             Common::kPlatformWindows,
00361             ADGF_UNSTABLE,
00362             GUI_OPTIONS_GRIME
00363         },
00364         GType_MONKEY4
00365     },
00366     {
00367         // Escape from Monkey Island Italian
00368         {
00369             "monkey4",
00370             "",
00371             AD_ENTRY1s("artAll.m4b", "d2f010c1cd1fd002eea403282a6b9a1e", 18513451),
00372             Common::IT_ITA,
00373             Common::kPlatformWindows,
00374             ADGF_UNSTABLE,
00375             GUI_OPTIONS_GRIME
00376         },
00377         GType_MONKEY4
00378     },
00379     {
00380         // Escape from Monkey Island Spanish
00381         {
00382             "monkey4",
00383             "",
00384             AD_ENTRY1s("artAll.m4b", "0d459954031c086a0448d2eb3fa068a1", 18514404),
00385             Common::ES_ESP,
00386             Common::kPlatformWindows,
00387             ADGF_UNSTABLE,
00388             GUI_OPTIONS_GRIME
00389         },
00390         GType_MONKEY4
00391     },
00392     {
00393         // Escape from Monkey Island French
00394         {
00395             "monkey4",
00396             "",
00397             AD_ENTRY1s("artAll.m4b", "151af0a694382af873f325fcea293bb1", 18514420),
00398             Common::FR_FRA,
00399             Common::kPlatformWindows,
00400             ADGF_UNSTABLE,
00401             GUI_OPTIONS_GRIME
00402         },
00403         GType_MONKEY4
00404     },
00405     {
00406         // Escape from Monkey Island Portuguese
00407         {
00408             "monkey4",
00409             "",
00410             AD_ENTRY1s("artAll.m4b", "030e7637aee7886a3caad60cf102f797", 18515747),
00411             Common::PT_BRA,
00412             Common::kPlatformWindows,
00413             ADGF_UNSTABLE,
00414             GUI_OPTIONS_GRIME
00415         },
00416         GType_MONKEY4
00417     },
00418     {
00419         // Escape from Monkey Island Russian
00420         {
00421             "monkey4",
00422             "",
00423             AD_ENTRY1s("artAll.m4b", "779561a70a11dd5686974f122fc1516c", 18500052),
00424             Common::RU_RUS,
00425             Common::kPlatformWindows,
00426             ADGF_UNSTABLE,
00427             GUI_OPTIONS_GRIME
00428         },
00429         GType_MONKEY4
00430     },
00431     {
00432         // Escape from Monkey Island German (Mac)
00433         {
00434             "monkey4",
00435             "",
00436             {
00437                 {"artAll.m4b", 0, "007a33881478be6b6e0228d8888536ae", 18512568},
00438                 {"EFMI Installer", 0, "54298c7440dafedf33d2b27c7bb24052", 9241784},
00439                 AD_LISTEND
00440             },
00441             Common::DE_DEU,
00442             Common::kPlatformMacintosh,
00443             ADGF_UNSTABLE,
00444             GUI_OPTIONS_GRIME
00445         },
00446         GType_MONKEY4
00447     },
00448     {
00449         // Escape from Monkey Island English PS2
00450         {
00451             "monkey4",
00452             "",
00453             AD_ENTRY1s("artAll.m4b", "0dc9a4df0d8553f277d8dc8e23b6249d", 34593974),
00454             Common::EN_ANY,
00455             Common::kPlatformPS2,
00456             ADGF_UNSTABLE,
00457             GUI_OPTIONS_GRIME
00458         },
00459         GType_MONKEY4
00460     },
00461     {
00462         // Escape from Monkey Island German PS2
00463         {
00464             "monkey4",
00465             "",
00466             AD_ENTRY1s("artAll.m4b", "5b5c7a3964c168eab44b82981db357d8", 34642186),
00467             Common::DE_DEU,
00468             Common::kPlatformPS2,
00469             ADGF_UNSTABLE,
00470             GUI_OPTIONS_GRIME
00471         },
00472         GType_MONKEY4
00473     },
00474     {
00475         // Escape from Monkey Island Italian PS2
00476         {
00477             "monkey4",
00478             "",
00479             AD_ENTRY1s("artAll.m4b", "2de68c8fd955c1a3c50202b072bde0cb", 34642651),
00480             Common::IT_ITA,
00481             Common::kPlatformPS2,
00482             ADGF_UNSTABLE,
00483             GUI_OPTIONS_GRIME
00484         },
00485         GType_MONKEY4
00486     },
00487     {
00488         // Escape from Monkey Island Spanish PS2
00489         {
00490             "monkey4",
00491             "",
00492             AD_ENTRY1s("artAll.m4b", "ff6689dcca36c249ec834a3019aeb397", 34642656),
00493             Common::ES_ESP,
00494             Common::kPlatformPS2,
00495             ADGF_UNSTABLE,
00496             GUI_OPTIONS_GRIME
00497         },
00498         GType_MONKEY4
00499     },
00500     {
00501         // Escape from Monkey Island French PS2
00502         {
00503             "monkey4",
00504             "",
00505             AD_ENTRY1s("artAll.m4b", "5ce964a19a8672944b9b62170e45ce28", 34593681),
00506             Common::FR_FRA,
00507             Common::kPlatformPS2,
00508             ADGF_UNSTABLE,
00509             GUI_OPTIONS_GRIME
00510         },
00511         GType_MONKEY4
00512     },
00513     {
00514         // Escape from Monkey Island demo (English)
00515         {
00516             "monkey4",
00517             "Demo",
00518             {
00519                 {"magdemo.lab", 0, "9e7eaa1b9317ff47d5deeda0b2c42ce3", 19826116},
00520                 {"i9n.lab", 0, "274f8579b01e0872fe6f1ba267266149", 26951},
00521                 AD_LISTEND
00522             },
00523             Common::EN_ANY,
00524             Common::kPlatformWindows,
00525             ADGF_DEMO | ADGF_UNSTABLE,
00526             GUI_OPTIONS_GRIME
00527         },
00528         GType_MONKEY4
00529     },
00530     {
00531         // Escape from Monkey Island demo (French)
00532         {
00533             "monkey4",
00534             "Demo",
00535             {
00536                 {"magdemo.lab", 0, "9e7eaa1b9317ff47d5deeda0b2c42ce3", 19826116},
00537                 {"i9n.lab", 0, "7f1744990472261bdcbc02036ba9f7ec", 1718385},
00538                 AD_LISTEND
00539             },
00540             Common::FR_FRA,
00541             Common::kPlatformWindows,
00542             ADGF_DEMO | ADGF_UNSTABLE,
00543             GUI_OPTIONS_GRIME
00544         },
00545         GType_MONKEY4
00546     },
00547 
00548     {
00549         // Escape from Monkey Island demo (German)
00550         {
00551             "monkey4",
00552             "Demo",
00553             {
00554                 {"magdemo.lab", 0, "9e7eaa1b9317ff47d5deeda0b2c42ce3", 19826116},
00555                 {"i9n.lab", 0, "28f6bc270b5c31970cc110c7656ff598", 1749051},
00556                 AD_LISTEND
00557             },
00558             Common::DE_DEU,
00559             Common::kPlatformWindows,
00560             ADGF_DEMO | ADGF_UNSTABLE,
00561             GUI_OPTIONS_GRIME
00562         },
00563         GType_MONKEY4
00564     },
00565 
00566     {
00567         // Escape from Monkey Island demo (Spanish)
00568         {
00569             "monkey4",
00570             "Demo",
00571             {
00572                 {"magdemo.lab", 0, "9e7eaa1b9317ff47d5deeda0b2c42ce3", 19826116},
00573                 {"i9n.lab", 0, "53b20d930f6e8c2e0880ed7e336eeebc", 1740761},
00574                 AD_LISTEND
00575             },
00576             Common::ES_ESP,
00577             Common::kPlatformWindows,
00578             ADGF_DEMO | ADGF_UNSTABLE,
00579             GUI_OPTIONS_GRIME
00580         },
00581         GType_MONKEY4
00582     },
00583 #endif // ENABLE_MONKEY4
00584 
00585     { AD_TABLE_END_MARKER, GType_GRIM }
00586 };
00587 
00588 static const Engines::ObsoleteGameID obsoleteGameIDsTable[] = {
00589     {"grimdemo", "grim", Common::kPlatformWindows},
00590     {nullptr, nullptr, Common::kPlatformUnknown}
00591 };
00592 
00593 class GrimMetaEngine : public AdvancedMetaEngine {
00594 public:
00595     GrimMetaEngine() : AdvancedMetaEngine(Grim::gameDescriptions, sizeof(Grim::GrimGameDescription), grimGames, gameGuiOptions) {
00596         _guiOptions = GUIO_NOMIDI;
00597     }
00598 
00599     PlainGameDescriptor findGame(const char *gameid) const override {
00600         return Engines::findGameID(gameid, _gameIds, obsoleteGameIDsTable);
00601     }
00602 
00603     virtual const char *getName() const override {
00604         return "Grim Engine";
00605     }
00606 
00607     virtual const char *getOriginalCopyright() const override {
00608         return "LucasArts GrimE Games (C) LucasArts";
00609     }
00610 
00611     virtual Common::Error createInstance(OSystem *syst, Engine **engine) const override {
00612         Engines::upgradeTargetIfNecessary(obsoleteGameIDsTable);
00613         return AdvancedMetaEngine::createInstance(syst, engine);
00614     }
00615 
00616     virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const override;
00617 
00618     virtual bool hasFeature(MetaEngineFeature f) const override;
00619 
00620     virtual SaveStateList listSaves(const char *target) const override;
00621 };
00622 
00623 bool GrimMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
00624     const GrimGameDescription *gd = (const GrimGameDescription *)desc;
00625 
00626     if (gd) {
00627         if (gd->gameType == GType_MONKEY4) {
00628             *engine = new EMIEngine(syst, gd->desc.flags, gd->gameType, gd->desc.platform, gd->desc.language);
00629         } else {
00630             *engine = new GrimEngine(syst, gd->desc.flags, gd->gameType, gd->desc.platform, gd->desc.language);
00631         }
00632     }
00633 
00634     return gd != nullptr;
00635 }
00636 
00637 bool GrimMetaEngine::hasFeature(MetaEngineFeature f) const {
00638     return
00639         (f == kSupportsListSaves) ||
00640         (f == kSupportsLoadingDuringStartup);
00641 }
00642 
00643 SaveStateList GrimMetaEngine::listSaves(const char *target) const {
00644     Common::String gameId = ConfMan.get("gameid", target);
00645     Common::Platform platform = Common::parsePlatform(ConfMan.get("platform", target));
00646     Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
00647     Common::StringArray filenames;
00648     Common::String pattern = gameId == "monkey4" ? "efmi###.gsv" : "grim##.gsv";
00649     
00650     if (platform == Common::kPlatformPS2)
00651         pattern = "efmi###.ps2";
00652 
00653     filenames = saveFileMan->listSavefiles(pattern);
00654 
00655     SaveStateList saveList;
00656     char str[256];
00657     int32 strSize;
00658     for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) {
00659         // Obtain the last digits of the filename, since they correspond to the save slot
00660         int slotNum = atoi(file->c_str() + 4);
00661 
00662         if (slotNum >= 0) {
00663             SaveGame *savedState = SaveGame::openForLoading(*file);
00664             if (savedState && savedState->isCompatible()) {
00665                 if (platform == Common::kPlatformPS2)
00666                     savedState->beginSection('PS2S');
00667                 else
00668                     savedState->beginSection('SUBS');
00669                 strSize = savedState->readLESint32();
00670                 savedState->read(str, strSize);
00671                 savedState->endSection();
00672                 saveList.push_back(SaveStateDescriptor(slotNum, str));
00673             }
00674             delete savedState;
00675         }
00676     }
00677 
00678     Common::sort(saveList.begin(), saveList.end(), SaveStateDescriptorSlotComparator());
00679     return saveList;
00680 }
00681 
00682 } // End of namespace Grim
00683 
00684 #if PLUGIN_ENABLED_DYNAMIC(GRIM)
00685     REGISTER_PLUGIN_DYNAMIC(GRIM, PLUGIN_TYPE_ENGINE, Grim::GrimMetaEngine);
00686 #else
00687     REGISTER_PLUGIN_STATIC(GRIM, PLUGIN_TYPE_ENGINE, Grim::GrimMetaEngine);
00688 #endif


Generated on Sat Oct 19 2019 05:01:01 for ResidualVM by doxygen 1.7.1
curved edge   curved edge