mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-21 20:11:12 +00:00
Merge branch 'issue1133' into 'next'
Rollout rock handling with gravity boots See merge request STJr/SRB2!2343
This commit is contained in:
commit
30f1ac31e4
4 changed files with 24 additions and 3 deletions
|
@ -14857,12 +14857,18 @@ void A_RolloutRock(mobj_t *actor)
|
|||
|
||||
if (!actor->tracer || P_MobjWasRemoved(actor->tracer) || !actor->tracer->health)
|
||||
actor->flags |= MF_PUSHABLE;
|
||||
else if (actor->tracer->eflags & MFE_VERTICALFLIP)
|
||||
{
|
||||
actor->flags2 |= MF2_OBJECTFLIP;
|
||||
actor->eflags |= MFE_VERTICALFLIP;
|
||||
}
|
||||
else
|
||||
{
|
||||
actor->flags2 = (actor->flags2 & ~MF2_OBJECTFLIP) | (actor->tracer->flags2 & MF2_OBJECTFLIP);
|
||||
actor->eflags = (actor->eflags & ~MFE_VERTICALFLIP) | (actor->tracer->eflags & MFE_VERTICALFLIP);
|
||||
actor->flags2 &= ~MF2_OBJECTFLIP;
|
||||
actor->eflags &= ~MFE_VERTICALFLIP;
|
||||
}
|
||||
|
||||
|
||||
actor->friction = FRACUNIT; // turns out riding on solids sucks, so let's just make it easier on ourselves
|
||||
|
||||
if (actor->eflags & MFE_JUSTHITFLOOR)
|
||||
|
|
|
@ -1027,7 +1027,6 @@ 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))
|
||||
&& (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))))
|
||||
|
@ -1041,6 +1040,7 @@ static unsigned PIT_DoCheckThing(mobj_t *thing)
|
|||
P_SetTarget(&tmthing->tracer, thing);
|
||||
if (!P_IsObjectOnGround(thing))
|
||||
thing->momz += tmthing->momz;
|
||||
|
||||
return CHECKTHING_COLLIDE;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1385,6 +1385,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
|||
case MT_WATERDROP:
|
||||
case MT_CYBRAKDEMON:
|
||||
gravityadd >>= 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
14
src/p_user.c
14
src/p_user.c
|
@ -1089,6 +1089,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->tracer->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);
|
||||
|
@ -4546,6 +4553,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->tracer->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