anchor.diff:  
       fSoundGain:single; //aka "Global volume"
       fMusicIsFaded:boolean;
  +    fLastMessageNoticeTime: Cardinal; // Last time message notice were played
   
       fOnFadeMusic: TEvent;
       fOnUnfadeMusic: TBooleanEvent;
  
positive.code:   MAX_SOURCES = 32; //depends on hardware as well
    MAX_DISTANCE = 32; //After this distance sounds are completely mute
    MAX_PRIORITY_DISTANCE_FACTOR = (1/2); //Sounds past this distance will not play if there are few slots left (gives close sounds priority)
  
  
  { TKMSoundPlayer }
  
negative.code: procedure TKMSoundPlayer.Play(SoundID: TSoundFX; Volume:single=1);
  begin
    if SKIP_SOUND or not fIsSoundInitialized then Exit;
  
    // Check for consecutive messageNotices
    // When many warrior groups are hungry at the same time or many houses are not occupied at the same time
    // Sound should not be played N times, 1 is enought
    if SoundID = sfx_MessageNotice then
    begin
      if (fLastMessageNoticeTime > 0)
        and (GetTimeSince(fLastMessageNoticeTime) < MAX_DURATION_FROM_LAST_SND_MESSAGE_NOTICE) then
        Exit
      else
        fLastMessageNoticeTime := TimeGet;
    end;
  
    Play(SoundID, KMPOINTF_ZERO, false, Volume); //Redirect
  end;
  
  