mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-02-17 01:21:18 +00:00
Rollout rock improvements:
- No longer struggles to start to accelerating at certain angles - Carrying a player onto a rollout rock no longer leaves them in their ride state - Changed dispoffset might alleviate some sorting issues - Changes the player's camera angle when sprung horizontally - Works better in reverse gravity
This commit is contained in:
parent
41fe113af4
commit
cf389179e8
4 changed files with 24 additions and 8 deletions
|
@ -13481,7 +13481,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
32*FRACUNIT, // speed
|
32*FRACUNIT, // speed
|
||||||
30*FRACUNIT, // radius
|
30*FRACUNIT, // radius
|
||||||
60*FRACUNIT, // height
|
60*FRACUNIT, // height
|
||||||
0, // display offset
|
-1, // display offset
|
||||||
100, // mass
|
100, // mass
|
||||||
0, // damage
|
0, // damage
|
||||||
sfx_None, // activesound
|
sfx_None, // activesound
|
||||||
|
|
|
@ -14319,6 +14319,14 @@ void A_RolloutRock(mobj_t *actor)
|
||||||
if (LUA_CallAction(A_ROLLOUTROCK, actor))
|
if (LUA_CallAction(A_ROLLOUTROCK, actor))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (!actor->tracer || P_MobjWasRemoved(actor->tracer) || !actor->tracer->health)
|
||||||
|
actor->flags |= MF_PUSHABLE;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
actor->flags2 = (actor->flags2 & ~MF2_OBJECTFLIP) | (actor->tracer->flags2 & MF2_OBJECTFLIP);
|
||||||
|
actor->eflags = (actor->eflags & ~MFE_VERTICALFLIP) | (actor->tracer->eflags & MFE_VERTICALFLIP);
|
||||||
|
}
|
||||||
|
|
||||||
actor->friction = FRACUNIT; // turns out riding on solids sucks, so let's just make it easier on ourselves
|
actor->friction = FRACUNIT; // turns out riding on solids sucks, so let's just make it easier on ourselves
|
||||||
|
|
||||||
if (actor->eflags & MFE_JUSTHITFLOOR)
|
if (actor->eflags & MFE_JUSTHITFLOOR)
|
||||||
|
@ -14357,7 +14365,8 @@ void A_RolloutRock(mobj_t *actor)
|
||||||
|
|
||||||
speed = P_AproxDistance(actor->momx, actor->momy); // recalculate speed for visual rolling
|
speed = P_AproxDistance(actor->momx, actor->momy); // recalculate speed for visual rolling
|
||||||
|
|
||||||
if (speed < actor->scale >> 1) // stop moving if speed is insignificant
|
if (((actor->flags & MF_PUSHABLE) || !(actor->flags2 & MF2_STRONGBOX))
|
||||||
|
&& speed < actor->scale) // stop moving if speed is insignificant
|
||||||
{
|
{
|
||||||
actor->momx = 0;
|
actor->momx = 0;
|
||||||
actor->momy = 0;
|
actor->momy = 0;
|
||||||
|
@ -14377,9 +14386,6 @@ void A_RolloutRock(mobj_t *actor)
|
||||||
|
|
||||||
actor->frame = actor->reactiontime % maxframes; // set frame
|
actor->frame = actor->reactiontime % maxframes; // set frame
|
||||||
|
|
||||||
if (!actor->tracer || P_MobjWasRemoved(actor->tracer) || !actor->tracer->health)
|
|
||||||
actor->flags |= MF_PUSHABLE;
|
|
||||||
|
|
||||||
if (!(actor->flags & MF_PUSHABLE) || (actor->movecount != 1)) // if being ridden or haven't moved, don't disappear
|
if (!(actor->flags & MF_PUSHABLE) || (actor->movecount != 1)) // if being ridden or haven't moved, don't disappear
|
||||||
actor->fuse = actor->info->painchance;
|
actor->fuse = actor->info->painchance;
|
||||||
else if (actor->fuse < 2*TICRATE)
|
else if (actor->fuse < 2*TICRATE)
|
||||||
|
|
|
@ -429,6 +429,13 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object)
|
||||||
else
|
else
|
||||||
P_SetPlayerMobjState(object, S_PLAY_FALL);
|
P_SetPlayerMobjState(object, S_PLAY_FALL);
|
||||||
}
|
}
|
||||||
|
else if (horizspeed
|
||||||
|
&& object->tracer
|
||||||
|
&& object->tracer->player
|
||||||
|
&& object->tracer->player->powers[pw_carry] != CR_NONE
|
||||||
|
&& object->tracer->tracer == object
|
||||||
|
&& (!demoplayback || P_ControlStyle(object->tracer->player) == CS_LMAOGALOG))
|
||||||
|
P_SetPlayerAngle(object->tracer->player, spring->angle);
|
||||||
|
|
||||||
object->standingslope = NULL; // And again.
|
object->standingslope = NULL; // And again.
|
||||||
|
|
||||||
|
|
|
@ -12608,14 +12608,14 @@ void P_PlayerAfterThink(player_t *player)
|
||||||
if (P_AproxDistance(player->mo->x - tails->x, player->mo->y - tails->y) > player->mo->radius)
|
if (P_AproxDistance(player->mo->x - tails->x, player->mo->y - tails->y) > player->mo->radius)
|
||||||
player->powers[pw_carry] = CR_NONE;
|
player->powers[pw_carry] = CR_NONE;
|
||||||
|
|
||||||
if (player->powers[pw_carry] != CR_NONE)
|
if (player->powers[pw_carry] == CR_PLAYER)
|
||||||
{
|
{
|
||||||
if (player->mo->state-states != S_PLAY_RIDE)
|
if (player->mo->state-states != S_PLAY_RIDE)
|
||||||
P_SetPlayerMobjState(player->mo, S_PLAY_RIDE);
|
P_SetPlayerMobjState(player->mo, S_PLAY_RIDE);
|
||||||
if (tails->player && (tails->skin && ((skin_t *)(tails->skin))->sprites[SPR2_SWIM].numframes) && (tails->eflags & MFE_UNDERWATER))
|
if (tails->player && (tails->skin && ((skin_t *)(tails->skin))->sprites[SPR2_SWIM].numframes) && (tails->eflags & MFE_UNDERWATER))
|
||||||
tails->player->powers[pw_tailsfly] = 0;
|
tails->player->powers[pw_tailsfly] = 0;
|
||||||
}
|
}
|
||||||
else
|
else if (player->powers[pw_carry] == CR_NONE)
|
||||||
P_SetTarget(&player->mo->tracer, NULL);
|
P_SetTarget(&player->mo->tracer, NULL);
|
||||||
|
|
||||||
if (player-players == consoleplayer && botingame)
|
if (player-players == consoleplayer && botingame)
|
||||||
|
@ -12718,9 +12718,12 @@ void P_PlayerAfterThink(player_t *player)
|
||||||
|
|
||||||
if (player->cmd.forwardmove || player->cmd.sidemove)
|
if (player->cmd.forwardmove || player->cmd.sidemove)
|
||||||
{
|
{
|
||||||
|
rock->flags2 |= MF2_STRONGBOX; // signifies the rock should not slow to a halt
|
||||||
rock->movedir = (player->cmd.angleturn << FRACBITS) + R_PointToAngle2(0, 0, player->cmd.forwardmove << FRACBITS, -player->cmd.sidemove << FRACBITS);
|
rock->movedir = (player->cmd.angleturn << FRACBITS) + R_PointToAngle2(0, 0, player->cmd.forwardmove << FRACBITS, -player->cmd.sidemove << FRACBITS);
|
||||||
P_Thrust(rock, rock->movedir, rock->scale >> 1);
|
P_Thrust(rock, rock->movedir, rock->scale >> 1);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
rock->flags2 &= ~MF2_STRONGBOX;
|
||||||
|
|
||||||
mo->momx = rock->momx;
|
mo->momx = rock->momx;
|
||||||
mo->momy = rock->momy;
|
mo->momy = rock->momy;
|
||||||
|
@ -12736,7 +12739,7 @@ void P_PlayerAfterThink(player_t *player)
|
||||||
mo->tics = walktics;
|
mo->tics = walktics;
|
||||||
}
|
}
|
||||||
|
|
||||||
P_TeleportMove(player->mo, rock->x, rock->y, rock->z + rock->height);
|
P_TeleportMove(player->mo, rock->x, rock->y, rock->z + ((mo->eflags & MFE_VERTICALFLIP) ? -mo->height : rock->height));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CR_PTERABYTE: // being carried by a Pterabyte
|
case CR_PTERABYTE: // being carried by a Pterabyte
|
||||||
|
|
Loading…
Reference in a new issue