corades
Что-то ты не так делаешь, специально проверил - пережал файлы, затем бросил то что получилось к первоначальным файлам и снова пережал; размер не вырос, дубликаты честно нашлись.
Отчет не показатель, иконки строятся на основании файлов в любом случае, а дубликаты ищутся на уровне записей. Принцип построения отчета вообще тупой, но быстрый: если запись - это картинка с допустимым ResourceType, то она извлекается в report\temp и на нее делается ссылка
код
Код:
for i:= 0 to DBPF2Decoder.Count-1 do with DBPF2Decoder.Items[i] do begin
AddToCoder(i);
if assigned(report) then
if IsPNG(ResourceType,
[TS3ResBldPNG, TS3ResByePNG, TS3ResCASPNG, TS3ResWrdPNG, TS3ResPatPNG])
and IsBestPNG(DBPF2Decoder, i) then begin
Decode(TMemoryStream.Create);
AddToReport(Stream, Format('%.8X-%.8X-%.8X%.8X.png',
[ResourceType, ResourceGroup, InstanceHi, InstanceLo]));
FreeStream;
end;
end;
С идеей редактирования архивов все красиво, но в теории. Простой случай - есть два платья красное и зеленое, используют один меш. Юзер смотрит на зеленое - не нравится, и хочет удалить. А вот тут возникает интересная задачка как удалить его так, чтобы меш не грохнуть, причем не имея исходных файлов. Вариантов два: или "размотать" всю структуру объекта (например,
такую
) или вести учет ссылок на записи (типа как M$ COM рефиренсы считает)
Вообще с репакером как он есть буду что-то решать. Сейчас ключевой проект - S3PackageViewer, на нем "обкатываю" декодирование данных об объектах, потому как делать убожество типа стандартного лаучера нет никакого желания.