Polish backwards behavior

This commit is contained in:
Sally Coolatta 2022-09-25 12:04:08 -04:00
parent b0e3840550
commit bbec083d4e
2 changed files with 40 additions and 10 deletions

View file

@ -4698,7 +4698,7 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t an, I
speed,
FixedMul(
FixedDiv(source->player->speed, topspeed), // Multiply speed to be proportional to your own, boosted maxspeed.
FixedDiv((ANGLE_180 - delta), ANGLE_180) // multiply speed based on angle diff... i.e: don't do this for firing backward :V
FixedDiv(AngleFixed(ANGLE_180 - delta), 180 * FRACUNIT) // multiply speed based on angle diff... i.e: don't do this for firing backward :V
)
));
}
@ -5608,15 +5608,15 @@ mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t mapthing,
if (missile) // Shootables
{
if (dir == -1 && mapthing != MT_SPB)
if (dir < 0 && mapthing != MT_SPB)
{
// Shoot backward
mo = K_SpawnKartMissile(player->mo, mapthing, (player->mo->angle + ANGLE_180) + angleOffset, 0, PROJSPEED, -1);
mo = K_SpawnKartMissile(player->mo, mapthing, (player->mo->angle + ANGLE_180) + angleOffset, 0, PROJSPEED, dir);
}
else
{
// Shoot forward
mo = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + angleOffset, 0, PROJSPEED, 1);
mo = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + angleOffset, 0, PROJSPEED, dir);
}
if (mapthing == MT_DROPTARGET && mo)
@ -8273,13 +8273,20 @@ void K_KartPlayerAfterThink(player_t *player)
player_t *targ;
mobj_t *ret;
if (player->jawztargetdelay && playeringame[lasttarg] && !players[lasttarg].spectator)
if (player->throwdir == -1)
{
targ = player;
player->jawztargetdelay = 0;
}
else if (player->jawztargetdelay && playeringame[lasttarg] && !players[lasttarg].spectator)
{
targ = &players[lasttarg];
player->jawztargetdelay--;
}
else
{
targ = K_FindJawzTarget(player->mo, player, ANGLE_45);
}
if (!targ || !targ->mo || P_MobjWasRemoved(targ->mo))
{
@ -8297,14 +8304,14 @@ void K_KartPlayerAfterThink(player_t *player)
ret->tics = 1;
ret->color = player->skincolor;
if (targ-players != lasttarg)
if (targ - players != lasttarg)
{
if (P_IsDisplayPlayer(player) || P_IsDisplayPlayer(targ))
S_StartSound(NULL, sfx_s3k89);
else
S_StartSound(targ->mo, sfx_s3k89);
player->lastjawztarget = targ-players;
player->lastjawztarget = targ - players;
player->jawztargetdelay = 5;
}
}

View file

@ -33,12 +33,11 @@
#define jawz_droptime(o) ((o)->movecount)
#define jawz_retcolor(o) ((o)->cvmem)
#define jawz_stillturn(o) ((o)->cusval)
#define jawz_owner(o) ((o)->target)
#define jawz_chase(o) ((o)->tracer)
#define jawz_shield_dist(o) ((o)->extravalue1)
static void JawzChase(mobj_t *th, boolean grounded)
{
fixed_t thrustamount = 0;
@ -131,6 +130,7 @@ static void JawzChase(mobj_t *th, boolean grounded)
P_SetTarget(&ret->target, jawz_chase(th));
ret->frame |= ((leveltime % 10) / 2) + 5;
ret->color = jawz_retcolor(th);
ret->renderflags = (ret->renderflags & ~RF_DONTDRAW) | (th->renderflags & RF_DONTDRAW);
}
else
{
@ -154,6 +154,13 @@ static void JawzChase(mobj_t *th, boolean grounded)
}
}
if (jawz_stillturn(th) > 0)
{
// When beginning to chase your own owner,
// we should turn but not thrust quite yet.
return;
}
if (grounded == true)
{
const fixed_t currentspeed = R_PointToDist2(0, 0, th->momx, th->momy);
@ -222,6 +229,11 @@ void Obj_JawzThink(mobj_t *th)
jawz_selfdelay(th)--;
}
if (jawz_stillturn(th) > 0)
{
jawz_stillturn(th)--;
}
if (leveltime % TICRATE == 0)
{
S_StartSound(th, th->info->activesound);
@ -247,8 +259,19 @@ void Obj_JawzThrown(mobj_t *th, fixed_t finalSpeed, SINT8 dir)
{
// Thrown backwards, init self-chase
P_SetTarget(&jawz_chase(th), jawz_owner(th));
th->fuse = RR_PROJECTILE_FUSE;
// Stop it here.
th->momx = 0;
th->momy = 0;
// Slow down the top speed.
finalSpeed = FixedMul(finalSpeed, 4*FRACUNIT/5);
// Set a fuse.
th->fuse = RR_PROJECTILE_FUSE;
// Stay still while you turn towards the player
jawz_stillturn(th) = ANGLE_180 / MAX_JAWZ_TURN;
}
else
{