diff --git a/src/k_kart.c b/src/k_kart.c index 8ce6ba3f8..93d17f6b6 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9042,6 +9042,7 @@ static void K_UpdateTripwire(player_t *player) boolean goodSpeed = (player->speed >= speedThreshold); boolean boostExists = (player->tripwireLeniency > 0); // can't be checked later because of subtractions... tripwirepass_t triplevel = K_TripwirePassConditions(player); + boolean mightplaysound = false; if (triplevel != TRIPWIRE_NONE) { @@ -9050,12 +9051,7 @@ static void K_UpdateTripwire(player_t *player) mobj_t *front = P_SpawnMobjFromMobj(player->mo, 0, 0, 0, MT_TRIPWIREBOOST); mobj_t *back = P_SpawnMobjFromMobj(player->mo, 0, 0, 0, MT_TRIPWIREBOOST); - if (P_IsDisplayPlayer(player)) - { - S_StartSound(player->mo, sfx_s3k40); - S_StopSoundByID(player->mo, sfx_gshaf); - } - + mightplaysound = true; P_SetTarget(&front->target, player->mo); P_SetTarget(&back->target, player->mo); @@ -9074,6 +9070,12 @@ static void K_UpdateTripwire(player_t *player) if (triplevel != TRIPWIRE_CONSUME) player->tripwireLeniency = max(player->tripwireLeniency, TRIPWIRETIME); + + if (P_IsDisplayPlayer(player) && player->tripwireLeniency && mightplaysound) + { + S_StartSound(player->mo, TRIPWIRE_OK_SOUND); + S_StopSoundByID(player->mo, TRIPWIRE_NG_SOUND); + } } // TRIPWIRE_CONSUME is only applied in very specific cases (currently, riding Garden Top) diff --git a/src/k_kart.h b/src/k_kart.h index 721b5763f..738513358 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -64,6 +64,9 @@ Make sure this matches the actual number of states #define EARLY_ITEM_FLICKER (NUMTRANSMAPS) +#define TRIPWIRE_OK_SOUND (sfx_s3k40) +#define TRIPWIRE_NG_SOUND (sfx_gshaf) + // 2023-08-26 +ang20 to Sal's OG values to make them friendlier - Tyron #define STUMBLE_STEEP_VAL (ANG60 + ANG20) #define STUMBLE_STEEP_VAL_AIR (ANG30 + ANG10 + ANG20) diff --git a/src/p_mobj.c b/src/p_mobj.c index 98d377637..d539f6c88 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -7864,10 +7864,12 @@ static boolean P_MobjRegularThink(mobj_t *mobj) if (!mobj->target || !mobj->target->health || !mobj->target->player || !mobj->target->player->tripwireLeniency) { - if (mobj->target && mobj->target->player && P_IsDisplayPlayer(mobj->target->player)) + if (mobj->target && mobj->target->player + && P_IsDisplayPlayer(mobj->target->player) + && !(mobj->target->player->curshield == KSHIELD_TOP)) { - S_StopSoundByID(mobj->target, sfx_s3k40); - S_StartSound(mobj->target, sfx_gshaf); + S_StopSoundByID(mobj->target, TRIPWIRE_OK_SOUND); + S_StartSound(mobj->target, TRIPWIRE_NG_SOUND); } P_RemoveMobj(mobj);