Skip to content

BPV1 textures

Gong Xian edited this page Sep 9, 2023 · 9 revisions

Several files contain collections of sequences of PVR textures with the signature BPV1. The header contains information on the number of textures, their PVR formats, and dimensions. The pixel data for the textures are then stored one after another with no intervening headers. These chunks may be PRS-compressed, in which case the compressed data is followed by CPRS and four 00 bytes.

Information on this format is based on findings from DerekPascarella and the PVR format as documented at https://github.com/nickworonekin/puyotools/wiki/PVR-Texture.

Header

The first 16 bytes consist of the following:

Offset Length Description
0x0 4 The signature 42 50 56 31, or BPV1 in ASCII
0x4 4 The size of this BPV1 chunk, starting after the first 8 bytes
0x8 4 Sub-header length, usually 0x8
0xC 4 The number of textures in this chunk, 1 or more

Offset Tables and Data

Following the header are two offset tables, both containing a number of entries equal to the number of textures.

The first table contains data describing entries in the next table. Each entry contains the following data:

Offset Length Description
0x0 4 Offset for the entry in the next table, starting after the first 8 bytes
0x4 4 An unknown value, usually 00 00 80 40 (floating point 4.0)
0x8 4 An unknown value, possibly an ID

Entries in the second table contain information on the textures.

Offset Length Description
0x0 4 Offset for the pixel data, starting after the first 8 bytes
0x4 2 00
0x6 1 PVR pixel format
0x7 1 PVR data format
0x8 8 00
0x10 4 Texture width
0x14 4 Texture height
0x18 20 00

See this page for information on PVR pixel and data formats. Some formats contained in these chunks are not supported by current tools.

Following the tables is the PVR texture data for each entry, one after another. This data can be copied into a handcrafted PVR file with the corresponding format data written into the header to form a valid PVR texture.

BTLA header

Larger files may contain a table with a signature of BTLA preceding a collection of BPV1 chunks.

This table consists of the following:

Offset Length Description
0x0 4 The signature 42 54 4C 41, or BTLA in ASCII
0x4 4 The total file size of this chunk and the following BPV1 chunks
0x8 4 Sub-header length, usually 0x8
0xC 4 The number of BPV1 chunks, 1 or more

This is followed by a list of offsets for the BPV1 chunks, starting after the first 8 bytes.