aboutsummaryrefslogtreecommitdiff
path: root/src/bin/debug.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/debug.rs')
-rw-r--r--src/bin/debug.rs77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/bin/debug.rs b/src/bin/debug.rs
new file mode 100644
index 0000000..5da7c03
--- /dev/null
+++ b/src/bin/debug.rs
@@ -0,0 +1,77 @@
+use log::debug;
+use std::{
+ env::args,
+ fs::File,
+ io::{BufReader, Seek, SeekFrom},
+};
+use unity_tools::{object::read_value, serialized_file::read_serialized_file, unityfs::UnityFS};
+
+fn main() -> anyhow::Result<()> {
+ env_logger::init_from_env("LOG");
+ let file = BufReader::new(File::open(args().nth(1).unwrap())?);
+ let mut fs = UnityFS::open(file)?;
+
+ for node in fs.nodes().to_vec() {
+ if node.name.ends_with(".resource") || node.name.ends_with(".resS") {
+ continue;
+ }
+ let mut cab = fs.read(&node)?;
+ // let mut writer = File::create(format!("/tmp/{}", node.name))?;
+ // std::io::copy(&mut cab, &mut writer)?;
+ // continue;
+
+ let file = read_serialized_file(&mut cab)?;
+ let e = file.endianness;
+
+ for ob in file.objects {
+ cab.seek(SeekFrom::Start(ob.data_offset))?;
+
+ // eprintln!("{:#?}", ob);
+ let typetree = if ob.type_id < 0 {
+ unimplemented!()
+ } else {
+ // file.types
+ // .iter()
+ // .find(|t| t.class_id == ob.type_id)
+ // .expect("unknown type")
+ &file.types[ob.type_id as usize]
+ };
+ // fn print_types(tt: &TypeTreeNode) {
+ // println!("{}", tt.type_string);
+ // for c in &tt.children {
+ // print_types(&c);
+ // }
+ // }
+ // fn print_crit_types(tt: &TypeTreeNode) {
+ // let mut crit = tt.byte_size == -1 || tt.children.is_empty();
+ // for c in &tt.children {
+ // print_crit_types(&c);
+ // crit &= c.byte_size != -1
+ // }
+ // if crit {
+ // println!("{}", tt.type_string);
+ // }
+ // }
+ // if let Some(tree) = &typetree.type_tree {
+ // println!("{}", tree.type_string);
+ // print_crit_types(tree);
+ // print_types(tree);
+ // }
+ // eprintln!("{typetree:#?}");
+
+ let value = read_value(typetree.type_tree.as_ref().unwrap(), e, &mut cab)?;
+
+ // if let Value::Object { class, .. } = &value {
+ // println!("{class}")
+ // }
+
+ debug!(
+ "{}",
+ serde_json::to_string_pretty(&value.to_json()).unwrap()
+ )
+ }
+ // eprintln!("{:#?}", file.types);
+ }
+
+ Ok(())
+}