This commit is contained in:
Christoph Oelckers 2015-05-01 20:27:42 +02:00
commit c75a762e7e
2 changed files with 13 additions and 2 deletions

View file

@ -4249,6 +4249,7 @@ enum T_Flags
TF_NODESTFOG = 0x00000080, // Don't spawn any fog at the arrival position. TF_NODESTFOG = 0x00000080, // Don't spawn any fog at the arrival position.
TF_USEACTORFOG = 0x00000100, // Use the actor's TeleFogSourceType and TeleFogDestType fogs. TF_USEACTORFOG = 0x00000100, // Use the actor's TeleFogSourceType and TeleFogDestType fogs.
TF_NOJUMP = 0x00000200, // Don't jump after teleporting. TF_NOJUMP = 0x00000200, // Don't jump after teleporting.
TF_OVERRIDE = 0x00000400, // Ignore NOTELEPORT.
}; };
DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Teleport) DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Teleport)
@ -4270,8 +4271,11 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Teleport)
return; return;
} }
if (ref->flags2 & MF2_NOTELEPORT) if ((ref->flags2 & MF2_NOTELEPORT) && !(Flags & TF_OVERRIDE))
{
ACTION_SET_RESULT(false);
return; return;
}
// Randomly choose not to teleport like A_Srcr2Decide. // Randomly choose not to teleport like A_Srcr2Decide.
if (Flags & TF_RANDOMDECIDE) if (Flags & TF_RANDOMDECIDE)
@ -4293,14 +4297,20 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Teleport)
DSpotState *state = DSpotState::GetSpotState(); DSpotState *state = DSpotState::GetSpotState();
if (state == NULL) if (state == NULL)
{
ACTION_SET_RESULT(false);
return; return;
}
if (!TargetType) if (!TargetType)
TargetType = PClass::FindClass("BossSpot"); TargetType = PClass::FindClass("BossSpot");
AActor * spot = state->GetSpotWithMinMaxDistance(TargetType, ref->x, ref->y, MinDist, MaxDist); AActor * spot = state->GetSpotWithMinMaxDistance(TargetType, ref->x, ref->y, MinDist, MaxDist);
if (spot == NULL) if (spot == NULL)
{
ACTION_SET_RESULT(false);
return; return;
}
fixed_t prevX = ref->x; fixed_t prevX = ref->x;
fixed_t prevY = ref->y; fixed_t prevY = ref->y;

View file

@ -199,6 +199,7 @@ enum
TF_NODESTFOG = 0x00000080, // Don't spawn any fog at the arrival position. TF_NODESTFOG = 0x00000080, // Don't spawn any fog at the arrival position.
TF_USEACTORFOG = 0x00000100, // Use the actor's TeleFogSourceType and TeleFogDestType fogs. TF_USEACTORFOG = 0x00000100, // Use the actor's TeleFogSourceType and TeleFogDestType fogs.
TF_NOJUMP = 0x00000200, // Don't jump after teleporting. TF_NOJUMP = 0x00000200, // Don't jump after teleporting.
TF_OVERRIDE = 0x00000400, // Ignore NOTELEPORT.
TF_KEEPORIENTATION = TF_KEEPVELOCITY|TF_KEEPANGLE, TF_KEEPORIENTATION = TF_KEEPVELOCITY|TF_KEEPANGLE,
TF_NOFOG = TF_NOSRCFOG|TF_NODESTFOG, TF_NOFOG = TF_NOSRCFOG|TF_NODESTFOG,