procedure ReloadSides; // populates SideList list and loads side images into SideImageList image list var i: Integer; s: string; side: string; res: Integer; sl, sl2: TStringList; index, size, count: Integer; procedure LoadDefaultSideImage(Side: string); begin if UpperCase(Side) = 'ARM' then SideImageList.AddMasked(MainForm.DefaultArmImage.Picture.Bitmap, clWhite) else if UpperCase(Side) = 'CORE' then SideImageList.AddMasked(MainForm.DefaultCoreImage.Picture.Bitmap, clWhite) else SideImageList.AddMasked(MainForm.DefaultSideImage.Picture.Bitmap, clWhite); // none specific side end; begin SideList.Clear; SideImageList.Clear; count := GetSideCount; for i := 0 to count-1 do SideList.Add(GetSideName(i)); if count = 0 then // this should not happen - mod author forgot to define sides! begin MessageDlg('This mod doesn''t have any sides defined. Using default sides (Arm/Core) ...', mtWarning, [mbOK], 0); SideList.Add('Arm'); SideList.Add('Core'); end; sl := TStringList.Create; // list of archive files sl2 := TStringList.Create; // list of archive file sides // get a list of all side images from mod archive: res := InitFindVFS('SidePics\*.bmp'); SetLength(s, 255); res := FindFilesVFS(res, PChar(s), 255); if res = 0 then begin if Debug.Enabled then MainForm.AddMainLog('No side pictures found! Skipping ...', Colors.Error); end else begin while res <> 0 do begin for i := 1 to 255 do if s[i] = #0 then begin s := Copy(s, 1, i-1); Break; end; if Debug.Enabled then MainForm.AddMainLog('Side image found: ' + s, Colors.Info); sl.Add(s); sl2.Add(UpperCase(Copy(ExtractFileName(s), 1, Length(ExtractFileName(s))-4))); SetLength(s, 255); res := FindFilesVFS(res, PChar(s), 255); end; end; // load side images: for i := 0 to SideList.Count-1 do begin index := sl2.IndexOf(UpperCase(SideList[i])); // if we don't have a suitable side image, load the default one: if index = -1 then LoadDefaultSideImage(UpperCase(SideList[i])) else begin // let's load the side image from mod's archive file: res := OpenFileVFS(PChar(sl[index])); if res = 0 then begin MainForm.AddMainLog('Error: Unable to open archive file: ' + sl[index], Colors.Error); LoadDefaultSideImage(UpperCase(SideList[i])); Continue; end; size := FileSizeVFS(res); if size = 0 then begin MainForm.AddMainLog('Error: Unable to open archive file: ' + sl[index], Colors.Error); LoadDefaultSideImage(UpperCase(SideList[i])); CloseFileVFS(res); Continue; end; SetLength(s, size); ReadFileVFS(res, @s[1], size); try AddBitmapToImageList(SideImageList, s[1], size); except LoadDefaultSideImage(UpperCase(SideList[i])); end; end; end; // for