A Python library for parsing and modifying RPF files for GTA IV.
Project description
pyrpfiv
A Python library for parsing and modifying RPF (Resource Package Format) files, specifically designed for Grand Theft Auto IV. This library provides simple functionality to read, extract, and modify files within RPF archives while handling encryption and file name hashing.
Table of Contents
Core Functions
- File Extraction - Extract files from RPF archives
- File Replacement - Replace files in RPF archives
- File Listing - List all files in RPF archives
- JSON Export - Export RPF contents to JSON
Setup & Requirements
Documentation
Additional Information
Features
- Parse RPF3 file format used in GTA IV
- Extract files from RPF archives
- Add/Replace files in RPF archives while preserving hash structure
- Automatic handling of encrypted TOC (Table of Contents)
- Support for file name hash resolution using hashes.ini
- JSON export of RPF contents
- Detailed logging of operations
Installation
pip install pyrpfiv
Requirements
- Python 3.8 or higher
- pycryptodome >= 3.19.0
- GTA IV executable version 1.0.8.0 (other versions are not supported)
- hashes.ini file in working directory (for filename resolution)
Basic Usage
from pyrpfiv import RPFParser
# Initialize parser with RPF file and GTA IV executable path
parser = RPFParser(
rpf_filename="path/to/your.rpf",
gtaiv_exe_path="path/to/gtaiv.exe" # Must be version 1.0.8.0
)
API Reference
RPFParser Class
Initialization
parser = RPFParser(rpf_filename: str, gtaiv_exe_path: str)
rpf_filename: Path to the RPF file you want to work withgtaiv_exe_path: Path to GTA IV executable version 1.0.8.0 (needed for AES key extraction)
File Operations
Extracting Files
parser.extract_file(
file_path="RADIO_VLADIVOSTOK/track_01", # Note: RPF files don't use extensions
output_dir="output/directory"
)
file_path: Path of the file within the RPF archiveoutput_dir: Directory where the file should be extracted
Replacing Files
parser.add_file(
source_file="path/to/new/audio",
rpf_path="RADIO_VLADIVOSTOK/track_01" # Note: RPF files don't use extensions
)
source_file: Path to the new file that will replace the existing onerpf_path: Path of the file to replace within the RPF archive
Listing Files
# Access all files in the RPF
for entry in parser.paths:
print(f"File: {entry['path']}")
print(f"Size: {entry['size']} bytes")
print(f"Offset: 0x{entry['offset']:X}")
Exporting RPF Contents
# Export to JSON
parser.save_json("rpf_contents.json")
File Structure Requirements
hashes.ini
The library requires a hashes.ini file in the working directory for resolving file name hashes. Format:
hash_value=filename
# Example:
123456789=track_01
Error Handling
The library provides several custom exceptions for proper error handling:
RPFParsingError: General parsing errorsFileExtractionError: File extraction failuresFileNotFoundInRPFError: File not found in RPF archiveHashesFileNotFoundError: Missing hashes.ini fileInvalidTOCEntryError: Invalid TOC entryAESKeyExtractionError: Failed to extract AES keyTOCDecryptionError: Failed to decrypt TOC
Example error handling:
from pyrpfiv import RPFParser, FileNotFoundInRPFError
try:
parser.extract_file("nonexistent/file", "output")
except FileNotFoundInRPFError as e:
print(f"Error: {e}")
Technical Details
Version Support
Currently, only GTA IV version 1.0.8.0 is supported. This is because the AES key extraction is specifically tailored for this version of the executable. Other versions of GTA IV will not work with this library.
Disclaimer
This tool is provided for educational and research purposes only. The RPF file format is proprietary to Rockstar Games. Users of this library should:
- Respect Rockstar Games' intellectual property rights
- Comply with Rockstar Games' terms of service and EULA
- Only use this tool with legally obtained copies of GTA IV version 1.0.8.0
- Not use this tool for unauthorized distribution or modification of game files
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyrpfiv-0.1.1.tar.gz.
File metadata
- Download URL: pyrpfiv-0.1.1.tar.gz
- Upload date:
- Size: 891.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
13119809c431b416cb783edd2c13aeca7a7df1ad0723373707718ef5f5337dcc
|
|
| MD5 |
8c92ea13a1a6813b1a51b044d07028f4
|
|
| BLAKE2b-256 |
a9c96fef3ebf62e5106cd3ae6ff67b9f8ae827938187c08e95d7b946e2e2e1a4
|
File details
Details for the file pyrpfiv-0.1.1-py3-none-any.whl.
File metadata
- Download URL: pyrpfiv-0.1.1-py3-none-any.whl
- Upload date:
- Size: 903.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c7e69c04bb31186ea150e21d026a8a167fbd188cb5a6eb867b1634567ebae097
|
|
| MD5 |
152848d52d5320b6b481e485e2e5059b
|
|
| BLAKE2b-256 |
0bb839e8e5b8b50fae9125bf47aa2729d4577567616c7626ee418f3161e04fcb
|