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

Материал из GTAModding.ru
Перейти к: навигация, поиск
Строка 12: Строка 12:
 
ПК-версия игры использует в качестве алгоритма упаковки - Zlib.
 
ПК-версия игры использует в качестве алгоритма упаковки - Zlib.
  
Распакованный ресурс можно разделить на две части - System Memory Segment и Graphics Memory Segment, размером, кратным 256 каждая.
+
Распакованный ресурс можно разделить на две части - System Memory Segment (CPU) и Graphics Memory Segment (GPU), размером, кратным 256 каждая.
  
 
Их конкретные размеры "зашиты" в параметре "флаги" и могут быть вычислены с помощью данного алгоритма:
 
Их конкретные размеры "зашиты" в параметре "флаги" и могут быть вычислены с помощью данного алгоритма:
Строка 20: Строка 20:
 
  CPUSize:= (Flags AND $7FF) shl (((Flags shr 11) AND $F) + 8); //расчет размера System Memory Segment
 
  CPUSize:= (Flags AND $7FF) shl (((Flags shr 11) AND $F) + 8); //расчет размера System Memory Segment
 
  GPUSize:= ((Flags shr 15) AND $7FF) shl (((Flags shr 26) AND $F)+8); //расчет размера Graphics Memory Segment
 
  GPUSize:= ((Flags shr 15) AND $7FF) shl (((Flags shr 26) AND $F)+8); //расчет размера Graphics Memory Segment
 +
</source>
  
 +
Для того что бы заменить занные в RSC файле необходимо просчитать размеры CPU и GPU частей (при этом проверив их кратность на 256), а затем вычислить новый параметр флага. Например, это можно сделать данными функциями:
 +
 +
<source lang="delphi" line>
 +
function getCompactSize(size: longword): word; //вспомогательная функция
 +
var
 +
  i: word;
 +
begin
 +
  Assert(size mod 256 = 0); //не забудьте про проверку кратности на 256
 +
  size := size shr 8;
 +
  i := 0;
 +
  while (size mod 2 = 0) and (size >= 32) and (i < 15) do begin
 +
    i := i + 1;
 +
    size := size shr 1;
 +
end;
 +
result := ((i and $F) shl 11) or (size and $7FF);
 +
end;
 +
 +
 +
function getFlags(sysSegSize, gpuSegSize: longword): longword; //основная функция
 +
begin
 +
  result := (getCompactSize(sysSegSize) and $7FFF)
 +
        or (getCompactSize(gpuSegSize) and $7FFF) shl 15
 +
        or 3 shl 30;
 +
end;
 
</source>
 
</source>
 +
 +
  
 
==Версии и типы ресурсов:==
 
==Версии и типы ресурсов:==

Версия 15:35, 18 марта 2009

Формат

Ресурсные файлы 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