diff --git a/src/layer/exit_range.rs b/src/layer/exit_range.rs index 6c13475..a28fd31 100644 --- a/src/layer/exit_range.rs +++ b/src/layer/exit_range.rs @@ -10,6 +10,7 @@ use super::TriggerBoxInstanceObject; #[derive(Debug, PartialEq)] pub enum ExitType { ZoneLine = 0x1, + Unk = 0x2, // seen in bg/ex5/02_ykt_y6/fld/y6f1/level/planmap.lgb } #[binread] diff --git a/src/layer/mod.rs b/src/layer/mod.rs index 27c8627..11e7fd3 100644 --- a/src/layer/mod.rs +++ b/src/layer/mod.rs @@ -298,6 +298,8 @@ pub enum LayerEntryType { StableChocobo = 0x4F, MaxAssetType = 0x50, Unk1 = 90, + Unk2 = 86, // seen in bg/ex5/02_ykt_y6/fld/y6f1/level/bg.lgb + Unk3 = 89, // seen in bg/ffxiv/sea_s1/fld/s1f3/level/planevent.lgb } #[binread] @@ -362,6 +364,10 @@ pub enum LayerEntryData { FateRange(FateRangeInstanceObject), #[br(pre_assert(*magic == LayerEntryType::Unk1))] Unk1(), + #[br(pre_assert(*magic == LayerEntryType::Unk2))] + Unk2(), + #[br(pre_assert(*magic == LayerEntryType::Unk3))] + Unk3(), } #[binread] @@ -659,9 +665,11 @@ impl LayerGroup { let chunk_header = LayerChunkHeader::read_le_args(&mut cursor, (&chunk_string_heap,)).unwrap(); - if chunk_header.chunk_size <= 0 { - return None; + return Some(LayerGroup { + file_id: file_header.file_id, + chunks: Vec::new(), + }); } let old_pos = cursor.position(); @@ -706,8 +714,7 @@ impl LayerGroup { let start = cursor.stream_position().unwrap(); let string_heap = StringHeap::from(start); - objects - .push(InstanceObject::read_le_args(&mut cursor, (&string_heap,)).ok()?); + objects.push(InstanceObject::read_le_args(&mut cursor, (&string_heap,)).ok()?); } }