rabex 0.2.0

Tools for parsing and writing unity files, bundles and typetrees
Documentation
use std::io::Cursor;
use std::path::Path;

use anyhow::Result;
use rabex::files::SerializedFile;
use rabex::objects::{ClassId, ClassIdType};
use rabex::typetree::typetree_cache::TypeTreeCache;

fn main() -> Result<()> {
    let tpk = TypeTreeCache::embedded();

    let path = Path::new(
        "/home/jakob/.local/share/Steam/steamapps/common/Nine Sols-Speedrunpatch/NineSols_Data/globalgamemanagers",
    );
    let reader = &mut Cursor::new(std::fs::read(path)?);

    let ggm = SerializedFile::from_reader(reader)?;

    let build_settings = ggm
        .find_object_of::<BuildSettings>(&tpk)
        .unwrap()
        .read(reader)?;

    for (i, scene) in build_settings.scenes.iter().enumerate() {
        let name = Path::new(&scene).file_stem().unwrap().display();
        println!("level{i} - {name}");
    }

    Ok(())
}

#[derive(Debug, serde_derive::Deserialize)]
pub struct BuildSettings {
    pub scenes: Vec<String>,
}
impl ClassIdType for BuildSettings {
    const CLASS_ID: ClassId = ClassId::BuildSettings;
}