diff --git a/msg_tool_xp3data/crypt.json b/msg_tool_xp3data/crypt.json index 1da9b3d..a33c961 100644 --- a/msg_tool_xp3data/crypt.json +++ b/msg_tool_xp3data/crypt.json @@ -1756,6 +1756,11 @@ "$type": "HashCrypt", "Title": "パパ大好き!と言ってくれ…~反抗期の娘を催眠アプリで狂愛しつけ~" }, + "Papikon ~Futago no Musume wa Doukyuusei?!~": { + "$type": "ChocolatCrypt", + "StartupTjsNotEncrypted": true, + "Title": "ぱ・ぴ・こ・ん ~双子の娘はどうきゅうせい!?~ | 萌・上・父・上" + }, "Parquet": { "$type": "CxEncryption", "Mask": 699, diff --git a/src/scripts/kirikiri/archive/xp3/crypt/chain_reaction.rs b/src/scripts/kirikiri/archive/xp3/crypt/chain_reaction.rs index 73e687d..b9a1d5a 100644 --- a/src/scripts/kirikiri/archive/xp3/crypt/chain_reaction.rs +++ b/src/scripts/kirikiri/archive/xp3/crypt/chain_reaction.rs @@ -315,3 +315,33 @@ impl IChainReactionCrypt for HachukanoCrypt { self.base.init(archive) } } + +#[derive(Debug)] +pub struct ChocolatCrypt { + base: ChainReactionCryptBase, +} + +impl ChocolatCrypt { + pub fn new(base: BaseSchema) -> ChainReactionCrypt { + ChainReactionCrypt::new_inner( + base, + Box::new(Self { + base: ChainReactionCryptBase::new("plugins/list.txt".into()), + }), + ) + } +} + +impl IChainReactionCrypt for ChocolatCrypt { + fn get_encryption_limit(&self, entry: &Xp3Entry) -> u32 { + let limit = self.base.get_encryption_limit(entry); + match limit { + 0 => 0, + 2 => entry.original_size as u32, + _ => 0x100, + } + } + fn init(&self, archive: &mut Xp3Archive) -> Result<()> { + self.base.init(archive) + } +} diff --git a/src/scripts/kirikiri/archive/xp3/crypt/mod.rs b/src/scripts/kirikiri/archive/xp3/crypt/mod.rs index 1ebd8d7..14f274a 100644 --- a/src/scripts/kirikiri/archive/xp3/crypt/mod.rs +++ b/src/scripts/kirikiri/archive/xp3/crypt/mod.rs @@ -268,6 +268,7 @@ enum CryptType { }, ChainReactionCrypt, HachukanoCrypt, + ChocolatCrypt, } #[derive(Clone, Debug, Deserialize)] @@ -436,6 +437,9 @@ impl Schema { CryptType::HachukanoCrypt => { Box::new(chain_reaction::HachukanoCrypt::new(self.base.clone())) } + CryptType::ChocolatCrypt => { + Box::new(chain_reaction::ChocolatCrypt::new(self.base.clone())) + } }) } }