+ 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)
+ {
+ ch->pos += paintedtime - ch->lastptime;
+
+ // If the sound should have ended by then
+ if ((unsigned int)ch->pos > sfx->total_length)
+ {
+ int loopstart;
+
+ if (ch->flags & CHANNELFLAG_FORCELOOP)
+ loopstart = 0;
+ else
+ loopstart = -1;
+ if (sfx->loopstart >= 0)
+ loopstart = sfx->loopstart;
+
+ // If the sound is looped
+ if (loopstart >= 0)
+ ch->pos = (ch->pos - sfx->total_length) % (sfx->total_length - loopstart) + loopstart;
+ else
+ ch->pos = sfx->total_length;
+ ch->end = paintedtime + sfx->total_length - ch->pos;
+ }
+ }
+
+ ltime = paintedtime;