From e758474a07faf298aa3b7023b336b25b79915675 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 25 Jun 2026 22:24:45 +0800 Subject: [PATCH] Add: Chapter HT --- ...TEMPLATE_SIREN_MeowfficerBust_Playtime.gif | Bin 0 -> 4316 bytes ...TEMPLATE_SIREN_MeowfficerBust_Studying.gif | Bin 0 -> 2154 bytes ...TEMPLATE_SIREN_MeowfficerBust_Playtime.gif | Bin 0 -> 4316 bytes ...TEMPLATE_SIREN_MeowfficerBust_Studying.gif | Bin 0 -> 2154 bytes ...TEMPLATE_SIREN_MeowfficerBust_Playtime.gif | Bin 0 -> 4316 bytes ...TEMPLATE_SIREN_MeowfficerBust_Studying.gif | Bin 0 -> 2154 bytes ...TEMPLATE_SIREN_MeowfficerBust_Playtime.gif | Bin 0 -> 4316 bytes ...TEMPLATE_SIREN_MeowfficerBust_Studying.gif | Bin 0 -> 2154 bytes campaign/event_20260625_cn/ht1.py | 79 ++++++++++++++++ campaign/event_20260625_cn/ht2.py | 86 +++++++++++++++++ campaign/event_20260625_cn/ht3.py | 89 ++++++++++++++++++ module/template/assets.py | 2 + 12 files changed, 256 insertions(+) create mode 100644 assets/cn/template/TEMPLATE_SIREN_MeowfficerBust_Playtime.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_MeowfficerBust_Studying.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_MeowfficerBust_Playtime.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_MeowfficerBust_Studying.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_MeowfficerBust_Playtime.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_MeowfficerBust_Studying.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_MeowfficerBust_Playtime.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_MeowfficerBust_Studying.gif create mode 100644 campaign/event_20260625_cn/ht1.py create mode 100644 campaign/event_20260625_cn/ht2.py create mode 100644 campaign/event_20260625_cn/ht3.py diff --git a/assets/cn/template/TEMPLATE_SIREN_MeowfficerBust_Playtime.gif b/assets/cn/template/TEMPLATE_SIREN_MeowfficerBust_Playtime.gif new file mode 100644 index 0000000000000000000000000000000000000000..a73bf4c5e9056e336763dccb140cec69d6809775 GIT binary patch literal 4316 zcmeI#=}%K@0>|<0E!`+fp<=~TC|Hnd5SeQo$c&V&ERqU{RnQc~C5TuUM=LJra%jtH zDT|1pZQ&{?YDG{`)E+iLP+LVLidv93By%UznV1asmGhV;gj`1_nU}*o|H1R*JfD1j z@dcbLY=xYHe+8X=yQ;Oh%*8U@$Z_HJv+muD-s$wzjsWrbegJRaRD3R8*9g zmzR~5m6n!jwOX}WT~bm4!>~%FQYw`Sg+eZupE`Bw~kQ&M8n)1sq9 zv0>{%vFOjAQJi0JBn~)z$d?=V@=Q>q&!`Qsqj0X28MIaY$!xYD7ygvj2dh$%D0X&8AhdHy`?5JnpI`;z$j2MN8#tLo9 zpRo@zco9FE&4th$tWWUg>mancYIQiBA+bu(mEL|nkWOS2;HVqm1-rozwPRgo<7PyU zQH+v&WzZ&@b)Dy$mzm>NC>+d zjptwblUJQ6j8y3r(9`lj#3ACy?tbDPDF^!csx-ipj~_qI&CPxI@L_g#7TEIk?OR~W z>({RVEMJrIKX`KQ-o2%yEP4Vk0g_z5e*J4qfFyvCix)38H#Y-J8XFsdCuh%|b$X)L z>#M7)fhtv1RZdu(s%SKtU#S8}Ieq#xAm!MxV@Ho3bz*Y(@L{JX0F&I@T&E{uv3UFT z?P+OgiHV8v@$p}NrQg0~a07sf_2aDm+_E}eiV}6)Vn(nyJS1+ghne<3IX1QnYZAulI{j7AL@MwlHDEZE;?C9b za#{zKL|J$E)=u0Q)7#fi*kGR>p^@of{yQ*m9N8loHZ(90OjQ8aC#)T9$|a!LvI@Dw zuF|nRe1(o|B$`OK;HfgVDMdM#g{g7L3aOGZsJ!Cll}Azkm1c-SqVIx1{(^e0-}smP!H217rti z4iFqpBRV=dKy$RWw_m<|d1-S1CN5mK;FRM0`SVUJ8X6ja7a&3E>gs-_#+fr`mcsF^ z76EW9=E(8m$DKI>DrEou{XmVJoE(Wn0_*@4l97?IZQC}`B3rg>Nls2)2CrtB9uZ)X zG_4ivrPK$fsqK7+Aqq>t6WDD!qq=6zF0*h`Q49`4q5z&!(|? z637BmYnZ_n{_H@47cVM?D}tcma{P+0Ec0e$=nVCb9a%fF4KdYjG*9l3d7>ZhvPw?M z7Wl(h0>w)fcB z#MO8)*kRhDm<0OjB>r%nU7^)e>E6<~^_XZJZB1jo_JkmzoJ8mH-HaTSn&ycSi)@lG zdH|Cp7TXZ4<}a%lBxtJuU=bHCYjyv zqbr<6v53Udsq&qj@?S>^SSU-KSUOUiS}aBd0AuMwaYhB8!dVoHLVTYGuvQkk!Z}r( zQL$(Pm@3Y?SX?X4z&Ld1P=0>?!Gj0EY}vba@18w-fEi%604+o!QA9+<#*G^T0|S@o zQ~G~DHlQN5ZK0Z*=p7=0N$my;8cQHzD)=@d?8?dLOLt3+Az+APPqxs}GDMp%#*kPGN_OEddp*(8Tnt28g3nuZ~X%wcguY zUK=F5eiA9n=qUAz3JIUeiXC%b>E}MhOI4Y1tS?){E+^|(1Pf%LD7)H)#0dVGBv3?^ z1V-d{K{jJF8WkKSltTR@cp_8zsqLm;OrZ-Va9jq>L{WR06%K#-4<@XJM)0)Cp?W1u b_R!h2ivHgdY2LvTBR||0lu*!URK&jliu`sY literal 0 HcmV?d00001 diff --git a/assets/cn/template/TEMPLATE_SIREN_MeowfficerBust_Studying.gif b/assets/cn/template/TEMPLATE_SIREN_MeowfficerBust_Studying.gif new file mode 100644 index 0000000000000000000000000000000000000000..12e50c71ba6f6345cf807544286169fc047c824c GIT binary patch literal 2154 zcmZ?wbhEHb6krfwXlG!!ef##UTeq%VyLRQul}nc{ojZ5#?Afzt&YU@Y`t+$&r%s$W zarEfXBS(%LK79D#!GnAE?%la_=hm%TH*Vaxe*OA&>(;Gay?Vup70Z?_TeN7={Q2|e z&6_uO?%X+Z=FFZwd)BO3GiJ<~Hf`GE$&)8dnly3Z#0e87^!NAo_4W1i^mKQ3cXf4j zc6N4jbhNd#H8(dmH8nLhHa0Xg)YsS7)z#J3*4EV2R99D5RaI41R#sG0l$V#6m6es0 zloS^i7Znv178Vv16y)dU=jG+)=H}+)CW*rKF@JCnqN*B_$>% zCL|=p$H<#l^B)#M@L6RMMXwNMnpt}goFeJ1_lHK`1||&`T6+9&~XlZF_YHBJeDM?F9i-?FYjDkTN0*e2+{aizWogD*Qjr0td8UO!hQ2fclp$K%c z4#?S{Y{J0tpMl$;z+uBdCRR=nhaVpvv2*ZqvPf7c7&f(Xi8#&B2x@9(=MiEPxX`f3 ztzXVM=EH=Gj?Qeta(X=+PR1uDD4N)(SO})K^9d?;Tv=jyb#WP|~3bLJ@EMZvp1hgW3AT zG-DPyO#GPAIYBpj*PKk}v{O^Gl6$5EdQSEbR1KJ8<7xD?YpPOoN<)BQvs>?F^Ry2O zgqC&8kT$c*VYt}Dc1yx+Qcaz2Jx{w3p5%Sl0% zuniM#7(6^U`IXls30}!h%5Gdd92^`B0tyP4A=G~3#tmQ@a`oy}U@>y}@?~H#0xUy- z1<0{u#~`K0p+kp&1<3B*yLar^v1Q8^V7ak!<;vyDmoHtqbjgw>z|v#Ef(5|R1G(s! zK7Bf{^q4wz>Xa!{fCUJo^uR1ST3TAriVm#hMrmm&F-1p4Mh2wxNKH*8vH%GU4Gj(s z4hjl_6eEx_#M|2&xfpSCbAyy5@M6T;+8S7lz{?O*Q&V6uVr*<|XlMv2Nq}XDf`Wpa zoSd+*@F31WqfP^b0I-A*){*cCXl!Z}a`~dr=;+YM!ow$F(V*bi#HmoUW5b4rj*Se= z91c4kFdktS(k`pG;LzyY$|mUd!@w!!gn*QtN6d^5%MdU$TwJ_@Us~L1LZ@*O zdoRC3m)GA$rlT?z#(EhA6O~t8k+bf)aC1|t+Z;8;pf?kC9d4Jf3|%0ya^a)Xvs5js zepm=SJv&=H{K>H$7Z0^d8pNGiQF!_3$tn6?o7QAJQt=ef$-dDsQ^=J|RM+v?3I|2y z_LowoMGsDVWZ{{t=^mGGBjC_cF0mbvA2uvvZI===jN8+&(D~#LJ uC>RzkIXP83bcu>%&@<02LCISigd!)i@k*Oz9cVcybf~e3fq{vM!5RSI3o3vB literal 0 HcmV?d00001 diff --git a/assets/en/template/TEMPLATE_SIREN_MeowfficerBust_Playtime.gif b/assets/en/template/TEMPLATE_SIREN_MeowfficerBust_Playtime.gif new file mode 100644 index 0000000000000000000000000000000000000000..a73bf4c5e9056e336763dccb140cec69d6809775 GIT binary patch literal 4316 zcmeI#=}%K@0>|<0E!`+fp<=~TC|Hnd5SeQo$c&V&ERqU{RnQc~C5TuUM=LJra%jtH zDT|1pZQ&{?YDG{`)E+iLP+LVLidv93By%UznV1asmGhV;gj`1_nU}*o|H1R*JfD1j z@dcbLY=xYHe+8X=yQ;Oh%*8U@$Z_HJv+muD-s$wzjsWrbegJRaRD3R8*9g zmzR~5m6n!jwOX}WT~bm4!>~%FQYw`Sg+eZupE`Bw~kQ&M8n)1sq9 zv0>{%vFOjAQJi0JBn~)z$d?=V@=Q>q&!`Qsqj0X28MIaY$!xYD7ygvj2dh$%D0X&8AhdHy`?5JnpI`;z$j2MN8#tLo9 zpRo@zco9FE&4th$tWWUg>mancYIQiBA+bu(mEL|nkWOS2;HVqm1-rozwPRgo<7PyU zQH+v&WzZ&@b)Dy$mzm>NC>+d zjptwblUJQ6j8y3r(9`lj#3ACy?tbDPDF^!csx-ipj~_qI&CPxI@L_g#7TEIk?OR~W z>({RVEMJrIKX`KQ-o2%yEP4Vk0g_z5e*J4qfFyvCix)38H#Y-J8XFsdCuh%|b$X)L z>#M7)fhtv1RZdu(s%SKtU#S8}Ieq#xAm!MxV@Ho3bz*Y(@L{JX0F&I@T&E{uv3UFT z?P+OgiHV8v@$p}NrQg0~a07sf_2aDm+_E}eiV}6)Vn(nyJS1+ghne<3IX1QnYZAulI{j7AL@MwlHDEZE;?C9b za#{zKL|J$E)=u0Q)7#fi*kGR>p^@of{yQ*m9N8loHZ(90OjQ8aC#)T9$|a!LvI@Dw zuF|nRe1(o|B$`OK;HfgVDMdM#g{g7L3aOGZsJ!Cll}Azkm1c-SqVIx1{(^e0-}smP!H217rti z4iFqpBRV=dKy$RWw_m<|d1-S1CN5mK;FRM0`SVUJ8X6ja7a&3E>gs-_#+fr`mcsF^ z76EW9=E(8m$DKI>DrEou{XmVJoE(Wn0_*@4l97?IZQC}`B3rg>Nls2)2CrtB9uZ)X zG_4ivrPK$fsqK7+Aqq>t6WDD!qq=6zF0*h`Q49`4q5z&!(|? z637BmYnZ_n{_H@47cVM?D}tcma{P+0Ec0e$=nVCb9a%fF4KdYjG*9l3d7>ZhvPw?M z7Wl(h0>w)fcB z#MO8)*kRhDm<0OjB>r%nU7^)e>E6<~^_XZJZB1jo_JkmzoJ8mH-HaTSn&ycSi)@lG zdH|Cp7TXZ4<}a%lBxtJuU=bHCYjyv zqbr<6v53Udsq&qj@?S>^SSU-KSUOUiS}aBd0AuMwaYhB8!dVoHLVTYGuvQkk!Z}r( zQL$(Pm@3Y?SX?X4z&Ld1P=0>?!Gj0EY}vba@18w-fEi%604+o!QA9+<#*G^T0|S@o zQ~G~DHlQN5ZK0Z*=p7=0N$my;8cQHzD)=@d?8?dLOLt3+Az+APPqxs}GDMp%#*kPGN_OEddp*(8Tnt28g3nuZ~X%wcguY zUK=F5eiA9n=qUAz3JIUeiXC%b>E}MhOI4Y1tS?){E+^|(1Pf%LD7)H)#0dVGBv3?^ z1V-d{K{jJF8WkKSltTR@cp_8zsqLm;OrZ-Va9jq>L{WR06%K#-4<@XJM)0)Cp?W1u b_R!h2ivHgdY2LvTBR||0lu*!URK&jliu`sY literal 0 HcmV?d00001 diff --git a/assets/en/template/TEMPLATE_SIREN_MeowfficerBust_Studying.gif b/assets/en/template/TEMPLATE_SIREN_MeowfficerBust_Studying.gif new file mode 100644 index 0000000000000000000000000000000000000000..12e50c71ba6f6345cf807544286169fc047c824c GIT binary patch literal 2154 zcmZ?wbhEHb6krfwXlG!!ef##UTeq%VyLRQul}nc{ojZ5#?Afzt&YU@Y`t+$&r%s$W zarEfXBS(%LK79D#!GnAE?%la_=hm%TH*Vaxe*OA&>(;Gay?Vup70Z?_TeN7={Q2|e z&6_uO?%X+Z=FFZwd)BO3GiJ<~Hf`GE$&)8dnly3Z#0e87^!NAo_4W1i^mKQ3cXf4j zc6N4jbhNd#H8(dmH8nLhHa0Xg)YsS7)z#J3*4EV2R99D5RaI41R#sG0l$V#6m6es0 zloS^i7Znv178Vv16y)dU=jG+)=H}+)CW*rKF@JCnqN*B_$>% zCL|=p$H<#l^B)#M@L6RMMXwNMnpt}goFeJ1_lHK`1||&`T6+9&~XlZF_YHBJeDM?F9i-?FYjDkTN0*e2+{aizWogD*Qjr0td8UO!hQ2fclp$K%c z4#?S{Y{J0tpMl$;z+uBdCRR=nhaVpvv2*ZqvPf7c7&f(Xi8#&B2x@9(=MiEPxX`f3 ztzXVM=EH=Gj?Qeta(X=+PR1uDD4N)(SO})K^9d?;Tv=jyb#WP|~3bLJ@EMZvp1hgW3AT zG-DPyO#GPAIYBpj*PKk}v{O^Gl6$5EdQSEbR1KJ8<7xD?YpPOoN<)BQvs>?F^Ry2O zgqC&8kT$c*VYt}Dc1yx+Qcaz2Jx{w3p5%Sl0% zuniM#7(6^U`IXls30}!h%5Gdd92^`B0tyP4A=G~3#tmQ@a`oy}U@>y}@?~H#0xUy- z1<0{u#~`K0p+kp&1<3B*yLar^v1Q8^V7ak!<;vyDmoHtqbjgw>z|v#Ef(5|R1G(s! zK7Bf{^q4wz>Xa!{fCUJo^uR1ST3TAriVm#hMrmm&F-1p4Mh2wxNKH*8vH%GU4Gj(s z4hjl_6eEx_#M|2&xfpSCbAyy5@M6T;+8S7lz{?O*Q&V6uVr*<|XlMv2Nq}XDf`Wpa zoSd+*@F31WqfP^b0I-A*){*cCXl!Z}a`~dr=;+YM!ow$F(V*bi#HmoUW5b4rj*Se= z91c4kFdktS(k`pG;LzyY$|mUd!@w!!gn*QtN6d^5%MdU$TwJ_@Us~L1LZ@*O zdoRC3m)GA$rlT?z#(EhA6O~t8k+bf)aC1|t+Z;8;pf?kC9d4Jf3|%0ya^a)Xvs5js zepm=SJv&=H{K>H$7Z0^d8pNGiQF!_3$tn6?o7QAJQt=ef$-dDsQ^=J|RM+v?3I|2y z_LowoMGsDVWZ{{t=^mGGBjC_cF0mbvA2uvvZI===jN8+&(D~#LJ uC>RzkIXP83bcu>%&@<02LCISigd!)i@k*Oz9cVcybf~e3fq{vM!5RSI3o3vB literal 0 HcmV?d00001 diff --git a/assets/jp/template/TEMPLATE_SIREN_MeowfficerBust_Playtime.gif b/assets/jp/template/TEMPLATE_SIREN_MeowfficerBust_Playtime.gif new file mode 100644 index 0000000000000000000000000000000000000000..a73bf4c5e9056e336763dccb140cec69d6809775 GIT binary patch literal 4316 zcmeI#=}%K@0>|<0E!`+fp<=~TC|Hnd5SeQo$c&V&ERqU{RnQc~C5TuUM=LJra%jtH zDT|1pZQ&{?YDG{`)E+iLP+LVLidv93By%UznV1asmGhV;gj`1_nU}*o|H1R*JfD1j z@dcbLY=xYHe+8X=yQ;Oh%*8U@$Z_HJv+muD-s$wzjsWrbegJRaRD3R8*9g zmzR~5m6n!jwOX}WT~bm4!>~%FQYw`Sg+eZupE`Bw~kQ&M8n)1sq9 zv0>{%vFOjAQJi0JBn~)z$d?=V@=Q>q&!`Qsqj0X28MIaY$!xYD7ygvj2dh$%D0X&8AhdHy`?5JnpI`;z$j2MN8#tLo9 zpRo@zco9FE&4th$tWWUg>mancYIQiBA+bu(mEL|nkWOS2;HVqm1-rozwPRgo<7PyU zQH+v&WzZ&@b)Dy$mzm>NC>+d zjptwblUJQ6j8y3r(9`lj#3ACy?tbDPDF^!csx-ipj~_qI&CPxI@L_g#7TEIk?OR~W z>({RVEMJrIKX`KQ-o2%yEP4Vk0g_z5e*J4qfFyvCix)38H#Y-J8XFsdCuh%|b$X)L z>#M7)fhtv1RZdu(s%SKtU#S8}Ieq#xAm!MxV@Ho3bz*Y(@L{JX0F&I@T&E{uv3UFT z?P+OgiHV8v@$p}NrQg0~a07sf_2aDm+_E}eiV}6)Vn(nyJS1+ghne<3IX1QnYZAulI{j7AL@MwlHDEZE;?C9b za#{zKL|J$E)=u0Q)7#fi*kGR>p^@of{yQ*m9N8loHZ(90OjQ8aC#)T9$|a!LvI@Dw zuF|nRe1(o|B$`OK;HfgVDMdM#g{g7L3aOGZsJ!Cll}Azkm1c-SqVIx1{(^e0-}smP!H217rti z4iFqpBRV=dKy$RWw_m<|d1-S1CN5mK;FRM0`SVUJ8X6ja7a&3E>gs-_#+fr`mcsF^ z76EW9=E(8m$DKI>DrEou{XmVJoE(Wn0_*@4l97?IZQC}`B3rg>Nls2)2CrtB9uZ)X zG_4ivrPK$fsqK7+Aqq>t6WDD!qq=6zF0*h`Q49`4q5z&!(|? z637BmYnZ_n{_H@47cVM?D}tcma{P+0Ec0e$=nVCb9a%fF4KdYjG*9l3d7>ZhvPw?M z7Wl(h0>w)fcB z#MO8)*kRhDm<0OjB>r%nU7^)e>E6<~^_XZJZB1jo_JkmzoJ8mH-HaTSn&ycSi)@lG zdH|Cp7TXZ4<}a%lBxtJuU=bHCYjyv zqbr<6v53Udsq&qj@?S>^SSU-KSUOUiS}aBd0AuMwaYhB8!dVoHLVTYGuvQkk!Z}r( zQL$(Pm@3Y?SX?X4z&Ld1P=0>?!Gj0EY}vba@18w-fEi%604+o!QA9+<#*G^T0|S@o zQ~G~DHlQN5ZK0Z*=p7=0N$my;8cQHzD)=@d?8?dLOLt3+Az+APPqxs}GDMp%#*kPGN_OEddp*(8Tnt28g3nuZ~X%wcguY zUK=F5eiA9n=qUAz3JIUeiXC%b>E}MhOI4Y1tS?){E+^|(1Pf%LD7)H)#0dVGBv3?^ z1V-d{K{jJF8WkKSltTR@cp_8zsqLm;OrZ-Va9jq>L{WR06%K#-4<@XJM)0)Cp?W1u b_R!h2ivHgdY2LvTBR||0lu*!URK&jliu`sY literal 0 HcmV?d00001 diff --git a/assets/jp/template/TEMPLATE_SIREN_MeowfficerBust_Studying.gif b/assets/jp/template/TEMPLATE_SIREN_MeowfficerBust_Studying.gif new file mode 100644 index 0000000000000000000000000000000000000000..12e50c71ba6f6345cf807544286169fc047c824c GIT binary patch literal 2154 zcmZ?wbhEHb6krfwXlG!!ef##UTeq%VyLRQul}nc{ojZ5#?Afzt&YU@Y`t+$&r%s$W zarEfXBS(%LK79D#!GnAE?%la_=hm%TH*Vaxe*OA&>(;Gay?Vup70Z?_TeN7={Q2|e z&6_uO?%X+Z=FFZwd)BO3GiJ<~Hf`GE$&)8dnly3Z#0e87^!NAo_4W1i^mKQ3cXf4j zc6N4jbhNd#H8(dmH8nLhHa0Xg)YsS7)z#J3*4EV2R99D5RaI41R#sG0l$V#6m6es0 zloS^i7Znv178Vv16y)dU=jG+)=H}+)CW*rKF@JCnqN*B_$>% zCL|=p$H<#l^B)#M@L6RMMXwNMnpt}goFeJ1_lHK`1||&`T6+9&~XlZF_YHBJeDM?F9i-?FYjDkTN0*e2+{aizWogD*Qjr0td8UO!hQ2fclp$K%c z4#?S{Y{J0tpMl$;z+uBdCRR=nhaVpvv2*ZqvPf7c7&f(Xi8#&B2x@9(=MiEPxX`f3 ztzXVM=EH=Gj?Qeta(X=+PR1uDD4N)(SO})K^9d?;Tv=jyb#WP|~3bLJ@EMZvp1hgW3AT zG-DPyO#GPAIYBpj*PKk}v{O^Gl6$5EdQSEbR1KJ8<7xD?YpPOoN<)BQvs>?F^Ry2O zgqC&8kT$c*VYt}Dc1yx+Qcaz2Jx{w3p5%Sl0% zuniM#7(6^U`IXls30}!h%5Gdd92^`B0tyP4A=G~3#tmQ@a`oy}U@>y}@?~H#0xUy- z1<0{u#~`K0p+kp&1<3B*yLar^v1Q8^V7ak!<;vyDmoHtqbjgw>z|v#Ef(5|R1G(s! zK7Bf{^q4wz>Xa!{fCUJo^uR1ST3TAriVm#hMrmm&F-1p4Mh2wxNKH*8vH%GU4Gj(s z4hjl_6eEx_#M|2&xfpSCbAyy5@M6T;+8S7lz{?O*Q&V6uVr*<|XlMv2Nq}XDf`Wpa zoSd+*@F31WqfP^b0I-A*){*cCXl!Z}a`~dr=;+YM!ow$F(V*bi#HmoUW5b4rj*Se= z91c4kFdktS(k`pG;LzyY$|mUd!@w!!gn*QtN6d^5%MdU$TwJ_@Us~L1LZ@*O zdoRC3m)GA$rlT?z#(EhA6O~t8k+bf)aC1|t+Z;8;pf?kC9d4Jf3|%0ya^a)Xvs5js zepm=SJv&=H{K>H$7Z0^d8pNGiQF!_3$tn6?o7QAJQt=ef$-dDsQ^=J|RM+v?3I|2y z_LowoMGsDVWZ{{t=^mGGBjC_cF0mbvA2uvvZI===jN8+&(D~#LJ uC>RzkIXP83bcu>%&@<02LCISigd!)i@k*Oz9cVcybf~e3fq{vM!5RSI3o3vB literal 0 HcmV?d00001 diff --git a/assets/tw/template/TEMPLATE_SIREN_MeowfficerBust_Playtime.gif b/assets/tw/template/TEMPLATE_SIREN_MeowfficerBust_Playtime.gif new file mode 100644 index 0000000000000000000000000000000000000000..a73bf4c5e9056e336763dccb140cec69d6809775 GIT binary patch literal 4316 zcmeI#=}%K@0>|<0E!`+fp<=~TC|Hnd5SeQo$c&V&ERqU{RnQc~C5TuUM=LJra%jtH zDT|1pZQ&{?YDG{`)E+iLP+LVLidv93By%UznV1asmGhV;gj`1_nU}*o|H1R*JfD1j z@dcbLY=xYHe+8X=yQ;Oh%*8U@$Z_HJv+muD-s$wzjsWrbegJRaRD3R8*9g zmzR~5m6n!jwOX}WT~bm4!>~%FQYw`Sg+eZupE`Bw~kQ&M8n)1sq9 zv0>{%vFOjAQJi0JBn~)z$d?=V@=Q>q&!`Qsqj0X28MIaY$!xYD7ygvj2dh$%D0X&8AhdHy`?5JnpI`;z$j2MN8#tLo9 zpRo@zco9FE&4th$tWWUg>mancYIQiBA+bu(mEL|nkWOS2;HVqm1-rozwPRgo<7PyU zQH+v&WzZ&@b)Dy$mzm>NC>+d zjptwblUJQ6j8y3r(9`lj#3ACy?tbDPDF^!csx-ipj~_qI&CPxI@L_g#7TEIk?OR~W z>({RVEMJrIKX`KQ-o2%yEP4Vk0g_z5e*J4qfFyvCix)38H#Y-J8XFsdCuh%|b$X)L z>#M7)fhtv1RZdu(s%SKtU#S8}Ieq#xAm!MxV@Ho3bz*Y(@L{JX0F&I@T&E{uv3UFT z?P+OgiHV8v@$p}NrQg0~a07sf_2aDm+_E}eiV}6)Vn(nyJS1+ghne<3IX1QnYZAulI{j7AL@MwlHDEZE;?C9b za#{zKL|J$E)=u0Q)7#fi*kGR>p^@of{yQ*m9N8loHZ(90OjQ8aC#)T9$|a!LvI@Dw zuF|nRe1(o|B$`OK;HfgVDMdM#g{g7L3aOGZsJ!Cll}Azkm1c-SqVIx1{(^e0-}smP!H217rti z4iFqpBRV=dKy$RWw_m<|d1-S1CN5mK;FRM0`SVUJ8X6ja7a&3E>gs-_#+fr`mcsF^ z76EW9=E(8m$DKI>DrEou{XmVJoE(Wn0_*@4l97?IZQC}`B3rg>Nls2)2CrtB9uZ)X zG_4ivrPK$fsqK7+Aqq>t6WDD!qq=6zF0*h`Q49`4q5z&!(|? z637BmYnZ_n{_H@47cVM?D}tcma{P+0Ec0e$=nVCb9a%fF4KdYjG*9l3d7>ZhvPw?M z7Wl(h0>w)fcB z#MO8)*kRhDm<0OjB>r%nU7^)e>E6<~^_XZJZB1jo_JkmzoJ8mH-HaTSn&ycSi)@lG zdH|Cp7TXZ4<}a%lBxtJuU=bHCYjyv zqbr<6v53Udsq&qj@?S>^SSU-KSUOUiS}aBd0AuMwaYhB8!dVoHLVTYGuvQkk!Z}r( zQL$(Pm@3Y?SX?X4z&Ld1P=0>?!Gj0EY}vba@18w-fEi%604+o!QA9+<#*G^T0|S@o zQ~G~DHlQN5ZK0Z*=p7=0N$my;8cQHzD)=@d?8?dLOLt3+Az+APPqxs}GDMp%#*kPGN_OEddp*(8Tnt28g3nuZ~X%wcguY zUK=F5eiA9n=qUAz3JIUeiXC%b>E}MhOI4Y1tS?){E+^|(1Pf%LD7)H)#0dVGBv3?^ z1V-d{K{jJF8WkKSltTR@cp_8zsqLm;OrZ-Va9jq>L{WR06%K#-4<@XJM)0)Cp?W1u b_R!h2ivHgdY2LvTBR||0lu*!URK&jliu`sY literal 0 HcmV?d00001 diff --git a/assets/tw/template/TEMPLATE_SIREN_MeowfficerBust_Studying.gif b/assets/tw/template/TEMPLATE_SIREN_MeowfficerBust_Studying.gif new file mode 100644 index 0000000000000000000000000000000000000000..12e50c71ba6f6345cf807544286169fc047c824c GIT binary patch literal 2154 zcmZ?wbhEHb6krfwXlG!!ef##UTeq%VyLRQul}nc{ojZ5#?Afzt&YU@Y`t+$&r%s$W zarEfXBS(%LK79D#!GnAE?%la_=hm%TH*Vaxe*OA&>(;Gay?Vup70Z?_TeN7={Q2|e z&6_uO?%X+Z=FFZwd)BO3GiJ<~Hf`GE$&)8dnly3Z#0e87^!NAo_4W1i^mKQ3cXf4j zc6N4jbhNd#H8(dmH8nLhHa0Xg)YsS7)z#J3*4EV2R99D5RaI41R#sG0l$V#6m6es0 zloS^i7Znv178Vv16y)dU=jG+)=H}+)CW*rKF@JCnqN*B_$>% zCL|=p$H<#l^B)#M@L6RMMXwNMnpt}goFeJ1_lHK`1||&`T6+9&~XlZF_YHBJeDM?F9i-?FYjDkTN0*e2+{aizWogD*Qjr0td8UO!hQ2fclp$K%c z4#?S{Y{J0tpMl$;z+uBdCRR=nhaVpvv2*ZqvPf7c7&f(Xi8#&B2x@9(=MiEPxX`f3 ztzXVM=EH=Gj?Qeta(X=+PR1uDD4N)(SO})K^9d?;Tv=jyb#WP|~3bLJ@EMZvp1hgW3AT zG-DPyO#GPAIYBpj*PKk}v{O^Gl6$5EdQSEbR1KJ8<7xD?YpPOoN<)BQvs>?F^Ry2O zgqC&8kT$c*VYt}Dc1yx+Qcaz2Jx{w3p5%Sl0% zuniM#7(6^U`IXls30}!h%5Gdd92^`B0tyP4A=G~3#tmQ@a`oy}U@>y}@?~H#0xUy- z1<0{u#~`K0p+kp&1<3B*yLar^v1Q8^V7ak!<;vyDmoHtqbjgw>z|v#Ef(5|R1G(s! zK7Bf{^q4wz>Xa!{fCUJo^uR1ST3TAriVm#hMrmm&F-1p4Mh2wxNKH*8vH%GU4Gj(s z4hjl_6eEx_#M|2&xfpSCbAyy5@M6T;+8S7lz{?O*Q&V6uVr*<|XlMv2Nq}XDf`Wpa zoSd+*@F31WqfP^b0I-A*){*cCXl!Z}a`~dr=;+YM!ow$F(V*bi#HmoUW5b4rj*Se= z91c4kFdktS(k`pG;LzyY$|mUd!@w!!gn*QtN6d^5%MdU$TwJ_@Us~L1LZ@*O zdoRC3m)GA$rlT?z#(EhA6O~t8k+bf)aC1|t+Z;8;pf?kC9d4Jf3|%0ya^a)Xvs5js zepm=SJv&=H{K>H$7Z0^d8pNGiQF!_3$tn6?o7QAJQt=ef$-dDsQ^=J|RM+v?3I|2y z_LowoMGsDVWZ{{t=^mGGBjC_cF0mbvA2uvvZI===jN8+&(D~#LJ uC>RzkIXP83bcu>%&@<02LCISigd!)i@k*Oz9cVcybf~e3fq{vM!5RSI3o3vB literal 0 HcmV?d00001 diff --git a/campaign/event_20260625_cn/ht1.py b/campaign/event_20260625_cn/ht1.py new file mode 100644 index 000000000..e74fa4caa --- /dev/null +++ b/campaign/event_20260625_cn/ht1.py @@ -0,0 +1,79 @@ +from module.campaign.campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger + +MAP = CampaignMap('HT1') +MAP.shape = 'I7' +MAP.camera_data = ['F2', 'F5'] +MAP.camera_data_spawn_point = ['D5'] +MAP.map_data = """ + -- -- ME -- ME -- -- ++ MB + -- -- ++ ME -- ME ++ ME -- + SP -- -- MS -- -- Me -- -- + -- -- __ -- ++ -- -- -- ME + SP -- -- MS ++ Me -- ++ ++ + -- -- -- -- -- -- -- ++ ++ + ++ ++ ++ Me -- ME -- ME -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 2}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1}, + {'battle': 5, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['MeowfficerBust_Studying', 'MeowfficerBust_Playtime'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + MAP_CHAPTER_SWITCH_20241219_SP = True + STAGE_ENTRANCE = ['half', '20240725'] + MAP_HAS_MODE_SWITCH = True + MAP_SWIPE_MULTIPLY = (1.144, 1.165) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.106, 1.126) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.074, 1.093) + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/event_20260625_cn/ht2.py b/campaign/event_20260625_cn/ht2.py new file mode 100644 index 000000000..f3133d748 --- /dev/null +++ b/campaign/event_20260625_cn/ht2.py @@ -0,0 +1,86 @@ +from module.campaign.campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .ht1 import Config as ConfigBase + +MAP = CampaignMap('HT2') +MAP.shape = 'I7' +MAP.camera_data = ['D2', 'D5', 'F5'] +MAP.camera_data_spawn_point = ['F2'] +MAP.map_data = """ + ME -- ME ++ ME -- -- ++ ++ + -- -- -- -- -- -- SP -- ++ + -- Me ++ ++ ++ -- -- SP -- + -- -- -- Me -- MS -- -- -- + ME -- ME ++ -- MS MS ++ Me + -- MB -- ++ __ -- -- ++ -- + ME -- ME -- -- ME -- Me -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 2}, + {'battle': 1, 'enemy': 2, 'siren': 1}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1}, + {'battle': 5}, + {'battle': 6, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['MeowfficerBust_Studying', 'MeowfficerBust_Playtime'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (1.224, 1.247) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.184, 1.206) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.149, 1.170) + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): + return True + + return self.battle_default() + + def battle_5(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_6(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/event_20260625_cn/ht3.py b/campaign/event_20260625_cn/ht3.py new file mode 100644 index 000000000..eec5d0294 --- /dev/null +++ b/campaign/event_20260625_cn/ht3.py @@ -0,0 +1,89 @@ +from module.campaign.campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .ht1 import Config as ConfigBase + +MAP = CampaignMap('HT3') +MAP.shape = 'I8' +MAP.camera_data = ['D2', 'D5', 'F2', 'F5'] +MAP.camera_data_spawn_point = ['F5'] +MAP.map_data = """ + ++ ++ ++ ++ MB ++ ++ ++ ++ + ++ -- Me Me -- Me Me -- ++ + -- ME -- -- __ -- -- ME -- + ME -- -- SP ++ SP -- -- ME + -- ME -- -- -- -- -- ME -- + ++ ++ ME -- MS -- ME ++ ++ + ++ ++ -- MS -- MS -- ++ ++ + -- -- ++ ++ ++ ++ ++ -- -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 2}, + {'battle': 1, 'enemy': 2, 'siren': 1}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1}, + {'battle': 5}, + {'battle': 6, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['MeowfficerBust_Studying', 'MeowfficerBust_Playtime'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (1.115, 1.136) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.078, 1.098) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.047, 1.065) + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): + return True + + return self.battle_default() + + def battle_5(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_6(self): + return self.fleet_boss.clear_boss() diff --git a/module/template/assets.py b/module/template/assets.py index c24692c7e..2082ebe53 100644 --- a/module/template/assets.py +++ b/module/template/assets.py @@ -177,6 +177,8 @@ TEMPLATE_SIREN_MarieRoseDOA = Template(file={'cn': './assets/cn/template/TEMPLAT TEMPLATE_SIREN_MaryCeleste = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_MaryCeleste.gif', 'en': './assets/en/template/TEMPLATE_SIREN_MaryCeleste.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_MaryCeleste.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_MaryCeleste.gif'}) TEMPLATE_SIREN_Maya = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Maya.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Maya.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Maya.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Maya.gif'}) TEMPLATE_SIREN_MeowfficerBust_Hobbies = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_MeowfficerBust_Hobbies.gif', 'en': './assets/en/template/TEMPLATE_SIREN_MeowfficerBust_Hobbies.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_MeowfficerBust_Hobbies.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_MeowfficerBust_Hobbies.gif'}) +TEMPLATE_SIREN_MeowfficerBust_Playtime = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_MeowfficerBust_Playtime.gif', 'en': './assets/en/template/TEMPLATE_SIREN_MeowfficerBust_Playtime.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_MeowfficerBust_Playtime.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_MeowfficerBust_Playtime.gif'}) +TEMPLATE_SIREN_MeowfficerBust_Studying = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_MeowfficerBust_Studying.gif', 'en': './assets/en/template/TEMPLATE_SIREN_MeowfficerBust_Studying.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_MeowfficerBust_Studying.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_MeowfficerBust_Studying.gif'}) TEMPLATE_SIREN_Mikasa = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Mikasa.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Mikasa.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Mikasa.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Mikasa.gif'}) TEMPLATE_SIREN_MisakiDOA = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_MisakiDOA.gif', 'en': './assets/en/template/TEMPLATE_SIREN_MisakiDOA.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_MisakiDOA.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_MisakiDOA.gif'}) TEMPLATE_SIREN_Miyuki = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Miyuki.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Miyuki.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Miyuki.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Miyuki.gif'})