From df4a8e38c5ef4a1d1bc51ae3354b411973e23aaa Mon Sep 17 00:00:00 2001 From: yqco Date: Mon, 22 Aug 2016 01:21:38 -0600 Subject: [PATCH 1/2] Add CheckActorState ACS function bool CheckActorState(int tid, str statename, bool exact = false); - Same parameter order as SetActorState - Returns true if actor has the state; else returns false --- src/p_acs.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/p_acs.cpp b/src/p_acs.cpp index 01953cad9..0762b3e29 100644 --- a/src/p_acs.cpp +++ b/src/p_acs.cpp @@ -4438,8 +4438,7 @@ enum EACSFunctions ACSF_SpawnParticle, ACSF_SetMusicVolume, ACSF_CheckProximity, - // 1 more left... - + ACSF_CheckActorState, // 99 /* Zandronum's - these must be skipped when we reach 99! -100:ResetMap(0), -101 : PlayerIsSpectator(1), @@ -6017,6 +6016,18 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) return P_Thing_CheckProximity(actor, classname, distance, count, flags, ptr); } + case ACSF_CheckActorState: + { + actor = SingleActorFromTID(args[0], activator); + const char *statename = FBehavior::StaticLookupString(args[1]); + bool exact = (argCount > 2) ? !!args[2] : false; + if (actor && statename) + { + return (actor->GetClass()->FindStateByString(statename, exact) != nullptr); + } + return false; + } + default: break; } From e22043a25b7f2d61ddcff44b6b014233022ba5eb Mon Sep 17 00:00:00 2001 From: Major Cooke Date: Thu, 18 Aug 2016 15:05:18 -0500 Subject: [PATCH 2/2] Fixed: A_FaceMovementDirection would not adjust the angle if it was actually under the limit. --- src/thingdef/thingdef_codeptr.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/thingdef/thingdef_codeptr.cpp b/src/thingdef/thingdef_codeptr.cpp index 6c8b22301..1f24a35c7 100644 --- a/src/thingdef/thingdef_codeptr.cpp +++ b/src/thingdef/thingdef_codeptr.cpp @@ -7267,12 +7267,10 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_FaceMovementDirection) { current -= anglelimit + offset; } - else // huh??? - { - current = angle + 180. + offset; - } mobj->SetAngle(current, !!(flags & FMDF_INTERPOLATE)); } + else + mobj->SetAngle(angle + offset, !!(flags & FMDF_INTERPOLATE)); } else mobj->SetAngle(angle + offset, !!(flags & FMDF_INTERPOLATE));