From 763ace6149f85cdc2930b87152f6bb5d22cfa32d Mon Sep 17 00:00:00 2001 From: lifegpc Date: Sun, 18 Jan 2026 10:51:09 +0800 Subject: [PATCH] Fix extract message name not works on yosuga Fix typo --- src/args.rs | 4 ++-- src/main.rs | 2 +- src/scripts/entis_gls/csx/v1/img.rs | 28 ++++++++++++++++++++-------- src/scripts/entis_gls/csx/v1/mod.rs | 2 +- src/types.rs | 2 +- 5 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/args.rs b/src/args.rs index 6ded788..df08817 100644 --- a/src/args.rs +++ b/src/args.rs @@ -614,9 +614,9 @@ pub struct Arg { /// Default value: 15. pub zopfli_maximum_block_splits: u16, #[cfg(feature = "entis-gls")] - #[arg(long, global = true, action = ArgAction::SetTrue)] + #[arg(long, global = true, action = ArgAction::SetTrue, alias = "entis-gls-csx-diasm")] /// Disassemble Entis GLS csx script when exporting in custom mode. - pub entis_gls_csx_diasm: bool, + pub entis_gls_csx_disasm: bool, #[command(subcommand)] /// Command pub command: Command, diff --git a/src/main.rs b/src/main.rs index 63e35f0..4cbc852 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3306,7 +3306,7 @@ fn main() { #[cfg(feature = "artemis-panmimisoft")] artemis_panmimisoft_txt_multi_lang: arg.artemis_panmimisoft_txt_multi_lang, #[cfg(feature = "entis-gls")] - entis_gls_csx_diasm: arg.entis_gls_csx_diasm, + entis_gls_csx_disasm: arg.entis_gls_csx_disasm, }); match &arg.command { args::Command::Export { input, output } => { diff --git a/src/scripts/entis_gls/csx/v1/img.rs b/src/scripts/entis_gls/csx/v1/img.rs index 690543d..721a1e1 100644 --- a/src/scripts/entis_gls/csx/v1/img.rs +++ b/src/scripts/entis_gls/csx/v1/img.rs @@ -209,10 +209,7 @@ impl ECSExecutionImage { let csvt = disasm.read_csvt()?; if csom == CsomImmediate && csvt == CsvtString { let text = disasm.get_string_literal()?; - string_stack.insert(0, text); - if string_stack.len() > 8 { - string_stack.pop(); - } + string_stack.push(text); } } else if cmd.code == CsicCall { disasm.stream.pos = cmd.addr as usize + 1; @@ -238,6 +235,7 @@ impl ECSExecutionImage { )); } if string_stack[0].starts_with("@") { + string_stack.clear(); continue; } message.push_str(string_stack[0].as_str()); @@ -250,6 +248,11 @@ impl ECSExecutionImage { cmd.addr )); } + if string_stack[0] == "心の声" { + string_stack.clear(); + // 傻逼旁白 + continue; + } name = Some(string_stack[0].clone()); } else if func_name == "AddSelect" { if string_stack.is_empty() { @@ -265,6 +268,7 @@ impl ECSExecutionImage { messages.push(Message::new(message.clone(), name.take())); message.clear(); } + string_stack.clear(); pre_is_mess = is_mess; } } @@ -295,10 +299,7 @@ impl ECSExecutionImage { let csvt = disasm.read_csvt()?; if csom == CsomImmediate && csvt == CsvtString { let text = disasm.get_string_literal()?; - string_stack.insert(0, text); - if string_stack.len() > 8 { - string_stack.pop(); - } + string_stack.push(text); } } else if cmd.code == CsicCall { disasm.stream.pos = cmd.addr as usize + 1; @@ -327,6 +328,11 @@ impl ECSExecutionImage { )); } if string_stack[0].starts_with("@") { + eprintln!( + "Skipping control string at 0x{:08x}: {}", + cmd.addr, string_stack[0] + ); + string_stack.clear(); continue; } message.push_str(string_stack[0].as_str()); @@ -339,6 +345,11 @@ impl ECSExecutionImage { cmd.addr )); } + if string_stack[0] == "心の声" { + // 傻逼旁白 + string_stack.clear(); + continue; + } name = Some(string_stack[0].clone()); } else if func_name == "AddSelect" { if string_stack.is_empty() { @@ -367,6 +378,7 @@ impl ECSExecutionImage { message.clear(); } pre_is_mess = is_mess; + string_stack.clear(); } else if is_enter { disasm.stream.pos = cmd.addr as usize + 1; let name = WideString::unpack(&mut disasm.stream, false, Encoding::Utf16LE)?.0; diff --git a/src/scripts/entis_gls/csx/v1/mod.rs b/src/scripts/entis_gls/csx/v1/mod.rs index 503b9d6..51ae7e8 100644 --- a/src/scripts/entis_gls/csx/v1/mod.rs +++ b/src/scripts/entis_gls/csx/v1/mod.rs @@ -67,7 +67,7 @@ impl CSXScript { let img = ECSExecutionImage::new(reader)?; Ok(Self { img, - disasm: config.entis_gls_csx_diasm, + disasm: config.entis_gls_csx_disasm, custom_yaml: config.custom_yaml, }) } diff --git a/src/types.rs b/src/types.rs index 4bc9de9..1719a7d 100644 --- a/src/types.rs +++ b/src/types.rs @@ -566,7 +566,7 @@ pub struct ExtraConfig { pub zopfli_maximum_block_splits: u16, #[cfg(feature = "entis-gls")] /// Whether to disassemble Entis GLS csx script when exporting in custom mode. - pub entis_gls_csx_diasm: bool, + pub entis_gls_csx_disasm: bool, } #[derive(Clone, Copy, Debug, ValueEnum, PartialEq, Eq, PartialOrd, Ord)]