mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-01-27 11:41:16 +00:00
Rollout rock handling with gravity boots
This commit is contained in:
parent
a5bf4a5b8f
commit
34817d9776
3 changed files with 23 additions and 1 deletions
|
@ -1043,7 +1043,7 @@ static unsigned PIT_DoCheckThing(mobj_t *thing)
|
|||
if ((thing->flags & MF_PUSHABLE) // not carrying a player
|
||||
&& (tmthing->player->powers[pw_carry] == CR_NONE) // player is not already riding something
|
||||
&& !(tmthing->player->powers[pw_ignorelatch] & (1<<15))
|
||||
&& ((tmthing->eflags & MFE_VERTICALFLIP) == (thing->eflags & MFE_VERTICALFLIP))
|
||||
&& ((tmthing->eflags & MFE_VERTICALFLIP) == (thing->eflags & MFE_VERTICALFLIP) || tmthing->player->powers[pw_gravityboots])
|
||||
&& (P_MobjFlip(tmthing)*tmthing->momz <= 0)
|
||||
&& ((!(tmthing->eflags & MFE_VERTICALFLIP) && abs(thing->z + thing->height - tmthing->z) < (thing->height>>2))
|
||||
|| (tmthing->eflags & MFE_VERTICALFLIP && abs(tmthing->z + tmthing->height - thing->z) < (thing->height>>2))))
|
||||
|
|
|
@ -1525,6 +1525,14 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
|||
case MT_WATERDROP:
|
||||
case MT_CYBRAKDEMON:
|
||||
gravityadd >>= 1;
|
||||
case MT_ROLLOUTROCK:
|
||||
// If a player has gravity boots and its riding a rollout rock, the rock should copy the player's gravity
|
||||
if (mo->tracer && mo->tracer->player && mo->tracer->player->powers[pw_gravityboots])
|
||||
{
|
||||
gravityadd = -gravityadd;
|
||||
mo->eflags ^= MFE_VERTICALFLIP;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
14
src/p_user.c
14
src/p_user.c
|
@ -1082,6 +1082,13 @@ void P_ResetPlayer(player_t *player)
|
|||
if (player->mo->tracer && !P_MobjWasRemoved(player->mo->tracer))
|
||||
{
|
||||
player->mo->tracer->flags |= MF_PUSHABLE;
|
||||
|
||||
// goose the mom a little bit to trigger gravity to process for a tic
|
||||
if (player->mo->eflags & MFE_VERTICALFLIP)
|
||||
player->mo->tracer->momz -= 1;
|
||||
else
|
||||
player->mo->tracer->momz += 1;
|
||||
|
||||
P_SetTarget(&player->mo->tracer->tracer, NULL);
|
||||
}
|
||||
P_SetTarget(&player->mo->tracer, NULL);
|
||||
|
@ -4560,6 +4567,13 @@ void P_DoJump(player_t *player, boolean soundandstate, boolean allowflip)
|
|||
player->mo->momz += player->mo->tracer->momz;
|
||||
if (!P_IsObjectOnGround(player->mo->tracer))
|
||||
P_SetObjectMomZ(player->mo->tracer, -9*FRACUNIT, true);
|
||||
|
||||
// goose the mom a little bit to trigger gravity to process for a tic
|
||||
if (player->mo->eflags & MFE_VERTICALFLIP)
|
||||
player->mo->tracer->momz -= 1;
|
||||
else
|
||||
player->mo->tracer->momz += 1;
|
||||
|
||||
player->mo->tracer->flags |= MF_PUSHABLE;
|
||||
P_SetTarget(&player->mo->tracer->tracer, NULL);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue