diff --git a/src/k_kart.c b/src/k_kart.c index 2f01f2dc0..eb7f10720 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -7526,11 +7526,14 @@ static void K_KartSpindash(player_t *player) return; } - if (player->speed < 6*mapobjectscale && player->powers[pw_flashing] == 0) + if (player->speed == 0 && cmd->turning != 0 && leveltime % 8 == 0) { - if (cmd->turning != 0 && leveltime % 8 == 0) - S_StartSound(player->mo, sfx_ruburn); + // Rubber burn turn sfx + S_StartSound(player->mo, sfx_ruburn); + } + if (player->speed < 6*player->mo->scale) + { if ((cmd->buttons & (BT_DRIFT|BT_BRAKE)) == (BT_DRIFT|BT_BRAKE)) { INT16 chargetime = MAXCHARGETIME - ++player->kartstuff[k_spindash]; @@ -7547,6 +7550,15 @@ static void K_KartSpindash(player_t *player) K_KartSpindashWind(player->mo); } + if (player->powers[pw_flashing] > 0 && (leveltime & 1) && player->kartstuff[k_hyudorotimer] == 0) + { + // Every frame that you're invisible from flashing, spill a ring. + // Intentionally a lop-sided trade-off, so the game doesn't become + // Funky Kong's Ring Racers. + + P_PlayerRingBurst(player, 1); + } + if (chargetime > 0) { UINT16 soundcharge = 0; diff --git a/src/p_enemy.c b/src/p_enemy.c index 01f8f6bb7..a2c719609 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -4229,7 +4229,7 @@ void A_AttractChase(mobj_t *actor) else actor->drawflags &= ~MFD_DONTDRAW; - // spilled rings have ghost trails and get capped to a certain speed + // spilled rings get capped to a certain speed if (actor->type == (mobjtype_t)actor->info->reactiontime) { const fixed_t maxspeed = 4<momx = FixedMul(FixedDiv(actor->momx, oldspeed), newspeed); actor->momy = FixedMul(FixedDiv(actor->momy, oldspeed), newspeed); } - - if (!P_IsObjectOnGround(actor)) - P_SpawnGhostMobj(actor)->tics = 3; } if (actor->tracer && actor->tracer->player && actor->tracer->health diff --git a/src/p_inter.c b/src/p_inter.c index 6d2d89d36..4371752c8 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -2237,6 +2237,6 @@ void P_PlayerRingBurst(player_t *player, INT32 num_rings) while (i < num_rings) { P_FlingBurst(player, fa, z, - MT_DEBTSPIKE, 90, 3 * player->mo->scale / 2, i++); + MT_DEBTSPIKE, 0, 3 * player->mo->scale / 2, i++); } } diff --git a/src/p_mobj.c b/src/p_mobj.c index 2fd5375f5..438b88099 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -2296,6 +2296,11 @@ boolean P_ZMovement(mobj_t *mo) { mom.x = mom.y = 0; mom.z = -mom.z/2; + + if (mo->fuse == 0) + { + mo->fuse = 90; + } } else if (mo->flags & MF_MISSILE) { @@ -9197,6 +9202,7 @@ static void P_DefaultMobjShadowScale(mobj_t *thing) thing->shadowscale = FRACUNIT; break; case MT_RING: + case MT_FLINGRING: case MT_DEBTSPIKE: case MT_FLOATINGITEM: case MT_BLUESPHERE: