From 5abbeea53e393b82b69e71a373d0f524e672871b Mon Sep 17 00:00:00 2001 From: mykola2312 <49044616+mykola2312@users.noreply.github.com> Date: Tue, 22 Aug 2023 19:44:09 +0300 Subject: [PATCH] push it --- src/save.rs | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/save.rs b/src/save.rs index c4d0550..44a5b51 100644 --- a/src/save.rs +++ b/src/save.rs @@ -6,8 +6,10 @@ use std::fs::OpenOptions; use std::path::Path; use anyhow::anyhow; use anyhow::Result; +use deflate::Compression; use inflate::inflate_bytes_zlib; use deflate::deflate_bytes_zlib; +use deflate::deflate_bytes_zlib_conf; #[derive(Debug)] pub struct World { @@ -80,19 +82,38 @@ impl Save { pub fn save(&self, path: &Path) -> Result<()> { let mut file = OpenOptions::new() - .create(true).write(true).open(path)?; + .create(true).truncate(true).write(true).open(path)?; // write unknown block - let unk_size = match self.worlds.first() { + /*let unk_size = match self.worlds.first() { Some(w) => w.offset - 1, None => return Err(anyhow!("no offsets found")) }; file.write(&self.raw[..unk_size])?; for world in self.worlds.iter() { + file.write(&self.raw[world.offset..world.offset+0x12])?; file.write(&world.encode())?; + }*/ + + const START: usize = 0x99A84; + const END: usize = 0xD1B1E; + let world = self.worlds.last().unwrap(); + file.write(&self.raw[..START])?; + + file.write(&self.raw[world.offset..world.offset+0x13])?; + { + let enc = world.encode(); + let real_len = END - START; + println!("enc len {} real_len {}", enc.len(), real_len); + file.write(&enc)?; + if (enc.len() < real_len) { + file.write(&vec![0; real_len - enc.len()])?; + } } + file.write(&self.raw[END..])?; + Ok(()) } } \ No newline at end of file