From dc00d61f4d40adc91669e6e81e41502a908c77c2 Mon Sep 17 00:00:00 2001 From: MajorCooke Date: Fri, 1 May 2015 08:32:07 -0500 Subject: [PATCH] - Added TF_OVERRIDE to A_Teleport. - Overrides the NOTELEPORT flag so actors with velocity don't need to disable it in order to perform A_Teleport, which could be screwed up by a teleporting line or sudden ACS interference. - Ensure that the result is set to false if it fails prematurely. Wasn't sure if this was needed, but with the upcoming if/else statements, better safe than sorry. --- src/thingdef/thingdef_codeptr.cpp | 14 ++++++++++++-- wadsrc/static/actors/constants.txt | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/thingdef/thingdef_codeptr.cpp b/src/thingdef/thingdef_codeptr.cpp index 21dc93036..23a6f58cf 100644 --- a/src/thingdef/thingdef_codeptr.cpp +++ b/src/thingdef/thingdef_codeptr.cpp @@ -4249,6 +4249,7 @@ enum T_Flags TF_NODESTFOG = 0x00000080, // Don't spawn any fog at the arrival position. TF_USEACTORFOG = 0x00000100, // Use the actor's TeleFogSourceType and TeleFogDestType fogs. TF_NOJUMP = 0x00000200, // Don't jump after teleporting. + TF_OVERRIDE = 0x00000400, // Ignore NOTELEPORT. }; DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Teleport) @@ -4270,8 +4271,11 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Teleport) return; } - if (ref->flags2 & MF2_NOTELEPORT) + if ((ref->flags2 & MF2_NOTELEPORT) && !(Flags & TF_OVERRIDE)) + { + ACTION_SET_RESULT(false); return; + } // Randomly choose not to teleport like A_Srcr2Decide. if (Flags & TF_RANDOMDECIDE) @@ -4292,15 +4296,21 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Teleport) } DSpotState *state = DSpotState::GetSpotState(); - if (state == NULL) + if (state == NULL) + { + ACTION_SET_RESULT(false); return; + } if (!TargetType) TargetType = PClass::FindClass("BossSpot"); AActor * spot = state->GetSpotWithMinMaxDistance(TargetType, ref->x, ref->y, MinDist, MaxDist); if (spot == NULL) + { + ACTION_SET_RESULT(false); return; + } fixed_t prevX = ref->x; fixed_t prevY = ref->y; diff --git a/wadsrc/static/actors/constants.txt b/wadsrc/static/actors/constants.txt index 2ded98bc7..6612dd9f8 100644 --- a/wadsrc/static/actors/constants.txt +++ b/wadsrc/static/actors/constants.txt @@ -199,6 +199,7 @@ enum TF_NODESTFOG = 0x00000080, // Don't spawn any fog at the arrival position. TF_USEACTORFOG = 0x00000100, // Use the actor's TeleFogSourceType and TeleFogDestType fogs. TF_NOJUMP = 0x00000200, // Don't jump after teleporting. + TF_OVERRIDE = 0x00000400, // Ignore NOTELEPORT. TF_KEEPORIENTATION = TF_KEEPVELOCITY|TF_KEEPANGLE, TF_NOFOG = TF_NOSRCFOG|TF_NODESTFOG,