diff --git a/src/common/engine/serializer.cpp b/src/common/engine/serializer.cpp index d0e6ac7c1..bf813118b 100644 --- a/src/common/engine/serializer.cpp +++ b/src/common/engine/serializer.cpp @@ -604,6 +604,8 @@ void FSerializer::WriteObjects() { auto obj = w->mDObjects[i]; + if(obj->ObjectFlags & OF_Transient) continue; + BeginObject(nullptr); w->Key("classtype"); w->String(obj->GetClass()->TypeName.GetChars()); diff --git a/src/common/objects/dobjtype.cpp b/src/common/objects/dobjtype.cpp index f9ccc4c77..b6379106c 100644 --- a/src/common/objects/dobjtype.cpp +++ b/src/common/objects/dobjtype.cpp @@ -440,6 +440,10 @@ DObject *PClass::CreateNew() I_Error("Attempt to instantiate abstract class %s.", TypeName.GetChars()); } ConstructNative (mem); + + if (Defaults != nullptr) + ((DObject *)mem)->ObjectFlags |= ((DObject *)Defaults)->ObjectFlags & OF_Transient; + ((DObject *)mem)->SetClass (const_cast(this)); InitializeSpecials(mem, Defaults, &PClass::SpecialInits); return (DObject *)mem; diff --git a/src/scripting/thingdef_data.cpp b/src/scripting/thingdef_data.cpp index 792675576..cedf305b0 100644 --- a/src/scripting/thingdef_data.cpp +++ b/src/scripting/thingdef_data.cpp @@ -396,6 +396,8 @@ static FFlagDef ActorFlagDefs[]= DEFINE_FLAG2(BOUNCE_NotOnShootables, DONTBOUNCEONSHOOTABLES, AActor, BounceFlags), DEFINE_FLAG2(BOUNCE_BounceOnUnrips, BOUNCEONUNRIPPABLES, AActor, BounceFlags), DEFINE_FLAG2(BOUNCE_NotOnSky, DONTBOUNCEONSKY, AActor, BounceFlags), + + DEFINE_FLAG2(OF_Transient, NOSAVEGAME, AActor, ObjectFlags), }; // These won't be accessible through bitfield variables