The first mod pack loader for Hill Climb Racing 2.
Void Prism is an open-source mod pack loader and format designed for Hill Climb Racing 2. It is part of the VEKENDIAN ecosystem and is designed to be embedded into Void while remaining a standalone project for mod pack creators.
- You can pass a
.zipfile path directly toPrism.install()/Prism.validate()— it's extracted to a temp directory automatically and cleaned up after. No need to unzip manually. - Simple
manifest.jsonformat - .zip support — install packs directly from a
.zipfile, no manual extraction needed - Modular package-based structure
package/and flat layout support — drop files at pack root or insidepackage/, Prism auto-resolves which real game package they belong to- Global JSON routing —
json/events/,json/seasons/,json/shop/files go straight to the game's shared directories - JSON merging for supported game data
- Automatic
.packagesgeneration and checksum handling - Multiple mod packs with configurable priority
- Two access methods: Virtual Space (no root) and ROOT
- Pure Java 7 implementation — no external dependencies
- Lua reference implementation
Run Void Prism inside a virtual space app (e.g. VMOS, Parallel Space) alongside HCR2. The app auto-detects the virtual space root using the VirtualBackup technique — getFilesDir() + package name stripping — and finds HCR2's content_cache/ automatically. No root required.
Run Void Prism normally on a rooted device. Uses su to temporarily change permissions on HCR2's data directory so the app can read/write content_cache/. Original ownership and permissions are restored on exit.
Prism supports three layouts, and a single pack can mix all three:
package/ (primary) — category folders sit directly inside package/ (see docs/GUIDE.md):
MyPack/
├── manifest.json
└── package/
└── textures/
└── cars/jeep/epic/jeep_evil_epic/chassis.png
Flat — drop files straight at pack root, next to manifest.json:
MyPack/
├── manifest.json
├── README.md
└── textures/
└── cars/jeep/epic/jeep_evil_epic/chassis.png
Real-structure (legacy) — name the actual game package directly:
packages/remote_vehicle_paints_2.zip/textures/cars/jeep/epic/jeep_evil_epic/chassis.png
For package/ and flat packs, Prism reads the game's own .packages index and matches each file's relative path against every existing package's filelist. A match gets appended to that package automatically — no need to know or hardcode the real package name. Unmatched files fall back into one new package, named <packId>.zip.
Files under json/events/, json/seasons/, or json/shop/ are routed directly to the game's shared global JSON directories instead of into a game package — these don't belong to any single package.
Simple to author, still precise under the hood.