Low-level library for exploring From Software games files.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
dece 15dd0b2cb8
param: good enough parsing of bitfields
4 years ago
bindings/python Revert "python: faulty unpackers::bnd bindings" 4 years ago
res names: add 4 missing hashes 4 years ago
src param: good enough parsing of bitfields 4 years ago
.gitignore Init 4 years ago
Cargo.lock param: good enough parsing of bitfields 4 years ago
Cargo.toml param: good enough parsing of bitfields 4 years ago
README.md paramdef: WIP parsing 4 years ago

README.md

Rusted Iron Ring

Low-level library for exploring From Software games files. Currently only supports Dark Souls 1 (PTDE).

This project is mainly to play with the Rust language, Nom parser, FFI, etc; if you need an actually used and tested library, see SoulsFormats.

Usage

The project contains 2 artefacts:

  • ironring, a library with all the parsing/unpacking features implemented.
  • rir, an executable to use main lib features from the CLI.

The goal is to make the lib compatible with FFI tools such as Python's ctypes, to ship a dynamic lib accessible for any language to easily script tasks and ideas, but we're not there yet.

Ironring usage:

Rusted Iron Ring

USAGE:
    rir [SUBCOMMAND]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

SUBCOMMANDS:
    bhd     Extracts BHD/BDT contents
    bhds    Extracts all BHD/BDT content (alphabetically) in a folder
    bhf     Extracts BHF/BDT contents
    bnd     Extracts BND contents
    dcx     Extracts and decompress DCX data
    hash    Calculates hash for a string
    help    Prints this message or the help of the given subcommand(s)

Features

  • BHD5 / BDT: extraction from disk to disk.
  • DCX: decompression from disk to disk/memory.
  • BND (v3): extraction from disk/memory to disk/memory, optionally decompress from DCX.
  • BHF (v3): extraction from disk/memory to disk/memory.

Repacking is not supported, maybe one day. It is not that useful when using UDSFM and Yabber, but if you really need it you can check out SiegLib.

There is a demo Python binding for some name_hashes features in the bindings/python dir, that uses PyO3 and thus requires nightly rustc to build.

Credits

All the fat cats involved in the scene and the wiki.