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, speed,
FixedMul( FixedMul(
FixedDiv(source->player->speed, topspeed), // Multiply speed to be proportional to your own, boosted maxspeed. 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 (missile) // Shootables
{ {
if (dir == -1 && mapthing != MT_SPB) if (dir < 0 && mapthing != MT_SPB)
{ {
// Shoot backward // 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 else
{ {
// Shoot forward // 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) if (mapthing == MT_DROPTARGET && mo)
@ -8273,13 +8273,20 @@ void K_KartPlayerAfterThink(player_t *player)
player_t *targ; player_t *targ;
mobj_t *ret; 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]; targ = &players[lasttarg];
player->jawztargetdelay--; player->jawztargetdelay--;
} }
else else
{
targ = K_FindJawzTarget(player->mo, player, ANGLE_45); targ = K_FindJawzTarget(player->mo, player, ANGLE_45);
}
if (!targ || !targ->mo || P_MobjWasRemoved(targ->mo)) if (!targ || !targ->mo || P_MobjWasRemoved(targ->mo))
{ {

View file

@ -33,12 +33,11 @@
#define jawz_droptime(o) ((o)->movecount) #define jawz_droptime(o) ((o)->movecount)
#define jawz_retcolor(o) ((o)->cvmem) #define jawz_retcolor(o) ((o)->cvmem)
#define jawz_stillturn(o) ((o)->cusval)
#define jawz_owner(o) ((o)->target) #define jawz_owner(o) ((o)->target)
#define jawz_chase(o) ((o)->tracer) #define jawz_chase(o) ((o)->tracer)
#define jawz_shield_dist(o) ((o)->extravalue1)
static void JawzChase(mobj_t *th, boolean grounded) static void JawzChase(mobj_t *th, boolean grounded)
{ {
fixed_t thrustamount = 0; fixed_t thrustamount = 0;
@ -131,6 +130,7 @@ static void JawzChase(mobj_t *th, boolean grounded)
P_SetTarget(&ret->target, jawz_chase(th)); P_SetTarget(&ret->target, jawz_chase(th));
ret->frame |= ((leveltime % 10) / 2) + 5; ret->frame |= ((leveltime % 10) / 2) + 5;
ret->color = jawz_retcolor(th); ret->color = jawz_retcolor(th);
ret->renderflags = (ret->renderflags & ~RF_DONTDRAW) | (th->renderflags & RF_DONTDRAW);
} }
else 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) if (grounded == true)
{ {
const fixed_t currentspeed = R_PointToDist2(0, 0, th->momx, th->momy); 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)--; jawz_selfdelay(th)--;
} }
if (jawz_stillturn(th) > 0)
{
jawz_stillturn(th)--;
}
if (leveltime % TICRATE == 0) if (leveltime % TICRATE == 0)
{ {
S_StartSound(th, th->info->activesound); 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 // Thrown backwards, init self-chase
P_SetTarget(&jawz_chase(th), jawz_owner(th)); 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); 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 else
{ {