Rename FormDescriptor::version_a/b to FormDescriptor::reader/writer_version for correctness

This commit is contained in:
Phillip Stephens
2023-03-04 18:45:59 -08:00
parent 972b05fbd2
commit 779f261df8
8 changed files with 39 additions and 39 deletions
+6 -6
View File
@@ -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);
}
+2 -2
View File
@@ -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() {
+2 -2
View File
@@ -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
View File
@@ -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,
+2 -2
View File
@@ -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 {
+2 -2
View File
@@ -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);
+6 -6
View File
@@ -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;
+4 -4
View File
@@ -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);