From 0606fb50bacd529ce500a8fcb019ef9eb2f1b40e Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 21 Jan 2023 12:58:06 +0000 Subject: [PATCH] S_StartSoundAtVolume, K_PlayPainSound, K_PlayHitEmSound: Use user skin for sounds instead of mobj skin So we'll always hear the clips we pick for Heavy Magician --- src/k_kart.c | 7 ++++--- src/s_sound.c | 5 +++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 4a4d15de0..72ee22b5c 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2515,8 +2515,8 @@ void K_PlayOvertakeSound(mobj_t *source) 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 - - sfxenum_t sfx_id = ((skin_t *)source->skin)->soundsid[S_sfx[sfx_khurt1 + pick].skinsound]; + skin_t *skin = (source->player ? &skins[source->player->skin] : ((skin_t *)source->skin)); + sfxenum_t sfx_id = skin->soundsid[S_sfx[sfx_khurt1 + pick].skinsound]; boolean alwaysHear = false; if (other != NULL && P_MobjWasRemoved(other) == false && other->player != NULL) @@ -2534,7 +2534,8 @@ void K_PlayPainSound(mobj_t *source, mobj_t *other) void K_PlayHitEmSound(mobj_t *source, mobj_t *other) { - sfxenum_t sfx_id = ((skin_t *)source->skin)->soundsid[S_sfx[sfx_khitem].skinsound]; + skin_t *skin = (source->player ? &skins[source->player->skin] : ((skin_t *)source->skin)); + sfxenum_t sfx_id = skin->soundsid[S_sfx[sfx_khitem].skinsound]; boolean alwaysHear = false; if (other != NULL && P_MobjWasRemoved(other) == false && other->player != NULL) diff --git a/src/s_sound.c b/src/s_sound.c index 0d3746d33..ddf072223 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -600,10 +600,11 @@ void S_StartSoundAtVolume(const void *origin_p, sfxenum_t sfx_id, INT32 volume) sfx = &S_sfx[sfx_id]; - if (sfx->skinsound != -1 && origin && origin->skin) + if (sfx->skinsound != -1 && origin && (origin->player || origin->skin)) { // redirect player sound to the sound in the skin table - sfx_id = ((skin_t *)origin->skin)->soundsid[sfx->skinsound]; + skin_t *skin = (origin->player ? &skins[origin->player->skin] : ((skin_t *)origin->skin)); + sfx_id = skin->soundsid[sfx->skinsound]; sfx = &S_sfx[sfx_id]; }