diff --git a/README.md b/README.md index e650e79..77ab3f9 100644 --- a/README.md +++ b/README.md @@ -161,7 +161,7 @@ msg-tool create -t ### Softpal | Script Type | Feature Name | Name | Export | Import | Custom Export | Custom Import | Create | Remarks | |---|---|---|---|---|---|---|---|---| -| `softpal` | `softpal` | Softpal Script File (.src) | ✔️ | ❌ | ✔️ | ❌ | ❌ | | +| `softpal` | `softpal` | Softpal Script File (.src) | ✔️ | ✔️ | ✔️ | ❌ | ❌ | | ### WillPlus / AdvHD | Script Type | Feature Name | Name | Export | Import | Custom Export | Custom Import | Create | Remarks | |---|---|---|---|---|---|---|---|---| diff --git a/src/ext/io.rs b/src/ext/io.rs index 4f573bb..0d65996 100644 --- a/src/ext/io.rs +++ b/src/ext/io.rs @@ -1038,92 +1038,92 @@ impl WriteExt for T { pub trait WriteAt { /// Writes data to the writer at a specific offset. /// Returns the number of bytes written. - fn write_at(&mut self, offset: usize, buf: &[u8]) -> Result; + fn write_at(&mut self, offset: u64, buf: &[u8]) -> Result; /// Writes all data to the writer at a specific offset. /// Returns an error if the write fails. - fn write_all_at(&mut self, offset: usize, buf: &[u8]) -> Result<()>; + fn write_all_at(&mut self, offset: u64, buf: &[u8]) -> Result<()>; /// Writes a [u8] at a specific offset. - fn write_u8_at(&mut self, offset: usize, value: u8) -> Result<()> { + fn write_u8_at(&mut self, offset: u64, value: u8) -> Result<()> { self.write_all_at(offset, &value.to_le_bytes()) } /// Writes a [u16] at a specific offset in little-endian order. - fn write_u16_at(&mut self, offset: usize, value: u16) -> Result<()> { + fn write_u16_at(&mut self, offset: u64, value: u16) -> Result<()> { self.write_all_at(offset, &value.to_le_bytes()) } /// Writes a [u16] at a specific offset in big-endian order. - fn write_u16_be_at(&mut self, offset: usize, value: u16) -> Result<()> { + fn write_u16_be_at(&mut self, offset: u64, value: u16) -> Result<()> { self.write_all_at(offset, &value.to_be_bytes()) } /// Writes a [u32] at a specific offset in little-endian order. - fn write_u32_at(&mut self, offset: usize, value: u32) -> Result<()> { + fn write_u32_at(&mut self, offset: u64, value: u32) -> Result<()> { self.write_all_at(offset, &value.to_le_bytes()) } /// Writes a [u32] at a specific offset in big-endian order. - fn write_u32_be_at(&mut self, offset: usize, value: u32) -> Result<()> { + fn write_u32_be_at(&mut self, offset: u64, value: u32) -> Result<()> { self.write_all_at(offset, &value.to_be_bytes()) } /// Writes a [u64] at a specific offset in little-endian order. - fn write_u64_at(&mut self, offset: usize, value: u64) -> Result<()> { + fn write_u64_at(&mut self, offset: u64, value: u64) -> Result<()> { self.write_all_at(offset, &value.to_le_bytes()) } /// Writes a [u64] at a specific offset in big-endian order. - fn write_u64_be_at(&mut self, offset: usize, value: u64) -> Result<()> { + fn write_u64_be_at(&mut self, offset: u64, value: u64) -> Result<()> { self.write_all_at(offset, &value.to_be_bytes()) } /// Writes a [u128] at a specific offset in little-endian order. - fn write_u128_at(&mut self, offset: usize, value: u128) -> Result<()> { + fn write_u128_at(&mut self, offset: u64, value: u128) -> Result<()> { self.write_all_at(offset, &value.to_le_bytes()) } /// Writes a [u128] at a specific offset in big-endian order. - fn write_u128_be_at(&mut self, offset: usize, value: u128) -> Result<()> { + fn write_u128_be_at(&mut self, offset: u64, value: u128) -> Result<()> { self.write_all_at(offset, &value.to_be_bytes()) } /// Writes an [i8] at a specific offset. - fn write_i8_at(&mut self, offset: usize, value: i8) -> Result<()> { + fn write_i8_at(&mut self, offset: u64, value: i8) -> Result<()> { self.write_all_at(offset, &value.to_le_bytes()) } /// Writes an [i16] at a specific offset in little-endian order. - fn write_i16_at(&mut self, offset: usize, value: i16) -> Result<()> { + fn write_i16_at(&mut self, offset: u64, value: i16) -> Result<()> { self.write_all_at(offset, &value.to_le_bytes()) } /// Writes an [i16] at a specific offset in big-endian order. - fn write_i16_be_at(&mut self, offset: usize, value: i16) -> Result<()> { + fn write_i16_be_at(&mut self, offset: u64, value: i16) -> Result<()> { self.write_all_at(offset, &value.to_be_bytes()) } /// Writes an [i32] at a specific offset in little-endian order. - fn write_i32_at(&mut self, offset: usize, value: i32) -> Result<()> { + fn write_i32_at(&mut self, offset: u64, value: i32) -> Result<()> { self.write_all_at(offset, &value.to_le_bytes()) } /// Writes an [i32] at a specific offset in big-endian order. - fn write_i32_be_at(&mut self, offset: usize, value: i32) -> Result<()> { + fn write_i32_be_at(&mut self, offset: u64, value: i32) -> Result<()> { self.write_all_at(offset, &value.to_be_bytes()) } /// Writes an [i64] at a specific offset in little-endian order. - fn write_i64_at(&mut self, offset: usize, value: i64) -> Result<()> { + fn write_i64_at(&mut self, offset: u64, value: i64) -> Result<()> { self.write_all_at(offset, &value.to_le_bytes()) } /// Writes an [i64] at a specific offset in big-endian order. - fn write_i64_be_at(&mut self, offset: usize, value: i64) -> Result<()> { + fn write_i64_be_at(&mut self, offset: u64, value: i64) -> Result<()> { self.write_all_at(offset, &value.to_be_bytes()) } /// Writes an [i128] at a specific offset in little-endian order. - fn write_i128_at(&mut self, offset: usize, value: i128) -> Result<()> { + fn write_i128_at(&mut self, offset: u64, value: i128) -> Result<()> { self.write_all_at(offset, &value.to_le_bytes()) } /// Writes an [i128] at a specific offset in big-endian order. - fn write_i128_be_at(&mut self, offset: usize, value: i128) -> Result<()> { + fn write_i128_be_at(&mut self, offset: u64, value: i128) -> Result<()> { self.write_all_at(offset, &value.to_be_bytes()) } /// Writes a C-style string (null-terminated) at a specific offset. - fn write_cstring_at(&mut self, offset: usize, value: &CString) -> Result<()> { + fn write_cstring_at(&mut self, offset: u64, value: &CString) -> Result<()> { self.write_all_at(offset, value.as_bytes_with_nul()) } } impl WriteAt for T { - fn write_at(&mut self, offset: usize, buf: &[u8]) -> Result { + fn write_at(&mut self, offset: u64, buf: &[u8]) -> Result { let current_pos = self.stream_position()?; self.seek(SeekFrom::Start(offset as u64))?; let bytes_written = self.write(buf)?; @@ -1131,7 +1131,7 @@ impl WriteAt for T { Ok(bytes_written) } - fn write_all_at(&mut self, offset: usize, buf: &[u8]) -> Result<()> { + fn write_all_at(&mut self, offset: u64, buf: &[u8]) -> Result<()> { let current_pos = self.stream_position()?; self.seek(SeekFrom::Start(offset as u64))?; self.write_all(buf)?; diff --git a/src/main.rs b/src/main.rs index 4438447..2e1e611 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1183,7 +1183,13 @@ pub fn import_script( None => {} } format::fmt_message(&mut mes, fmt, *builder.script_type()); - if let Err(e) = script_file.import_messages(mes, writer, encoding, repl) { + if let Err(e) = script_file.import_messages( + mes, + writer, + &out_path.to_string_lossy(), + encoding, + repl, + ) { eprintln!("Error importing messages: {}", e); COUNTER.inc_error(); continue; diff --git a/src/scripts/artemis/asb.rs b/src/scripts/artemis/asb.rs index c5c2ca6..2cea01e 100644 --- a/src/scripts/artemis/asb.rs +++ b/src/scripts/artemis/asb.rs @@ -540,6 +540,7 @@ impl Script for Asb { &'a self, messages: Vec, mut file: Box, + _filename: &str, encoding: Encoding, replacement: Option<&'a ReplacementTable>, ) -> Result<()> { diff --git a/src/scripts/artemis/ast/mod.rs b/src/scripts/artemis/ast/mod.rs index 4b04537..5d69c92 100644 --- a/src/scripts/artemis/ast/mod.rs +++ b/src/scripts/artemis/ast/mod.rs @@ -356,6 +356,7 @@ impl Script for AstScript { &'a self, messages: Vec, mut file: Box, + _filename: &str, encoding: Encoding, replacement: Option<&'a ReplacementTable>, ) -> Result<()> { diff --git a/src/scripts/base.rs b/src/scripts/base.rs index c862759..65b2288 100644 --- a/src/scripts/base.rs +++ b/src/scripts/base.rs @@ -284,12 +284,14 @@ pub trait Script: std::fmt::Debug + std::any::Any { /// /// * `messages` - The messages to import. /// * `file` - A writer with seek capabilities to write the patched scripts. + /// * `filename` - The path of the file to write the patched scripts. /// * `encoding` - The encoding to use for the patched scripts. /// * `replacement` - An optional replacement table for message replacements. fn import_messages<'a>( &'a self, _messages: Vec, _file: Box, + _filename: &str, _encoding: Encoding, _replacement: Option<&'a ReplacementTable>, ) -> Result<()> { @@ -309,14 +311,14 @@ pub trait Script: std::fmt::Debug + std::any::Any { /// * `replacement` - An optional replacement table for message replacements. fn import_messages_filename( &self, - _messages: Vec, - _filename: &str, - _encoding: Encoding, - _replacement: Option<&ReplacementTable>, + messages: Vec, + filename: &str, + encoding: Encoding, + replacement: Option<&ReplacementTable>, ) -> Result<()> { - let f = std::fs::File::create(_filename)?; + let f = std::fs::File::create(filename)?; let f = std::io::BufWriter::new(f); - self.import_messages(_messages, Box::new(f), _encoding, _replacement) + self.import_messages(messages, Box::new(f), filename, encoding, replacement) } /// Exports data from this script. diff --git a/src/scripts/bgi/bp.rs b/src/scripts/bgi/bp.rs index fc46ad8..7eab142 100644 --- a/src/scripts/bgi/bp.rs +++ b/src/scripts/bgi/bp.rs @@ -143,6 +143,7 @@ impl Script for BGIBpScript { &'a self, messages: Vec, mut file: Box, + _filename: &str, encoding: Encoding, replacement: Option<&'a ReplacementTable>, ) -> Result<()> { @@ -172,10 +173,10 @@ impl Script for BGIBpScript { if new_str_len > old_str_len { file.write_all(&str)?; let new_text_offset = (new_pos - i.offset_pos + 1) as u16; - file.write_u16_at(i.offset_pos, new_text_offset)?; + file.write_u16_at(i.offset_pos as u64, new_text_offset)?; new_pos += new_str_len; } else { - file.write_all_at(text_address, &str)?; + file.write_all_at(text_address as u64, &str)?; } } let new_instr_size = (new_pos - self.header_size as usize) as u32; diff --git a/src/scripts/bgi/script.rs b/src/scripts/bgi/script.rs index 69cad85..496c4c6 100644 --- a/src/scripts/bgi/script.rs +++ b/src/scripts/bgi/script.rs @@ -204,6 +204,7 @@ impl Script for BGIScript { &'a self, mut messages: Vec, mut file: Box, + _filename: &str, encoding: Encoding, replacement: Option<&'a ReplacementTable>, ) -> Result<()> { @@ -228,7 +229,7 @@ impl Script for BGIScript { } if used.contains_key(&curs.address) && curs.is_internal() { let (_, new_address) = used.get(&curs.address).unwrap(); - file.write_u32_at(curs.offset, *new_address as u32)?; + file.write_u32_at(curs.offset as u64, *new_address as u32)?; continue; } let nmes = match curs.typ { @@ -300,11 +301,11 @@ impl Script for BGIScript { let in_used = match used.get(&curs.address) { Some((s, address)) => { if s == &nmes { - file.write_u32_at(curs.offset, *address as u32)?; + file.write_u32_at(curs.offset as u64, *address as u32)?; continue; } if let Some(address) = extra.get(&nmes) { - file.write_u32_at(curs.offset, *address as u32)?; + file.write_u32_at(curs.offset as u64, *address as u32)?; continue; } true @@ -325,8 +326,8 @@ impl Script for BGIScript { let nmess = encode_string(encoding, &nmes, false)?; let write_to_original = self.append && !in_used && nmess.len() + 1 <= old_str_len; if write_to_original { - file.write_all_at(bgi_str_old_offset, &nmess)?; - file.write_u8_at(bgi_str_old_offset + nmess.len(), 0)?; // null terminator + file.write_all_at(bgi_str_old_offset as u64, &nmess)?; + file.write_u8_at(bgi_str_old_offset as u64 + nmess.len() as u64, 0)?; // null terminator } else { file.write_all(&nmess)?; file.write_u8(0)?; // null terminator @@ -336,7 +337,7 @@ impl Script for BGIScript { } else { new_offset - self.offset }; - file.write_u32_at(curs.offset, new_address as u32)?; + file.write_u32_at(curs.offset as u64, new_address as u32)?; if in_used { extra.insert(nmes, new_address); } else { @@ -469,7 +470,7 @@ impl Script for BGIScript { return Err(anyhow::anyhow!("Some messages were not processed.")); } for str in nstrs { - file.write_u32_at(str.offset, str.address as u32)?; + file.write_u32_at(str.offset as u64, str.address as u32)?; } if !self.append && old_offset < self.data.data.len() { file.write_all(&self.data.data[old_offset..])?; diff --git a/src/scripts/cat_system/cst.rs b/src/scripts/cat_system/cst.rs index 33409f6..9d7a7d3 100644 --- a/src/scripts/cat_system/cst.rs +++ b/src/scripts/cat_system/cst.rs @@ -233,6 +233,7 @@ impl Script for CstScript { &'a self, messages: Vec, mut file: Box, + _filename: &str, encoding: Encoding, replacement: Option<&'a ReplacementTable>, ) -> Result<()> { @@ -264,7 +265,7 @@ impl Script for CstScript { let pos = writer.write_patched_string(s, &data)?; if pos != s.address { writer.write_u32_at( - strings_address_offset + i * 4, + strings_address_offset as u64 + i as u64 * 4, (pos - strings_offset) as u32, )?; } @@ -290,7 +291,7 @@ impl Script for CstScript { let pos = writer.write_patched_string(s, &data)?; if pos != s.address { writer.write_u32_at( - strings_address_offset + i * 4, + strings_address_offset as u64 + i as u64 * 4, (pos - strings_offset) as u32, )?; } @@ -316,7 +317,7 @@ impl Script for CstScript { let pos = writer.write_patched_string(s, &data)?; if pos != s.address { writer.write_u32_at( - strings_address_offset + i * 4, + strings_address_offset as u64 + i as u64 * 4, (pos - strings_offset) as u32, )?; } diff --git a/src/scripts/cat_system/cstl.rs b/src/scripts/cat_system/cstl.rs index 3dc2636..0c369d2 100644 --- a/src/scripts/cat_system/cstl.rs +++ b/src/scripts/cat_system/cstl.rs @@ -294,6 +294,7 @@ impl Script for CstlScript { &'a self, messages: Vec, mut file: Box, + _filename: &str, encoding: Encoding, replacement: Option<&'a ReplacementTable>, ) -> Result<()> { diff --git a/src/scripts/circus/script.rs b/src/scripts/circus/script.rs index cc2323d..3a3bf4c 100644 --- a/src/scripts/circus/script.rs +++ b/src/scripts/circus/script.rs @@ -235,6 +235,7 @@ impl Script for CircusMesScript { &'a self, messages: Vec, mut writer: Box, + _filename: &str, encoding: Encoding, replacement: Option<&'a ReplacementTable>, ) -> Result<()> { diff --git a/src/scripts/entis_gls/srcxml.rs b/src/scripts/entis_gls/srcxml.rs index b6c06f7..256230b 100644 --- a/src/scripts/entis_gls/srcxml.rs +++ b/src/scripts/entis_gls/srcxml.rs @@ -173,6 +173,7 @@ impl Script for SrcXmlScript { &'a self, messages: Vec, mut file: Box, + _filename: &str, encoding: Encoding, replacement: Option<&'a ReplacementTable>, ) -> Result<()> { diff --git a/src/scripts/escude/script.rs b/src/scripts/escude/script.rs index 491686e..b58f450 100644 --- a/src/scripts/escude/script.rs +++ b/src/scripts/escude/script.rs @@ -194,6 +194,7 @@ impl Script for EscudeBinScript { &'a self, messages: Vec, mut writer: Box, + _filename: &str, encoding: Encoding, replacement: Option<&'a ReplacementTable>, ) -> Result<()> { diff --git a/src/scripts/ex_hibit/rld.rs b/src/scripts/ex_hibit/rld.rs index 36b7c7d..b5e0eff 100644 --- a/src/scripts/ex_hibit/rld.rs +++ b/src/scripts/ex_hibit/rld.rs @@ -416,6 +416,7 @@ impl Script for RldScript { &'a self, messages: Vec, mut file: Box, + _filename: &str, encoding: Encoding, replacement: Option<&'a ReplacementTable>, ) -> Result<()> { diff --git a/src/scripts/hexen_haus/bin.rs b/src/scripts/hexen_haus/bin.rs index 983668c..49992e7 100644 --- a/src/scripts/hexen_haus/bin.rs +++ b/src/scripts/hexen_haus/bin.rs @@ -183,6 +183,7 @@ impl Script for BinScript { &'a self, mut messages: Vec, mut file: Box, + _filename: &str, encoding: Encoding, replacement: Option<&'a ReplacementTable>, ) -> Result<()> { @@ -223,7 +224,7 @@ impl Script for BinScript { while encoded.len() < str.len { encoded.push(32); // Fill with spaces } - data.write_all_at(str.pos, &encoded)?; + data.write_all_at(str.pos as u64, &encoded)?; i += 1; } else { let mut target = if let Some(name) = messages[i].name.take() { @@ -247,7 +248,7 @@ impl Script for BinScript { while encoded.len() < str.len { encoded.push(32); // Fill with spaces } - data.write_all_at(str.pos, &encoded)?; + data.write_all_at(str.pos as u64, &encoded)?; } } let mut data = data.into_inner(); diff --git a/src/scripts/kirikiri/ks.rs b/src/scripts/kirikiri/ks.rs index 1923af5..2b61f85 100644 --- a/src/scripts/kirikiri/ks.rs +++ b/src/scripts/kirikiri/ks.rs @@ -798,6 +798,7 @@ impl Script for KsScript { &'a self, messages: Vec, mut file: Box, + _filename: &str, encoding: Encoding, replacement: Option<&'a ReplacementTable>, ) -> Result<()> { diff --git a/src/scripts/kirikiri/scn.rs b/src/scripts/kirikiri/scn.rs index af1bebe..ccb362c 100644 --- a/src/scripts/kirikiri/scn.rs +++ b/src/scripts/kirikiri/scn.rs @@ -349,6 +349,7 @@ impl Script for ScnScript { &'a self, messages: Vec, file: Box, + _filename: &str, _encoding: Encoding, replacement: Option<&'a ReplacementTable>, ) -> Result<()> { diff --git a/src/scripts/softpal/scr/mod.rs b/src/scripts/softpal/scr/mod.rs index cd001cd..bfd4be0 100644 --- a/src/scripts/softpal/scr/mod.rs +++ b/src/scripts/softpal/scr/mod.rs @@ -7,7 +7,8 @@ use crate::types::*; use crate::utils::encoding::*; use anyhow::Result; use disasm::*; -use std::io::Read; +use std::collections::HashMap; +use std::io::{Read, Write}; #[derive(Debug)] /// Softpal script builder @@ -74,7 +75,7 @@ impl SoftpalScript { _config: &ExtraConfig, archive: Option<&Box>, ) -> Result { - let texts = MemReader::new(Self::load_file(filename, archive, "TEXT.DAT")?); + let texts = Self::load_texts_data(Self::load_file(filename, archive, "TEXT.DAT")?)?; let points_data = MemReader::new(Self::load_file(filename, archive, "POINT.DAT")?); let label_offsets = Self::load_point_data(points_data)?; let strs = Disasm::new(&buf, &label_offsets)?.disassemble::(None)?; @@ -100,6 +101,27 @@ impl SoftpalScript { } } + fn load_texts_data(data: Vec) -> Result { + let mut writer = MemWriter::from_vec(data); + if writer.data.len() >= 0x14 { + let ind = writer.cpeek_u32_at(0x10)?; + writer.pos = 0x10; + if ind != 0 { + let mut shift = 4; + for _ in 0..(writer.data.len() / 4 - 4) { + let mut data = writer.cpeek_u32()?; + let mut add = data.to_le_bytes(); + add[0] = add[0].rotate_left(shift); + shift = (shift + 1) % 8; + data = u32::from_le_bytes(add); + data ^= 0x084DF873 ^ 0xFF987DEE; + writer.write_u32(data)?; + } + } + } + Ok(MemReader::new(writer.into_inner())) + } + fn load_point_data(mut data: MemReader) -> Result> { let mut magic = [0u8; 16]; data.read_exact(&mut magic)?; @@ -152,6 +174,92 @@ impl Script for SoftpalScript { Ok(messages) } + fn import_messages<'a>( + &'a self, + messages: Vec, + mut file: Box, + filename: &str, + encoding: Encoding, + replacement: Option<&'a ReplacementTable>, + ) -> Result<()> { + let mut texts_filename = std::path::PathBuf::from(filename); + texts_filename.set_file_name("TEXT.DAT"); + let mut texts = Vec::new(); + let mut reader = self.texts.to_ref(); + reader.pos = 0x10; + while !reader.is_eof() { + reader.pos += 4; // Skip index + texts.push(reader.read_cstring()?) + } + let mut texts_file = std::fs::File::create(&texts_filename) + .map_err(|e| anyhow::anyhow!("Failed to create TEXT.DAT file: {}", e))?; + file.write_all(&self.data.data)?; + let mut mes = messages.iter(); + let mut mess = mes.next(); + let texts_data_len = self.texts.data.len() as u32; + let mut num_offset_map: HashMap = HashMap::new(); + for str in &self.strs { + let addr = self.data.cpeek_u32_at(str.offset as u64)?; + if addr + 4 > texts_data_len { + continue; + } + let m = match mess { + Some(m) => m, + None => return Err(anyhow::anyhow!("Not enough messages.")), + }; + let mut text = match str.typ { + StringType::Name => match &m.name { + Some(name) => name.clone(), + None => return Err(anyhow::anyhow!("Missing name for message.")), + }, + StringType::Message => { + let m = m.message.clone(); + mess = mes.next(); + m + } + }; + if let Some(repl) = replacement { + for (from, to) in repl.map.iter() { + text = text.replace(from, to); + } + } + text = text.replace("\n", "
"); + let encoded = encode_string(encoding, &text, false)?; + let s = std::ffi::CString::new(encoded)?; + let num = texts.len() as u32; + num_offset_map.insert(num, str.offset); + texts.push(s); + } + if mess.is_some() || mes.next().is_some() { + return Err(anyhow::anyhow!("Some messages were not processed.")); + } + texts_file.write_all(b"$TEXT_LIST__")?; + texts_file.write_u32(texts.len() as u32)?; + let mut nf = MemWriter::new(); + for (num, text) in texts.into_iter().enumerate() { + let num = num as u32; + let newaddr = nf.pos as u32 + 0x10; + if let Some(offset) = num_offset_map.get(&num) { + file.write_u32_at(*offset as u64, newaddr)?; + } + nf.write_u32(num)?; + nf.write_cstring(&text)?; + } + nf.pos = 0; + let mut shift = 4; + for _ in 0..(nf.data.len() / 4) { + let mut data = nf.cpeek_u32()?; + data ^= 0x084DF873 ^ 0xFF987DEE; + let mut add = data.to_le_bytes(); + add[0] = add[0].rotate_right(shift); + shift = (shift + 1) % 8; + data = u32::from_le_bytes(add); + nf.write_u32(data)?; + } + texts_file.write_all(&nf.data)?; + Ok(()) + } + fn custom_output_extension<'a>(&'a self) -> &'a str { "txt" } diff --git a/src/scripts/will_plus/ws2.rs b/src/scripts/will_plus/ws2.rs index b01ceb6..5791d83 100644 --- a/src/scripts/will_plus/ws2.rs +++ b/src/scripts/will_plus/ws2.rs @@ -257,6 +257,7 @@ impl Script for Ws2Script { &'a self, messages: Vec, file: Box, + _filename: &str, encoding: Encoding, replacement: Option<&'a ReplacementTable>, ) -> Result<()> { @@ -300,7 +301,7 @@ impl Script for Ws2Script { encoded = truncate_string(&name, target_len, encoding, true)?; } encoded.resize(target_len, 0x20); // Fill with spaces - file.write_all_at(actor.pos + prefix.len(), &encoded)?; + file.write_all_at(actor.pos as u64 + prefix.len() as u64, &encoded)?; } let suffix = if str.str.ends_with("%K%P") { "%K%P" @@ -321,7 +322,7 @@ impl Script for Ws2Script { encoded = truncate_string(&message, target_len, encoding, true)?; } encoded.resize(target_len, 0x20); // Fill with spaces - file.write_all_at(str.pos, &encoded)?; + file.write_all_at(str.pos as u64, &encoded)?; m = mes.next(); } if m.is_some() || mes.next().is_some() { @@ -418,6 +419,7 @@ impl Script for Ws2DisasmScript { &'a self, messages: Vec, file: Box, + _filename: &str, encoding: Encoding, replacement: Option<&'a ReplacementTable>, ) -> Result<()> { diff --git a/src/scripts/yaneurao/itufuru/script.rs b/src/scripts/yaneurao/itufuru/script.rs index 25be5f0..895f8d2 100644 --- a/src/scripts/yaneurao/itufuru/script.rs +++ b/src/scripts/yaneurao/itufuru/script.rs @@ -145,6 +145,7 @@ impl Script for ItufuruScript { &'a self, messages: Vec, mut file: Box, + _filename: &str, encoding: Encoding, replacement: Option<&'a ReplacementTable>, ) -> Result<()> {