diff --git a/src/g_shared/a_decalfx.cpp b/src/g_shared/a_decalfx.cpp index 16ebca74bc..33b5e36074 100644 --- a/src/g_shared/a_decalfx.cpp +++ b/src/g_shared/a_decalfx.cpp @@ -76,6 +76,7 @@ void DDecalFader::Tick () } else if (Level->maptime >= TimeToEndDecay) { + TheDecal->Expired(); // for impact decal bookkeeping. TheDecal->Destroy (); // remove the decal Destroy (); // remove myself return; diff --git a/src/g_shared/a_decals.cpp b/src/g_shared/a_decals.cpp index b53675b235..97a9ce5c32 100644 --- a/src/g_shared/a_decals.cpp +++ b/src/g_shared/a_decals.cpp @@ -666,6 +666,8 @@ DBaseDecal *DBaseDecal::CloneSelf (const FDecalTemplate *tpl, double ix, double void DImpactDecal::CheckMax () { + static int SpawnCounter; + if (++Level->ImpactDecalCount >= cl_maxdecals) { DThinker *thinker = Level->FirstThinker (STAT_AUTODECAL); @@ -683,6 +685,17 @@ void DImpactDecal::CheckMax () // //---------------------------------------------------------------------------- +void DImpactDecal::Expired() +{ + Level->ImpactDecalCount--; +} + +//---------------------------------------------------------------------------- +// +// +// +//---------------------------------------------------------------------------- + DImpactDecal *DImpactDecal::StaticCreate (FLevelLocals *Level, const char *name, const DVector3 &pos, side_t *wall, F3DFloor * ffloor, PalEntry color) { if (cl_maxdecals > 0) diff --git a/src/g_shared/a_sharedglobal.h b/src/g_shared/a_sharedglobal.h index c97fd237ce..77d30acbb0 100644 --- a/src/g_shared/a_sharedglobal.h +++ b/src/g_shared/a_sharedglobal.h @@ -26,6 +26,7 @@ public: void Serialize(FSerializer &arc); void OnDestroy() override; + virtual void Expired() {} // For thinkers that can remove their decal. For impact decal bookkeeping. FTextureID StickToWall(side_t *wall, double x, double y, F3DFloor * ffloor); double GetRealZ (const side_t *wall) const; void SetShade (uint32_t rgb); @@ -71,6 +72,7 @@ public: static DImpactDecal *StaticCreate(FLevelLocals *Level, const FDecalTemplate *tpl, const DVector3 &pos, side_t *wall, F3DFloor * ffloor, PalEntry color = 0); void BeginPlay (); + void Expired() override; protected: DBaseDecal *CloneSelf(const FDecalTemplate *tpl, double x, double y, double z, side_t *wall, F3DFloor * ffloor) const;