The pak TOC key was previously an unknown hash (crc32/fnv/djb2/… ruled
out), forcing content-only lookup. Recovered it by static RE of the
retail title:
sub_824609C8 (pak lookup-by-name) dups the requested path, lowercases
it (sub_825F4F90), hashes with sub_82455C78, then binary-searches the
sorted TOC. sub_82455C78 is a per-byte Barrett-reduced polynomial hash
(modulus 0x00FFF9D7, reciprocal 0x80031493): the low 24 bits are the
modular hash, the top byte an 8-bit additive checksum of the bytes.
New `hash` module reproduces it exactly (faithful op sequence, no
textbook %). Verified against the real disc: name_hash("files.tbl") ==
0x83421153 and name_hash("eng\\weapon.tbl") == 0x900C8DCD, both present
in retail TOCs. Add PakArchive::find_by_name / read_by_name and a disc
integration test resolving eng\weapon.tbl by path (→ valid IDXD).
Note: retail paths use backslash separators (eng\weapon.tbl).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
43 lines
1.3 KiB
Rust
43 lines
1.3 KiB
Rust
//! # sylpheed-formats
|
|
//!
|
|
//! Asset format parsers for Project Sylpheed: Arc of Deception (Xbox 360).
|
|
//!
|
|
//! This crate handles:
|
|
//! - Reading game files from XISO disc images (native only)
|
|
//! - Reading IPFB archives (`*.pak` / `*.pNN`) and the `IDXD` definition objects inside
|
|
//! - Parsing Xbox 360 texture formats (XPR2 containers + DXT de-tiling)
|
|
//! - Parsing mesh formats (to be reverse engineered)
|
|
//! - Parsing audio formats (XMA → standard PCM)
|
|
//!
|
|
//! ## Platform notes
|
|
//! XISO reading is only available on native (Windows/macOS/Linux).
|
|
//! On WASM, assets must be pre-extracted and served over HTTP.
|
|
|
|
pub mod texture;
|
|
pub mod vfs;
|
|
|
|
// IPFB TOC name-hash (path → 32-bit key), recovered from the retail title
|
|
pub mod hash;
|
|
|
|
// IPFB archive (`*.pak` index + `*.pNN` segments) reader
|
|
pub mod pak;
|
|
|
|
// IDXD reflective object (ship / weapon / effect / menu definitions) reader
|
|
pub mod idxd;
|
|
|
|
// XISO reading is not available in-browser
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
pub mod xiso;
|
|
|
|
// Mesh parsing — scaffold for reverse engineering
|
|
pub mod mesh;
|
|
|
|
// Audio parsing — scaffold for XMA handling
|
|
pub mod audio;
|
|
|
|
/// Re-export the most commonly used types at the crate root.
|
|
pub use idxd::{IdxdError, IdxdObject};
|
|
pub use pak::{PakArchive, PakEntry, PakError};
|
|
pub use texture::{X360Texture, X360TextureFormat};
|
|
pub use vfs::{GameAssets, VfsError};
|