Low-level library for exploring From Software games files.
This repository has been archived on 2024-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
2020-05-24 16:12:01 +02:00
bindings/python Revert "python: faulty unpackers::bnd bindings" 2020-05-15 19:21:37 +02:00
res names: add 4 missing hashes 2020-04-16 13:36:58 +02:00
src parsers: rename to formats 2020-05-24 16:11:41 +02:00
.gitignore Init 2020-04-11 04:21:21 +02:00
Cargo.lock param: good enough parsing of bitfields 2020-05-22 22:52:56 +02:00
Cargo.toml param: good enough parsing of bitfields 2020-05-22 22:52:56 +02:00
README.md readme: update with DAT 2020-05-24 16:12:01 +02:00

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
    dat         Extracts King's Field IV DAT 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)
    param       Parses PARAM contents
    paramdef    Prints PARAMDEF contents

Features

Containers

  • 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.
  • DAT (King's Field IV): 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.

Files

  • PARAMDEF: parsing
  • PARAM: parsing, optionally with a PARAMDEF

Misc

  • Encrypted archive name hasher.

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.