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