diff --git a/source/durandal/text.rs b/source/durandal/text.rs index c97f15e..57c224e 100644 --- a/source/durandal/text.rs +++ b/source/durandal/text.rs @@ -153,7 +153,7 @@ fn mac_roman_conv_basic_marathon_stuff() #[test] fn mac_roman_cstr_tests() { - assert_eq!(mac_roman_cstr(b"I\xd5ve awaken\0e").unwrap(), "I’ve awaken"); + assert_eq!(mac_roman_cstr(b"I\xd5ve awaken\0ed").unwrap(), "I’ve awaken"); } // EOF diff --git a/source/marathon/map.rs b/source/marathon/map.rs index 13235a1..f723d81 100644 --- a/source/marathon/map.rs +++ b/source/marathon/map.rs @@ -67,8 +67,33 @@ pub fn read_minf(b: &[u8]) -> ResultS level_name}) } +/// Reads an old `Minf` chunk. +pub fn read_old_minf(b: &[u8]) -> ResultS +{ + let minf = read_minf(b)?; + + let mut entry_flags = if minf.entry_flags.is_empty() { + EntFlags::Solo + } else { + minf.entry_flags + }; + + if entry_flags.intersects(EntFlags::Solo | EntFlags::Carnage) { + entry_flags.insert(EntFlags::CoOp) + } + + Ok(Minf{entry_flags, ..minf}) +} + /// Reads an `iidx` chunk. -pub fn read_iidx(b: &[u8]) -> ResultS<(u16, usize)> {Ok((u16b(b), 2))} +pub fn read_iidx(b: &[u8]) -> ResultS<(u16, usize)> +{ + if b.len() < 2 { + bail!("not enough data"); + } + + Ok((u16b(b), 2)) +} /// Reads an `EPNT` chunk. pub fn read_epnt(b: &[u8]) -> ResultS<(Point, usize)> diff --git a/source/marathon/wad.rs b/source/marathon/wad.rs index b9c4206..da67790 100644 --- a/source/marathon/wad.rs +++ b/source/marathon/wad.rs @@ -11,6 +11,7 @@ pub fn read_chunks(b: &[u8], old_dat: bool, siz_cnk: usize) let mut chunks = Vec::new(); let mut p = 0; + let map_read_minfo = if old_dat {map::read_old_minf} else {map::read_minf}; let map_read_sides = if old_dat {map::read_old_sids} else {map::read_sids}; let map_read_polys = if old_dat {map::read_old_poly} else {map::read_poly}; let map_read_light = if old_dat {map::read_old_lite} else {map::read_lite}; @@ -28,7 +29,7 @@ pub fn read_chunks(b: &[u8], old_dat: bool, siz_cnk: usize) chunks.push(match &iden.0 { b"PICT" => Chunk::Pict(pict::load_pict(data)?), - b"Minf" => Chunk::Minf(map::read_minf(data)?), + b"Minf" => Chunk::Minf(map_read_minfo(data)?), b"iidx" => Chunk::Iidx(rd_array(data, map::read_iidx)?), b"EPNT" => Chunk::Pnts(rd_array(data, map::read_epnt)?), b"PNTS" => Chunk::Pnts(rd_array(data, map::read_pnts)?),