diff --git a/src/p_actionfunctions.cpp b/src/p_actionfunctions.cpp index 8c222a4f6..13a347ef2 100644 --- a/src/p_actionfunctions.cpp +++ b/src/p_actionfunctions.cpp @@ -6852,13 +6852,27 @@ DEFINE_ACTION_FUNCTION(AActor, A_SetSize) PARAM_SELF_PROLOGUE(AActor); PARAM_FLOAT(newradius); PARAM_FLOAT_DEF(newheight); + PARAM_BOOL_DEF(testpos); if (newradius < 0.) newradius = self->radius; if (newheight < 0.) newheight = self->Height; + double oldradius = self->radius; + double oldheight = self->Height; + self->UnlinkFromWorld(); self->radius = newradius; self->Height = newheight; self->LinkToWorld(); - return 0; + + if (testpos && !P_TestMobjLocation(self)) + { + self->UnlinkFromWorld(); + self->radius = oldradius; + self->Height = oldheight; + self->LinkToWorld(); + ACTION_RETURN_BOOL(false); + } + + ACTION_RETURN_BOOL(true); } diff --git a/wadsrc/static/zscript/actor.txt b/wadsrc/static/zscript/actor.txt index 2a5d8c53d..0d264580a 100644 --- a/wadsrc/static/zscript/actor.txt +++ b/wadsrc/static/zscript/actor.txt @@ -793,7 +793,7 @@ class Actor : Thinker native native bool A_CopySpriteFrame(int from, int to, int flags = 0); native bool A_SetVisibleRotation(double anglestart = 0, double angleend = 0, double pitchstart = 0, double pitchend = 0, int flags = 0, int ptr = AAPTR_DEFAULT); native void A_SetTranslation(name transname); - native void A_SetSize(double newradius, double newheight = -1); + native bool A_SetSize(double newradius, double newheight = -1, bool testpos = false); native void A_RearrangePointers(int newtarget, int newmaster = AAPTR_DEFAULT, int newtracer = AAPTR_DEFAULT, int flags=0); native void A_TransferPointer(int ptr_source, int ptr_recepient, int sourcefield, int recepientfield=AAPTR_DEFAULT, int flags=0);