diff --git a/src/args.rs b/src/args.rs index 736c900..7f53c0f 100644 --- a/src/args.rs +++ b/src/args.rs @@ -573,6 +573,11 @@ pub struct Arg { #[arg(long, global = true)] /// Do not add quote to translated text when exporting to m3t files. pub m3t_no_quote: bool, + #[cfg(feature = "kirikiri-arc")] + #[arg(long, global = true)] + /// Disable adler32 checksum for Kirikiri XP3 archive when creating. + /// This will keep compatibility with https://github.com/arcusmaximus/KirikiriTools tool. + pub xp3_no_adler: bool, #[command(subcommand)] /// Command pub command: Command, diff --git a/src/main.rs b/src/main.rs index ce3f9d6..c9a5960 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3053,6 +3053,8 @@ fn main() { musica_xor_key: arg.musica_xor_key, #[cfg(feature = "musica-arc")] musica_compress: arg.musica_compress, + #[cfg(feature = "kirikiri-arc")] + xp3_no_adler: arg.xp3_no_adler, }); match &arg.command { args::Command::Export { input, output } => { diff --git a/src/scripts/kirikiri/archive/xp3pack/writer.rs b/src/scripts/kirikiri/archive/xp3pack/writer.rs index e394077..eb459be 100644 --- a/src/scripts/kirikiri/archive/xp3pack/writer.rs +++ b/src/scripts/kirikiri/archive/xp3pack/writer.rs @@ -75,6 +75,7 @@ pub struct Xp3ArchiveWriter { processing_segments: Arc>>, use_zstd: bool, zstd_compression_level: i32, + no_adler: bool, } impl Xp3ArchiveWriter> { @@ -117,6 +118,7 @@ impl Xp3ArchiveWriter> { processing_segments: Arc::new(Mutex::new(HashSet::new())), use_zstd: config.xp3_zstd, zstd_compression_level: config.zstd_compression_level, + no_adler: config.xp3_no_adler, }) } } @@ -507,7 +509,11 @@ impl Archive for Xp3ArchiveWriter { let adlr_data_size = 4; file_chunk.write_all(CHUNK_ADLR)?; file_chunk.write_u64(adlr_data_size)?; - file_chunk.write_u32(item.file_hash)?; + if self.no_adler { + file_chunk.write_u32(0)?; + } else { + file_chunk.write_u32(item.file_hash)?; + } index_data.write_all(CHUNK_FILE)?; let file_chunk = file_chunk.into_inner(); index_data.write_u64(file_chunk.len() as u64)?; diff --git a/src/types.rs b/src/types.rs index c89b3ff..bd2e4e0 100644 --- a/src/types.rs +++ b/src/types.rs @@ -503,6 +503,10 @@ pub struct ExtraConfig { /// Workers count for packing file in Kirikiri XP3 archive in parallel. Default is 1. /// This not works when segment is disabled. pub xp3_pack_workers: usize, + #[cfg(feature = "kirikiri-arc")] + /// Disable adler32 checksum for Kirikiri XP3 archive when creating. + /// This will keep compatibility with https://github.com/arcusmaximus/KirikiriTools tool. + pub xp3_no_adler: bool, #[cfg(feature = "kirikiri")] /// Insert new language at the specified index in Kirikiri SCN script. If index is out of bounds, this flags will be ignored. pub kirikiri_language_insert: bool,