diff --git a/engine/client/snd_dma.c b/engine/client/snd_dma.c index 65a8b52ff..5cd10f2c9 100644 --- a/engine/client/snd_dma.c +++ b/engine/client/snd_dma.c @@ -3143,7 +3143,10 @@ float S_GetChannelLevel(int entnum, int entchannel) if (sc->channel[i].entnum == entnum && sc->channel[i].entchannel == entchannel && sc->channel[i].sfx) { ssamplepos_t spos = sc->GetChannelPos?sc->GetChannelPos(sc, &sc->channel[i]):(sc->channel[i].pos>>PITCHSHIFT); - scache = sc->channel[i].sfx->decoder.decodedata(sc->channel[i].sfx, &scachebuf, spos, 1); + if (sc->channel[i].sfx->decoder.decodedata)scache = sc->channel[i].sfx->decoder.decodedata(sc->channel[i].sfx, &scachebuf, spos, 1); + else + scache = NULL; + if (!scache) scache = sc->channel[i].sfx->decoder.buf; if (scache && spos >= scache->soundoffset && spos < scache->soundoffset+scache->length)