Merge branch 'railgun' into 'master'

Use old multiply effect for fast missile shots

See merge request KartKrew/Kart!1153
This commit is contained in:
Oni 2023-04-09 05:00:14 +00:00
commit d30567c04a
2 changed files with 21 additions and 6 deletions

View file

@ -23397,7 +23397,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_ORBINAUT_DEAD,// deathstate S_ORBINAUT_DEAD,// deathstate
S_NULL, // xdeathstate S_NULL, // xdeathstate
sfx_s3k5d, // deathsound sfx_s3k5d, // deathsound
24*FRACUNIT, // speed 28*FRACUNIT, // speed
24*FRACUNIT, // radius 24*FRACUNIT, // radius
32*FRACUNIT, // height 32*FRACUNIT, // height
0, // display offset 0, // display offset
@ -23451,7 +23451,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_JAWZ_DEAD1, // deathstate S_JAWZ_DEAD1, // deathstate
S_JAWZ_DEAD2, // xdeathstate S_JAWZ_DEAD2, // xdeathstate
sfx_s3k5d, // deathsound sfx_s3k5d, // deathsound
24*FRACUNIT, // speed 28*FRACUNIT, // speed
16*FRACUNIT, // radius 16*FRACUNIT, // radius
32*FRACUNIT, // height 32*FRACUNIT, // height
0, // display offset 0, // display offset
@ -23775,7 +23775,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_BALLHOG_DEAD, // deathstate S_BALLHOG_DEAD, // deathstate
S_NULL, // xdeathstate S_NULL, // xdeathstate
sfx_hogbom, // deathsound sfx_hogbom, // deathsound
20*FRACUNIT, // speed 40*FRACUNIT, // speed
26*FRACUNIT, // radius 26*FRACUNIT, // radius
32*FRACUNIT, // height 32*FRACUNIT, // height
0, // display offset 0, // display offset
@ -24072,7 +24072,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_GARDENTOP_DEAD, // deathstate S_GARDENTOP_DEAD, // deathstate
S_NULL, // xdeathstate S_NULL, // xdeathstate
sfx_s3k7a, // deathsound sfx_s3k7a, // deathsound
20*FRACUNIT, // speed 30*FRACUNIT, // speed
30*FRACUNIT, // radius 30*FRACUNIT, // radius
68*FRACUNIT, // height 68*FRACUNIT, // height
-1, // display offset -1, // display offset
@ -24450,7 +24450,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_GACHABOM, // deathstate S_GACHABOM, // deathstate
S_NULL, // xdeathstate S_NULL, // xdeathstate
sfx_s3k5d, // deathsound sfx_s3k5d, // deathsound
24*FRACUNIT, // speed 28*FRACUNIT, // speed
24*FRACUNIT, // radius 24*FRACUNIT, // radius
32*FRACUNIT, // height 32*FRACUNIT, // height
0, // display offset 0, // display offset

View file

@ -4564,6 +4564,7 @@ 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;
@ -4571,6 +4572,7 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t an, I
if (source->player != NULL) if (source->player != NULL)
{ {
const angle_t delta = AngleDelta(source->angle, an); const angle_t delta = AngleDelta(source->angle, an);
// Correct for angle difference when applying missile speed boosts. (Don't boost backshots!)
const fixed_t deltaFactor = FixedDiv(AngleFixed(ANGLE_180 - delta), 180 * FRACUNIT); const fixed_t deltaFactor = FixedDiv(AngleFixed(ANGLE_180 - delta), 180 * FRACUNIT);
if (source->player->itemscale == ITEMSCALE_SHRINK) if (source->player->itemscale == ITEMSCALE_SHRINK)
@ -4579,7 +4581,20 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t an, I
speed = finalspeed = FixedMul(speed, SHRINK_PHYSICS_SCALE); speed = finalspeed = FixedMul(speed, SHRINK_PHYSICS_SCALE);
} }
// Add player speed on top, multiplied based on angle diff... i.e: don't do this for firing backward :V if (source->player->speed > topspeed)
{
// Multiply speed to be proportional to your own, boosted maxspeed.
// (Dramatic "railgun" effect when fast players fire missiles.)
finalspeed = max(speed, FixedMul(
speed,
FixedMul(
FixedDiv(source->player->speed, topspeed),
deltaFactor
)
));
}
// ...and add player speed on top, to make sure you're never traveling faster than an item you throw.
finalspeed += FixedMul(source->player->speed, deltaFactor); finalspeed += FixedMul(source->player->speed, deltaFactor);
finalscale = K_ItemScaleForPlayer(source->player); finalscale = K_ItemScaleForPlayer(source->player);