From 5a278f995abbd4e1a0a47f673a9c1246c1187afd Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 13 Aug 2026 19:48:08 +0800 Subject: [PATCH] Add: chapter BD --- .../TEMPLATE_SIREN_BonhommeRichard_BB.gif | Bin 0 -> 2205 bytes .../TEMPLATE_SIREN_BonhommeRichard_CV.gif | Bin 0 -> 3276 bytes .../TEMPLATE_SIREN_BonhommeRichard_BB.gif | Bin 0 -> 2205 bytes .../TEMPLATE_SIREN_BonhommeRichard_CV.gif | Bin 0 -> 3276 bytes .../TEMPLATE_SIREN_BonhommeRichard_BB.gif | Bin 0 -> 2205 bytes .../TEMPLATE_SIREN_BonhommeRichard_CV.gif | Bin 0 -> 3276 bytes .../TEMPLATE_SIREN_BonhommeRichard_BB.gif | Bin 0 -> 2205 bytes .../TEMPLATE_SIREN_BonhommeRichard_CV.gif | Bin 0 -> 3276 bytes campaign/event_20260813_cn/b1.py | 94 ++++++++++++++++++ campaign/event_20260813_cn/b2.py | 76 ++++++++++++++ campaign/event_20260813_cn/b3.py | 79 +++++++++++++++ campaign/event_20260813_cn/d1.py | 94 ++++++++++++++++++ campaign/event_20260813_cn/d2.py | 85 ++++++++++++++++ campaign/event_20260813_cn/d3.py | 88 ++++++++++++++++ dev_tools/map_extractor.py | 5 + module/template/assets.py | 2 + 16 files changed, 523 insertions(+) create mode 100644 assets/cn/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif create mode 100644 campaign/event_20260813_cn/b1.py create mode 100644 campaign/event_20260813_cn/b2.py create mode 100644 campaign/event_20260813_cn/b3.py create mode 100644 campaign/event_20260813_cn/d1.py create mode 100644 campaign/event_20260813_cn/d2.py create mode 100644 campaign/event_20260813_cn/d3.py diff --git a/assets/cn/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif b/assets/cn/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif new file mode 100644 index 0000000000000000000000000000000000000000..05d155559295e7e43c240ee75645e0f8604d2f65 GIT binary patch literal 2205 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 AtN;K2 literal 0 HcmV?d00001 diff --git a/assets/en/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif b/assets/en/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif new file mode 100644 index 0000000000000000000000000000000000000000..05d155559295e7e43c240ee75645e0f8604d2f65 GIT binary patch literal 2205 zcmeIz|4-6+90%}^fr)8F_$4fl6c91L3w}2P1wlha^iYOvqD_ZH9xnkxIXdbavX5|lBCiiY`?sj*(pWE(Uf5CIl?fG~yA|nC< z(^1f2NCH7dqj6_v=j+$6+uPfpKY!lb+}zmM`1tYT`uh6X+S=Q>}92gi- zC=~tu{kL!5zIE%CTrThJ?Ul)7-QC??U0od=9XD>=Xm4+CYinz5ZIw!;EiElgO-;46 zwKX+0)z#Hvu~;M$35CL|SFcu7R9v}orL3&1w6yf{<;#~YT`DXrEGQ_rc=2L>etuqF zUT$t~PEO8+3m3Apv$L|YGBYy;0s)`T&&bF~PfzFZcxh>ADJdyjE;l(jIWaLYAt50? zK0Yokj?HGr#>U3P#6(9&vskRCsHn)uNG6j>r_*UPT3A>Zg+e)f`t+$&r$RzPf`Wnq z0|NsB0{s2`{rvoVeSOJfvX76Cx3{;KmzSrfr-z4!ySuxao13ev>&cTRi9{lSKyY$$ z!sGE+EY`un0fWKV+uI*Ib`1LezJmrFjTSNVg!phOo9^S`1v4=kA;&E^!VyGs`xfup zOdy02D($}JgR82=p&^JD*N3?2E6|W1v2in)(28-bL20sIxZitHyR|~7wD!q<4qv9? zSvEv#YYs2Y?6)e%$R(u`5~&Y*rVc^1(A1O}8OJtEDMgjyqsd+5yZg*y51S$!R7lP~ zTHVnTODyUDQBTuDwfbJk$!b;%YB(qD173gqWIZ^ z#+#wX$;zn`Ggdn>vQ@?%uDQ$iKTcp9IC_hA98;nB>63o=6%3Ad^Ctanj>2W>wbEY* zhwLB14tU9m=`1NOL6={9A9on-(`f1d-S4sFItfdCU#>Rj< z0G*+spf#bKuk$V2~eiExVWgO2v`G@0mJ}b{t=h+=g*%zckb-jvp|{D)YLs_l9G}DG#n0R zPZ>bWnKNhhlwmL!5fKppn(**&U=5W@1>A&&h5~DXgM$G#f3b!{BK-?DE-o%W9A{@| z0L`v4Xf)c^))s|AA(6=MU~d1#2tbcYr9)T-3~qB260A!Fk2}fPtA^wcSk_Hf26%&W z(8DUb*foWV6+w**EZER;R|rvuz=L2@92o~sm?f!ncSK>oA~3m{Z7sy3)L?~C8iQjM z41VN?26l0;)2tN&hLIybz^eCSut?Si4(*YRU-`}ePex%Nt$fk)vVE@~N%4HGjEiF; z-~>ER6|n4luno_UO{K#g0zIRXzJXugsaN@)XHk+NFpP!ePmy?r| zot@2Mv5p@gww3>`b9h$YipUlar&PqrJU7i9{k2 ziFiET&d$!p#>U#(+S1a}#KZ)H!9YLHCvyS9_TD6VT54oOGTqCassr2Jh6wNA`UJ3` z>kmu*@FtM{Hngu}g<45N7@!PH^m#o-wp2=sU`Do z%ssBBqrS^&ub~k-ii5!r#jS2fu9r?ODq@?+LGCzwI7^u6lpau_8h!Ebnt!mLH3Y%p zQ2VTPYnb(yE~9<8945rV^O0yH=IB^p_XG2gykn4L1{ybUI#j;FB(okfg-&wSZ2B0TLM~WmRH-35WmmdY1t)z?b#)bs)=| zH*a3OdIfMz-4S~4EQoKG6G})tN>GP z+_(W)>F@9F?d=7!?3e;5X>4rNY9f(Hc0dt{L_(oZAQ15Re89?u3m49xKVMN%aqir? z^73*nmkXdNDJl66%H-ze?uO>rv13P$965aWu-2O0&}fxOOiWBjNYE-19Uc8Yf(9t# z;NSqD(JG@Q#>&bHhr^kfnVFiJ0&B2X>?iYR|G$d>Jq*jF(vC{LE&?Kt)A}Bn8U_>$ zaU!sEq%mH-`u*E{v0W&4?c1;UjCd1r!P?4L$#RWl2uH=tF3HnFyXH*EitAx=0gj>O zP&#!)%^rEiv^@etbT_qdws)@>f)TSeF(e*}5?z7%N$Ha0f2Q3B|A{rdIt^0GEccF>ranb~nesZ?s+0BC57WO#TO&~fL^ouQ$j z!NI{>w{8JIfF7Vr03bV2vQs3@&CP%jP$c#B^}87XQ352XtgHlvT)cR(tgP(p*|Q)} z03D}KpVrn%VPWBq0%bQHzzq;6yWIeF0@7rsO8^@2@$tZo*w|PQC_8lgyFdvJ4*sti z#l^+tN137pMB6B~wzi;AfF3_L%BMgTK*M`fE#<-Z2tA0bk?Yp&({m0lSW#6f;QCk- z-U~%v0w(DEhGw$sZ%J)b*6QXv1;XgJ!M~any&%$KKeu73Who8(OL}Gri)wC;;IhPn zrD`dz=Z*3$jj1YTl|2$i&6AalgXEH^UbN5SI3vO{g;;-HJm%0_g$^j`a+y zvj4l6u=dwvLw1&WrZ=_`AJIWh+^d&>@;}`zz#40mIA7&cY5ixpMiyj-5XD_&*RH>! zJWF^={7%{G&*70s8K21?m^#dMeVf_PV`v*#s8UgBJxU3_Xig?$p AtN;K2 literal 0 HcmV?d00001 diff --git a/assets/jp/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif b/assets/jp/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif new file mode 100644 index 0000000000000000000000000000000000000000..05d155559295e7e43c240ee75645e0f8604d2f65 GIT binary patch literal 2205 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 AtN;K2 literal 0 HcmV?d00001 diff --git a/assets/tw/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif b/assets/tw/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif new file mode 100644 index 0000000000000000000000000000000000000000..05d155559295e7e43c240ee75645e0f8604d2f65 GIT binary patch literal 2205 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 AtN;K2 literal 0 HcmV?d00001 diff --git a/campaign/event_20260813_cn/b1.py b/campaign/event_20260813_cn/b1.py new file mode 100644 index 000000000..36b385e4c --- /dev/null +++ b/campaign/event_20260813_cn/b1.py @@ -0,0 +1,94 @@ +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('B1') +MAP.shape = 'I7' +MAP.camera_data = ['D2', 'D5', 'F2', 'F5'] +MAP.camera_data_spawn_point = ['F2', 'D2'] +MAP.map_data = """ + ME ++ -- SP -- SP -- ++ ++ + -- -- -- -- -- -- -- ME ++ + -- ME ++ -- MS -- Me -- Me + -- -- Me MS -- MS -- -- ++ + ++ -- -- ++ __ ++ ME -- ME + ME -- Me ++ -- ++ -- ME -- + -- ++ ++ ++ MB ++ ++ ++ -- +""" +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': 2, 'siren': 1}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2, 'boss': 1}, + {'battle': 5, 'enemy': 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 = ['BonhommeRichard_BB', 'BonhommeRichard_CV'] + 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 = True + STAGE_ENTRANCE = ['half', '20240725'] + MAP_HAS_MODE_SWITCH = True + STAGE_INCREASE_AB = True + MAP_SIREN_HAS_BOSS_ICON_SMALL = True + MAP_WALK_USE_CURRENT_FLEET = True + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 17), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 17, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + MAP_SWIPE_MULTIPLY = (1.136, 1.158) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.099, 1.119) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.067, 1.086) + + +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_4(self): + return self.clear_boss() diff --git a/campaign/event_20260813_cn/b2.py b/campaign/event_20260813_cn/b2.py new file mode 100644 index 000000000..f8df2cecb --- /dev/null +++ b/campaign/event_20260813_cn/b2.py @@ -0,0 +1,76 @@ +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 .b1 import Config as ConfigBase + +MAP = CampaignMap('B2') +MAP.shape = 'J8' +MAP.camera_data = ['D3', 'D6', 'G2', 'G5'] +MAP.camera_data_spawn_point = ['D3'] +MAP.map_data = """ + ++ ++ ++ -- Me ++ Me ++ ME -- + ++ -- SP -- -- -- -- -- -- ME + ++ SP -- -- MS ++ ++ ++ -- -- + ME -- -- MS -- Me -- ME -- ME + ME -- MS -- __ -- -- -- ME ++ + ++ -- ++ Me Me ++ ++ -- -- -- + -- -- ++ -- -- ++ ++ ME -- -- + MB -- 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 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 1}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2}, + {'battle': 5, 'enemy': 1, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['BonhommeRichard_BB', 'BonhommeRichard_CV'] + 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 ===== + + +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_20260813_cn/b3.py b/campaign/event_20260813_cn/b3.py new file mode 100644 index 000000000..5dcf4157f --- /dev/null +++ b/campaign/event_20260813_cn/b3.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 +from .b1 import Config as ConfigBase + +MAP = CampaignMap('B3') +MAP.shape = 'I9' +MAP.camera_data = ['D4', 'D6', 'F4', 'F6'] +MAP.camera_data_spawn_point = ['D4'] +MAP.map_data = """ + ++ ++ ++ -- ++ -- ++ ++ ++ + -- ++ -- ++ ++ ++ -- ++ -- + -- ME -- -- ++ -- -- ME -- + ME -- -- SP -- SP -- -- ME + -- Me -- -- __ -- -- Me -- + -- -- Me -- MS -- Me -- ++ + -- ME -- MS -- MS -- ME ++ + ++ ++ ME -- MB -- 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 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 2}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2}, + {'battle': 5, 'enemy': 1, '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, \ +A9, B9, C9, D9, E9, F9, G9, H9, I9, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['BonhommeRichard_BB', 'BonhommeRichard_CV'] + 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 ===== + + +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_20260813_cn/d1.py b/campaign/event_20260813_cn/d1.py new file mode 100644 index 000000000..6439e8fe1 --- /dev/null +++ b/campaign/event_20260813_cn/d1.py @@ -0,0 +1,94 @@ +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('D1') +MAP.shape = 'I7' +MAP.camera_data = ['D2', 'D5', 'F2', 'F5'] +MAP.camera_data_spawn_point = ['F2', 'D2'] +MAP.map_data = """ + ME ++ -- SP -- SP -- ++ ++ + -- -- -- -- -- -- -- ME ++ + -- ME ++ -- MS -- Me -- Me + -- -- Me MS -- MS -- -- ++ + ++ -- -- ++ __ ++ ME -- ME + ME -- Me ++ -- ++ -- ME -- + -- ++ ++ ++ MB ++ ++ ++ -- +""" +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': 2, 'siren': 2}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2}, + {'battle': 5, 'enemy': 1, '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 = ['BonhommeRichard_BB', 'BonhommeRichard_CV'] + 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 = True + STAGE_ENTRANCE = ['half', '20240725'] + MAP_HAS_MODE_SWITCH = True + STAGE_INCREASE_AB = True + MAP_SIREN_HAS_BOSS_ICON_SMALL = True + MAP_WALK_USE_CURRENT_FLEET = True + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 17), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 17, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + MAP_SWIPE_MULTIPLY = (1.136, 1.158) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.099, 1.119) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.067, 1.086) + + +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_20260813_cn/d2.py b/campaign/event_20260813_cn/d2.py new file mode 100644 index 000000000..18c58eda7 --- /dev/null +++ b/campaign/event_20260813_cn/d2.py @@ -0,0 +1,85 @@ +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 .d1 import Config as ConfigBase + +MAP = CampaignMap('D2') +MAP.shape = 'J8' +MAP.camera_data = ['D3', 'D6', 'G2', 'G5'] +MAP.camera_data_spawn_point = ['D3'] +MAP.map_data = """ + ++ ++ ++ -- Me ++ Me ++ ME -- + ++ -- SP -- -- -- -- -- -- ME + ++ SP -- -- MS ++ ++ ++ -- -- + ME -- -- MS -- Me -- ME -- ME + ME -- MS -- __ -- -- -- ME ++ + ++ -- ++ Me Me ++ ++ -- -- -- + -- -- ++ -- -- ++ ++ ME -- -- + MB -- 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 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 2}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2, 'siren': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2}, + {'battle': 5, 'enemy': 1}, + {'battle': 6, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['BonhommeRichard_BB', 'BonhommeRichard_CV'] + 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 ===== + + +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_20260813_cn/d3.py b/campaign/event_20260813_cn/d3.py new file mode 100644 index 000000000..8cbb15e20 --- /dev/null +++ b/campaign/event_20260813_cn/d3.py @@ -0,0 +1,88 @@ +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 .d1 import Config as ConfigBase + +MAP = CampaignMap('D3') +MAP.shape = 'I9' +MAP.camera_data = ['D4', 'D6', 'F4', 'F6'] +MAP.camera_data_spawn_point = ['D4'] +MAP.map_data = """ + ++ ++ ++ -- ++ -- ++ ++ ++ + -- ++ -- ++ ++ ++ -- ++ -- + -- ME -- -- ++ -- -- ME -- + ME -- -- SP -- SP -- -- ME + -- Me -- -- __ -- -- Me -- + ++ -- Me -- MS -- Me -- ++ + ++ ME -- MS -- MS -- ME ++ + ++ ++ ME -- MB -- 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 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 2}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2, 'siren': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2}, + {'battle': 5, 'enemy': 1}, + {'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, \ +A9, B9, C9, D9, E9, F9, G9, H9, I9, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['BonhommeRichard_BB', 'BonhommeRichard_CV'] + 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 ===== + + +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/dev_tools/map_extractor.py b/dev_tools/map_extractor.py index 28b2825bf..f15911b76 100644 --- a/dev_tools/map_extractor.py +++ b/dev_tools/map_extractor.py @@ -332,6 +332,11 @@ DIC_SIREN_NAME_CHI_TO_ENG = { 'youeryuan_boss03': 'MeowfficerBust_Playtime', 'youeryuan_boss04': 'MeowfficerBust_Hobbies', 'youeryuan_boss05': 'MeowfficerBust_Studying', + + # Depths of the Astrarium + 'haorenlichade_m_zhanlie': 'BonhommeRichard_BB', + 'haorenlichade_m_hangmu': 'BonhommeRichard_CV', + 'haorenlichade_m_qianting': 'BonhommeRichard_SS', } diff --git a/module/template/assets.py b/module/template/assets.py index 2082ebe53..a2beba43d 100644 --- a/module/template/assets.py +++ b/module/template/assets.py @@ -70,6 +70,8 @@ TEMPLATE_SIREN_Bellona = Template(file={'cn': './assets/cn/template/TEMPLATE_SIR TEMPLATE_SIREN_BlackDragonBoss01 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BlackDragonBoss01.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BlackDragonBoss01.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BlackDragonBoss01.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BlackDragonBoss01.gif'}) TEMPLATE_SIREN_BlackDragonBoss02 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BlackDragonBoss02.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BlackDragonBoss02.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BlackDragonBoss02.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BlackDragonBoss02.gif'}) TEMPLATE_SIREN_BolzanoAlter = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BolzanoAlter.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BolzanoAlter.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BolzanoAlter.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BolzanoAlter.gif'}) +TEMPLATE_SIREN_BonhommeRichard_BB = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif'}) +TEMPLATE_SIREN_BonhommeRichard_CV = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif'}) TEMPLATE_SIREN_Bremerton = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Bremerton.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Bremerton.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Bremerton.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Bremerton.gif'}) TEMPLATE_SIREN_CA = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CA.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CA.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CA.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CA.gif'}) TEMPLATE_SIREN_CAalchemist = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CAalchemist.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CAalchemist.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CAalchemist.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CAalchemist.gif'})