diff --git a/src/mtrl.rs b/src/mtrl.rs index a148cc5..ba3439d 100644 --- a/src/mtrl.rs +++ b/src/mtrl.rs @@ -41,10 +41,11 @@ struct ColorSet { } #[binrw] +#[br(import {set_count: usize})] #[derive(Debug)] #[allow(dead_code)] struct ColorSetInfo { - #[br(count = 256)] + #[br(count = set_count)] data: Vec, } @@ -153,17 +154,17 @@ struct MaterialData { #[br(pad_after = file_header.additional_data_size)] strings: Vec, - #[br(if(file_header.data_set_size > 0 && file_header.version < 0x1030000))] + #[br(if(file_header.data_set_size > 0))] + // Dawntrail doubled the amount of color sets. + // The MTRL version is the same (why square enix?) so we check the data set size instead + #[br(args { set_count: if file_header.data_set_size < 2048 { 256 } else { 1024 } })] color_set_info: Option, - #[br(if(file_header.data_set_size > 512 && file_header.version < 0x1030000))] + #[br(if(file_header.data_set_size > + if file_header.data_set_size < 2048 { 512 } else { 2048 } + ))] 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)]