if (!S_LoadSound (sfx, true))
continue;
+ // if the channel is paused
+ if (ch->flags & CHANNELFLAG_PAUSED)
+ {
+ size_t pausedtime;
+
+ pausedtime = end - paintedtime;
+ ch->lastptime += pausedtime;
+ ch->end += pausedtime;
+ continue;
+ }
+
// if the sound hasn't been painted last time, update his position
if (ch->lastptime < paintedtime)
{
{
int loopstart;
- if (ch->forceloop)
+ if (ch->flags & CHANNELFLAG_FORCELOOP)
loopstart = 0;
else
loopstart = -1;
if (ltime >= ch->end)
{
// if at end of loop, restart
- if ((sfx->loopstart >= 0 || ch->forceloop) && !stop_paint)
+ if ((sfx->loopstart >= 0 || (ch->flags & CHANNELFLAG_FORCELOOP)) && !stop_paint)
{
ch->pos = bound(0, sfx->loopstart, (int)sfx->total_length - 1);
ch->end = ltime + sfx->total_length - ch->pos;
if (stop_paint)
{
- if (ch->sfx->fetcher->end != NULL)
- ch->sfx->fetcher->end (ch);
- ch->sfx = NULL;
+ S_StopChannel (ch - channels);
break;
}
}