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
  • GRIDS.DAT pedestrian/vehicle route networks
  • 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, GridsDat, 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.
  • GridsDat.read(...) parses GRIDS.DAT pedestrian and car navigation graphs and can serialize them back to text.
  • grids_to_dict(...), grids_to_json(...), and write_grids_json(...) export a normalized node/link document with explicit node_id and link_id values for downstream tools.
  • 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.

GRIDS Export

from bullyfury import GridsDat, grids_to_json

grids = GridsDat.read(r"C:\Program Files (x86)\Steam\steamapps\common\Bully Scholarship Edition\Config\GRIDS.DAT")
json_text = grids_to_json(grids)

The normalized export includes:

  • top-level header counts
  • every section (PEDGRID, CARGRID)
  • every node with explicit node_id
  • every link with explicit link_id
  • node flags, width, speed, density, and attached link_ids
  • link src, dest, dist, lanes, and width

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.2.tar.gz (121.7 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.2-py3-none-any.whl (128.0 kB view details)

Uploaded Python 3

File details

Details for the file bullyfury-0.1.2.tar.gz.

File metadata

  • Download URL: bullyfury-0.1.2.tar.gz
  • Upload date:
  • Size: 121.7 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.2.tar.gz
Algorithm Hash digest
SHA256 f07dbdf5ad607ddad3f6a657335bc081b8e8bc7e336b2fd914f4b7e637959130
MD5 2ee297ea5dee5d7d24f17e4ee45706c7
BLAKE2b-256 8d0b5d91e24d7ebba379e0ca0e481be368d28c61ac5c01bd9b813964eded55b2

See more details on using hashes here.

File details

Details for the file bullyfury-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: bullyfury-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 128.0 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0b4512bb6e8ae1603cd851be8fd5ea027303115e0496b2d40a73f43f730b0e77
MD5 eb472bca6fc3cb516e93edf6ca19896a
BLAKE2b-256 080f008eb9773e4f7957f149757101641c1e5618bad10875103fa53e58319014

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