Skip to main content

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:

  • IMG v1 archives (.img + .dir)
  • IDB binary tables with lossless roundtrip support
  • IPB binary map chunks with lossless roundtrip support
  • NFT/NIF parsing with Bully texture extraction to DDS

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 / .dir pairs and can rebuild archives.
  • IdbFile.read(...) parses IDB headers and keeps binary roundtrip stable.
  • IpbFile.read(...) parses IPB chunk layout and keeps binary roundtrip stable.
  • BullyColFile.read(...) enumerates Bully .col submodels, exposes stable object_id, bounds, box collisions, compressed mesh geometry, and preserves the remaining payload losslessly.
  • NifFile.read(...) parses the Gamebryo header, block table, Bully NiSourceTexture / NiPixelData blocks, and extracts supported textures to DDS.
  • NifFile.material_bindings exposes geometry-to-material bindings with base_texture, normal_texture, gloss_texture, specular_color, and glossiness when present in NiTexturingProperty / NiMaterialProperty / NiSpecularProperty.
  • NFTFile.read(...) is the texture-oriented Bully alias/subtype over NifFile.
  • load_bully_collectibles() and load_bully_text_keys() expose bundled Bully text resources copied from fastman92_processor.

Notes

  • IMG v1 stores sizes in sectors, so exact unpadded file size is not always recoverable from existing archives.
  • IDB and IPB parsing currently focuses on stable binary roundtrip and conservative structure discovery.
  • Bully .col entries use COL3 magic but do not match the stock GTA SA header layout exactly; BullyColFile handles the Bully-specific container shape while the copied generic Col parser remains available for classic GTA-era files.
  • The Bully .col parser 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
    • LIMK face adjacency when present
    • unparsed tail records as raw bytes for future reverse engineering
  • NFT extraction now supports Bully/Gamebryo NiPixelData textures in RGB8, RGBA8, DXT1, DXT3, and DXT5_ALT form.
  • Palettised NiPixelData (PX_FMT_PAL8) is parsed, but DDS export is still pending for that variant.

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

bullyfury-0.1.1.tar.gz (112.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bullyfury-0.1.1-py3-none-any.whl (119.6 kB view details)

Uploaded Python 3

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

Hashes for bullyfury-0.1.1.tar.gz
Algorithm Hash digest
SHA256 b8474f2001c7debd9b8d7655d8fb8a98f1c107f6177beea416519dc0f262b16e
MD5 7148596a99d5006a7ce95cf64e9bdeb4
BLAKE2b-256 7306cf6a593c10e18a3fad5426d35f5de541b3b099185f3ed1584e70067bc8b2

See more details on using hashes here.

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

Hashes for bullyfury-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6b7e12b8f44297a0302bd63da2c15c470d6726551e0767d0ef7b2b857f8c954e
MD5 ff5aaf033f0ead3dee1f878ff387f9d5
BLAKE2b-256 de97d9bb5d7d5194b7afee8437d4ddf3af6040218270117e136eec09f3bd6dc3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page