@@ -343,7 +343,8 @@ impl M2Header {
343343 None
344344 } ;
345345
346- let texture_combiner_combos = if m2_version >= M2Version :: Cataclysm {
346+ // Texture combiner combos (when USE_TEXTURE_COMBINERS flag is set)
347+ let texture_combiner_combos = if flags. contains ( M2ModelFlags :: USE_TEXTURE_COMBINERS ) {
347348 Some ( M2Array :: parse ( reader) ?)
348349 } else {
349350 None
@@ -523,11 +524,7 @@ impl M2Header {
523524 pub fn new ( version : M2Version ) -> Self {
524525 let version_num = version. to_header_version ( ) ;
525526
526- let texture_combiner_combos = if version >= M2Version :: Cataclysm {
527- Some ( M2Array :: new ( 0 , 0 ) )
528- } else {
529- None
530- } ;
527+ let texture_combiner_combos = None ;
531528
532529 let texture_transforms = if version >= M2Version :: Legion {
533530 Some ( M2Array :: new ( 0 , 0 ) )
@@ -653,10 +650,12 @@ impl M2Header {
653650 new_header. texture_flipbooks = Some ( M2Array :: new ( 0 , 0 ) ) ;
654651 }
655652
656- // Handle texture_combiner_combos (added in Cataclysm)
657- if target_version >= M2Version :: Cataclysm && source_version < M2Version :: Cataclysm {
653+ // Handle texture_combiner_combos (controlled by USE_TEXTURE_COMBINERS flag)
654+ // The flag determines presence of this field, not version
655+ let source_has_combos = self . flags . contains ( M2ModelFlags :: USE_TEXTURE_COMBINERS ) ;
656+ if target_version >= M2Version :: Cataclysm && source_has_combos {
658657 new_header. texture_combiner_combos = Some ( M2Array :: new ( 0 , 0 ) ) ;
659- } else if target_version < M2Version :: Cataclysm && source_version >= M2Version :: Cataclysm {
658+ } else {
660659 new_header. texture_combiner_combos = None ;
661660 }
662661
@@ -677,7 +676,7 @@ mod tests {
677676 use std:: io:: Cursor ;
678677
679678 // Helper function to create a basic test header
680- fn create_test_header ( version : M2Version ) -> Vec < u8 > {
679+ fn create_test_header ( version : M2Version , flags : M2ModelFlags ) -> Vec < u8 > {
681680 let mut data = Vec :: new ( ) ;
682681
683682 // Magic "MD20"
@@ -691,7 +690,7 @@ mod tests {
691690 data. extend_from_slice ( & 0u32 . to_le_bytes ( ) ) ; // offset = 0
692691
693692 // Flags
694- data. extend_from_slice ( & 0u32 . to_le_bytes ( ) ) ;
693+ data. extend_from_slice ( & flags . bits ( ) . to_le_bytes ( ) ) ;
695694
696695 // Global sequences
697696 data. extend_from_slice ( & 0u32 . to_le_bytes ( ) ) ; // count = 0
@@ -710,7 +709,7 @@ mod tests {
710709
711710 #[ test]
712711 fn test_header_parse_classic ( ) {
713- let data = create_test_header ( M2Version :: Vanilla ) ;
712+ let data = create_test_header ( M2Version :: Vanilla , M2ModelFlags :: empty ( ) ) ;
714713 let mut cursor = Cursor :: new ( data) ;
715714
716715 let header = M2Header :: parse ( & mut cursor) . unwrap ( ) ;
@@ -723,7 +722,7 @@ mod tests {
723722
724723 #[ test]
725724 fn test_header_parse_cataclysm ( ) {
726- let data = create_test_header ( M2Version :: Cataclysm ) ;
725+ let data = create_test_header ( M2Version :: Cataclysm , M2ModelFlags :: USE_TEXTURE_COMBINERS ) ;
727726 let mut cursor = Cursor :: new ( data) ;
728727
729728 let header = M2Header :: parse ( & mut cursor) . unwrap ( ) ;
@@ -736,7 +735,7 @@ mod tests {
736735
737736 #[ test]
738737 fn test_header_parse_legion ( ) {
739- let data = create_test_header ( M2Version :: Legion ) ;
738+ let data = create_test_header ( M2Version :: Legion , M2ModelFlags :: USE_TEXTURE_COMBINERS ) ;
740739 let mut cursor = Cursor :: new ( data) ;
741740
742741 let header = M2Header :: parse ( & mut cursor) . unwrap ( ) ;
@@ -749,7 +748,9 @@ mod tests {
749748
750749 #[ test]
751750 fn test_header_conversion ( ) {
752- let classic_header = M2Header :: new ( M2Version :: Vanilla ) ;
751+ let mut classic_header = M2Header :: new ( M2Version :: Vanilla ) ;
752+ // Set USE_TEXTURE_COMBINERS flag for test
753+ classic_header. flags = M2ModelFlags :: USE_TEXTURE_COMBINERS ;
753754
754755 // Convert Classic to Cataclysm
755756 let cataclysm_header = classic_header. convert ( M2Version :: Cataclysm ) . unwrap ( ) ;
0 commit comments