anchor.diff:  
   //Mission texts of original campaigns are available in all languages,
   //custom campaigns are unlikely to have more texts in more than 1-2 languages
  -function TKMCampaign.MissionText(aIndex: Byte): AnsiString;
  +function TKMCampaign.MissionText(aIndex: Byte): UnicodeString;
   begin
     Result := fTextLib[10 + aIndex];
   end;
   
   
  -function TKMCampaign.BreifingAudioFile(aIndex: Byte; aLang: string): string;
  +function TKMCampaign.BreifingAudioFile(aIndex: Byte; aLang: AnsiString): string;
   begin
     Result := fPath + fShortTitle + Format('%.2d', [aIndex+1]) + PathDelim +
               fShortTitle + Format('%.2d', [aIndex+1]) + '.' + aLang + '.mp3';
  
positive.code: end;
  
  
  function TKMCampaign.CampaignTitle: string;
  begin
    Result := fTextLib[0];
  end;
  
  
  function TKMCampaign.CampaignDescription: string;
  begin
    Result := fTextLib[2];
  end;
  
negative.code:     property ShortTitle: AnsiString read fShortTitle write fShortTitle;
      property UnlockedMap: Byte read fUnlockedMap write SetUnlockedMap;
  
      function CampaignTitle: UnicodeString;
      function CampaignDescription: UnicodeString;
      function MissionFile(aIndex: Byte): UnicodeString;
      function MissionTitle(aIndex: Byte): UnicodeString;
      function MissionText(aIndex: Byte): UnicodeString;
      function BreifingAudioFile(aIndex: Byte; aLang: AnsiString): string;
    end;
  
  
  