diff --git a/src/lib.rs b/src/lib.rs index 437aab2..2b5cc9f 100755 --- a/src/lib.rs +++ b/src/lib.rs @@ -153,3 +153,6 @@ pub mod schd; /// Reading PHYB files pub mod phyb; + +/// Reading PAP files +pub mod pap; diff --git a/src/pap.rs b/src/pap.rs new file mode 100644 index 0000000..c0142e1 --- /dev/null +++ b/src/pap.rs @@ -0,0 +1,53 @@ +// SPDX-FileCopyrightText: 2024 Joshua Goins +// SPDX-License-Identifier: GPL-3.0-or-later + +use std::io::Cursor; + +use crate::ByteSpan; +use binrw::binrw; +use binrw::BinRead; + +#[binrw] +#[derive(Debug)] +enum SkeletonType { + #[brw(magic = 0u8)] + Human, + #[brw(magic = 1u8)] + Monster, + #[brw(magic = 2u8)] + DemiHuman, + #[brw(magic = 3u8)] + Weapon +} + +#[binrw] +#[derive(Debug)] +#[brw(little)] +struct PapHeader { + magic: i32, // TODO: what magic? + version: i32, + + num_animations: i16, + model_id: u16, + model_type: SkeletonType, + variant: i32, + + info_offset: i32, + havok_position: i32, + footer_position: i32 +} + +#[derive(Debug)] +pub struct Pap { + +} + +impl Pap { + /// Reads an existing ULD file + pub fn from_existing(buffer: ByteSpan) -> Option { + let mut cursor = Cursor::new(buffer); + let header = PapHeader::read(&mut cursor).ok()?; + + Some(Pap{}) + } +}