Обзор RPF8¶
RPF (RAGE Package File) — формат архивов движка RAGE. У GTA V версия 8 — RPF7 в коде, но финальная ревизия этой версии. Не путать с RPF7 ранних GTA IV билдов, формат разный по шифрованию и хешированию.
Внутри игры RPF используется для всего — ресурсов уровня, машин, оружия, текстур, скриптов, аудио, шрифтов. Структурно ближе всего к ZIP или TAR — это контейнер с TOC шапкой плюс блобы файлов друг за другом. Отличия:
- Шифрование на уровне файлов (AES для конфигов, NG для ресурсов).
- Поддержка вложенных архивов как обычных файлов (
.rpfвнутри.rpf— без распаковки в память). - Файлы-«ресурсы» (
.ydr/.ydd/.ytd/.yft/.ypt) имеют второй уровень формата: RSC7 header + virtual/physical page tables.
Какие RPF мы трогаем¶
flowchart TD
Update[update/update.rpf
~2 ГБ — главная цель] --> X64Patch[x64/patch/...]
Update --> X64DLC[x64/dlcpacks/]
X64DLC --> Mpchr[mpchristmas/dlc.rpf
вложенный архив]
X64DLC --> Miami[miami_weapon/dlc.rpf
наш кастомный DLC для ганпаков]
X64Patch --> Cdimg[data/cdimages/]
Cdimg --> Mmap[scaleform_minimap.rpf
тут лежит minimap.gfx]
Cdimg --> Generic[scaleform_generic.rpf
тут лежит hud_reticle.gfx]
X64Patch --> Effects[data/effects/]
Effects --> Ptfx[ptfx.rpf
тут лежит core.ypt — партиклы/трейсера]
X64Patch --> Common[data/effects/bloodfx.dat
loose файл, не вложенный rpf]
Главный наш target — update/update.rpf. Это файл который Rockstar обновляет с каждым патчем игры, и который RP-сервера разрешают модифицировать (только этот, не x64a.rpf или другие том-архивы — те античит проверяет жёстче).
Внутри update.rpf интересные нам подархивы:
| Подархив | Что внутри | Какой компонент |
|---|---|---|
x64/patch/data/cdimages/scaleform_minimap.rpf |
minimap.gfx — флэш-вектор миникарты |
Минимапа |
x64/patch/data/cdimages/scaleform_generic.rpf |
hud_reticle.gfx — прицел и HUD |
Прицел (crosshair) |
x64/patch/data/effects/ptfx.rpf |
core.ypt — все партикл-эффекты включая трейсера |
Трейсера, blood, искры |
x64/patch/common/data/effects/bloodfx.dat |
конфиг blood эффектов (loose-файл, не в rpf) | bloodfx |
x64/patch/common/data/timecycle/*.xml + visualsettings.dat |
таймциклы / погода | Timecycle |
x64/dlcpacks/miami_weapon/dlc.rpf |
наш DLC для оружейных модов | Ганпаки |
Видно как структура диктует архитектуру парсера. Каждый компонент имеет известное место — ComponentScanner ходит по этим путям и проверяет: тут что-то лежит у донора → считаем что мод трогает этот компонент.
Что мы НЕ трогаем¶
x64a.rpf,x64b.rpf...x64w.rpf— основные том-архивы игры. Размеры от 1 до 13 ГБ каждый. Античит проверяет хеш. Менять их = бан.common.rpf,script.rpf— игровая логика. Никогда.audio/*.rpfкромеx64/audio/sfx/— звуковые том-архивы. Их мы используем только для звуковых паков, в очень ограниченной области (PLAYER.rpf,RESIDENT.rpfи пара других внутриsfx/).
Краткая шапка RPF8¶
struct RpfHeader_v8 {
uint32 magic; // 'RPF7' (0x37465052)
int32 entryCount; // сколько записей в TOC
int32 namesLength; // длина блока имён
int32 encryption; // 0=NONE, 0x4E45504F=OPEN, 0x0FFFFFF9=AES, 0x0FEFFFFF=NG
}
struct RpfEntry { // 16 байт
uint32 nameOffset; // offset в name table
uint32 flags; // первые 8 бит = тип записи
// ... type-specific поля
}
Магия 0x37465052 = '7FPR' little-endian = "RPF7". Имена файлов хранятся отдельным блоком после TOC. Файлы лежат подряд с offset'ами заданными в TOC.
Дальше — детально:
- Структура архива → (TOC, имена, file entries)
- Шифрование AES + NG → (101 ключ, табличный шифр)
- RageLib.GTA5 — наш API → (что используем, что обходим)
- ArchiveFix.exe — пересчёт хешей → (без него файл невалидный)