Merge branch 'silhouette-soundless' into 'master'

Don't play skinsounds from silhouettes

See merge request KartKrew/Kart!2173
This commit is contained in:
James R. 2024-03-27 04:11:06 +00:00
commit deaec8e541
4 changed files with 100 additions and 48 deletions

View file

@ -2693,13 +2693,33 @@ static void K_RegularVoiceTimers(player_t *player)
player->karthud[khud_tauntvoices] = 4*TICRATE; player->karthud[khud_tauntvoices] = 4*TICRATE;
} }
void K_PlayAttackTaunt(mobj_t *source) static UINT8 K_ObjectToSkinIDForSounds(mobj_t *source)
{ {
sfxenum_t pick = P_RandomKey(PR_VOICES, 2); // Gotta roll the RNG every time this is called for sync reasons if (source->player)
boolean tasteful = (!source->player || !source->player->karthud[khud_tauntvoices]); return source->player->skin;
if (cv_kartvoices.value && (tasteful || cv_kartvoices.value == 2)) if (!source->skin)
S_StartSound(source, sfx_kattk1+pick); return MAXSKINS;
return ((skin_t *)source->skin)-skins;
}
static void K_PlayGenericTastefulTaunt(mobj_t *source, sfxenum_t sfx_id)
{
UINT8 skinid = K_ObjectToSkinIDForSounds(source);
if (skinid >= numskins)
return;
boolean tasteful = (!source->player || source->player->karthud[khud_tauntvoices]);
if (
cv_kartvoices.value
&& (tasteful || cv_kartvoices.value == 2)
&& R_CanShowSkinInDemo(skinid)
)
{
S_StartSound(source, sfx_id);
}
if (!tasteful) if (!tasteful)
return; return;
@ -2707,23 +2727,27 @@ void K_PlayAttackTaunt(mobj_t *source)
K_TauntVoiceTimers(source->player); K_TauntVoiceTimers(source->player);
} }
void K_PlayAttackTaunt(mobj_t *source)
{
// Gotta roll the RNG every time this is called for sync reasons
sfxenum_t pick = P_RandomKey(PR_VOICES, 2);
K_PlayGenericTastefulTaunt(source, sfx_kattk1+pick);
}
void K_PlayBoostTaunt(mobj_t *source) void K_PlayBoostTaunt(mobj_t *source)
{ {
sfxenum_t pick = P_RandomKey(PR_VOICES, 2); // Gotta roll the RNG every time this is called for sync reasons // Gotta roll the RNG every time this is called for sync reasons
boolean tasteful = (!source->player || !source->player->karthud[khud_tauntvoices]); sfxenum_t pick = P_RandomKey(PR_VOICES, 2);
K_PlayGenericTastefulTaunt(source, sfx_kbost1+pick);
if (cv_kartvoices.value && (tasteful || cv_kartvoices.value == 2))
S_StartSound(source, sfx_kbost1+pick);
if (!tasteful)
return;
K_TauntVoiceTimers(source->player);
} }
void K_PlayOvertakeSound(mobj_t *source) void K_PlayOvertakeSound(mobj_t *source)
{ {
boolean tasteful = (!source->player || !source->player->karthud[khud_voices]); UINT8 skinid = K_ObjectToSkinIDForSounds(source);
if (skinid >= numskins)
return;
boolean tasteful = (!source->player || source->player->karthud[khud_voices]);
if (!(gametyperules & GTR_CIRCUIT)) // Only in race if (!(gametyperules & GTR_CIRCUIT)) // Only in race
return; return;
@ -2732,8 +2756,14 @@ void K_PlayOvertakeSound(mobj_t *source)
if (leveltime < starttime+(10*TICRATE)) if (leveltime < starttime+(10*TICRATE))
return; return;
if (cv_kartvoices.value && (tasteful || cv_kartvoices.value == 2)) if (
cv_kartvoices.value
&& (tasteful || cv_kartvoices.value == 2)
&& R_CanShowSkinInDemo(skinid)
)
{
S_StartSound(source, sfx_kslow); S_StartSound(source, sfx_kslow);
}
if (!tasteful) if (!tasteful)
return; return;
@ -2741,11 +2771,12 @@ void K_PlayOvertakeSound(mobj_t *source)
K_RegularVoiceTimers(source->player); K_RegularVoiceTimers(source->player);
} }
void K_PlayPainSound(mobj_t *source, mobj_t *other) static void K_PlayGenericCombatSound(mobj_t *source, mobj_t *other, sfxenum_t sfx_id)
{ {
sfxenum_t pick = P_RandomKey(PR_VOICES, 2); // Gotta roll the RNG every time this is called for sync reasons UINT8 skinid = K_ObjectToSkinIDForSounds(source);
skin_t *skin = (source->player ? &skins[source->player->skin] : ((skin_t *)source->skin)); if (skinid >= numskins)
sfxenum_t sfx_id = skin->soundsid[S_sfx[sfx_khurt1 + pick].skinsound]; return;
boolean alwaysHear = false; boolean alwaysHear = false;
if (other != NULL && P_MobjWasRemoved(other) == false && other->player != NULL) if (other != NULL && P_MobjWasRemoved(other) == false && other->player != NULL)
@ -2753,31 +2784,29 @@ void K_PlayPainSound(mobj_t *source, mobj_t *other)
alwaysHear = P_IsDisplayPlayer(other->player); alwaysHear = P_IsDisplayPlayer(other->player);
} }
if (cv_kartvoices.value) if (
cv_kartvoices.value
&& R_CanShowSkinInDemo(skinid)
)
{ {
S_StartSound(alwaysHear ? NULL : source, sfx_id); S_StartSound(
alwaysHear ? NULL : source,
skins[skinid].soundsid[S_sfx[sfx_id].skinsound]
);
} }
K_RegularVoiceTimers(source->player); K_RegularVoiceTimers(source->player);
} }
void K_PlayPainSound(mobj_t *source, mobj_t *other)
{
sfxenum_t pick = P_RandomKey(PR_VOICES, 2); // Gotta roll the RNG every time this is called for sync reasons
K_PlayGenericCombatSound(source, other, sfx_khurt1 + pick);
}
void K_PlayHitEmSound(mobj_t *source, mobj_t *other) void K_PlayHitEmSound(mobj_t *source, mobj_t *other)
{ {
skin_t *skin = (source->player ? &skins[source->player->skin] : ((skin_t *)source->skin)); K_PlayGenericCombatSound(source, other, sfx_khitem);
sfxenum_t sfx_id = skin->soundsid[S_sfx[sfx_khitem].skinsound];
boolean alwaysHear = false;
if (other != NULL && P_MobjWasRemoved(other) == false && other->player != NULL)
{
alwaysHear = P_IsDisplayPlayer(other->player);
}
if (cv_kartvoices.value)
{
S_StartSound(alwaysHear ? NULL : source, sfx_id);
}
K_RegularVoiceTimers(source->player);
} }
void K_TryHurtSoundExchange(mobj_t *victim, mobj_t *attacker) void K_TryHurtSoundExchange(mobj_t *victim, mobj_t *attacker)
@ -2813,7 +2842,14 @@ void K_TryHurtSoundExchange(mobj_t *victim, mobj_t *attacker)
void K_PlayPowerGloatSound(mobj_t *source) void K_PlayPowerGloatSound(mobj_t *source)
{ {
if (cv_kartvoices.value) UINT8 skinid = K_ObjectToSkinIDForSounds(source);
if (skinid >= numskins)
return;
if (
cv_kartvoices.value
&& R_CanShowSkinInDemo(skinid)
)
{ {
S_StartSound(source, sfx_kgloat); S_StartSound(source, sfx_kgloat);
} }
@ -2821,6 +2857,22 @@ void K_PlayPowerGloatSound(mobj_t *source)
K_RegularVoiceTimers(source->player); K_RegularVoiceTimers(source->player);
} }
// MOVED so we don't have to extern K_ObjectToSkinID
void P_PlayVictorySound(mobj_t *source)
{
UINT8 skinid = K_ObjectToSkinIDForSounds(source);
if (skinid >= numskins)
return;
if (
cv_kartvoices.value
&& R_CanShowSkinInDemo(skinid)
)
{
S_StartSound(source, sfx_kwin);
}
}
static void K_HandleDelayedHitByEm(player_t *player) static void K_HandleDelayedHitByEm(player_t *player)
{ {
if (player->confirmVictimDelay == 0) if (player->confirmVictimDelay == 0)

View file

@ -517,13 +517,17 @@ void level_tally_t::Init(player_t *player)
{ {
// It'd be neat to add all of the grade sounds, // It'd be neat to add all of the grade sounds,
// but not this close to release // but not this close to release
if (rank < GRADE_C)
UINT8 skinid = player->skin;
if (skinid >= numskins || R_CanShowSkinInDemo(skinid) == false)
;
else if (rank < GRADE_C)
{ {
gradeVoice = ((skin_t *)player->mo->skin)->soundsid[S_sfx[sfx_klose].skinsound]; gradeVoice = skins[skinid].soundsid[S_sfx[sfx_klose].skinsound];
} }
else else
{ {
gradeVoice = ((skin_t *)player->mo->skin)->soundsid[S_sfx[sfx_kwin].skinsound]; gradeVoice = skins[skinid].soundsid[S_sfx[sfx_kwin].skinsound];
} }
} }

View file

@ -547,12 +547,6 @@ void P_PlayDeathSound(mobj_t *source)
S_StartSound(source, sfx_s3k35); S_StartSound(source, sfx_s3k35);
} }
void P_PlayVictorySound(mobj_t *source)
{
if (cv_kartvoices.value)
S_StartSound(source, sfx_kwin);
}
// //
// P_StartPositionMusic // P_StartPositionMusic
// //

View file

@ -502,6 +502,8 @@ void S_StartSoundAtVolume(const void *origin_p, sfxenum_t sfx_id, INT32 volume)
{ {
// redirect player sound to the sound in the skin table // redirect player sound to the sound in the skin table
skin_t *skin = (origin->player ? &skins[origin->player->skin] : ((skin_t *)origin->skin)); skin_t *skin = (origin->player ? &skins[origin->player->skin] : ((skin_t *)origin->skin));
if (R_CanShowSkinInDemo(skin-skins) == false)
return;
sfx_id = skin->soundsid[sfx->skinsound]; sfx_id = skin->soundsid[sfx->skinsound];
sfx = &S_sfx[sfx_id]; sfx = &S_sfx[sfx_id];
} }