From 58f411005d1135b008fb16a19301a49c23817325 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Wed, 17 Apr 2024 20:23:44 -0400 Subject: [PATCH] Fix Dawntrail materials not loading They changed the color set structures of course, so make sure not to completely crash and burn on newer material versions. --- src/mtrl.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/mtrl.rs b/src/mtrl.rs index aa9f2b3..a148cc5 100644 --- a/src/mtrl.rs +++ b/src/mtrl.rs @@ -117,7 +117,10 @@ enum TextureUsage #[brw(magic = 0x20491240u32)] SamplerWaveletMap1, #[brw(magic = 0x95E1F64Du32)] - SamplerWhitecapMap + SamplerWhitecapMap, + + #[brw(magic = 0x565f8fd8u32)] + UnknownDawntrail1 } #[binrw] @@ -150,12 +153,17 @@ struct MaterialData { #[br(pad_after = file_header.additional_data_size)] strings: Vec, - #[br(if(file_header.data_set_size > 0))] + #[br(if(file_header.data_set_size > 0 && file_header.version < 0x1030000))] color_set_info: Option, - #[br(if(file_header.data_set_size > 512))] + #[br(if(file_header.data_set_size > 512 && file_header.version < 0x1030000))] color_set_due_info: Option, + // Dawntrail unknown stuff + #[br(if(file_header.version == 0x1030000))] + #[br(count = file_header.data_set_size)] + unknown1: Vec, + header: MaterialHeader, #[br(count = header.shader_key_count)] @@ -179,9 +187,7 @@ impl Material { pub fn from_existing(buffer: ByteSpan) -> Option { let mut cursor = Cursor::new(buffer); let mat_data = MaterialData::read(&mut cursor).ok()?; - - println!("{:#?}", mat_data); - + let mut texture_paths = vec![]; let mut offset = 0;