diff --git a/src/p_saveg.cpp b/src/p_saveg.cpp index af59924882..b6e3b28ca0 100644 --- a/src/p_saveg.cpp +++ b/src/p_saveg.cpp @@ -565,6 +565,7 @@ void P_SerializePolyobjs (FArchive &arc) for(i = 0, po = polyobjs; i < po_NumPolyobjs; i++, po++) { arc << po->tag << po->Angle << po->StartSpot.pos << po->interpolation << po->bBlocked << po->bHasPortals; + arc << po->specialdata; } } else @@ -592,6 +593,10 @@ void P_SerializePolyobjs (FArchive &arc) arc << angle << delta << po->interpolation; arc << po->bBlocked; arc << po->bHasPortals; + if (SaveVersion >= 4548) + { + arc << po->specialdata; + } po->RotatePolyobj (angle, true); delta -= po->StartSpot.pos; diff --git a/src/po_man.cpp b/src/po_man.cpp index 7b5e187a86..001f308f1a 100644 --- a/src/po_man.cpp +++ b/src/po_man.cpp @@ -68,27 +68,6 @@ inline FArchive &operator<< (FArchive &arc, podoortype_t &type) return arc; } -class DPolyAction : public DThinker -{ - DECLARE_CLASS (DPolyAction, DThinker) - HAS_OBJECT_POINTERS -public: - DPolyAction (int polyNum); - void Serialize (FArchive &arc); - void Destroy(); - void Stop(); - double GetSpeed() const { return m_Speed; } - - void StopInterpolation (); -protected: - DPolyAction (); - int m_PolyObj; - double m_Speed; - double m_Dist; - TObjPtr m_Interpolation; - - void SetInterpolation (); -}; class DRotatePoly : public DPolyAction { @@ -302,6 +281,10 @@ void DMovePoly::Serialize (FArchive &arc) { Super::Serialize (arc); arc << m_Angle << m_Speed; + if (SaveVersion >= 4548) + { + arc << m_Speedv; + } } DMovePoly::DMovePoly (int polyNum) diff --git a/src/po_man.h b/src/po_man.h index 9bc8532552..18b01d9cca 100644 --- a/src/po_man.h +++ b/src/po_man.h @@ -5,7 +5,27 @@ #include "r_defs.h" #include "m_bbox.h" -class DPolyAction; +class DPolyAction : public DThinker +{ + DECLARE_CLASS(DPolyAction, DThinker) + HAS_OBJECT_POINTERS +public: + DPolyAction(int polyNum); + void Serialize(FArchive &arc); + void Destroy(); + void Stop(); + double GetSpeed() const { return m_Speed; } + + void StopInterpolation(); +protected: + DPolyAction(); + int m_PolyObj; + double m_Speed; + double m_Dist; + TObjPtr m_Interpolation; + + void SetInterpolation(); +}; struct FPolyVertex { @@ -67,7 +87,7 @@ struct FPolyObj int seqType; double Size; // polyobj size (area of POLY_AREAUNIT == size of FRACUNIT) FPolyNode *subsectorlinks; - DPolyAction *specialdata; // pointer to a thinker, if the poly is moving + TObjPtr specialdata; // pointer to a thinker, if the poly is moving TObjPtr interpolation; FPolyObj(); diff --git a/src/version.h b/src/version.h index 52b7ea0ba6..9aa4ad7999 100644 --- a/src/version.h +++ b/src/version.h @@ -76,7 +76,7 @@ const char *GetVersionString(); // Use 4500 as the base git save version, since it's higher than the // SVN revision ever got. -#define SAVEVER 4546 +#define SAVEVER 4548 #define SAVEVERSTRINGIFY2(x) #x #define SAVEVERSTRINGIFY(x) SAVEVERSTRINGIFY2(x)