Python I/O toolkit for Bully: Scholarship Edition PC assets
Project description
bullyfury
bullyfury is a Python toolkit for reading and rebuilding Bully: Scholarship Edition
PC asset formats.
Current scope:
IMGv1 archives (.img+.dir)IDBbinary tables with lossless roundtrip supportIPBbinary map chunks with lossless roundtrip supportNFT/NIFparsing with Bully texture extraction toDDS
The package is intentionally modular so each file format can evolve on its own.
Current API
from bullyfury import BullyColFile, IdbFile, ImgArchive, IpbFile, NifFile, NFTFile
from bullyfury import load_bully_collectibles, load_bully_text_keys
ImgArchive.read(...)reads.img/.dirpairs and can rebuild archives.IdbFile.read(...)parsesIDBheaders and keeps binary roundtrip stable.IpbFile.read(...)parsesIPBchunk layout and keeps binary roundtrip stable.BullyColFile.read(...)enumerates Bully.colsubmodels, exposes stableobject_id, bounds, box collisions, compressed mesh geometry, and preserves the remaining payload losslessly.NifFile.read(...)parses the Gamebryo header, block table, BullyNiSourceTexture/NiPixelDatablocks, and extracts supported textures toDDS.NifFile.material_bindingsexposes geometry-to-material bindings withbase_texture,normal_texture,gloss_texture,specular_color, andglossinesswhen present inNiTexturingProperty/NiMaterialProperty/NiSpecularProperty.NFTFile.read(...)is the texture-oriented Bully alias/subtype overNifFile.load_bully_collectibles()andload_bully_text_keys()expose bundled Bully text resources copied fromfastman92_processor.
Notes
IMG v1stores sizes in sectors, so exact unpadded file size is not always recoverable from existing archives.IDBandIPBparsing currently focuses on stable binary roundtrip and conservative structure discovery.- Bully
.colentries useCOL3magic but do not match the stock GTA SA header layout exactly;BullyColFilehandles the Bully-specific container shape while the copied genericColparser remains available for classic GTA-era files. - The Bully
.colparser currently covers:- per-submodel
object_id - local bounds
- AABB box blocks
- compressed mesh vertices and triangle faces
- material IDs mapped to readable names for parsed face and box surfaces
LIMKface adjacency when present- unparsed tail records as raw bytes for future reverse engineering
- per-submodel
NFTextraction now supports Bully/GamebryoNiPixelDatatextures inRGB8,RGBA8,DXT1,DXT3, andDXT5_ALTform.- Palettised
NiPixelData(PX_FMT_PAL8) is parsed, butDDSexport is still pending for that variant.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
bullyfury-0.1.1.tar.gz
(112.8 kB
view details)
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
bullyfury-0.1.1-py3-none-any.whl
(119.6 kB
view details)
File details
Details for the file bullyfury-0.1.1.tar.gz.
File metadata
- Download URL: bullyfury-0.1.1.tar.gz
- Upload date:
- Size: 112.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8474f2001c7debd9b8d7655d8fb8a98f1c107f6177beea416519dc0f262b16e
|
|
| MD5 |
7148596a99d5006a7ce95cf64e9bdeb4
|
|
| BLAKE2b-256 |
7306cf6a593c10e18a3fad5426d35f5de541b3b099185f3ed1584e70067bc8b2
|
File details
Details for the file bullyfury-0.1.1-py3-none-any.whl.
File metadata
- Download URL: bullyfury-0.1.1-py3-none-any.whl
- Upload date:
- Size: 119.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b7e12b8f44297a0302bd63da2c15c470d6726551e0767d0ef7b2b857f8c954e
|
|
| MD5 |
ff5aaf033f0ead3dee1f878ff387f9d5
|
|
| BLAKE2b-256 |
de97d9bb5d7d5194b7afee8437d4ddf3af6040218270117e136eec09f3bd6dc3
|