Skip to content
View in the app

A better way to browse. Learn more.

ResHax

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Help us keep the site running.
Zero Tolerance for Disrespect

CloakNT .XDS and .P3S files

Featured Replies

I'm not entirely sure if these file formats are unique to CloakNT engine games or if they're even all that different from each other but I am curios if anyone knows how to unpack them and access their contents.

games are Jurassic the Hunted (XB360 port) and Cabela's Dangerous Hunts 2011 (PS3 port) https://drive.google.com/file/d/19FfGnsF3hWKM0MC5MZkxXjaQp1-P7W-v/view?usp=sharing

.XDS being what Cauldron's Xbox ports use to pack their assets and .P3S is pretty obvious

again idk if the encryption is the same but with different names or if their slightly different due to the consoles.

  • 1 year later...
  • Localization

Poked around both sample files (act_str.p3s and act_str.xds). Turns out Cauldron's CloakNT engine does something pretty interesting here.

To answer your initial question: yes, both formats share the exact same container architecture under the hood, but the Xbox 360 version adds a compression layer.

Here is what is happening under the hood and a Python unpacker for them.


1. The Container Structure (<Cauldron Chunk File>)

Both formats use a chunk-stream container identified by a 21-byte ASCII magic:

<Cauldron Chunk File>

A few key takeaways from inspecting both files:

  • Little-Endian Data: Even though PS3 (Cell) and Xbox 360 (Xenon) are PowerPC architectures, CloakNT keeps internal values (floats, offsets, integers) in Little-Endian. IEEE-754 floats like 1.0f (00 00 80 3F) and 1.5f appear frequently in LE orientation.

  • No Central TOC: The container does not use a master file table at the beginning. Instead, chunks sit back-to-back, each prefixed with the <Cauldron Chunk File> signature.


2. PS3 vs. Xbox 360 Difference

Here is the big difference between .p3s and .xds:

PS3 (.p3s - Plain Stream)

  • The PS3 stream is completely uncompressed.

  • Scanning for the magic reveals 446 continuous records across the 243 MB file (ranging from small 1 KB chunks up to large 79 MB geometry/texture blobs).

  • Because it is uncompressed, these records can be sliced and unpacked cleanly right now.

Xbox 360 (.xds - LZSS Interleaved Stream)

  • The .xds file wraps the exact same chunk stream in a byte-level LZSS compression pass starting at file offset 0x05.

  • It uses standard [1 control byte] [8 items] (LSB-first):

    • Bit = 1: 1 literal byte

    • Bit = 0: 2-byte reference (v = b0<<8 | b1)

  • Match length is verified as (v & 0xF) + 3 (for example, string fragments like default_white.dds and models\actors\hands expand correctly).


3. Python Unpacker Tool (cloaknt_unpacker.py)

I put together a Python script to inspect and unpack both formats:

  • For PS3 (.p3s): Slices all 446 chunks into separate .bin files and writes a manifest.json with offsets, sizes, and any embedded asset paths found in the chunk headers.

  • For Xbox 360 (.xds): Includes a --mode deint option that filters the LZSS literal stream, allowing you to dump readable paths, script strings, and material names.

Usage:

# Inspect container info & record counts
python cloaknt_unpacker.py analyze act_str.p3s

# Unpack all chunks from PS3 archive
python cloaknt_unpacker.py unpack act_str.p3s -d extracted_ps3/

# List records and detected asset labels
python cloaknt_unpacker.py list act_str.p3s

# Filter readable literal text/paths from Xbox 360 stream
python cloaknt_unpacker.py unpack act_str.xds --mode deint -d extracted_x360/

(Script and README are attached to this post).

If you are looking to mod or inspect assets immediately, working with the PS3 .p3s file is currently the easiest path since it requires no decompression!

Cauldron-CloakNT_tool.zip

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.