From 3284d46f52cfcba94550ed9efaa221b8f476977f Mon Sep 17 00:00:00 2001 From: James R Date: Tue, 21 Mar 2023 00:14:00 -0700 Subject: [PATCH 1/3] Add player speed directly to missile items Don't factor in character top speed... --- src/k_kart.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 6d49e468c..f112b5133 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4535,31 +4535,23 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t an, I { mobj_t *th; fixed_t x, y, z; - fixed_t topspeed = K_GetKartSpeed(source->player, false, false); fixed_t finalspeed = speed; fixed_t finalscale = mapobjectscale; mobj_t *throwmo; 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) { // Nerf the base item speed a bit. speed = finalspeed = FixedMul(speed, SHRINK_PHYSICS_SCALE); } - if (source->player->speed > topspeed) - { - 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 - ) - )); - } + // 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); finalscale = K_ItemScaleForPlayer(source->player); } From cec2ae0533a9eb2071dff8878bf5f81e2ffb27c5 Mon Sep 17 00:00:00 2001 From: James R Date: Tue, 21 Mar 2023 00:14:53 -0700 Subject: [PATCH 2/3] Lower base item speeds Now that the player's speed is added linearly, these need to be lowered to compensate. --- src/info.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/info.c b/src/info.c index 355816512..0f8efdf84 100644 --- a/src/info.c +++ b/src/info.c @@ -23387,7 +23387,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_ORBINAUT_DEAD,// deathstate S_NULL, // xdeathstate sfx_s3k5d, // deathsound - 64*FRACUNIT, // speed + 24*FRACUNIT, // speed 24*FRACUNIT, // radius 32*FRACUNIT, // height 0, // display offset @@ -23441,7 +23441,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_JAWZ_DEAD1, // deathstate S_JAWZ_DEAD2, // xdeathstate sfx_s3k5d, // deathsound - 64*FRACUNIT, // speed + 24*FRACUNIT, // speed 16*FRACUNIT, // radius 32*FRACUNIT, // height 0, // display offset @@ -23738,7 +23738,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_BALLHOG_DEAD, // deathstate S_NULL, // xdeathstate sfx_hogbom, // deathsound - 80*FRACUNIT, // speed + 20*FRACUNIT, // speed 26*FRACUNIT, // radius 32*FRACUNIT, // height 0, // display offset @@ -24035,7 +24035,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_GARDENTOP_DEAD, // deathstate S_NULL, // xdeathstate sfx_s3k7a, // deathsound - 40*FRACUNIT, // speed + 20*FRACUNIT, // speed 30*FRACUNIT, // radius 68*FRACUNIT, // height -1, // display offset @@ -24413,7 +24413,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_GACHABOM, // deathstate S_NULL, // xdeathstate sfx_s3k5d, // deathsound - 64*FRACUNIT, // speed + 24*FRACUNIT, // speed 24*FRACUNIT, // radius 32*FRACUNIT, // height 0, // display offset From f93aa07dd7ac9ea20284e4ea861e0516fe09e7c2 Mon Sep 17 00:00:00 2001 From: James R Date: Tue, 21 Mar 2023 00:16:23 -0700 Subject: [PATCH 3/3] Halve Garden Top speed This is probably more correct because it would thrust 2x speed in a straight line before. --- src/objects/gardentop.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/objects/gardentop.c b/src/objects/gardentop.c index 4c20b7e9f..2e31f6a04 100644 --- a/src/objects/gardentop.c +++ b/src/objects/gardentop.c @@ -441,7 +441,7 @@ anchor_top (mobj_t *top) static void loose_think (mobj_t *top) { - const fixed_t thrustamount = top->movefactor; + const fixed_t thrustamount = top->movefactor / 2; const angle_t momangle = K_MomentumAngle(top); angle_t ang = top->angle;