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]; }