Skip to content

Commit 79fca9d

Browse files
Merge pull request #47 from wowemulation-dev/fix/issue-35-texture-combiner-combos-flag
fix(m2): use USE_TEXTURE_COMBINERS flag for texture_combiner_combos
2 parents 7d46766 + 468d130 commit 79fca9d

File tree

2 files changed

+17
-16
lines changed

2 files changed

+17
-16
lines changed

file-formats/graphics/wow-m2/src/header.rs

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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();

file-formats/graphics/wow-m2/src/model.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3207,7 +3207,7 @@ impl M2Model {
32073207
None
32083208
};
32093209

3210-
let texture_combiner_combos = if m2_version >= M2Version::Cataclysm {
3210+
let texture_combiner_combos = if flags.contains(M2ModelFlags::USE_TEXTURE_COMBINERS) {
32113211
Some(M2Array::parse(chunk_inner)?)
32123212
} else {
32133213
None

0 commit comments

Comments
 (0)