/* Loads an area */ int Game::LoadMap(const char* ResRef, bool loadscreen) { unsigned int i; Map *newMap; PluginHolder<MapMgr> mM(IE_ARE_CLASS_ID); ScriptEngine *sE = core->GetGUIScriptEngine(); //this shouldn't happen if (!mM) { return -1; } int index = FindMap(ResRef); if (index>=0) { return index; } bool hide = false; if (loadscreen && sE) { hide = core->HideGCWindow(); sE->RunFunction("LoadScreen", "StartLoadScreen"); sE->RunFunction("LoadScreen", "SetLoadScreen"); } DataStream* ds = gamedata->GetResource( ResRef, IE_ARE_CLASS_ID ); if (!ds) { goto failedload; } if(!mM->Open(ds)) { goto failedload; } newMap = mM->GetMap(ResRef, IsDay()); if (!newMap) { goto failedload; } core->LoadProgress(100); for (i = 0; i < PCs.size(); i++) { if (stricmp( PCs[i]->Area, ResRef ) == 0) { newMap->AddActor( PCs[i] ); } } for (i = 0; i < NPCs.size(); i++) { if (stricmp( NPCs[i]->Area, ResRef ) == 0) { newMap->AddActor( NPCs[i] ); } } if (hide) { core->UnhideGCWindow(); } return AddMap( newMap ); failedload: if (hide) core->UnhideGCWindow(); core->LoadProgress(100); return -1; }
Map *Game::GetMap(const char *areaname, bool change) { int index = LoadMap(areaname, change); if (index >= 0) { if (change) { MapIndex = index; area = GetMap(index); memcpy (CurrentArea, areaname, 8); area->SetupAmbients(); //change the tileset if needed area->ChangeMap(IsDay()); ChangeSong(false, true); Infravision(); //call area customization script for PST //moved here because the current area is set here ScriptEngine *sE = core->GetGUIScriptEngine(); if (core->HasFeature(GF_AREA_OVERRIDE) && sE) { //area ResRef is accessible by GemRB.GetGameString (STR_AREANAME) sE->RunFunction("Maze", "CustomizeArea"); } return area; } return GetMap(index); } return NULL; }
/* Loads an area */ int Game::LoadMap(const char* ResRef, bool loadscreen) { unsigned int i, ret; Map *newMap; PluginHolder<MapMgr> mM(IE_ARE_CLASS_ID); ScriptEngine *sE = core->GetGUIScriptEngine(); //this shouldn't happen if (!mM) { return -1; } int index = FindMap(ResRef); if (index>=0) { return index; } bool hide = false; if (loadscreen && sE) { hide = core->HideGCWindow(); sE->RunFunction("LoadScreen", "StartLoadScreen"); sE->RunFunction("LoadScreen", "SetLoadScreen"); } DataStream* ds = gamedata->GetResource( ResRef, IE_ARE_CLASS_ID ); if (!ds) { goto failedload; } if(!mM->Open(ds)) { goto failedload; } newMap = mM->GetMap(ResRef, IsDay()); if (!newMap) { goto failedload; } core->LoadProgress(100); ret = AddMap( newMap ); //spawn creatures on a map already in the game //this feature exists in all blackisle games but not in bioware games if (core->HasFeature(GF_SPAWN_INI)) { newMap->LoadIniSpawn(); } for (i = 0; i < PCs.size(); i++) { if (stricmp( PCs[i]->Area, ResRef ) == 0) { newMap->AddActor( PCs[i], false ); } } PlacePersistents(newMap, ResRef); if (hide) { core->UnhideGCWindow(); } newMap->InitActors(); return ret; failedload: if (hide) { core->UnhideGCWindow(); } core->LoadProgress(100); return -1; }