From fb17c1ac5ac9769015155b8ff1531360e528a363 Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Thu, 2 May 2019 19:09:40 +0100 Subject: [PATCH] Hardcoded A_Boss5CheckOnGround --- src/dehacked.c | 1 + src/info.h | 1 + src/p_enemy.c | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/src/dehacked.c b/src/dehacked.c index 0bbeaa4b2..5cec3dfca 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -2226,6 +2226,7 @@ static actionpointer_t actionpointers[] = {{A_CryingToMomma}, "A_CRYINGTOMOMMA"}, {{A_CheckFlags2}, "A_CHECKFLAGS2"}, {{A_DoNPCPain}, "A_DONPCPAIN"}, + {{A_Boss5CheckOnGround}, "A_BOSS5CHECKONGROUND"}, {{NULL}, "NONE"}, diff --git a/src/info.h b/src/info.h index 58eebb24e..1a4446f80 100644 --- a/src/info.h +++ b/src/info.h @@ -240,6 +240,7 @@ void A_ParentTriesToSleep(); void A_CryingToMomma(); void A_CheckFlags2(); void A_DoNPCPain(); +void A_Boss5CheckOnGround(); // ratio of states to sprites to mobj types is roughly 6 : 1 : 1 #define NUMMOBJFREESLOTS 256 diff --git a/src/p_enemy.c b/src/p_enemy.c index 177d37e86..099f87bc1 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -267,6 +267,7 @@ void A_ParentTriesToSleep(mobj_t *actor); void A_CryingToMomma(mobj_t *actor); void A_CheckFlags2(mobj_t *actor); void A_DoNPCPain(mobj_t *actor); +void A_Boss5CheckOnGround(mobj_t *actor); //for p_enemy.c // @@ -11910,3 +11911,35 @@ void A_DoNPCPain(mobj_t *actor) P_SetObjectMomZ(actor, vspeed, false); P_InstaThrust(actor, actor->angle, -hspeed); } + +// Function: A_Boss5CheckOnGround +// +// Description: Ground checker. +// +// var1 = state to change to upon hitting ground. +// var2 = state to change to upon hitting ground if health == pinchhealth, assuming it exists +// +void A_Boss5CheckOnGround(mobj_t *actor) +{ + INT32 locvar1 = var1; + INT32 locvar2 = var2; +#ifdef HAVE_BLUA + if (LUA_CallAction("A_Boss5CheckOnGround", actor)) + return; +#endif + + if ((!(actor->eflags & MFE_VERTICALFLIP) && actor->z <= actor->floorz) + || (actor->eflags & MFE_VERTICALFLIP && actor->z + actor->height >= actor->ceilingz)) + { + if (locvar2 && (!actor->health || (actor->health == actor->info->damage && !(actor->flags2 & MF2_STRONGBOX)))) + P_SetMobjState(actor, locvar2); + else + P_SetMobjState(actor, locvar1); + } + + if (actor->tracer && P_AproxDistance(actor->tracer->x - actor->x, actor->tracer->y - actor->y) < 2*actor->radius) + { + actor->momx = (4*actor->momx)/5; + actor->momy = (4*actor->momy)/5; + } +}