mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-02-20 19:02:37 +00:00
Improve functionality of held items
Can check for falloff from ledges place along the z properly
This commit is contained in:
parent
101a560d4e
commit
b9f6a91c37
1 changed files with 30 additions and 6 deletions
36
src/p_mobj.c
36
src/p_mobj.c
|
@ -6587,7 +6587,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
{
|
||||
INT32 zfixds = 56;
|
||||
INT32 DIST = FixedMul(zfixds, mobj->target->scale);
|
||||
INT32 HEIGHT;
|
||||
fixed_t z;
|
||||
const fixed_t radius = DIST*FRACUNIT; // mobj's distance from its Target, or Radius.
|
||||
|
||||
if (mobj->type == MT_BANANASHIELD || mobj->type == MT_TRIPLEBANANASHIELD1 || mobj->type == MT_TRIPLEBANANASHIELD2 || mobj->type == MT_TRIPLEBANANASHIELD3)
|
||||
|
@ -6610,24 +6610,48 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
if (mobj->target->player && mobj->target->eflags & MFE_VERTICALFLIP)
|
||||
{
|
||||
mobj->eflags |= MFE_VERTICALFLIP;
|
||||
HEIGHT = mobj->target->height / 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
mobj->eflags &= ~MFE_VERTICALFLIP;
|
||||
HEIGHT = mobj->target->height / 5;
|
||||
}
|
||||
|
||||
// Shrink your items if the player shrunk too.
|
||||
if (mobj->target->player)
|
||||
mobj->scale = mobj->target->scale;
|
||||
|
||||
P_TeleportMove(mobj, mobj->target->x, mobj->target->y, mobj->target->z);
|
||||
if (P_MobjFlip(mobj) > 0)
|
||||
{
|
||||
z = mobj->target->z;
|
||||
}
|
||||
else
|
||||
{
|
||||
z = mobj->target->z + mobj->target->height - mobj->height;
|
||||
}
|
||||
|
||||
P_TeleportMove(mobj, mobj->target->x, mobj->target->y, z);
|
||||
mobj->momx = FixedMul(FINECOSINE(mobj->angle>>ANGLETOFINESHIFT),radius);
|
||||
mobj->momy = FixedMul(FINESINE(mobj->angle>>ANGLETOFINESHIFT), radius);
|
||||
if (!P_TryMove(mobj, mobj->target->x + mobj->momx, mobj->target->y + mobj->momy, false))
|
||||
if (!P_TryMove(mobj, mobj->target->x + mobj->momx, mobj->target->y + mobj->momy, true))
|
||||
P_SlideMove(mobj, true);
|
||||
mobj->z = mobj->floorz;
|
||||
if (P_IsObjectOnGround(mobj->target))
|
||||
{
|
||||
if (P_MobjFlip(mobj) > 0)
|
||||
{
|
||||
if (mobj->floorz > mobj->target->z - mobj->height)
|
||||
{
|
||||
z = mobj->floorz;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mobj->ceilingz < mobj->target->z + mobj->target->height + mobj->height)
|
||||
{
|
||||
z = mobj->ceilingz - mobj->height;
|
||||
}
|
||||
}
|
||||
}
|
||||
mobj->z = z;
|
||||
mobj->momx = mobj->momy = 0;
|
||||
|
||||
// Was this so hard?
|
||||
|
|
Loading…
Reference in a new issue