RSC — различия между версиями

Материал из GTAModding.ru
Перейти к: навигация, поиск
(Формат)
Строка 22: Строка 22:
 
</source>
 
</source>
  
Для того что бы заменить занные в RSC файле необходимо просчитать размеры CPU и GPU частей (при этом проверив их кратность на 256), а затем вычислить новый параметр флага. Например, это можно сделать данными функциями:
+
Для того что бы заменить данные в RSC файле необходимо просчитать размеры CPU и GPU частей (при этом проверив их кратность на 256), а затем вычислить новый параметр флага. Например, это можно сделать данными функциями:
  
 
<source lang="delphi" line>
 
<source lang="delphi" line>
Строка 47: Строка 47:
 
  end;
 
  end;
 
</source>
 
</source>
 
 
  
 
==Версии и типы ресурсов:==
 
==Версии и типы ресурсов:==

Версия 19:26, 16 апреля 2010

Формат

Ресурсные файлы GTA IV имеют следующий формат:

Заголовок

4 байта - Сигнатура RSC (52 53 43 05)
4 байта - Версия ресурса
4 байта - Флаги

Далее следует сами данные ресурса в запакованном формате.

ПК-версия игры использует в качестве алгоритма упаковки - Zlib.

Распакованный ресурс можно разделить на две части - System Memory Segment (CPU) и Graphics Memory Segment (GPU), размером, кратным 256 каждая.

Их конкретные размеры "зашиты" в параметре "флаги" и могут быть вычислены с помощью данного алгоритма:

  1.  {Flags - переменная, содержащее соответственное значение}   
  2.  CPUSize:= (Flags AND $7FF) shl (((Flags shr 11) AND $F) + 8); //расчет размера System Memory Segment
  3.  GPUSize:= ((Flags shr 15) AND $7FF) shl (((Flags shr 26) AND $F)+8); //расчет размера Graphics Memory Segment

Для того что бы заменить данные в RSC файле необходимо просчитать размеры CPU и GPU частей (при этом проверив их кратность на 256), а затем вычислить новый параметр флага. Например, это можно сделать данными функциями:

  1.  function getCompactSize(size: longword): word; //вспомогательная функция
  2.  var
  3.   i: word;
  4.  begin
  5.   Assert(size mod 256 = 0); //не забудьте про проверку кратности на 256
  6.   size := size shr 8; 
  7.   i := 0;
  8.   while (size mod 2 = 0) and (size >= 32) and (i < 15) do begin
  9.     i := i + 1;
  10.     size := size shr 1;
  11.  end;
  12.  result := ((i and $F) shl 11) or (size and $7FF);
  13.  end;
  14.  
  15.  
  16.  function getFlags(sysSegSize, gpuSegSize: longword): longword; //основная функция
  17.  begin
  18.   result := (getCompactSize(sysSegSize) and $7FFF)
  19.          or (getCompactSize(gpuSegSize) and $7FFF) shl 15
  20.          or 3 shl 30;
  21.  end;

Версии и типы ресурсов:

Идентификатор Название Характеристика Расширения
1 Windows/XENON Animation Dictionary Анимации (PC и Xbox360) .WAD .XAD
7 XENON Texture Dictionary Текстуры (Xbox360) .XTD
8 Windows Texture Dictionary Текстуры (PC) .WTD
32 Bounds  ? (PC и Xbox360) .WBD .XBD
109 XENON Model Модели (Xbox360) .XDR
110 Windows Model Модели (PC) .WDR
112 Windows/XENON Model Frag Модели (PC и Xbox360) .WFT .XFT