#smash #ultimate #arc #extract #file-format #directory #data-file

smash-arc

A Rust library for working with Smash Ultimate's data.arc files

5 releases (3 breaking)

0.6.0 Dec 9, 2023
0.5.0 Jun 12, 2022
0.4.0 Apr 15, 2022
0.2.1 Jan 25, 2021
0.2.0 Jan 23, 2021

#1906 in Parser implementations

MIT license

110KB
2.5K SLoC

smash-arc

A Rust library for working with Smash Ultimate's data.arc files. For building on desktop, add --features=libzstd. See the cargo.toml for additional options.
Example: cargo build --release --features=libzstd


lib.rs:

A library for working with the data.arc file from Smash Ultimate.

use smash_arc::{ArcFile, ArcLookup, FileNode, Hash40, Region};

// Load the hashes needed to list directories (file format restriction)
Hash40::set_global_labels_file("hash_labels.txt").unwrap();

// Parse the arc from a file
let arc = ArcFile::open("data.arc").unwrap();

// loop over every file in the root
for node in arc.get_dir_listing("/").unwrap() {
    match node {
        FileNode::Dir(dir) => {
            // print out name of directory
            println!("directory: {}", dir.global_label().unwrap());
        }
        FileNode::File(file) => {
            // extract file
            let path = file.global_label().unwrap();
            std::fs::write(path, arc.get_file_contents(file, Region::UsEnglish).unwrap()).unwrap();
        }
    }
}

Cargo Features

  • network (enabled by default) = Ability to parse the file over the network

  • dir-listing (enabled by default) = List directories

  • global-hashes (enabled by default) = Enable a global table for cracking hashes

  • smash-runtime = Enables features for running under the context of Smash Ultimate itself (enable Aarch64 crc32 hardware acceleration, enable parsing the Arc from the game's memory layout)

  • search = Enable functionality to fuzzy search ArcFiles

  • ZSTD backends

    • libzstd - Recommended for use on platforms it builds for
    • rust-zstd - Increased portability (Recommended for use on switch)
    • nozstd - Provide no zstd backend, panic on ZSTD decompression

Dependencies

~1.8–3.5MB
~67K SLoC