Add player speed directly to missile items

Don't factor in character top speed...
This commit is contained in:
James R 2023-03-21 00:14:00 -07:00
parent cd7d4f23c7
commit 3284d46f52

View file

@ -4535,31 +4535,23 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t an, I
{ {
mobj_t *th; mobj_t *th;
fixed_t x, y, z; fixed_t x, y, z;
fixed_t topspeed = K_GetKartSpeed(source->player, false, false);
fixed_t finalspeed = speed; fixed_t finalspeed = speed;
fixed_t finalscale = mapobjectscale; fixed_t finalscale = mapobjectscale;
mobj_t *throwmo; mobj_t *throwmo;
if (source->player != NULL) if (source->player != NULL)
{ {
const angle_t delta = AngleDelta(source->angle, an);
const fixed_t deltaFactor = FixedDiv(AngleFixed(ANGLE_180 - delta), 180 * FRACUNIT);
if (source->player->itemscale == ITEMSCALE_SHRINK) if (source->player->itemscale == ITEMSCALE_SHRINK)
{ {
// Nerf the base item speed a bit. // Nerf the base item speed a bit.
speed = finalspeed = FixedMul(speed, SHRINK_PHYSICS_SCALE); speed = finalspeed = FixedMul(speed, SHRINK_PHYSICS_SCALE);
} }
if (source->player->speed > topspeed) // Add player speed on top, multiplied based on angle diff... i.e: don't do this for firing backward :V
{ finalspeed += FixedMul(source->player->speed, deltaFactor);
angle_t delta = AngleDelta(source->angle, an);
finalspeed = max(speed, FixedMul(
speed,
FixedMul(
FixedDiv(source->player->speed, topspeed), // Multiply speed to be proportional to your own, boosted maxspeed.
FixedDiv(AngleFixed(ANGLE_180 - delta), 180 * FRACUNIT) // multiply speed based on angle diff... i.e: don't do this for firing backward :V
)
));
}
finalscale = K_ItemScaleForPlayer(source->player); finalscale = K_ItemScaleForPlayer(source->player);
} }