chore: initial commit
This commit is contained in:
commit
f635a85401
|
@ -0,0 +1,2 @@
|
||||||
|
/target
|
||||||
|
/Cargo.lock
|
|
@ -0,0 +1,14 @@
|
||||||
|
[package]
|
||||||
|
name = "sqpack"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = []
|
||||||
|
read = []
|
||||||
|
write = []
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
binrw = "0.10"
|
|
@ -0,0 +1,5 @@
|
||||||
|
pub extern crate binrw;
|
||||||
|
|
||||||
|
pub use self::model::*;
|
||||||
|
|
||||||
|
pub mod model;
|
|
@ -0,0 +1,148 @@
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[cfg_attr(feature = "read", derive(binrw::BinRead), br(little, repr = u32))]
|
||||||
|
#[cfg_attr(feature = "write", derive(binrw::BinWrite), bw(little, repr = u32))]
|
||||||
|
#[repr(u32)]
|
||||||
|
pub enum FileKind {
|
||||||
|
Empty = 1,
|
||||||
|
Standard = 2,
|
||||||
|
Model = 3,
|
||||||
|
Texture = 4,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[cfg_attr(feature = "read", derive(binrw::BinRead), br(little, repr = i32))]
|
||||||
|
#[cfg_attr(feature = "write", derive(binrw::BinWrite), bw(little, repr = i32))]
|
||||||
|
#[repr(i32)]
|
||||||
|
pub enum LodLevel {
|
||||||
|
All = -1,
|
||||||
|
Highest = 0,
|
||||||
|
High = 1,
|
||||||
|
Low = 2,
|
||||||
|
Max = 3,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[cfg_attr(feature = "read", derive(binrw::BinRead), br(little))]
|
||||||
|
#[cfg_attr(feature = "write", derive(binrw::BinWrite), bw(little))]
|
||||||
|
pub struct SqPackFileInfoHeader {
|
||||||
|
pub size: u32,
|
||||||
|
pub kind: FileKind,
|
||||||
|
pub raw_file_size: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[cfg_attr(feature = "read", derive(binrw::BinRead), br(little))]
|
||||||
|
#[cfg_attr(feature = "write", derive(binrw::BinWrite), bw(little))]
|
||||||
|
pub struct SqPackFileInfo {
|
||||||
|
pub _unk_0: [u32; 2],
|
||||||
|
pub number_of_blocks: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[cfg_attr(feature = "read", derive(binrw::BinRead), br(little))]
|
||||||
|
#[cfg_attr(feature = "write", derive(binrw::BinWrite), bw(little))]
|
||||||
|
pub struct DatStdFileBlockInfos {
|
||||||
|
pub offset: u32,
|
||||||
|
pub compressed_size: u16,
|
||||||
|
pub uncompressed_size: u16,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[cfg_attr(feature = "read", derive(binrw::BinRead), br(little))]
|
||||||
|
#[cfg_attr(feature = "write", derive(binrw::BinWrite), bw(little))]
|
||||||
|
pub struct DatBlockHeader {
|
||||||
|
pub size: u32,
|
||||||
|
pub _unk_0: u32,
|
||||||
|
pub compressed_size: u32,
|
||||||
|
pub uncompressed_size: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[cfg_attr(feature = "read", derive(binrw::BinRead), br(little))]
|
||||||
|
#[cfg_attr(feature = "write", derive(binrw::BinWrite), bw(little))]
|
||||||
|
pub struct LodBlock {
|
||||||
|
pub compressed_offset: u32,
|
||||||
|
pub compressed_size: u32,
|
||||||
|
pub decompressed_size: u32,
|
||||||
|
pub block_offset: u32,
|
||||||
|
pub block_count: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[cfg_attr(feature = "read", derive(binrw::BinRead), br(little))]
|
||||||
|
#[cfg_attr(feature = "write", derive(binrw::BinWrite), bw(little))]
|
||||||
|
pub struct ReferenceBlockRange {
|
||||||
|
pub begin: u32,
|
||||||
|
pub end: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[cfg(all(feature = "read", feature = "write"))]
|
||||||
|
#[derive(binrw::BinRead, binrw::BinWrite)]
|
||||||
|
pub struct ModelSectionInfo<T>
|
||||||
|
where T: binrw::BinRead + binrw::BinWrite<Args=()>,
|
||||||
|
<T as binrw::BinRead>::Args: Default,
|
||||||
|
{
|
||||||
|
pub stack: T,
|
||||||
|
pub runtime: T,
|
||||||
|
pub vertex_buffer: [T; 3],
|
||||||
|
pub edge_geometry_vertex_buffer: [T; 3],
|
||||||
|
pub index_buffer: [T; 3],
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[cfg(all(feature = "write", not(feature = "read")))]
|
||||||
|
#[derive(binrw::BinWrite)]
|
||||||
|
pub struct ModelSectionInfo<T>
|
||||||
|
where T: binrw::BinWrite<Args=()>,
|
||||||
|
{
|
||||||
|
pub stack: T,
|
||||||
|
pub runtime: T,
|
||||||
|
pub vertex_buffer: [T; 3],
|
||||||
|
pub edge_geometry_vertex_buffer: [T; 3],
|
||||||
|
pub index_buffer: [T; 3],
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[cfg(all(feature = "read", not(feature = "write")))]
|
||||||
|
#[derive(binrw::BinRead)]
|
||||||
|
pub struct ModelSectionInfo<T>
|
||||||
|
where T: binrw::BinRead,
|
||||||
|
<T as binrw::BinRead>::Args: Default,
|
||||||
|
{
|
||||||
|
pub stack: T,
|
||||||
|
pub runtime: T,
|
||||||
|
pub vertex_buffer: [T; 3],
|
||||||
|
pub edge_geometry_vertex_buffer: [T; 3],
|
||||||
|
pub index_buffer: [T; 3],
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[cfg(not(any(feature = "read", feature = "write")))]
|
||||||
|
pub struct ModelSectionInfo<T> {
|
||||||
|
pub stack: T,
|
||||||
|
pub runtime: T,
|
||||||
|
pub vertex_buffer: [T; 3],
|
||||||
|
pub edge_geometry_vertex_buffer: [T; 3],
|
||||||
|
pub index_buffer: [T; 3],
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[cfg_attr(feature = "read", derive(binrw::BinRead), br(little))]
|
||||||
|
#[cfg_attr(feature = "write", derive(binrw::BinWrite), bw(little))]
|
||||||
|
pub struct ModelBlock {
|
||||||
|
pub number_of_blocks: u32,
|
||||||
|
pub used_number_of_blocks: u32,
|
||||||
|
pub version: u32,
|
||||||
|
pub size: ModelSectionInfo<u32>,
|
||||||
|
pub compressed_size: ModelSectionInfo<u32>,
|
||||||
|
pub offset: ModelSectionInfo<u32>,
|
||||||
|
pub block_index: ModelSectionInfo<u16>,
|
||||||
|
pub block_num: ModelSectionInfo<u16>,
|
||||||
|
pub vertex_declaration_num: u16,
|
||||||
|
pub material_num: u16,
|
||||||
|
pub num_lods: u8,
|
||||||
|
pub index_buffer_streaming_enabled: u8,
|
||||||
|
pub edge_geometry_enabled: u8,
|
||||||
|
pub padding: u8,
|
||||||
|
}
|
Loading…
Reference in New Issue