- // This is a 'new' sound if thread_clone not set.
- if( !src->thread_clone || (src->flags & SFX_FLAG_ONESHOT) )
- {
- clone = sfx_alloc();
- if( !clone )
- break;
-
- src->thread_clone = clone;
- }
- else
- {
- clone = src->thread_clone;
-
- // Modifying an active system's cursor spawns a small fadeout ghost system
- if( clone->cur != src->cur )
- {
- sfx_system *ghost_system = sfx_alloc();
-
- if( !ghost_system )
- break;
-
- ghost_system->source = clone->source;
- ghost_system->ch = clone->ch;
- ghost_system->end = clone->end;
- ghost_system->cur = clone->cur;
- ghost_system->flags = SFX_FLAG_GHOST;
- ghost_system->fadeout = FADEOUT_LENGTH;
- ghost_system->fadeout_current = FADEOUT_LENGTH;
- ghost_system->vol_src = clone->vol_src;
- ghost_system->name = clone->name;
- ghost_system->thread_clone = src;
- }
- }
-
- // run replacement routine if one is waiting (todo: what is this?)
- if( src->replacement )
- {
- free( src->source );
-
- src->source = src->replacement;
- src->replacement = NULL;
- }