mirror of
https://github.com/lifegpc/msg-tool.git
synced 2026-06-07 21:38:58 +08:00
Add Softpal scr script support
This commit is contained in:
@@ -143,6 +143,7 @@ impl Script for BGIBpScript {
|
||||
&'a self,
|
||||
messages: Vec<Message>,
|
||||
mut file: Box<dyn WriteSeek + 'a>,
|
||||
_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;
|
||||
|
||||
@@ -204,6 +204,7 @@ impl Script for BGIScript {
|
||||
&'a self,
|
||||
mut messages: Vec<Message>,
|
||||
mut file: Box<dyn WriteSeek + 'a>,
|
||||
_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..])?;
|
||||
|
||||
Reference in New Issue
Block a user