void DThinker::SerializeAll (FArchive &arc, bool hubLoad, bool noStorePlayers) { DThinker *thinker; if (arc.IsStoring () && noStorePlayers) { thinker = FirstThinker; while (thinker) { // Don't store player mobjs. if (!(thinker->IsKindOf(RUNTIME_CLASS(AActor)) && static_cast<AActor *>(thinker)->type == MT_PLAYER)) { arc << (BYTE)1; arc << thinker; } thinker = thinker->m_Next; } arc << (BYTE)0; } else if (arc.IsStoring ()) { thinker = FirstThinker; while (thinker) { arc << (BYTE)1; arc << thinker; thinker = thinker->m_Next; } arc << (BYTE)0; } else { if (hubLoad || noStorePlayers) DestroyMostThinkers (); else DestroyAllThinkers (); BYTE more; arc >> more; while (more) { DThinker *thinker; arc >> thinker; arc >> more; } // killough 3/26/98: Spawn icon landings: P_SpawnBrainTargets (); } }
// // P_ArchivePlayers // void P_SerializePlayers (FArchive &arc) { size_t i; if (arc.IsStoring ()) { for (i = 0; i < players.size(); i++) arc << (int)players[i].playerstate; } else { int playerstate = (playerstate_t)0; for (i = 0; i < players.size(); i++) { arc >> playerstate; players[i].playerstate = (playerstate_t)playerstate; } } for (i = 0; i < players.size(); i++) { if (players[i].ingame()) players[i].Serialize (arc); } }
void DPlat::Serialize (FArchive &arc) { Super::Serialize (arc); if (arc.IsStoring ()) { arc << m_Speed << m_Low << m_High << m_Wait << m_Count << m_Status << m_OldStatus << m_Crush << m_Tag << m_Type; } else { arc >> m_Speed >> m_Low >> m_High >> m_Wait >> m_Count >> m_Status >> m_OldStatus >> m_Crush >> m_Tag >> m_Type; } }
void DThinker::SerializeAll (FArchive &arc, bool hubLoad) { DThinker *thinker; if (arc.IsStoring ()) { thinker = FirstThinker; while (thinker) { arc << (BYTE)1; arc << thinker; thinker = thinker->m_Next; } arc << (BYTE)0; } else { if (hubLoad) DestroyMostThinkers (); else DestroyAllThinkers (); BYTE more; arc >> more; while (more) { DThinker *thinker; arc >> thinker; arc >> more; } // killough 3/26/98: Spawn icon landings: P_SpawnBrainTargets (); } }
void DGlow::Serialize (FArchive &arc) { Super::Serialize (arc); if (arc.IsStoring ()) arc << m_Direction << m_MaxLight << m_MinLight; else arc >> m_Direction >> m_MaxLight >> m_MinLight; }
void DStrobe::Serialize (FArchive &arc) { Super::Serialize (arc); if (arc.IsStoring ()) arc << m_Count << m_MaxLight << m_MinLight << m_DarkTime << m_BrightTime; else arc >> m_Count >> m_MaxLight >> m_MinLight >> m_DarkTime >> m_BrightTime; }
void DPhased::Serialize (FArchive &arc) { Super::Serialize (arc); if (arc.IsStoring ()) arc << m_BaseLevel << m_Phase; else arc >> m_BaseLevel >> m_Phase; }
void DFireFlicker::Serialize (FArchive &arc) { Super::Serialize (arc); if (arc.IsStoring ()) arc << m_Count << m_MaxLight << m_MinLight; else arc >> m_Count >> m_MaxLight >> m_MinLight; }
void DGlow2::Serialize (FArchive &arc) { Super::Serialize (arc); if (arc.IsStoring ()) arc << m_End << m_MaxTics << m_OneShot << m_Start << m_Tics; else arc >> m_End >> m_MaxTics >> m_OneShot >> m_Start >> m_Tics; }
void DLightFlash::Serialize (FArchive &arc) { Super::Serialize (arc); if (arc.IsStoring ()) arc << m_Count << m_MaxLight << m_MaxTime << m_MinLight << m_MinTime; else arc >> m_Count >> m_MaxLight >> m_MaxTime >> m_MinLight >> m_MinTime; }
void DSectorEffect::Serialize (FArchive &arc) { Super::Serialize (arc); if (arc.IsStoring ()) arc << m_Sector; else arc >> m_Sector; }
void MapThing::Serialize (FArchive &arc) { if (arc.IsStoring ()) { arc << thingid << x << y << z << angle << type << flags; } else { arc >> thingid >> x >> y >> z >> angle >> type >> flags; } }
void P_SerializeRNGState (FArchive &arc) { if (arc.IsStoring ()) { arc << prndindex; } else { arc >> prndindex; } }
void Serialize(FArchive & arc) { arc << xpos << ypos << draw; if (arc.IsStoring()) { TexMan.WriteTexture(arc, texturenum); } else { texturenum = TexMan.ReadTexture(arc); } }
void MapThing::Serialize (FArchive &arc) { if (arc.IsStoring ()) { arc << thingid << x << y << z << angle << type << flags << special << args[0] << args[1] << args[2] << args[3] << args[4]; } else { arc >> thingid >> x >> y >> z >> angle >> type >> flags >> special >> args[0] >> args[1] >> args[2] >> args[3] >> args[4]; } }
// // P_ArchivePlayers // void P_SerializePlayers (FArchive &arc, bool skipload) { BYTE numPlayers, numPlayersNow; int i; // Count the number of players present right now. for (numPlayersNow = 0, i = 0; i < MAXPLAYERS; ++i) { if (playeringame[i]) { ++numPlayersNow; } } if (arc.IsStoring()) { // Record the number of players in this save. arc << numPlayersNow; // Record each player's name, followed by their data. for (i = 0; i < MAXPLAYERS; ++i) { if (playeringame[i]) { arc.WriteString (players[i].userinfo.GetName()); players[i].Serialize (arc); } } } else { arc << numPlayers; // If there is only one player in the game, they go to the // first player present, no matter what their name. if (numPlayers == 1) { ReadOnePlayer (arc, skipload); } else { ReadMultiplePlayers (arc, numPlayers, numPlayersNow, skipload); } if (!skipload && numPlayersNow > numPlayers) { SpawnExtraPlayers (); } // Redo pitch limits, since the spawned player has them at 0. players[consoleplayer].SendPitchLimits(); } }
void AScriptedMarine::Serialize (FArchive &arc) { Super::Serialize (arc); if (arc.IsStoring ()) { arc.WriteSprite (SpriteOverride); } else { SpriteOverride = arc.ReadSprite (); } arc << CurrentWeapon; }
static void G_SerializeHub(FArchive & arc) { int i=hubdata.Size(); arc << i; if (i>0) { if (arc.IsStoring()) arc.Write(&hubdata[0], i * sizeof(wbstartstruct_t)); else { hubdata.Resize(i); arc.Read(&hubdata[0], i * sizeof(wbstartstruct_t)); } } else hubdata.Clear(); }
void P_SerializePolyobjs (FArchive &arc) { int i; FPolyObj *po; if (arc.IsStoring ()) { int seg = ASEG_POLYOBJS; arc << seg << po_NumPolyobjs; for(i = 0, po = polyobjs; i < po_NumPolyobjs; i++, po++) { arc << po->tag << po->angle << po->StartSpot.x << po->StartSpot.y << po->interpolation; } } else { int data; angle_t angle; fixed_t deltaX, deltaY; arc << data; if (data != ASEG_POLYOBJS) I_Error ("Polyobject marker missing"); arc << data; if (data != po_NumPolyobjs) { I_Error ("UnarchivePolyobjs: Bad polyobj count"); } for (i = 0, po = polyobjs; i < po_NumPolyobjs; i++, po++) { arc << data; if (data != po->tag) { I_Error ("UnarchivePolyobjs: Invalid polyobj tag"); } arc << angle; po->RotatePolyobj (angle); arc << deltaX << deltaY << po->interpolation; deltaX -= po->StartSpot.x; deltaY -= po->StartSpot.y; po->MovePolyobj (deltaX, deltaY, true); } } }
void DEarthquake::Serialize (FArchive &arc) { int i; if (arc.IsStoring ()) { arc << m_Spot << m_Intensity << m_Countdown; for (i = 0; i < 4; i++) arc << m_TremorBox[i] << m_DamageBox[i]; } else { arc >> m_Spot >> m_Intensity >> m_Countdown; for (i = 0; i < 4; i++) arc >> m_TremorBox[i] >> m_DamageBox[i]; } }
void P_SerializePolyobjs (FArchive &arc) { int i; polyobj_t *po; if (arc.IsStoring ()) { arc << (int)ASEG_POLYOBJS << po_NumPolyobjs; for(i = 0, po = polyobjs; i < po_NumPolyobjs; i++, po++) { arc << po->tag << po->angle << po->startSpot[0] << po->startSpot[1] << po->startSpot[2]; } } else { int data; angle_t angle; fixed_t deltaX, deltaY, deltaZ; arc >> data; if (data != ASEG_POLYOBJS) I_Error ("Polyobject marker missing"); arc >> data; if (data != po_NumPolyobjs) { I_Error ("UnarchivePolyobjs: Bad polyobj count"); } for (i = 0, po = polyobjs; i < po_NumPolyobjs; i++, po++) { arc >> data; if (data != po->tag) { I_Error ("UnarchivePolyobjs: Invalid polyobj tag"); } arc >> angle; PO_RotatePolyobj (po->tag, angle); arc >> deltaX >> deltaY >> deltaZ; deltaX -= po->startSpot[0]; deltaY -= po->startSpot[1]; deltaZ -= po->startSpot[2]; PO_MovePolyobj (po->tag, deltaX, deltaY); } } }
void FLZOMemFile::Serialize (FArchive &arc) { if (arc.IsStoring ()) { if (m_ImplodedBuffer == NULL) { I_Error ("FLZOMemFile must be imploded before storing\n"); // Q: How do we get here without closing FLZOMemFile first? Close (); } arc.Write (LZOSig, 4); DWORD sizes[2]; sizes[0] = ((DWORD *)m_ImplodedBuffer)[0]; sizes[1] = ((DWORD *)m_ImplodedBuffer)[1]; SWAP_DWORD (sizes[0]); SWAP_DWORD (sizes[1]); arc.Write (m_ImplodedBuffer, (sizes[0] ? sizes[0] : sizes[1])+8); } else { Close (); m_Mode = EReading; char sig[4]; DWORD sizes[2]; arc.Read (sig, 4); if (sig[0] != LZOSig[0] || sig[1] != LZOSig[1] || sig[2] != LZOSig[2] || sig[3] != LZOSig[3]) I_Error ("Expected to extract an LZO-compressed file\n"); arc >> sizes[0] >> sizes[1]; DWORD len = sizes[0] == 0 ? sizes[1] : sizes[0]; m_Buffer = (BYTE *)Malloc (len+8); SWAP_DWORD (sizes[0]); SWAP_DWORD (sizes[1]); ((DWORD *)m_Buffer)[0] = sizes[0]; ((DWORD *)m_Buffer)[1] = sizes[1]; arc.Read (m_Buffer+8, len); m_ImplodedBuffer = m_Buffer; m_Buffer = NULL; m_Mode = EWriting; } }
// Serialize or unserialize the state of the level depending on the state of // the first parameter. Second parameter is true if you need to deal with hub // playerstate. Third parameter is true if you want to handle playerstate // yourself (map resets), just make sure you set it the same for both // serialization and unserialization. void G_SerializeLevel(FArchive &arc, bool hubLoad, bool noStorePlayers) { if (arc.IsStoring ()) { unsigned int playernum = players.size(); arc << level.flags << level.fadeto << level.found_secrets << level.found_items << level.killed_monsters << level.gravity << level.aircontrol; G_AirControlChanged(); for (int i = 0; i < NUM_MAPVARS; i++) arc << level.vars[i]; if (!noStorePlayers) arc << playernum; } else { unsigned int playernum; arc >> level.flags >> level.fadeto >> level.found_secrets >> level.found_items >> level.killed_monsters >> level.gravity >> level.aircontrol; G_AirControlChanged(); for (int i = 0; i < NUM_MAPVARS; i++) arc >> level.vars[i]; if (!noStorePlayers) { arc >> playernum; players.resize(playernum); } }
void P_SerializeSounds (FArchive &arc) { S_SerializeSounds (arc); DSeqNode::SerializeSequences (arc); char *name = NULL; BYTE order; if (arc.IsStoring ()) { order = S_GetMusic (&name); } arc << name << order; if (arc.IsLoading ()) { if (!S_ChangeMusic (name, order)) if (level.cdtrack == 0 || !S_ChangeCDMusic (level.cdtrack, level.cdid)) S_ChangeMusic (level.Music, level.musicorder); } delete[] name; }
static void SerializeStatistics(FArchive &arc) { FString startlevel; int i = LevelData.Size(); arc << i; if (arc.IsLoading()) { arc << startlevel; StartEpisode = NULL; for(unsigned int j=0;j<AllEpisodes.Size();j++) { if (!AllEpisodes[j].mEpisodeMap.CompareNoCase(startlevel)) { StartEpisode = &AllEpisodes[j]; break; } } LevelData.Resize(i); } else { if (StartEpisode != NULL) startlevel = StartEpisode->mEpisodeMap; arc << startlevel; } for(int j = 0; j < i; j++) { OneLevel &l = LevelData[j]; arc << l.totalkills << l.killcount << l.totalsecrets << l.secretcount << l.leveltime; if (arc.IsStoring()) arc.WriteName(l.levelname); else strcpy(l.levelname, arc.ReadName()); } }
void DDoor::Serialize (FArchive &arc) { Super::Serialize (arc); if (arc.IsStoring ()) { arc << m_Type << m_Status << m_TopHeight << m_Speed << m_TopWait << m_TopCountdown; } else { arc >> m_Type >> m_Status >> m_TopHeight >> m_Speed >> m_TopWait >> m_TopCountdown; } }
void P_SerializeTerrain(FArchive &arc, int &terrainnum) { FName val; if (arc.IsStoring()) { if (terrainnum < 0 || terrainnum >= (int)Terrains.Size()) { val = NAME_Null; } else { val = Terrains[terrainnum].Name; } arc << val; } else { arc << val; terrainnum = P_FindTerrain(val); } }
void DSpotState::Serialize(FArchive &arc) { Super::Serialize(arc); if (arc.IsStoring()) { arc.WriteCount(SpotLists.Size()); for(unsigned i = 0; i < SpotLists.Size(); i++) { SpotLists[i]->Serialize(arc); } } else { unsigned c = arc.ReadCount(); SpotLists.Resize(c); for(unsigned i = 0; i < SpotLists.Size(); i++) { SpotLists[i] = new FSpotList; SpotLists[i]->Serialize(arc); } } }
void FRemapTable::Serialize(FArchive &arc) { int n = NumEntries; arc << NumEntries; if (arc.IsStoring()) { arc.Write (Remap, NumEntries); } else { if (n != NumEntries) { Free(); Alloc(NumEntries); } arc.Read (Remap, NumEntries); } for (int j = 0; j < NumEntries; ++j) { arc << Palette[j]; } }
// // P_ArchivePlayers // void P_SerializePlayers (FArchive &arc) { if (arc.IsStoring ()) { for (Players::const_iterator it = players.begin();it != players.end();++it) arc << (int)(it->playerstate); } else { int playerstate = (playerstate_t)0; for (Players::iterator it = players.begin();it != players.end();++it) { arc >> playerstate; it->playerstate = (playerstate_t)playerstate; } } for (Players::iterator it = players.begin();it != players.end();++it) { if (it->ingame()) it->Serialize(arc); } }