anchor.diff:    I: Integer;
   begin
     LoadStream.CheckMarker('ScriptSoundsManager');
  -  LoadStream.Read(fLastScriptIndex);
  +  LoadStream.Read(fLastScriptUID);
     LoadStream.Read(fCount);
     SetLength(fScriptSounds, fCount);
  -  for I := 0 to fCount-1 do
  -  begin
  -    LoadStream.Read(fScriptSounds[I].ScriptIndex);
  +  for I := 0 to fCount - 1 do
  +  begin
  +    LoadStream.Read(fScriptSounds[I].ScriptUID);
       LoadStream.ReadA(fScriptSounds[I].SoundName);
       LoadStream.Read(fScriptSounds[I].Volume);
       LoadStream.Read(fScriptSounds[I].Radius);
  
positive.code:   I: Integer;
  begin
    SaveStream.PlaceMarker('ScriptSoundsManager');
    SaveStream.Write(fLastScriptIndex);
    SaveStream.Write(fCount);
    for I := 0 to fCount-1 do
    begin
      SaveStream.Write(fScriptSounds[I].ScriptIndex);
      SaveStream.WriteA(fScriptSounds[I].SoundName);
      SaveStream.Write(fScriptSounds[I].Volume);
      SaveStream.Write(fScriptSounds[I].Radius);
  
negative.code: procedure TKMSoundPlayer.StopScriptSound(aIndex: Integer);
  begin
    if not fIsSoundInitialized then Exit;
    if fScriptSoundALIndex[aIndex] = -1 then Exit;
  
    //Stop previously playing sound and release buffer
    AlSourceStop(fALSounds[fScriptSoundALIndex[aIndex]].ALSource);
    AlSourcei(fALSounds[fScriptSoundALIndex[aIndex]].ALSource, AL_BUFFER, 0);
  
    fALSounds[fScriptSoundALIndex[aIndex]].PlaySince := 0;
    fScriptSoundALIndex[aIndex] := -1;
  end;
  
  
  procedure TKMSoundPlayer.AbortAllScriptSounds;
  var I: Integer;
  begin
    for I := Low(fScriptSoundALIndex) to High(fScriptSoundALIndex) do
      StopScriptSound(I);
  end;
  
  
  function TKMSoundPlayer.IsSoundPlaying(aIndex: Integer): Boolean;
  begin
    if aIndex < 0 then Exit(False);
  
    Result := (fALSounds[aIndex].PlaySince <> 0)
        and ((GetTimeSince(fALSounds[aIndex].PlaySince) < fALSounds[aIndex].Duration) or fALSounds[aIndex].Looped)
  end;
  
  
  function TKMSoundPlayer.IsScriptSoundPlaying(aScriptIndex: Integer): Boolean;
  begin
    Assert(InRange(aScriptIndex, Low(fScriptSoundALIndex), High(fScriptSoundALIndex)),
      Format('Script sounds index [ %d ] is not in range!', [aScriptIndex]));
  
    Result := IsSoundPlaying(fScriptSoundALIndex[aScriptIndex]);
  end;
  
  
  function TKMSoundPlayer.ActiveCount: Byte;
  var I: Integer;
  begin
    Result := 0;
    for I := Low(fALSounds) to High(fALSounds) do
      if IsSoundPlaying(I) then
        Inc(Result)
      else
  