int load_game_file() { int res; game_paused = 0; // reset the game paused flag ifacepopped = -1; //----------------------------------------------------------- // Start reading from file //----------------------------------------------------------- Stream *in = game_file_open(); if (in==NULL) return -1; our_eip=-18; setup_script_exports(); our_eip=-16; res = game_file_read_version(in); if (res != RETURN_CONTINUE) { return res; } game.charScripts = NULL; game.invScripts = NULL; memset(&game.spriteflags[0], 0, MAX_SPRITES); ReadGameSetupStructBase_Aligned(in); // The earlier versions of AGS provided support for "upscaling" low-res // games (320x200 and 320x240) to hi-res (640x400 and 640x480 // respectively). The script API has means for detecting if the game is // running upscaled, and game developer could use this opportunity to setup // game accordingly (e.g. assign hi-res fonts, etc). // This feature is officially deprecated since 3.1.0, however the engine // itself still supports it, technically. // This overriding option re-enables "upscaling". It works ONLY for low-res // resolutions, such as 320x200 and 320x240. if (usetup.override_upscale) { if (game.default_resolution == 1) game.default_resolution = 3; else if (game.default_resolution == 2) game.default_resolution = 4; } if (filever < kGameVersion_312) { // Fix animation speed for old formats game.options[OPT_GLOBALTALKANIMSPD] = 5; } else if (filever < kGameVersion_330) { // Convert game option for 3.1.2 - 3.2 games game.options[OPT_GLOBALTALKANIMSPD] = game.options[OPT_GLOBALTALKANIMSPD] != 0 ? 5 : (-5 - 1); } if (game.numfonts > MAX_FONTS) quit("!This game requires a newer version of AGS. Too many fonts for this version to handle."); GameSetupStruct::GAME_STRUCT_READ_DATA read_data; read_data.filever = filever; read_data.saveGameSuffix = saveGameSuffix; read_data.max_audio_types= MAX_AUDIO_TYPES; read_data.game_file_name = game_file_name; //----------------------------------------------------- game.ReadFromFile_Part1(in, read_data); //----------------------------------------------------- if (!game.load_compiled_script) quit("No global script in game; data load error"); gamescript = ccScript::CreateFromStream(in); if (gamescript == NULL) quit("Global script load failed; need newer version?"); game_file_read_dialog_script(in); game_file_read_script_modules(in); our_eip=-15; charextra = (CharacterExtras*)calloc(game.numcharacters, sizeof(CharacterExtras)); mls = (MoveList*)calloc(game.numcharacters + MAX_INIT_SPR + 1, sizeof(MoveList)); actSpsCount = game.numcharacters + MAX_INIT_SPR + 2; actsps = (Bitmap **)calloc(actSpsCount, sizeof(Bitmap *)); actspsbmp = (IDriverDependantBitmap**)calloc(actSpsCount, sizeof(IDriverDependantBitmap*)); actspswb = (Bitmap **)calloc(actSpsCount, sizeof(Bitmap *)); actspswbbmp = (IDriverDependantBitmap**)calloc(actSpsCount, sizeof(IDriverDependantBitmap*)); actspswbcache = (CachedActSpsData*)calloc(actSpsCount, sizeof(CachedActSpsData)); game.charProps = (CustomProperties*)calloc(game.numcharacters, sizeof(CustomProperties)); allocate_memory_for_views(game.numviews); int iteratorCount = 0; game_file_read_views(in); our_eip=-14; if (filever <= kGameVersion_251) // <= 2.1 skip unknown data { int count = in->ReadInt32(); in->Seek(Common::kSeekCurrent, count * 0x204); } charcache = (CharacterCache*)calloc(1,sizeof(CharacterCache)*game.numcharacters+5); //----------------------------------------------------- game.ReadFromFile_Part2(in, read_data); //----------------------------------------------------- game_file_set_default_glmsg(); our_eip=-13; game_file_read_dialogs(in); game_file_read_gui(in); if (filever >= kGameVersion_260) // >= 2.60 { platform->ReadPluginsFromDisk(in); } //----------------------------------------------------- game.ReadFromFile_Part3(in, read_data); //----------------------------------------------------- game_file_set_score_sound(read_data); delete in; //----------------------------------------------------------- // Reading from file is finished here //----------------------------------------------------------- update_gui_zorder(); if (game.numfonts == 0) return -2; // old v2.00 version our_eip=-11; init_and_register_game_objects(); our_eip = -23; platform->StartPlugins(); our_eip = -24; ccSetScriptAliveTimer(150000); ccSetStringClassImpl(&myScriptStringImpl); if (create_global_script()) return -3; return 0; }
int load_game_file() { int res; game_paused = 0; // reset the game paused flag ifacepopped = -1; //----------------------------------------------------------- // Start reading from file //----------------------------------------------------------- Stream *in = game_file_open(); if (in==NULL) return -1; our_eip=-18; setup_script_exports(); our_eip=-16; res = game_file_read_version(in); if (res != RETURN_CONTINUE) { return res; } game.charScripts = NULL; game.invScripts = NULL; memset(&game.spriteflags[0], 0, MAX_SPRITES); ReadGameSetupStructBase_Aligned(in); if (filever <= kGameVersion_300) { // Fix animation speed for old formats game.options[OPT_OLDTALKANIMSPD] = 1; } // 3.20: Fixed GUI AdditiveOpacity mode not working properly if you tried to have a non-alpha sprite on an alpha GUI if (loaded_game_file_version < kGameVersion_320) { // Force new style rendering for gui sprites with alpha channel game.options[OPT_NEWGUIALPHA] = 1; } init_blenders((GameGuiAlphaRenderingStyle)game.options[OPT_NEWGUIALPHA]); if (game.numfonts > MAX_FONTS) quit("!This game requires a newer version of AGS. Too many fonts for this version to handle."); GameSetupStruct::GAME_STRUCT_READ_DATA read_data; read_data.filever = filever; read_data.saveGameSuffix = saveGameSuffix; read_data.max_audio_types= MAX_AUDIO_TYPES; read_data.game_file_name = game_file_name; //----------------------------------------------------- game.ReadFromFile_Part1(in, read_data); //----------------------------------------------------- if (game.compiled_script == NULL) quit("No global script in game; data load error"); gamescript = ccScript::CreateFromStream(in); if (gamescript == NULL) quit("Global script load failed; need newer version?"); game_file_read_dialog_script(in); game_file_read_script_modules(in); our_eip=-15; charextra = (CharacterExtras*)calloc(game.numcharacters, sizeof(CharacterExtras)); mls = (MoveList*)calloc(game.numcharacters + MAX_INIT_SPR + 1, sizeof(MoveList)); actSpsCount = game.numcharacters + MAX_INIT_SPR + 2; actsps = (Bitmap **)calloc(actSpsCount, sizeof(Bitmap *)); actspsbmp = (IDriverDependantBitmap**)calloc(actSpsCount, sizeof(IDriverDependantBitmap*)); actspswb = (Bitmap **)calloc(actSpsCount, sizeof(Bitmap *)); actspswbbmp = (IDriverDependantBitmap**)calloc(actSpsCount, sizeof(IDriverDependantBitmap*)); actspswbcache = (CachedActSpsData*)calloc(actSpsCount, sizeof(CachedActSpsData)); game.charProps = (CustomProperties*)calloc(game.numcharacters, sizeof(CustomProperties)); allocate_memory_for_views(game.numviews); int iteratorCount = 0; game_file_read_views(in); our_eip=-14; if (filever <= kGameVersion_251) // <= 2.1 skip unknown data { int count = in->ReadInt32(); in->Seek(Common::kSeekCurrent, count * 0x204); } charcache = (CharacterCache*)calloc(1,sizeof(CharacterCache)*game.numcharacters+5); //----------------------------------------------------- game.ReadFromFile_Part2(in, read_data); //----------------------------------------------------- game_file_set_default_glmsg(); our_eip=-13; game_file_read_dialogs(in); game_file_read_gui(in); if (filever >= kGameVersion_260) // >= 2.60 { platform->ReadPluginsFromDisk(in); } //----------------------------------------------------- game.ReadFromFile_Part3(in, read_data); //----------------------------------------------------- game_file_set_score_sound(read_data); delete in; //----------------------------------------------------------- // Reading from file is finished here //----------------------------------------------------------- update_gui_zorder(); if (game.numfonts == 0) return -2; // old v2.00 version our_eip=-11; init_and_register_game_objects(); our_eip = -23; platform->StartPlugins(); our_eip = -24; ccSetScriptAliveTimer(150000); ccSetStringClassImpl(&myScriptStringImpl); if (create_global_script()) return -3; return 0; }