physis/
pap.rs

1// SPDX-FileCopyrightText: 2024 Joshua Goins <josh@redstrate.com>
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4use std::io::Cursor;
5
6use crate::ByteSpan;
7use binrw::BinRead;
8use binrw::binrw;
9
10#[binrw]
11#[derive(Debug)]
12enum SkeletonType {
13    #[brw(magic = 0u8)]
14    Human,
15    #[brw(magic = 1u8)]
16    Monster,
17    #[brw(magic = 2u8)]
18    DemiHuman,
19    #[brw(magic = 3u8)]
20    Weapon,
21}
22
23#[binrw]
24#[derive(Debug)]
25#[brw(little)]
26struct PapHeader {
27    magic: i32, // TODO: what magic?
28    version: i32,
29
30    num_animations: i16,
31    model_id: u16,
32    model_type: SkeletonType,
33    variant: i32,
34
35    info_offset: i32,
36    havok_position: i32,
37    footer_position: i32,
38}
39
40#[derive(Debug)]
41pub struct Pap {}
42
43impl Pap {
44    /// Reads an existing ULD file
45    pub fn from_existing(buffer: ByteSpan) -> Option<Self> {
46        let mut cursor = Cursor::new(buffer);
47        PapHeader::read(&mut cursor).ok()?;
48
49        Some(Pap {})
50    }
51}