void P_ReadACSDefereds (PNGHandle *png) { BYTE namelen; char mapname[256]; size_t chunklen; P_RemoveDefereds (); if ((chunklen = M_FindPNGChunk (png, ACSD_ID)) != 0) { FPNGChunkArchive arc (png->File->GetFile(), ACSD_ID, chunklen); arc << namelen; while (namelen) { arc.Read (mapname, namelen); mapname[namelen] = 0; level_info_t *i = FindLevelInfo (mapname); if (i == NULL) { I_Error ("Unknown map '%s' in savegame", mapname); } arc << i->defered; arc << namelen; } } png->File->ResetFilePtr(); }
void P_ReadACSDefereds (PNGHandle *png) { BYTE namelen; char mapname[256]; FString MapName; size_t chunklen; P_RemoveDefereds (); if ((chunklen = M_FindPNGChunk (png, ACSD_ID)) != 0) { FPNGChunkArchive arc (png->File->GetFile(), ACSD_ID, chunklen); if (SaveVersion < 4508) { arc << namelen; while (namelen != 0) { arc.Read(mapname, namelen); mapname[namelen] = 0; level_info_t *i = FindLevelInfo(mapname); if (i == NULL) { I_Error("Unknown map '%s' in savegame", mapname); } arc << i->defered; arc << namelen; } } else { while (arc << MapName, MapName.Len() > 0) { level_info_t *i = FindLevelInfo(MapName); if (i == NULL) { I_Error("Unknown map '%s' in savegame", MapName.GetChars()); } arc << i->defered; } } } png->File->ResetFilePtr(); }
void P_ReadACSDefereds (FSerializer &arc) { FString MapName; P_RemoveDefereds (); if (arc.BeginObject("deferred")) { const char *key; while ((key = arc.GetKey())) { level_info_t *i = FindLevelInfo(key); if (i == NULL) { I_Error("Unknown map '%s' in savegame", key); } arc(nullptr, i->deferred); } arc.EndObject(); } }
void P_ReadACSDefereds (PNGHandle *png) { FString MapName; size_t chunklen; P_RemoveDefereds (); if ((chunklen = M_FindPNGChunk (png, ACSD_ID)) != 0) { FPNGChunkArchive arc (png->File->GetFile(), ACSD_ID, chunklen); while (arc << MapName, MapName.Len() > 0) { level_info_t *i = FindLevelInfo(MapName); if (i == NULL) { I_Error("Unknown map '%s' in savegame", MapName.GetChars()); } arc << i->defered; } } png->File->ResetFilePtr(); }
void G_InitNew (const char *mapname, bool bTitleLevel) { EGameSpeed oldSpeed; bool wantFast; int i; G_ClearHubInfo(); if (!savegamerestore) { G_ClearSnapshots (); P_RemoveDefereds (); // [RH] Mark all levels as not visited for (unsigned int i = 0; i < wadlevelinfos.Size(); i++) wadlevelinfos[i].flags = wadlevelinfos[i].flags & ~LEVEL_VISITED; } UnlatchCVars (); G_VerifySkill(); UnlatchCVars (); if (paused) { paused = 0; S_ResumeSound (false); } if (StatusBar != NULL) { StatusBar->Destroy(); StatusBar = NULL; } if (bTitleLevel) { StatusBar = new DBaseStatusBar (0); } else if (SBarInfoScript[SCRIPT_CUSTOM] != NULL) { int cstype = SBarInfoScript[SCRIPT_CUSTOM]->GetGameType(); //Did the user specify a "base" if(cstype == GAME_Strife) { StatusBar = CreateStrifeStatusBar(); } else if(cstype == GAME_Any) //Use the default, empty or custom. { StatusBar = CreateCustomStatusBar(SCRIPT_CUSTOM); } else { StatusBar = CreateCustomStatusBar(SCRIPT_DEFAULT); } } if (StatusBar == NULL) { if (gameinfo.gametype & (GAME_DoomChex|GAME_Heretic|GAME_Hexen)) { StatusBar = CreateCustomStatusBar (SCRIPT_DEFAULT); } else if (gameinfo.gametype == GAME_Strife) { StatusBar = CreateStrifeStatusBar (); } else { StatusBar = new DBaseStatusBar (0); } } GC::WriteBarrier(StatusBar); StatusBar->AttachToPlayer (&players[consoleplayer]); StatusBar->NewGame (); setsizeneeded = true; if (gameinfo.gametype == GAME_Strife || (SBarInfoScript[SCRIPT_CUSTOM] != NULL && SBarInfoScript[SCRIPT_CUSTOM]->GetGameType() == GAME_Strife)) { // Set the initial quest log text for Strife. for (i = 0; i < MAXPLAYERS; ++i) { players[i].SetLogText ("Find help"); } } // [RH] If this map doesn't exist, bomb out if (!P_CheckMapData(mapname)) { I_Error ("Could not find map %s\n", mapname); } oldSpeed = GameSpeed; wantFast = !!G_SkillProperty(SKILLP_FastMonsters); GameSpeed = wantFast ? SPEED_Fast : SPEED_Normal; if (!savegamerestore) { if (!netgame && !demorecording && !demoplayback) { // [RH] Change the random seed for each new single player game // [ED850] The demo already sets the RNG. rngseed = use_staticrng ? staticrngseed : (rngseed + 1); } FRandom::StaticClearRandom (); P_ClearACSVars(true); level.time = 0; level.maptime = 0; level.totaltime = 0; if (!multiplayer || !deathmatch) { InitPlayerClasses (); } // force players to be initialized upon first level load for (i = 0; i < MAXPLAYERS; i++) players[i].playerstate = PST_ENTER; // [BC] STAT_StartNewGame(mapname); } usergame = !bTitleLevel; // will be set false if a demo paused = 0; demoplayback = false; automapactive = false; viewactive = true; V_SetBorderNeedRefresh(); //Added by MC: Initialize bots. if (!deathmatch) { bglobal.Init (); } level.MapName = mapname; if (bTitleLevel) { gamestate = GS_TITLELEVEL; } else if (gamestate != GS_STARTUP) { gamestate = GS_LEVEL; } G_DoLoadLevel (0, false); }