RSC — различия между версиями
Материал из GTAModding.ru
Dageron (обсуждение | вклад) |
Dageron (обсуждение | вклад) |
||
Строка 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 каждая.
Их конкретные размеры "зашиты" в параметре "флаги" и могут быть вычислены с помощью данного алгоритма:
{Flags - переменная, содержащее соответственное значение}
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
Для того что бы заменить занные в RSC файле необходимо просчитать размеры CPU и GPU частей (при этом проверив их кратность на 256), а затем вычислить новый параметр флага. Например, это можно сделать данными функциями:
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;
Версии и типы ресурсов:
Идентификатор | Название | Характеристика | Расширения |
---|---|---|---|
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
|