mirror of
https://github.com/PrimeDecomp/retrotool.git
synced 2026-07-12 18:18:58 -07:00
Rename FormDescriptor::version_a/b to FormDescriptor::reader/writer_version for correctness
This commit is contained in:
@@ -784,14 +784,14 @@ impl ModelData {
|
||||
let (cmdl_desc, mut cmdl_data, _) = FormDescriptor::slice(data, Endian::Little)?;
|
||||
ensure!(cmdl_desc.id == K_FORM_CMDL || cmdl_desc.id == K_FORM_SMDL || cmdl_desc.id == K_FORM_WMDL);
|
||||
if cmdl_desc.id == K_FORM_CMDL {
|
||||
ensure!(cmdl_desc.version_a == 114);
|
||||
ensure!(cmdl_desc.version_b == 125);
|
||||
ensure!(cmdl_desc.reader_version == 114);
|
||||
ensure!(cmdl_desc.writer_version == 125);
|
||||
} else if cmdl_desc.id == K_FORM_SMDL {
|
||||
ensure!(cmdl_desc.version_a == 127);
|
||||
ensure!(cmdl_desc.version_b == 133);
|
||||
ensure!(cmdl_desc.reader_version == 127);
|
||||
ensure!(cmdl_desc.writer_version == 133);
|
||||
} else if cmdl_desc.id == K_FORM_WMDL {
|
||||
ensure!(cmdl_desc.version_a == 118);
|
||||
ensure!(cmdl_desc.version_b == 124);
|
||||
ensure!(cmdl_desc.reader_version == 118);
|
||||
ensure!(cmdl_desc.writer_version == 124);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ pub fn locate_meta(file_data: &[u8], e: Endian) -> Result<&[u8]> {
|
||||
let (_, _, remain) = FormDescriptor::slice(file_data, e)?;
|
||||
let (foot_desc, mut foot_data, remain) = FormDescriptor::slice(remain, Endian::Little)?;
|
||||
ensure!(foot_desc.id == K_FORM_FOOT);
|
||||
ensure!(foot_desc.version_a == 1);
|
||||
ensure!(foot_desc.version_b == 1);
|
||||
ensure!(foot_desc.reader_version == 1);
|
||||
ensure!(foot_desc.writer_version == 1);
|
||||
ensure!(remain.is_empty());
|
||||
|
||||
while !foot_data.is_empty() {
|
||||
|
||||
@@ -28,8 +28,8 @@ impl MaterialData {
|
||||
pub fn slice(data: &[u8], meta: &[u8], e: Endian) -> Result<MaterialData> {
|
||||
let (mtrl_desc, _, _) = FormDescriptor::slice(data, Endian::Little)?;
|
||||
ensure!(mtrl_desc.id == K_FORM_MTRL);
|
||||
ensure!(mtrl_desc.version_a == 168);
|
||||
ensure!(mtrl_desc.version_b == 168);
|
||||
ensure!(mtrl_desc.reader_version == 168);
|
||||
ensure!(mtrl_desc.writer_version == 168);
|
||||
|
||||
let meta: SMaterialMetaData = Cursor::new(meta).read_type(e)?;
|
||||
let mut reader = ZlibDecoder::new(
|
||||
|
||||
+15
-15
@@ -146,10 +146,10 @@ impl Package<'_> {
|
||||
pub fn read_header(data: &[u8], e: Endian) -> Result<Vec<u8>> {
|
||||
let (mut pack, pack_data, _) = FormDescriptor::slice(data, e)?;
|
||||
ensure!(pack.id == K_FORM_PACK);
|
||||
ensure!(pack.version_a == 1);
|
||||
ensure!(pack.reader_version == 1);
|
||||
let (mut tocc, tocc_data, _) = FormDescriptor::slice(pack_data, e)?;
|
||||
ensure!(tocc.id == K_FORM_TOCC);
|
||||
ensure!(tocc.version_a == 3);
|
||||
ensure!(tocc.reader_version == 3);
|
||||
|
||||
// Rewrite PACK with only TOCC chunk
|
||||
let mut out = Cursor::new(Vec::new());
|
||||
@@ -165,10 +165,10 @@ impl Package<'_> {
|
||||
pub fn read_sparse(data: &[u8], e: Endian) -> Result<Vec<SparsePackageEntry>> {
|
||||
let (pack, pack_data, _) = FormDescriptor::slice(data, e)?;
|
||||
ensure!(pack.id == K_FORM_PACK);
|
||||
ensure!(pack.version_a == 1);
|
||||
ensure!(pack.reader_version == 1);
|
||||
let (tocc, mut tocc_data, _) = FormDescriptor::slice(pack_data, e)?;
|
||||
ensure!(tocc.id == K_FORM_TOCC);
|
||||
ensure!(tocc.version_a == 3);
|
||||
ensure!(tocc.reader_version == 3);
|
||||
let mut adir: Option<AssetDirectory> = None;
|
||||
let mut strg: HashMap<Uuid, String> = HashMap::new();
|
||||
while !tocc_data.is_empty() {
|
||||
@@ -210,10 +210,10 @@ impl Package<'_> {
|
||||
pub fn read_asset(data: &[u8], id: Uuid, e: Endian) -> Result<Vec<u8>> {
|
||||
let (pack, pack_data, _) = FormDescriptor::slice(data, e)?;
|
||||
ensure!(pack.id == K_FORM_PACK);
|
||||
ensure!(pack.version_a == 1);
|
||||
ensure!(pack.reader_version == 1);
|
||||
let (tocc, mut tocc_data, _) = FormDescriptor::slice(pack_data, e)?;
|
||||
ensure!(tocc.id == K_FORM_TOCC);
|
||||
ensure!(tocc.version_a == 3);
|
||||
ensure!(tocc.reader_version == 3);
|
||||
|
||||
let mut asset: Option<AssetDirectoryEntry> = None;
|
||||
let mut meta: Option<&[u8]> = None;
|
||||
@@ -276,8 +276,8 @@ impl Package<'_> {
|
||||
{
|
||||
let (form, _, _) = FormDescriptor::slice(&data, Endian::Little)?;
|
||||
ensure!(asset.asset_type == form.id);
|
||||
ensure!(asset.version == form.version_a);
|
||||
ensure!(asset.other_version == form.version_b);
|
||||
ensure!(asset.version == form.reader_version);
|
||||
ensure!(asset.other_version == form.writer_version);
|
||||
ensure!(asset.decompressed_size == form.size + 32 /* RFRM */);
|
||||
}
|
||||
|
||||
@@ -286,7 +286,7 @@ impl Package<'_> {
|
||||
w.set_position(len); // set to append
|
||||
|
||||
// Write custom footer
|
||||
FormDescriptor { size: 0, unk: 0, id: K_FORM_FOOT, version_a: 1, version_b: 1 }.write(
|
||||
FormDescriptor { size: 0, unk: 0, id: K_FORM_FOOT, reader_version: 1, writer_version: 1 }.write(
|
||||
&mut w,
|
||||
Endian::Little,
|
||||
|w| {
|
||||
@@ -329,11 +329,11 @@ impl Package<'_> {
|
||||
pub fn read_full(data: &[u8], e: Endian) -> Result<Package> {
|
||||
let (pack, pack_data, _) = FormDescriptor::slice(data, e)?;
|
||||
ensure!(pack.id == K_FORM_PACK);
|
||||
ensure!(pack.version_a == 1);
|
||||
ensure!(pack.reader_version == 1);
|
||||
log::debug!("PACK: {:?}", pack);
|
||||
let (tocc, mut tocc_data, _) = FormDescriptor::slice(pack_data, e)?;
|
||||
ensure!(tocc.id == K_FORM_TOCC);
|
||||
ensure!(tocc.version_a == 3);
|
||||
ensure!(tocc.reader_version == 3);
|
||||
log::debug!("TOCC: {:?}", tocc);
|
||||
let mut adir: Option<AssetDirectory> = None;
|
||||
let mut meta: HashMap<Uuid, &[u8]> = HashMap::new();
|
||||
@@ -393,8 +393,8 @@ impl Package<'_> {
|
||||
{
|
||||
let (form, _, _) = FormDescriptor::slice(&data, Endian::Little)?;
|
||||
ensure!(asset_entry.asset_type == form.id);
|
||||
ensure!(asset_entry.version == form.version_a);
|
||||
ensure!(asset_entry.other_version == form.version_b);
|
||||
ensure!(asset_entry.version == form.reader_version);
|
||||
ensure!(asset_entry.other_version == form.writer_version);
|
||||
ensure!(asset_entry.decompressed_size == form.size + 32 /* RFRM */);
|
||||
}
|
||||
|
||||
@@ -450,11 +450,11 @@ impl Package<'_> {
|
||||
}
|
||||
}
|
||||
let mut adir_pos = 0;
|
||||
FormDescriptor { size: 0, unk: 0, id: K_FORM_PACK, version_a: 1, version_b: 1 }.write(
|
||||
FormDescriptor { size: 0, unk: 0, id: K_FORM_PACK, reader_version: 1, writer_version: 1 }.write(
|
||||
w,
|
||||
e,
|
||||
|w| {
|
||||
FormDescriptor { size: 0, unk: 0, id: K_FORM_TOCC, version_a: 3, version_b: 3 }
|
||||
FormDescriptor { size: 0, unk: 0, id: K_FORM_TOCC, reader_version: 3, writer_version: 3 }
|
||||
.write(w, e, |w| {
|
||||
ChunkDescriptor { id: K_CHUNK_ADIR, size: 0, unk: 1, skip: 0 }.write(
|
||||
w,
|
||||
|
||||
@@ -15,8 +15,8 @@ pub struct FormDescriptor {
|
||||
pub size: u64,
|
||||
pub unk: u64,
|
||||
pub id: FourCC,
|
||||
pub version_a: u32,
|
||||
pub version_b: u32,
|
||||
pub reader_version: u32,
|
||||
pub writer_version: u32,
|
||||
}
|
||||
|
||||
impl FormDescriptor {
|
||||
|
||||
@@ -449,8 +449,8 @@ impl TextureData {
|
||||
pub fn slice(data: &[u8], meta: &[u8], e: Endian) -> Result<TextureData> {
|
||||
let (txtr_desc, txtr_data, _) = FormDescriptor::slice(data, e)?;
|
||||
ensure!(txtr_desc.id == K_FORM_TXTR);
|
||||
ensure!(txtr_desc.version_a == 47);
|
||||
ensure!(txtr_desc.version_b == 51);
|
||||
ensure!(txtr_desc.reader_version == 47);
|
||||
ensure!(txtr_desc.writer_version == 51);
|
||||
|
||||
let (head_desc, head_data, _) = ChunkDescriptor::slice(txtr_data, Endian::Little)?;
|
||||
ensure!(head_desc.id == K_CHUNK_HEAD);
|
||||
|
||||
@@ -166,17 +166,17 @@ fn convert(args: ConvertArgs) -> Result<()> {
|
||||
let (form_desc, mut col_data, remain) = FormDescriptor::slice(&data, Endian::Little)?;
|
||||
|
||||
if form_desc.id == K_FORM_DCLN {
|
||||
ensure!(form_desc.version_a == K_DCLN_READER_VERSION);
|
||||
ensure!(form_desc.version_b == K_DCLN_WRITER_VERSION);
|
||||
ensure!(form_desc.reader_version == K_DCLN_READER_VERSION);
|
||||
ensure!(form_desc.writer_version == K_DCLN_WRITER_VERSION);
|
||||
} else if form_desc.id == K_FORM_CLSN {
|
||||
ensure!(form_desc.version_a == K_CLSN_READER_VERSION);
|
||||
ensure!(form_desc.version_b == K_CLSN_WRITER_VERSION);
|
||||
ensure!(form_desc.reader_version == K_CLSN_READER_VERSION);
|
||||
ensure!(form_desc.writer_version == K_CLSN_WRITER_VERSION);
|
||||
}
|
||||
|
||||
let (foot_desc, _, remain) = FormDescriptor::slice(remain, Endian::Little)?;
|
||||
ensure!(foot_desc.id == K_FORM_FOOT);
|
||||
ensure!(foot_desc.version_a == 1);
|
||||
ensure!(foot_desc.version_b == 1);
|
||||
ensure!(foot_desc.reader_version == 1);
|
||||
ensure!(foot_desc.writer_version == 1);
|
||||
ensure!(remain.is_empty());
|
||||
|
||||
//let mut bounds: Option<CAABox> = None;
|
||||
|
||||
@@ -100,7 +100,7 @@ fn extract(args: ExtractArgs) -> Result<()> {
|
||||
file.write_all(&asset.data)?;
|
||||
|
||||
// Write custom footer
|
||||
FormDescriptor { size: 0, unk: 0, id: K_FORM_FOOT, version_a: 1, version_b: 1 }.write(
|
||||
FormDescriptor { size: 0, unk: 0, id: K_FORM_FOOT, reader_version: 1, writer_version: 1 }.write(
|
||||
&mut file,
|
||||
Endian::Little,
|
||||
|w| {
|
||||
@@ -157,7 +157,7 @@ fn package(args: PackageArgs) -> Result<()> {
|
||||
// log::info!("Found type {} version {}, {}", form.id, form.version, form.other_version);
|
||||
let (foot, mut foot_data, _) = FormDescriptor::slice(remain, Endian::Little)?;
|
||||
ensure!(foot.id == K_FORM_FOOT);
|
||||
ensure!(foot.version_a == 1);
|
||||
ensure!(foot.reader_version == 1);
|
||||
let mut ainfo: Option<AssetInfo> = None;
|
||||
let mut meta: Option<&[u8]> = None;
|
||||
let mut name: Option<String> = None;
|
||||
@@ -187,8 +187,8 @@ fn package(args: PackageArgs) -> Result<()> {
|
||||
data: Cow::Owned(data[..data.len() - remain.len()].to_vec()),
|
||||
meta: meta.map(|data| Cow::Owned(data.to_vec())),
|
||||
info: ainfo,
|
||||
version: form.version_a,
|
||||
other_version: form.version_b,
|
||||
version: form.reader_version,
|
||||
other_version: form.writer_version,
|
||||
});
|
||||
}
|
||||
package.assets.sort_by_key(|a| a.id);
|
||||
|
||||
Reference in New Issue
Block a user