diff --git a/src/dehacked.c b/src/dehacked.c index 155e2b5ce..baa5f13b3 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -2228,6 +2228,7 @@ static actionpointer_t actionpointers[] = {{A_DoNPCPain}, "A_DONPCPAIN"}, {{A_Boss5ExtraRepeat}, "A_BOSS5EXTRAREPEAT"}, {{A_Boss5CheckOnGround}, "A_BOSS5CHECKONGROUND"}, + {{A_Boss5CheckFalling}, "A_BOSS5CHECKFALLING"}, {{NULL}, "NONE"}, diff --git a/src/info.h b/src/info.h index f623aaa1f..166402651 100644 --- a/src/info.h +++ b/src/info.h @@ -242,6 +242,7 @@ void A_CheckFlags2(); void A_DoNPCPain(); void A_Boss5ExtraRepeat(); void A_Boss5CheckOnGround(); +void A_Boss5CheckFalling(); // 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 0746f629f..118367da4 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -268,6 +268,7 @@ void A_CryingToMomma(mobj_t *actor); void A_CheckFlags2(mobj_t *actor); void A_DoNPCPain(mobj_t *actor); void A_Boss5CheckOnGround(mobj_t *actor); +void A_Boss5CheckFalling(mobj_t *actor); //for p_enemy.c // @@ -11982,3 +11983,31 @@ void A_Boss5CheckOnGround(mobj_t *actor) actor->momy = (4*actor->momy)/5; } } + +// Function: A_Boss5CheckFalling +// +// Description: Falling checker. +// +// var1 = state to change to when hitting ground. +// var2 = state to change to when falling. +// +void A_Boss5CheckFalling(mobj_t *actor) +{ + INT32 locvar1 = var1; + INT32 locvar2 = var2; +#ifdef HAVE_BLUA + if (LUA_CallAction("A_Boss5CheckFalling", actor)) + return; +#endif + + if (actor->health && actor->extravalue2 > 1) + { + var1 = locvar1; + var2 = 0; + A_Boss5CheckOnGround(actor); + return; + } + + if (P_MobjFlip(actor)*actor->momz <= 0) + P_SetMobjState(actor, locvar2); +}