void FRandom::StaticReadRNGState(FSerializer &arc) { FRandom *rng; arc("rngseed", rngseed); // Call StaticClearRandom in order to ensure that SFMT is initialized FRandom::StaticClearRandom (); if (arc.BeginArray("rngs")) { int count = arc.ArraySize(); for (int i = 0; i < count; i++) { if (arc.BeginObject(nullptr)) { uint32_t crc; arc("crc", crc); for (rng = FRandom::RNGList; rng != NULL; rng = rng->Next) { if (rng->NameCRC == crc) { arc("index", rng->idx) .Array("u", rng->sfmt.u, SFMT::N32); break; } } arc.EndObject(); } } arc.EndArray(); } }
void G_ReadVisited(FSerializer &arc) { if (arc.BeginArray("visited")) { for (int s = arc.ArraySize(); s > 0; s--) { FString str; arc(nullptr, str); auto i = FindLevelInfo(str); if (i != nullptr) i->flags |= LEVEL_VISITED; } arc.EndArray(); } arc.Array("randomclasses", SinglePlayerClass, MAXPLAYERS); if (arc.BeginObject("playerclasses")) { for (int i = 0; i < MAXPLAYERS; ++i) { FString key; key.Format("%d", i); arc(key, players[i].cls); } arc.EndObject(); } }