From 21c92d95e34c0e5642a94c81dc73ae343e29f20b Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Wed, 3 Dec 2025 20:21:59 +0800 Subject: [PATCH 01/24] Opt: reset opsi fleet view when homo_loca stuck in OSFleet.question_goto() --- module/os/fleet.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/module/os/fleet.py b/module/os/fleet.py index b4ed2fe63..dbcf194fb 100644 --- a/module/os/fleet.py +++ b/module/os/fleet.py @@ -287,7 +287,7 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh): result = set() # Record story history to clear click record clicked_story = False - + stuck_timer = Timer(20, count=5).start() confirm_timer.reset() while 1: if skip_first_screenshot: @@ -299,6 +299,7 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh): event = self.handle_map_event(drop=drop) if event: confirm_timer.reset() + stuck_timer.reset() result.add('event') if event == 'story_skip': clicked_story = True @@ -314,6 +315,7 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh): continue if self.handle_retirement(): confirm_timer.reset() + stuck_timer.reset() continue if self.handle_walk_out_of_step(): if walk_out_of_step: @@ -323,27 +325,33 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh): if self.handle_popup_confirm('WALK_UNTIL_STABLE'): # Confirm to submit items, in siren scanning devices confirm_timer.reset() + stuck_timer.reset() continue # Accident click if self.is_in_globe(): self.os_globe_goto_map() confirm_timer.reset() + stuck_timer.reset() continue if self.is_in_storage(): self.storage_quit() confirm_timer.reset() + stuck_timer.reset() continue if self.is_in_os_mission(): self.os_mission_quit() confirm_timer.reset() + stuck_timer.reset() continue if self.handle_os_game_tips(): confirm_timer.reset() + stuck_timer.reset() continue if self.is_in_map_order(): self.order_quit() confirm_timer.reset() + stuck_timer.reset() continue # Combat @@ -352,6 +360,7 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh): # self.ui_back(check_button=self.is_in_map) self.combat(expected_end=self.is_in_map, fleet_index=self.fleet_show_index, save_get_items=drop) confirm_timer.reset() + stuck_timer.reset() result.add('event') continue @@ -360,18 +369,21 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh): self.interval_clear(PORT_SUPPLY_CHECK) self.handle_akashi_supply_buy(CLICK_SAFE_AREA) confirm_timer.reset() + stuck_timer.reset() result.add('akashi') continue # A game bug that AUTO_SEARCH_REWARD from the last cleared zone popups if self.appear_then_click(AUTO_SEARCH_REWARD, offset=(50, 50), interval=3): confirm_timer.reset() + stuck_timer.reset() continue # Enemy searching if not enemy_searching_appear and self.enemy_searching_appear(): enemy_searching_appear = True confirm_timer.reset() + stuck_timer.reset() continue else: if enemy_searching_appear: @@ -380,6 +392,7 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh): logger.info('Enemy searching appeared.') enemy_searching_appear = False confirm_timer.reset() + stuck_timer.reset() result.add('search') if self.is_in_map(): self.enemy_searching_color_initial() @@ -396,16 +409,26 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh): if confirm_timer.reached(): break else: + if stuck_timer.reached(): + logger.warning(f"homo_loca stuck at current view, try reset.") + self.fleet_reset_view() + stuck_timer.reset() confirm_timer.reset() record = current else: confirm_timer.reset() + stuck_timer.reset() result = '_'.join(result) logger.info(f'Walk stabled, result: {result}') self.device.screenshot_interval_set() return result + def fleet_reset_view(self): + current_fleet = self.fleet_selector.get() + self.fleet_selector.open() + self.fleet_selector.click(current_fleet) + def port_goto(self, allow_port_arrive=True): """ A simple and poor implement to goto port. Searching port on radar. From 5bde6242f95ba05d1f93afc7260d0450c11bed13 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Wed, 3 Dec 2025 20:26:39 +0800 Subject: [PATCH 02/24] Opt: reset opsi fleet view when cannot find current fleet in current view in OSFleet.question_goto() --- module/os/fleet.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/module/os/fleet.py b/module/os/fleet.py index dbcf194fb..f63e8f729 100644 --- a/module/os/fleet.py +++ b/module/os/fleet.py @@ -592,6 +592,12 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh): self.predict() self.predict_radar() + fleets = self.view.select(is_current_fleet=True) + if fleets.count == 0: + logger.warning('Current fleet not found on local view, reset camera view to current fleet.') + self.fleet_reset_view() + self.wait_until_camera_stable() + continue # Calculate destination grids = self.radar.select(is_question=True) if grids: From fda137f62b7464b099be49048f039c737c7689f2 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Tue, 9 Dec 2025 12:19:50 +0800 Subject: [PATCH 03/24] Upd: [JP] asset POPUP_CONFIRM_WHITE_BATTLEPASS (#5365) --- .../ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png | Bin 0 -> 8267 bytes module/freebies/battle_pass.py | 2 +- module/ui_white/assets.py | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 assets/jp/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png diff --git a/assets/jp/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png b/assets/jp/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png new file mode 100644 index 0000000000000000000000000000000000000000..2e770d6afbab3baa124cc900ac2d2a54e7ea4b44 GIT binary patch literal 8267 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 aeq$8Sp?+}M@n}yK1DfLohqG$}cK;hPCgP6( literal 0 HcmV?d00001 diff --git a/module/freebies/battle_pass.py b/module/freebies/battle_pass.py index 75dadff99..fc8035eae 100644 --- a/module/freebies/battle_pass.py +++ b/module/freebies/battle_pass.py @@ -83,7 +83,7 @@ class BattlePass(Combat, UI): if self.handle_battle_pass_popup(): confirm_timer.reset() continue - if self.config.SERVER == 'cn': + if self.config.SERVER in ['cn', 'jp']: if self.appear_then_click(POPUP_CONFIRM_WHITE_BATTLEPASS, offset=(20, 20), interval=3): confirm_timer.reset() continue diff --git a/module/ui_white/assets.py b/module/ui_white/assets.py index 5f0a38895..4b151af11 100644 --- a/module/ui_white/assets.py +++ b/module/ui_white/assets.py @@ -26,7 +26,7 @@ MAIN_TAB_SWITCH_WHITE = Button(area={'cn': (966, 548, 999, 582), 'en': (966, 548 MISSION_NOTICE_WHITE = Button(area={'cn': (923, 657, 947, 671), 'en': (923, 657, 947, 671), 'jp': (923, 657, 947, 671), 'tw': (923, 657, 947, 671)}, color={'cn': (227, 168, 159), 'en': (227, 168, 159), 'jp': (227, 168, 159), 'tw': (227, 168, 159)}, button={'cn': (923, 657, 947, 671), 'en': (923, 657, 947, 671), 'jp': (923, 657, 947, 671), 'tw': (923, 657, 947, 671)}, file={'cn': './assets/cn/ui_white/MISSION_NOTICE_WHITE.png', 'en': './assets/en/ui_white/MISSION_NOTICE_WHITE.png', 'jp': './assets/jp/ui_white/MISSION_NOTICE_WHITE.png', 'tw': './assets/tw/ui_white/MISSION_NOTICE_WHITE.png'}) POPUP_CANCEL_WHITE = Button(area={'cn': (487, 491, 531, 513), 'en': (471, 492, 547, 513), 'jp': (481, 490, 534, 516), 'tw': (487, 491, 531, 513)}, color={'cn': (214, 214, 214), 'en': (205, 206, 205), 'jp': (202, 203, 202), 'tw': (214, 214, 214)}, button={'cn': (487, 491, 531, 513), 'en': (471, 492, 547, 513), 'jp': (481, 490, 534, 516), 'tw': (487, 491, 531, 513)}, file={'cn': './assets/cn/ui_white/POPUP_CANCEL_WHITE.png', 'en': './assets/en/ui_white/POPUP_CANCEL_WHITE.png', 'jp': './assets/jp/ui_white/POPUP_CANCEL_WHITE.png', 'tw': './assets/cn/ui_white/POPUP_CANCEL_WHITE.png'}) POPUP_CONFIRM_WHITE = Button(area={'cn': (746, 494, 791, 515), 'en': (727, 495, 810, 515), 'jp': (743, 491, 796, 518), 'tw': (744, 491, 794, 518)}, color={'cn': (133, 216, 255), 'en': (107, 207, 255), 'jp': (109, 207, 255), 'tw': (111, 207, 249)}, button={'cn': (746, 494, 791, 515), 'en': (727, 495, 810, 515), 'jp': (743, 491, 796, 518), 'tw': (744, 491, 794, 518)}, file={'cn': './assets/cn/ui_white/POPUP_CONFIRM_WHITE.png', 'en': './assets/en/ui_white/POPUP_CONFIRM_WHITE.png', 'jp': './assets/jp/ui_white/POPUP_CONFIRM_WHITE.png', 'tw': './assets/tw/ui_white/POPUP_CONFIRM_WHITE.png'}) -POPUP_CONFIRM_WHITE_BATTLEPASS = Button(area={'cn': (744, 490, 795, 513), 'en': (744, 490, 795, 513), 'jp': (744, 490, 795, 513), 'tw': (744, 490, 795, 513)}, color={'cn': (119, 211, 255), 'en': (119, 211, 255), 'jp': (119, 211, 255), 'tw': (119, 211, 255)}, button={'cn': (744, 490, 795, 513), 'en': (744, 490, 795, 513), 'jp': (744, 490, 795, 513), 'tw': (744, 490, 795, 513)}, file={'cn': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png', 'en': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png', 'jp': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png', 'tw': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png'}) +POPUP_CONFIRM_WHITE_BATTLEPASS = Button(area={'cn': (744, 490, 795, 513), 'en': (744, 490, 795, 513), 'jp': (739, 488, 800, 515), 'tw': (744, 490, 795, 513)}, color={'cn': (119, 211, 255), 'en': (119, 211, 255), 'jp': (103, 206, 255), 'tw': (119, 211, 255)}, button={'cn': (744, 490, 795, 513), 'en': (744, 490, 795, 513), 'jp': (739, 488, 800, 515), 'tw': (744, 490, 795, 513)}, file={'cn': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png', 'en': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png', 'jp': './assets/jp/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png', 'tw': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png'}) POPUP_SINGLE_WHITE = Button(area={'cn': (623, 493, 668, 515), 'en': (623, 493, 668, 515), 'jp': (623, 493, 668, 515), 'tw': (623, 493, 668, 515)}, color={'cn': (131, 215, 255), 'en': (131, 215, 255), 'jp': (131, 215, 255), 'tw': (131, 215, 255)}, button={'cn': (623, 493, 668, 515), 'en': (623, 493, 668, 515), 'jp': (623, 493, 668, 515), 'tw': (623, 493, 668, 515)}, file={'cn': './assets/cn/ui_white/POPUP_SINGLE_WHITE.png', 'en': './assets/cn/ui_white/POPUP_SINGLE_WHITE.png', 'jp': './assets/cn/ui_white/POPUP_SINGLE_WHITE.png', 'tw': './assets/cn/ui_white/POPUP_SINGLE_WHITE.png'}) REWARD_1_WHITE = Button(area={'cn': (437, 278, 496, 306), 'en': (411, 283, 523, 300), 'jp': (442, 279, 491, 305), 'tw': (441, 280, 490, 306)}, color={'cn': (255, 193, 97), 'en': (255, 212, 150), 'jp': (255, 195, 101), 'tw': (255, 199, 111)}, button={'cn': (437, 278, 496, 306), 'en': (411, 283, 523, 300), 'jp': (442, 279, 491, 305), 'tw': (441, 280, 490, 306)}, file={'cn': './assets/cn/ui_white/REWARD_1_WHITE.png', 'en': './assets/en/ui_white/REWARD_1_WHITE.png', 'jp': './assets/jp/ui_white/REWARD_1_WHITE.png', 'tw': './assets/tw/ui_white/REWARD_1_WHITE.png'}) REWARD_2_WHITE = Button(area={'cn': (436, 419, 497, 448), 'en': (411, 425, 523, 442), 'jp': (442, 421, 492, 446), 'tw': (439, 422, 490, 448)}, color={'cn': (255, 192, 94), 'en': (255, 212, 146), 'jp': (255, 196, 103), 'tw': (255, 198, 109)}, button={'cn': (436, 419, 497, 448), 'en': (411, 425, 523, 442), 'jp': (442, 421, 492, 446), 'tw': (439, 422, 490, 448)}, file={'cn': './assets/cn/ui_white/REWARD_2_WHITE.png', 'en': './assets/en/ui_white/REWARD_2_WHITE.png', 'jp': './assets/jp/ui_white/REWARD_2_WHITE.png', 'tw': './assets/tw/ui_white/REWARD_2_WHITE.png'}) From f52789fbad00d4f5686c424f83c653ab2abe9787 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Tue, 9 Dec 2025 12:24:23 +0800 Subject: [PATCH 04/24] Refactor: LuaLoader._load_file() (#5374) --- dev_tools/utils.py | 61 ++++++++++------------------------------------ 1 file changed, 13 insertions(+), 48 deletions(-) diff --git a/dev_tools/utils.py b/dev_tools/utils.py index ce6e8f6d1..e85e9682a 100644 --- a/dev_tools/utils.py +++ b/dev_tools/utils.py @@ -45,7 +45,7 @@ class LuaLoader: def filepath(self, path): return os.path.join(self.folder, self.server, path) - def _load_file(self, file): + def _load_file(self, file, keyword=None): """ Args: file (str): @@ -57,56 +57,21 @@ class LuaLoader: text = f.read() result = {} - matched = re.findall('function \(\)(.*?)end[()]', text, re.S) - if matched: - # Most files are in this format - """ - pg = pg or {} - slot0 = pg - slot0.chapter_template = {} - - (function () - ... - end)() - """ - for func in matched: - add = slpp.decode('{' + func + '}') - result.update(add) - elif text.startswith('pg'): - # Old format - """ - pg = pg or {} - pg.item_data_statistics = { - ... - } - """ - # or - """ - pg = pg or {} - - rawset(pg, "item_data_statistics", rawget(pg, "item_data_statistics") or { - ... - } - """ - text = '{' + text.split('{', 2)[2] - result = slpp.decode(text) - else: - # Another format, just bare data - """ - _G.pg.expedition_data_template[...] = { - ... - } - _G.pg.expedition_data_template[...] = { - ... - } - ... - """ + if text.startswith('_G'): text = '{' + text + '}' result = slpp.decode(text) - + else: + if keyword: + print(f'Finding keyword: {keyword}') + pattern = rf"^{re.escape(keyword)}.*?\{{\s*\n(.*?)^\}}" + else: + pattern = r"\{\s*\n(.*?)^\}" + m = re.search(pattern, text, re.S | re.M) + if m: + result = slpp.decode('{' + m.group(1) + '}') return result - def load(self, path): + def load(self, path, keyword=None): """ Load a lua file to python dictionary, handling the differences @@ -123,7 +88,7 @@ class LuaLoader: for file in tqdm(os.listdir(self.filepath(path))): result.update(self._load_file(f'./{path}/{file}')) else: - result = self._load_file(path) + result = self._load_file(path, keyword=keyword) print(f'{len(result.keys())} items loaded') return result From 1297908d8924fee9b93ff172a0e7e15c898c75f5 Mon Sep 17 00:00:00 2001 From: MikuSoft <37649564+ruoruoniao@users.noreply.github.com> Date: Tue, 9 Dec 2025 12:24:33 +0800 Subject: [PATCH 05/24] Add:[CN] assets combat ui ShadowPuppetry (#5377) --- assets/cn/combat_ui/PAUSE_ShadowPuppetry.png | Bin 0 -> 6286 bytes module/combat/combat.py | 2 ++ module/combat_ui/assets.py | 1 + module/exercise/hp_daemon.py | 1 + 4 files changed, 4 insertions(+) create mode 100644 assets/cn/combat_ui/PAUSE_ShadowPuppetry.png diff --git a/assets/cn/combat_ui/PAUSE_ShadowPuppetry.png b/assets/cn/combat_ui/PAUSE_ShadowPuppetry.png new file mode 100644 index 0000000000000000000000000000000000000000..a4e4b9efbc88b8e9464964f678e8c018d643c439 GIT binary patch literal 6286 zcmeH~`)^WL9Kdh2TCEdImd3@o(l}GhY>SrIr$U`N?Xs3-&UM7LIu|a{mC}j`tx(9S zQR7l)j7386E-{NSI-3;3!ooc?YwP5$DA8T6{Djqi# zX=4T2=jJw-?%*@!mfmfzK5|}MBX9RH1VJ^qzF}h5Z~G42D&O*5)sBnE98$O2#j~9A zxO%!Qu@Wk8WBLR@(Q&bDd1e66cP%T*$g``Z8L_SySe6!b*MU`;->?4f%HOdDV#ZK_ z-atwwNd`2f<;09OiZ4bQu#UT2qBvyrYg?R7$lGk0ne`8fLu`LAc&g7)LBgJpM(sN8 zr7WsCH-Z?^KPs_qY~C|U_506Hs=cV4i# zjgi<e>L5;@@ zC5;;23q%!&n9;@k48OvI`Vp50nXjaxrR#v4v{?sgB|Y0AQAAY@&%*FslUcvWPWXh{ znqu#Zxnl&%4fBIC6?_O7sJ5uhBLB^ZA^xvLQxeg_WQhq5*Px{)vrbD+gw00eG+zwb z12w_|fcx=`nlt!~^DsFZGvA-aUKrt#4T;v(QnJ9;(aD!M`YP|Fd?!{+50%h|j=kn= z&Q5%$w!r1QYjM!7z$(eaLQ9O@bOw8m;J9n*EcX|DtIEv>Sy-L_eb7sPHc8sC%sPx#bL+XX~WoC*(iFFJb#NqjD0E7 zRloci1p9ake@BB6mx9&8Zjnuv2JV_p&Zi#08!xLI27TaFZe3>8^FEoQ#8DCG<^w^EyEyESep^$qWbC2KQNmYY2W&!gH4SJG3Gj-J1%A8f2N3uMHhL+o`7V;ebsf zYif+EKHq<7-lE(K!VB~6^g_$clpwG zYVT~DY(0-HxQ5w7#lBD(f!BpRl0lK6fYLh+!<};ZRXJ%?7@c~e=MZu-L0QB#ILzbY zE|M<(N~uc4olQ4JYE46MyGD`hsU#K-z*hxs#U)J@P)3c#?;XiFMN0Axr~V@Is@h`F zryeNgr}&WdkQIg>*%o8-P|C<;Fj{Gg;|ZG53el9DT1!+oz>*`=Y`4 Date: Tue, 9 Dec 2025 12:28:43 +0800 Subject: [PATCH 06/24] Fix: fleet_selector.get() might return 0 --- module/os/fleet.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/module/os/fleet.py b/module/os/fleet.py index f63e8f729..03e61a8fd 100644 --- a/module/os/fleet.py +++ b/module/os/fleet.py @@ -411,8 +411,8 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh): else: if stuck_timer.reached(): logger.warning(f"homo_loca stuck at current view, try reset.") - self.fleet_reset_view() - stuck_timer.reset() + if self.fleet_reset_view(): + stuck_timer.reset() confirm_timer.reset() record = current else: @@ -425,9 +425,17 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh): return result def fleet_reset_view(self): + """ + Returns: + bool: If reset + """ current_fleet = self.fleet_selector.get() + if not current_fleet: + logger.warning('Failed to get OpSi fleet') + return False self.fleet_selector.open() self.fleet_selector.click(current_fleet) + return True def port_goto(self, allow_port_arrive=True): """ @@ -595,9 +603,9 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh): fleets = self.view.select(is_current_fleet=True) if fleets.count == 0: logger.warning('Current fleet not found on local view, reset camera view to current fleet.') - self.fleet_reset_view() - self.wait_until_camera_stable() - continue + if self.fleet_reset_view(): + self.wait_until_camera_stable() + continue # Calculate destination grids = self.radar.select(is_question=True) if grids: From fbb936f081bb4bbd5177a5d5addc757b5572cfea Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Tue, 9 Dec 2025 12:39:28 +0800 Subject: [PATCH 07/24] Del: Remove ship equipment change as lack of maintenance --- config/template.json | 1 - module/campaign/gems_farming.py | 52 ++-------------------------- module/config/argument/args.json | 11 +----- module/config/argument/argument.yaml | 5 +-- module/config/argument/menu.json | 2 +- module/config/argument/task.yaml | 13 ++++--- module/config/config_generated.py | 3 +- module/config/i18n/en-US.json | 9 +---- module/config/i18n/ja-JP.json | 9 +---- module/config/i18n/zh-CN.json | 9 +---- module/config/i18n/zh-TW.json | 9 +---- 11 files changed, 17 insertions(+), 106 deletions(-) diff --git a/config/template.json b/config/template.json index 0ad93e028..801cd2333 100644 --- a/config/template.json +++ b/config/template.json @@ -309,7 +309,6 @@ "ServerUpdate": "00:00" }, "GemsFarming": { - "ChangeFlagship": "ship", "CommonCV": "any", "ChangeVanguard": "ship", "CommonDD": "any", diff --git a/module/campaign/gems_farming.py b/module/campaign/gems_farming.py index e1d0098ea..a3a11dce2 100644 --- a/module/campaign/gems_farming.py +++ b/module/campaign/gems_farming.py @@ -79,22 +79,10 @@ class GemsFarming(CampaignRun, FleetEquipment, Dock): self.campaign.config.override(Emotion_Mode='ignore') self.campaign.config.override(EnemyPriority_EnemyScaleBalanceWeight='S1_enemy_first') - @property - def change_flagship(self): - return 'ship' in self.config.GemsFarming_ChangeFlagship - - @property - def change_flagship_equip(self): - return 'equip' in self.config.GemsFarming_ChangeFlagship - @property def change_vanguard(self): return 'ship' in self.config.GemsFarming_ChangeVanguard - @property - def change_vanguard_equip(self): - return 'equip' in self.config.GemsFarming_ChangeVanguard - @property def fleet_to_attack(self): if self.config.Fleet_FleetOrder == 'fleet1_standby_fleet2_all': @@ -110,31 +98,12 @@ class GemsFarming(CampaignRun, FleetEquipment, Dock): Returns: bool: True if flagship changed. """ - - if self.config.GemsFarming_CommonCV == 'any': - index_list = range(3, 5) - else: - index_list = range(0, 5) logger.hr('Change flagship', level=1) - logger.attr('ChangeFlagship', self.config.GemsFarming_ChangeFlagship) self.fleet_enter(self.fleet_to_attack) - if self.change_flagship_equip: - logger.hr('Record flagship equipment', level=2) - self.fleet_enter_ship(FLEET_DETAIL_ENTER_FLAGSHIP) - self.ship_equipment_record_image(index_list=index_list) - self.ship_equipment_take_off() - self.fleet_back() logger.hr('Change flagship', level=2) success = self.flagship_change_execute() - if self.change_flagship_equip: - logger.hr('Equip flagship equipment', level=2) - self.fleet_enter_ship(FLEET_DETAIL_ENTER_FLAGSHIP) - self.ship_equipment_take_off() - self.ship_equipment_take_on_image(index_list=index_list) - self.fleet_back() - return success def vanguard_change(self): @@ -148,23 +117,10 @@ class GemsFarming(CampaignRun, FleetEquipment, Dock): logger.hr('Change vanguard', level=1) logger.attr('ChangeVanguard', self.config.GemsFarming_ChangeVanguard) self.fleet_enter(self.fleet_to_attack) - if self.change_vanguard_equip: - logger.hr('Record vanguard equipment', level=2) - self.fleet_enter_ship(FLEET_DETAIL_ENTER) - self.ship_equipment_record_image() - self.ship_equipment_take_off() - self.fleet_back() logger.hr('Change vanguard', level=2) success = self.vanguard_change_execute() - if self.change_vanguard_equip: - logger.hr('Equip vanguard equipment', level=2) - self.fleet_enter_ship(FLEET_DETAIL_ENTER) - self.ship_equipment_take_off() - self.ship_equipment_take_on_image() - self.fleet_back() - return success def _dock_reset(self): @@ -391,7 +347,7 @@ class GemsFarming(CampaignRun, FleetEquipment, Dock): def triggered_stop_condition(self, oil_check=True): # Lv32 limit - if self.change_flagship and self.campaign.config.LV32_TRIGGERED: + if self.campaign.config.LV32_TRIGGERED: self._trigger_lv32 = True logger.hr('TRIGGERED LV32 LIMIT') return True @@ -411,7 +367,7 @@ class GemsFarming(CampaignRun, FleetEquipment, Dock): mode (str): `normal` or `hard` total (int): """ - self.config.STOP_IF_REACH_LV32 = self.change_flagship + self.config.override(STOP_IF_REACH_LV32=True) while 1: self._trigger_lv32 = False @@ -427,9 +383,7 @@ class GemsFarming(CampaignRun, FleetEquipment, Dock): # End if self._trigger_lv32 or self._trigger_emotion: - success = True - if self.change_flagship: - success = self.flagship_change() + success = self.flagship_change() if self.change_vanguard: success = success and self.vanguard_change() diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 8cdedbf74..6f51599d8 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -1590,14 +1590,6 @@ } }, "GemsFarming": { - "ChangeFlagship": { - "type": "select", - "value": "ship", - "option": [ - "ship", - "ship_equip" - ] - }, "CommonCV": { "type": "select", "value": "any", @@ -1614,8 +1606,7 @@ "value": "ship", "option": [ "disabled", - "ship", - "ship_equip" + "ship" ] }, "CommonDD": { diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 61514799a..7e17ccd29 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -265,15 +265,12 @@ C124LargeLeveling: value: 3 option: [ 3, 4, 5 ] GemsFarming: - ChangeFlagship: - value: ship - option: [ ship, ship_equip ] CommonCV: value: any option: [ any, langley, bogue, ranger, hermes ] ChangeVanguard: value: ship - option: [ disabled, ship, ship_equip ] + option: [ disabled, ship ] CommonDD: value: any option: [ any, favourite, aulick_or_foote , cassin_or_downes, z20_or_z21 ] diff --git a/module/config/argument/menu.json b/module/config/argument/menu.json index 4b5823b75..abdfe9c9b 100644 --- a/module/config/argument/menu.json +++ b/module/config/argument/menu.json @@ -23,11 +23,11 @@ "page": "setting", "tasks": [ "EventGeneral", - "Coalition", "Event", "Event2", "Raid", "Hospital", + "Coalition", "MaritimeEscort", "WarArchives" ] diff --git a/module/config/argument/task.yaml b/module/config/argument/task.yaml index 2ebbb67a5..c6f20bb00 100644 --- a/module/config/argument/task.yaml +++ b/module/config/argument/task.yaml @@ -71,12 +71,6 @@ Event: EventGeneral: - EventGeneral - TaskBalancer - Coalition: - - Scheduler - - Campaign - - Coalition - - StopCondition - - Emotion Event: - Scheduler - Campaign @@ -106,7 +100,12 @@ Event: - Hospital - StopCondition - Emotion - + Coalition: + - Scheduler + - Campaign + - Coalition + - StopCondition + - Emotion MaritimeEscort: - Scheduler - MaritimeEscort diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 0c93cb63f..fecd84a36 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -148,9 +148,8 @@ class GeneratedConfig: C124LargeLeveling_PickupAmmo = 3 # 3, 4, 5 # Group `GemsFarming` - GemsFarming_ChangeFlagship = 'ship' # ship, ship_equip GemsFarming_CommonCV = 'any' # any, langley, bogue, ranger, hermes - GemsFarming_ChangeVanguard = 'ship' # disabled, ship, ship_equip + GemsFarming_ChangeVanguard = 'ship' # disabled, ship GemsFarming_CommonDD = 'any' # any, favourite, aulick_or_foote, cassin_or_downes, z20_or_z21 GemsFarming_CommissionLimit = True diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 5fbb8ab08..847c50e06 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -1180,12 +1180,6 @@ "name": "Commission Farming Settings", "help": "Warning: This task allows players to get a small amount of gems, but not an efficient way to farm.\nPlayers who have recently started Azur Lane are easily superstitious about 0LB and low oil consumption, while being ignorant about character leveling.\nRunning this function will only make you feel fulfilled however in reality your account will not actually progress very much.\nThe main purpose of this task is to get extra cubes for players with a formed lineup. Please rationally treat gems as a by-product.\n\nFleet 1 is expected to consist of 1 0LB CV/CVL and 1 0LB Vanguard, Fleet 2 is expected to consist of support ships such as New Jersey or Shinano to provide external battle assistance.\nFor information about the drop mechanism/rate of urgent commissions, you can refer to (in Chinese Simplified)" }, - "ChangeFlagship": { - "name": "Change Flagship", - "help": "Change flagship if flagship level >= 32 or either flagship or vanguard are emotion exhausted. If you choose not to change, your fleet will ignore the low emotion warning and continue combat.\nSwitch out to new common CV/CVL whose level is in range of 1 to 31, after current has reached level 32+. Meanwhile, abandoned flagships will be retired. Any common CV/CVL whose level is 2+ will be regarded as targets. Do confirm that your own ships which is not a target has been locked\n\nThe flagship's equipment is replaced when being switched out by first recording the current setup\nOnly populated equipment slots will be replaced. If the CV/CVL preference has been configured, all 5 slots will be populated otherwise only the auxiliary slots will be populated.", - "ship": "Change Ship", - "ship_equip": "Change Ship + Gears" - }, "CommonCV": { "name": "Flagship Common CV/CVL Preference", "help": "", @@ -1199,8 +1193,7 @@ "name": "Change Vanguard", "help": "Change vanguard if flagship or vanguard are emotion exhausted. If you choose not to change, your fleet will ignore the low emotion warning and continue combat.\nSwitch out to new level 100(70) common vanguard from eagle or ironblood after current flagship has reached level 32+ (Only CN players'0 limit break ship can reach level 100)\n\nThe vanguard's equipment is replaced when being switched out by first recording the current setup. Only populated equipment slots will be replaced.", "disabled": "Don't Change", - "ship": "Change Ship", - "ship_equip": "Change Ship + Gears" + "ship": "Change Ship" }, "CommonDD": { "name": "Flagship Common DD Preference", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 08f563362..604b90644 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -1180,12 +1180,6 @@ "name": "GemsFarming._info.name", "help": "GemsFarming._info.help" }, - "ChangeFlagship": { - "name": "GemsFarming.ChangeFlagship.name", - "help": "GemsFarming.ChangeFlagship.help", - "ship": "ship", - "ship_equip": "ship_equip" - }, "CommonCV": { "name": "GemsFarming.CommonCV.name", "help": "GemsFarming.CommonCV.help", @@ -1199,8 +1193,7 @@ "name": "GemsFarming.ChangeVanguard.name", "help": "GemsFarming.ChangeVanguard.help", "disabled": "disabled", - "ship": "ship", - "ship_equip": "ship_equip" + "ship": "ship" }, "CommonDD": { "name": "GemsFarming.CommonDD.name", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 413e9091b..399021004 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -1180,12 +1180,6 @@ "name": "刷紧急委托", "help": "警告: 这个功能可以让玩家获取少量的钻石,但不是一个能高效获取钻石的方法\n玩碧蓝航线不久的玩家, 很容易迷信零破和低耗等, 而忽视了角色养成\n运行这个功能只会让你自己感觉很充实, 而你的帐号实际零提升\n这个功能的主要用途,是让阵容成型的玩家获取额外的魔方,请理性地把钻石当作副产物\n\n这个功能将在旗舰32级之后更换旗舰\n关于紧急委托刷新机制, 可阅读 https://bbs.nga.cn/read.php?tid=27134956\n委托油耗比: A3 > A1 > 2-4 > 2-1, 有活动图时建议选活动图, 2-1会拣问号有更多物资\n一队会完成所有的战斗, 前排应当为百级零破驱逐带输出装, 后排应该为33级及以下白皮零破航母\n二队应提供跨队支援(跨队弹幕、跨队辅助)" }, - "ChangeFlagship": { - "name": "更换旗舰", - "help": "当旗舰等级>=32或红脸时更换旗舰\n寻找等级在1-31之间的白皮航母,同时会在退役时选择更换下来的旗舰。所有等级大于1级的白皮航母均会被视为退役目标,请务必锁定不是目标的船。换船时更换旗舰装备,这通过记录之前的装备完成。\n\n换装备只会更换正在装备中的栏位,即使是白装也会更换。如果指定了旗舰,则会更换全部5个装备,未指定旗舰只会更换设备。", - "ship": "更换舰船", - "ship_equip": "更换舰船 + 装备" - }, "CommonCV": { "name": "指定旗舰航母", "help": "", @@ -1199,8 +1193,7 @@ "name": "更换前排", "help": "当前排红脸时更换前排,选择不更换则会强制红脸出击\n换前排通过找一艘心情不低于10、等级100的白鹰或铁血的白皮驱逐完成,所以尽量保证有足够多的驱逐。国服以外则为等级70的白鹰白船驱逐。\n\n换装备只会更换正在装备中的栏位,即使是白装也会更换。前排会更换全部5个装备。", "disabled": "不更换", - "ship": "更换舰船", - "ship_equip": "更换舰船 + 装备" + "ship": "更换舰船" }, "CommonDD": { "name": "指定前排", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index b5406e96c..ea98dfc75 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -1180,12 +1180,6 @@ "name": "刷緊急委託", "help": "警告:這個功能可以讓玩家獲取少量的鑽石,但不是一個能高效獲取鑽石的方法\n玩碧藍航線不久的玩家,很容易迷信零破和低耗等,而忽視了角色養成\n執行這個功能只會讓你自己感覺很充實,而你的帳號實際零提升\n這個功能的主要用途,是讓陣容成型的玩家獲取額外的魔方,請理性地把鑽石當作副產物\n\n這個功能將在旗艦32級之後更換旗艦\n關於緊急委託刷新機制,可閱讀 https://bbs.nga.cn/read.php?tid=27134956\n委託油耗比: A3 > A1 > 2-4 > 2-1,有活動圖時建議選活動圖,2-1會撿問號有更多物資\n一隊會完成所有的戰鬥,前排應當為百級零破驅逐帶輸出裝,後排應該為33級及以下白船零破航母\n二隊應提供跨隊支援(跨隊彈幕、跨隊輔助)" }, - "ChangeFlagship": { - "name": "更換旗艦", - "help": "當旗艦等級>=32或紅臉時更換旗艦\n尋找等級在1-31之間的白皮航母,同時會在退役時選擇更換下來的旗艦。所有等級大於1級的白船航母均會被視為退役目標,請務必鎖定不是目標的船。換船時更換旗艦裝備,這通過記錄之前的裝備完成。\n\n換裝備只會更換正在裝備中的欄位,即使是白裝也會更換。如果指定了旗艦,則會更換全部5個裝備,未指定旗艦隻會更換設備。", - "ship": "更換艦船", - "ship_equip": "更換艦船 + 裝備" - }, "CommonCV": { "name": "指定旗艦航母", "help": "", @@ -1199,8 +1193,7 @@ "name": "更換前排", "help": "當前排紅臉時更換前排,選擇不更換則會強制紅臉出擊\n換前排通過找一艘心情不低於10、等級70的白鷹或鐵血的白船驅逐完成,所以盡量保證有足夠多的驅逐。國服則為等級100的白鷹白船驅逐。\n\n換裝備只會更換正在裝備中的欄位,即使是白裝也會更換。前排會更換全部5個裝備。", "disabled": "不更换", - "ship": "更換艦船", - "ship_equip": "更換艦船 + 裝備" + "ship": "更換艦船" }, "CommonDD": { "name": "指定前排", From 32d36cd06df2c13e0c63b86862e0b4a83da87829 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Tue, 9 Dec 2025 12:40:52 +0800 Subject: [PATCH 08/24] Fix: No submarine in hard campaign if team not prepared --- module/map/map_fleet_preparation.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/module/map/map_fleet_preparation.py b/module/map/map_fleet_preparation.py index 1dd7efafb..f10ec8124 100644 --- a/module/map/map_fleet_preparation.py +++ b/module/map/map_fleet_preparation.py @@ -354,6 +354,8 @@ class FleetPreparation(InfoHandler): pass else: submarine.clear() + else: + self.config.SUBMARINE = 0 return False # Submarine. From 9261630f7762370269c2f986f50d66bd82a1a6fc Mon Sep 17 00:00:00 2001 From: whjhs1010203 Date: Fri, 12 Dec 2025 19:22:49 +0800 Subject: [PATCH 09/24] Upd:[tw] research E (#5382) Co-authored-by: whjhs1010203 <26708256+whjhs1010203@users.noreply.github.com> --- .../DISASSEMBLE_POPUP_CONFIRM.BUTTON.png | Bin 0 -> 11745 bytes assets/tw/storage/EQUIPMENT_ENTER.BUTTON.png | Bin 0 -> 16811 bytes assets/tw/storage/EQUIPMENT_ENTER.png | Bin 0 -> 7147 bytes assets/tw/storage/EQUIPMENT_FILTER.BUTTON.png | Bin 0 -> 11470 bytes assets/tw/storage/EQUIPMENT_FILTER.png | Bin 0 -> 5619 bytes .../storage/EQUIPMENT_FILTER_CONFIRM.BUTTON.png | Bin 0 -> 12880 bytes assets/tw/storage/EQUIPMENT_FILTER_CONFIRM.png | Bin 0 -> 8647 bytes assets/tw/ui/STORAGE_CHECK.png | Bin 0 -> 7985 bytes module/research/selector.py | 2 +- module/storage/assets.py | 8 ++++---- module/ui/assets.py | 2 +- 11 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 assets/tw/storage/DISASSEMBLE_POPUP_CONFIRM.BUTTON.png create mode 100644 assets/tw/storage/EQUIPMENT_ENTER.BUTTON.png create mode 100644 assets/tw/storage/EQUIPMENT_ENTER.png create mode 100644 assets/tw/storage/EQUIPMENT_FILTER.BUTTON.png create mode 100644 assets/tw/storage/EQUIPMENT_FILTER.png create mode 100644 assets/tw/storage/EQUIPMENT_FILTER_CONFIRM.BUTTON.png create mode 100644 assets/tw/storage/EQUIPMENT_FILTER_CONFIRM.png create mode 100644 assets/tw/ui/STORAGE_CHECK.png diff --git a/assets/tw/storage/DISASSEMBLE_POPUP_CONFIRM.BUTTON.png b/assets/tw/storage/DISASSEMBLE_POPUP_CONFIRM.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..a8e6f9c9059e470ac8fc306757e42cd438887a81 GIT binary patch literal 11745 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 literal 0 HcmV?d00001 diff --git a/assets/tw/storage/EQUIPMENT_ENTER.BUTTON.png b/assets/tw/storage/EQUIPMENT_ENTER.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..222ab6ecd99d073d72379b2b6077b92d2271350f GIT binary patch literal 16811 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 LzVyF;^Zow;V7xNz literal 0 HcmV?d00001 diff --git a/assets/tw/storage/EQUIPMENT_ENTER.png b/assets/tw/storage/EQUIPMENT_ENTER.png new file mode 100644 index 0000000000000000000000000000000000000000..28a6cb89f8cdfe5ec4514bffcd1752eb1862ecf6 GIT binary patch literal 7147 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 bwL6&hC;zosJAZ6@(H?GIaOQXa_@Dm+IP%p` literal 0 HcmV?d00001 diff --git a/assets/tw/storage/EQUIPMENT_FILTER.png b/assets/tw/storage/EQUIPMENT_FILTER.png new file mode 100644 index 0000000000000000000000000000000000000000..75f0a6bbc06a66f6824e7a0f75cdb01e69e96518 GIT binary patch literal 5619 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 D)^_93 literal 0 HcmV?d00001 diff --git a/assets/tw/storage/EQUIPMENT_FILTER_CONFIRM.png b/assets/tw/storage/EQUIPMENT_FILTER_CONFIRM.png new file mode 100644 index 0000000000000000000000000000000000000000..9e5c0bea99b8a56c5512ce54f6edfd4b5bcd9a1a GIT binary patch literal 8647 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 J3V!R4{{<*kY32X` literal 0 HcmV?d00001 diff --git a/assets/tw/ui/STORAGE_CHECK.png b/assets/tw/ui/STORAGE_CHECK.png new file mode 100644 index 0000000000000000000000000000000000000000..3de1b81618dc59c2507e1e40c989525686549c84 GIT binary patch literal 7985 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 Date: Fri, 12 Dec 2025 19:23:05 +0800 Subject: [PATCH 10/24] Upd:[TW]event 20251023 update (#5383) Co-authored-by: whjhs1010203 <26708256+whjhs1010203@users.noreply.github.com> --- campaign/Readme.md | 1 + module/config/argument/args.json | 80 ++++++++++++++++---------------- module/config/i18n/zh-TW.json | 2 +- 3 files changed, 42 insertions(+), 41 deletions(-) diff --git a/campaign/Readme.md b/campaign/Readme.md index 9a245e21d..e4777b28d 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -270,3 +270,4 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20251121 | event 20220428 cn | Rondo at Rainbow's End | - | - | - | 復刻虹彩的終幕曲 | | 20251120 | coalition 20251120 | DATE A LANE | DATE A LANE | DATE A LANE | DATE A LANE | - | | 20251127 | coalition 20251120 | DATE A LANE | - | - | - | DATE A LANE | +| 20251211 | event 20251023 cn | Tempesta and Islas de Libertád | - | - | - | 颶風與自由群島 | diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 6f51599d8..d04dc7414 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -1634,8 +1634,8 @@ "type": "select", "value": "campaign_main", "option": [ - "event_20220428_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20251023_cn" ], "display": "hide", "option_cn": [ @@ -1648,11 +1648,11 @@ "event_20230914_cn" ], "option_tw": [ - "event_20220428_cn" + "event_20251023_cn" ], "option_bold": [ - "event_20220428_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20251023_cn" ] }, "Mode": { @@ -1915,8 +1915,8 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20220428_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20251023_cn" ], "option_cn": [ "event_20230914_cn" @@ -1928,11 +1928,11 @@ "event_20230914_cn" ], "option_tw": [ - "event_20220428_cn" + "event_20251023_cn" ], "option_bold": [ - "event_20220428_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20251023_cn" ] }, "Mode": { @@ -2310,8 +2310,8 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20220428_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20251023_cn" ], "option_cn": [ "event_20230914_cn" @@ -2323,11 +2323,11 @@ "event_20230914_cn" ], "option_tw": [ - "event_20220428_cn" + "event_20251023_cn" ], "option_bold": [ - "event_20220428_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20251023_cn" ] }, "Mode": { @@ -4031,8 +4031,8 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20220428_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20251023_cn" ], "option_cn": [ "event_20230914_cn" @@ -4044,11 +4044,11 @@ "event_20230914_cn" ], "option_tw": [ - "event_20220428_cn" + "event_20251023_cn" ], "option_bold": [ - "event_20220428_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20251023_cn" ] }, "Mode": { @@ -4443,8 +4443,8 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20220428_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20251023_cn" ], "option_cn": [ "event_20230914_cn" @@ -4456,11 +4456,11 @@ "event_20230914_cn" ], "option_tw": [ - "event_20220428_cn" + "event_20251023_cn" ], "option_bold": [ - "event_20220428_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20251023_cn" ] }, "Mode": { @@ -4855,8 +4855,8 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20220428_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20251023_cn" ], "option_cn": [ "event_20230914_cn" @@ -4868,11 +4868,11 @@ "event_20230914_cn" ], "option_tw": [ - "event_20220428_cn" + "event_20251023_cn" ], "option_bold": [ - "event_20220428_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20251023_cn" ] }, "Mode": { @@ -5267,8 +5267,8 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20220428_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20251023_cn" ], "option_cn": [ "event_20230914_cn" @@ -5280,11 +5280,11 @@ "event_20230914_cn" ], "option_tw": [ - "event_20220428_cn" + "event_20251023_cn" ], "option_bold": [ - "event_20220428_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20251023_cn" ] }, "Mode": { @@ -5669,8 +5669,8 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20220428_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20251023_cn" ], "option_cn": [ "event_20230914_cn" @@ -5682,11 +5682,11 @@ "event_20230914_cn" ], "option_tw": [ - "event_20220428_cn" + "event_20251023_cn" ], "option_bold": [ - "event_20220428_cn", - "event_20230914_cn" + "event_20230914_cn", + "event_20251023_cn" ] }, "Mode": { diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index ea98dfc75..a057b8ece 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -762,7 +762,7 @@ "event_20250724_cn": "鍊金術士與天際交會之塔", "event_20250814_cn": "奇淵下的秘密", "event_20250912_cn": "起舞於天原之上", - "event_20251023_cn": "Tempesta and Islas de Libertád", + "event_20251023_cn": "颶風與自由群島", "raid_20200624": "特別演習埃塞克斯級(復刻)", "raid_20210708": "復刻穿越彼方的水線", "raid_20220127": "演習神秘事件調查", From c376d36c247e9cd46cce4e749183abc1b973ee12 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Wed, 10 Dec 2025 12:16:22 +0800 Subject: [PATCH 11/24] Fix: [EN] TEMPLATE_RONDO_AT_RAINBOWS_END --- .../TEMPLATE_RONDO_AT_RAINBOWS_END.png | Bin 0 -> 5905 bytes module/os_shop/shop.py | 4 ++-- module/war_archives/assets.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 assets/en/war_archives/TEMPLATE_RONDO_AT_RAINBOWS_END.png diff --git a/assets/en/war_archives/TEMPLATE_RONDO_AT_RAINBOWS_END.png b/assets/en/war_archives/TEMPLATE_RONDO_AT_RAINBOWS_END.png new file mode 100644 index 0000000000000000000000000000000000000000..0dd72e37ab7660ed4e439cc04555250721967b24 GIT binary patch literal 5905 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 O-vox7qxoO|@BaZk Date: Fri, 12 Dec 2025 19:17:54 +0800 Subject: [PATCH 12/24] Upd: [EN] POPUP_CONFIRM_WHITE_BATTLEPASS (fixed #5381) --- .../ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png | Bin 0 -> 4251 bytes module/freebies/battle_pass.py | 2 +- module/ui_white/assets.py | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 assets/en/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png diff --git a/assets/en/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png b/assets/en/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png new file mode 100644 index 0000000000000000000000000000000000000000..488540be788166d06fc0506e307964d090fd8fc1 GIT binary patch literal 4251 zcmeIy|2Nb79{}(-w@W#d>W15f?!D;?`dkWI>^7H*QXgNhFBz`ST&;`RU4&+vbsgO6 z>pfAsVpGIQjR_6emu^Og$+tCZ!_2pALmOkpr@Fu1|KRTV%j#=M9a=q|56BN*tG7sdrLemegQ8{0C75dK$K_JSD5Nq0W- za7$x`No&Tw(;3!856!om%#|azf^KGA8C0ZwUywW&}FM1Qv8SWQ!$?PJN>ff@k#vm~gKnFP;~GM1FZ9dbef zoUrM3lpTIH1Cz5d?L+EAo8nh?PK*;A5w(ksC+8osFQb+urN+P)zKga1a44boO;$yb zT1m!~6P&?G%l<~P>TJsqnKaZ|8zIi|NGR>zqgY}lvrW5y%Vmnj`;PJ2-S!cI?Lf(1 zTKx<*{{9amYhTZ4{Bj$I;TFw{Hdnv9Ocl@2KE5&k2nRA=DSy*BT_lKY6Egjy-5J1E z4#3$)hwSeUU>ep;Fh*{?T8}w=T_h6wbj06tO=Jn}aZRQus$|t|{--xezc|OvD4W{m z-f&N51G()3)jKo)$)0O+t;Z;~aAlE&$mWJ-jp7A#RZ@SfYYo+^Acf!;g5A&fZ ziSIIB91%T2-+31t%Q^tG_gMD=9IJt<^n~Ggi;NuBxAM+(|GVMBxyt?tZc5#;qz!l@ zqMSBrI8P1|IzMm; zgwxk1M(WG2FAq1TyN5x2$nv9)uWQ>aJmRqW_Y5D z0nUBlY!*y>t_cq|*i;DXN2}S&24ELak63`3ZeQQ1h=IlD&FWQ~d*v`kE;;v8s?0&I zPHUab2j;qu@g-!JQ2bk?g$3u) z#qWyERs610oH z1%rQ9oaN9JUmIpANH$@QSWkAa9vx8aF`LyhP`i%ry$nQN8)8U&#JS*KrZLSn=ysGb zawSqtPg{0M&J6Q8p#(nrxV_EK@6tkQ+G{pJDzh}7=-W>=xQUcYU|I;%jIo~tY3+=I zXG>Gk_+#B#L<-R}!Z5_x{vW?{-K9?8UnyY!m#bd$@q%bom8R(or~fBiq} CnPmq6 literal 0 HcmV?d00001 diff --git a/module/freebies/battle_pass.py b/module/freebies/battle_pass.py index fc8035eae..48950956e 100644 --- a/module/freebies/battle_pass.py +++ b/module/freebies/battle_pass.py @@ -83,7 +83,7 @@ class BattlePass(Combat, UI): if self.handle_battle_pass_popup(): confirm_timer.reset() continue - if self.config.SERVER in ['cn', 'jp']: + if self.config.SERVER in ['cn', 'jp', 'en']: if self.appear_then_click(POPUP_CONFIRM_WHITE_BATTLEPASS, offset=(20, 20), interval=3): confirm_timer.reset() continue diff --git a/module/ui_white/assets.py b/module/ui_white/assets.py index 4b151af11..eb5681dfc 100644 --- a/module/ui_white/assets.py +++ b/module/ui_white/assets.py @@ -26,7 +26,7 @@ MAIN_TAB_SWITCH_WHITE = Button(area={'cn': (966, 548, 999, 582), 'en': (966, 548 MISSION_NOTICE_WHITE = Button(area={'cn': (923, 657, 947, 671), 'en': (923, 657, 947, 671), 'jp': (923, 657, 947, 671), 'tw': (923, 657, 947, 671)}, color={'cn': (227, 168, 159), 'en': (227, 168, 159), 'jp': (227, 168, 159), 'tw': (227, 168, 159)}, button={'cn': (923, 657, 947, 671), 'en': (923, 657, 947, 671), 'jp': (923, 657, 947, 671), 'tw': (923, 657, 947, 671)}, file={'cn': './assets/cn/ui_white/MISSION_NOTICE_WHITE.png', 'en': './assets/en/ui_white/MISSION_NOTICE_WHITE.png', 'jp': './assets/jp/ui_white/MISSION_NOTICE_WHITE.png', 'tw': './assets/tw/ui_white/MISSION_NOTICE_WHITE.png'}) POPUP_CANCEL_WHITE = Button(area={'cn': (487, 491, 531, 513), 'en': (471, 492, 547, 513), 'jp': (481, 490, 534, 516), 'tw': (487, 491, 531, 513)}, color={'cn': (214, 214, 214), 'en': (205, 206, 205), 'jp': (202, 203, 202), 'tw': (214, 214, 214)}, button={'cn': (487, 491, 531, 513), 'en': (471, 492, 547, 513), 'jp': (481, 490, 534, 516), 'tw': (487, 491, 531, 513)}, file={'cn': './assets/cn/ui_white/POPUP_CANCEL_WHITE.png', 'en': './assets/en/ui_white/POPUP_CANCEL_WHITE.png', 'jp': './assets/jp/ui_white/POPUP_CANCEL_WHITE.png', 'tw': './assets/cn/ui_white/POPUP_CANCEL_WHITE.png'}) POPUP_CONFIRM_WHITE = Button(area={'cn': (746, 494, 791, 515), 'en': (727, 495, 810, 515), 'jp': (743, 491, 796, 518), 'tw': (744, 491, 794, 518)}, color={'cn': (133, 216, 255), 'en': (107, 207, 255), 'jp': (109, 207, 255), 'tw': (111, 207, 249)}, button={'cn': (746, 494, 791, 515), 'en': (727, 495, 810, 515), 'jp': (743, 491, 796, 518), 'tw': (744, 491, 794, 518)}, file={'cn': './assets/cn/ui_white/POPUP_CONFIRM_WHITE.png', 'en': './assets/en/ui_white/POPUP_CONFIRM_WHITE.png', 'jp': './assets/jp/ui_white/POPUP_CONFIRM_WHITE.png', 'tw': './assets/tw/ui_white/POPUP_CONFIRM_WHITE.png'}) -POPUP_CONFIRM_WHITE_BATTLEPASS = Button(area={'cn': (744, 490, 795, 513), 'en': (744, 490, 795, 513), 'jp': (739, 488, 800, 515), 'tw': (744, 490, 795, 513)}, color={'cn': (119, 211, 255), 'en': (119, 211, 255), 'jp': (103, 206, 255), 'tw': (119, 211, 255)}, button={'cn': (744, 490, 795, 513), 'en': (744, 490, 795, 513), 'jp': (739, 488, 800, 515), 'tw': (744, 490, 795, 513)}, file={'cn': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png', 'en': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png', 'jp': './assets/jp/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png', 'tw': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png'}) +POPUP_CONFIRM_WHITE_BATTLEPASS = Button(area={'cn': (744, 490, 795, 513), 'en': (721, 492, 818, 510), 'jp': (739, 488, 800, 515), 'tw': (744, 490, 795, 513)}, color={'cn': (119, 211, 255), 'en': (149, 221, 255), 'jp': (103, 206, 255), 'tw': (119, 211, 255)}, button={'cn': (744, 490, 795, 513), 'en': (721, 492, 818, 510), 'jp': (739, 488, 800, 515), 'tw': (744, 490, 795, 513)}, file={'cn': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png', 'en': './assets/en/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png', 'jp': './assets/jp/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png', 'tw': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png'}) POPUP_SINGLE_WHITE = Button(area={'cn': (623, 493, 668, 515), 'en': (623, 493, 668, 515), 'jp': (623, 493, 668, 515), 'tw': (623, 493, 668, 515)}, color={'cn': (131, 215, 255), 'en': (131, 215, 255), 'jp': (131, 215, 255), 'tw': (131, 215, 255)}, button={'cn': (623, 493, 668, 515), 'en': (623, 493, 668, 515), 'jp': (623, 493, 668, 515), 'tw': (623, 493, 668, 515)}, file={'cn': './assets/cn/ui_white/POPUP_SINGLE_WHITE.png', 'en': './assets/cn/ui_white/POPUP_SINGLE_WHITE.png', 'jp': './assets/cn/ui_white/POPUP_SINGLE_WHITE.png', 'tw': './assets/cn/ui_white/POPUP_SINGLE_WHITE.png'}) REWARD_1_WHITE = Button(area={'cn': (437, 278, 496, 306), 'en': (411, 283, 523, 300), 'jp': (442, 279, 491, 305), 'tw': (441, 280, 490, 306)}, color={'cn': (255, 193, 97), 'en': (255, 212, 150), 'jp': (255, 195, 101), 'tw': (255, 199, 111)}, button={'cn': (437, 278, 496, 306), 'en': (411, 283, 523, 300), 'jp': (442, 279, 491, 305), 'tw': (441, 280, 490, 306)}, file={'cn': './assets/cn/ui_white/REWARD_1_WHITE.png', 'en': './assets/en/ui_white/REWARD_1_WHITE.png', 'jp': './assets/jp/ui_white/REWARD_1_WHITE.png', 'tw': './assets/tw/ui_white/REWARD_1_WHITE.png'}) REWARD_2_WHITE = Button(area={'cn': (436, 419, 497, 448), 'en': (411, 425, 523, 442), 'jp': (442, 421, 492, 446), 'tw': (439, 422, 490, 448)}, color={'cn': (255, 192, 94), 'en': (255, 212, 146), 'jp': (255, 196, 103), 'tw': (255, 198, 109)}, button={'cn': (436, 419, 497, 448), 'en': (411, 425, 523, 442), 'jp': (442, 421, 492, 446), 'tw': (439, 422, 490, 448)}, file={'cn': './assets/cn/ui_white/REWARD_2_WHITE.png', 'en': './assets/en/ui_white/REWARD_2_WHITE.png', 'jp': './assets/jp/ui_white/REWARD_2_WHITE.png', 'tw': './assets/tw/ui_white/REWARD_2_WHITE.png'}) From f3509c0de48ae16005bfec5d81a7dfd847726839 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Fri, 19 Dec 2025 00:19:52 +0800 Subject: [PATCH 13/24] Upd: [CN, EN, JP] TEMPLATE_COMBAT_LOADING (#5393) --- assets/cn/template/TEMPLATE_COMBAT_LOADING.png | Bin 3268 -> 781 bytes assets/en/template/TEMPLATE_COMBAT_LOADING.png | Bin 3268 -> 781 bytes assets/jp/template/TEMPLATE_COMBAT_LOADING.png | Bin 3268 -> 781 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/cn/template/TEMPLATE_COMBAT_LOADING.png b/assets/cn/template/TEMPLATE_COMBAT_LOADING.png index 594a7309464abf13520248d0de3bc48bd0e8965b..2bf0123f5bd05ceebbd81243e1a5e5c419a24549 100644 GIT binary patch literal 781 zcmV+o1M>WdP) zj12FkNv5Xdm}q&|j?Vp@Gw0GCr4|eJ-s{`n$G7&{aIpLSeC%h(wRQl&{z3fJ`!5e3 z_oUJpr^^MWqfZ;_LV#-TMkeb*mCmx7nYnLO6#H>LgWbsF~%Hc;Ve90XOIt=+27L?#csFf zucG53$S)9p;_8~LBn8UL6-8zhEvFvoA;6M{FfJwBSa-V}h9M&;BQuNQf23oDfX}nwB%94rN;yiAw7sJ$3d1-`STi1{gH=nWn;a?B@hu`I5wZ|+Mf)@rZn47TzX z!aDGIiu`^*d(yqbL@K9)j0`YQlL^uk@|ys@{xt1&6snq9A8y=PT$U*9ADJYK{yDZ< zS?2K-yD&m;mRB%FcOLbmRf9}?UpaZARJ6Nx4&oVE=^q?<*7ueXyk0LcRnuyBsKgxm z5$hYBmh#R(Lqo%*3$0{vait+#^I==BI(H>GIwuHRXJ=KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0r5#hK~#9!bdoV^6hRcne_2O(3mcq;3+%!LG7!ZrBHmdgod+pY5KL+7NAQ#QNvvXF zkyxckVdn)DR!CqMJeYx7*oTZ_u@|veUp4TX|NFoHo7rlveGeh%a{0yW=GDHl)?xru zb?f4D!%&fa?e*#`p9m)Rs=?S~K)v>Wg0pg1=7%M$nqs#~0D<5GhUR-Mm1EDbUo}SR z%d=z<`Bg)ty{XHhB(oslx_(g%Geklg8tZL_hybAr)lOdAcgbMv*S&9>qsMNz?>lwV zf~iY@;I(Z7QD+B^xXDq@<_HPkSBh$$DOoM;)CjB^Oo}0d5WH@@+1A|J zW!r1ha#Pdk+4;rkxz<-TaOc631;6n>@5Z=(G}-?6>GIv_*Dm~sNx5_H*Vf|I+s&gz z%>}QdMyyaxv<)^PZsO*dMQk}K#Y$e3i)Sa+ERAF$lKwllkQO_#I9?E!Mr=9~$Owj` zr*D$6w4^2lB$F{5sUEt`TE;pvJNO@t%q!=n#W)tj$?>fIwj9Uv1Lvk?Y8bWdP) zj12FkNv5Xdm}q&|j?Vp@Gw0GCr4|eJ-s{`n$G7&{aIpLSeC%h(wRQl&{z3fJ`!5e3 z_oUJpr^^MWqfZ;_LV#-TMkeb*mCmx7nYnLO6#H>LgWbsF~%Hc;Ve90XOIt=+27L?#csFf zucG53$S)9p;_8~LBn8UL6-8zhEvFvoA;6M{FfJwBSa-V}h9M&;BQuNQf23oDfX}nwB%94rN;yiAw7sJ$3d1-`STi1{gH=nWn;a?B@hu`I5wZ|+Mf)@rZn47TzX z!aDGIiu`^*d(yqbL@K9)j0`YQlL^uk@|ys@{xt1&6snq9A8y=PT$U*9ADJYK{yDZ< zS?2K-yD&m;mRB%FcOLbmRf9}?UpaZARJ6Nx4&oVE=^q?<*7ueXyk0LcRnuyBsKgxm z5$hYBmh#R(Lqo%*3$0{vait+#^I==BI(H>GIwuHRXJ=KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0r5#hK~#9!bdoV^6hRcne_2O(3mcq;3+%!LG7!ZrBHmdgod+pY5KL+7NAQ#QNvvXF zkyxckVdn)DR!CqMJeYx7*oTZ_u@|veUp4TX|NFoHo7rlveGeh%a{0yW=GDHl)?xru zb?f4D!%&fa?e*#`p9m)Rs=?S~K)v>Wg0pg1=7%M$nqs#~0D<5GhUR-Mm1EDbUo}SR z%d=z<`Bg)ty{XHhB(oslx_(g%Geklg8tZL_hybAr)lOdAcgbMv*S&9>qsMNz?>lwV zf~iY@;I(Z7QD+B^xXDq@<_HPkSBh$$DOoM;)CjB^Oo}0d5WH@@+1A|J zW!r1ha#Pdk+4;rkxz<-TaOc631;6n>@5Z=(G}-?6>GIv_*Dm~sNx5_H*Vf|I+s&gz z%>}QdMyyaxv<)^PZsO*dMQk}K#Y$e3i)Sa+ERAF$lKwllkQO_#I9?E!Mr=9~$Owj` zr*D$6w4^2lB$F{5sUEt`TE;pvJNO@t%q!=n#W)tj$?>fIwj9Uv1Lvk?Y8bWdP) zj12FkNv5Xdm}q&|j?Vp@Gw0GCr4|eJ-s{`n$G7&{aIpLSeC%h(wRQl&{z3fJ`!5e3 z_oUJpr^^MWqfZ;_LV#-TMkeb*mCmx7nYnLO6#H>LgWbsF~%Hc;Ve90XOIt=+27L?#csFf zucG53$S)9p;_8~LBn8UL6-8zhEvFvoA;6M{FfJwBSa-V}h9M&;BQuNQf23oDfX}nwB%94rN;yiAw7sJ$3d1-`STi1{gH=nWn;a?B@hu`I5wZ|+Mf)@rZn47TzX z!aDGIiu`^*d(yqbL@K9)j0`YQlL^uk@|ys@{xt1&6snq9A8y=PT$U*9ADJYK{yDZ< zS?2K-yD&m;mRB%FcOLbmRf9}?UpaZARJ6Nx4&oVE=^q?<*7ueXyk0LcRnuyBsKgxm z5$hYBmh#R(Lqo%*3$0{vait+#^I==BI(H>GIwuHRXJ=KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0r5#hK~#9!bdoV^6hRcne_2O(3mcq;3+%!LG7!ZrBHmdgod+pY5KL+7NAQ#QNvvXF zkyxckVdn)DR!CqMJeYx7*oTZ_u@|veUp4TX|NFoHo7rlveGeh%a{0yW=GDHl)?xru zb?f4D!%&fa?e*#`p9m)Rs=?S~K)v>Wg0pg1=7%M$nqs#~0D<5GhUR-Mm1EDbUo}SR z%d=z<`Bg)ty{XHhB(oslx_(g%Geklg8tZL_hybAr)lOdAcgbMv*S&9>qsMNz?>lwV zf~iY@;I(Z7QD+B^xXDq@<_HPkSBh$$DOoM;)CjB^Oo}0d5WH@@+1A|J zW!r1ha#Pdk+4;rkxz<-TaOc631;6n>@5Z=(G}-?6>GIv_*Dm~sNx5_H*Vf|I+s&gz z%>}QdMyyaxv<)^PZsO*dMQk}K#Y$e3i)Sa+ERAF$lKwllkQO_#I9?E!Mr=9~$Owj` zr*D$6w4^2lB$F{5sUEt`TE;pvJNO@t%q!=n#W)tj$?>fIwj9Uv1Lvk?Y8b Date: Sat, 13 Dec 2025 00:36:23 +0800 Subject: [PATCH 14/24] Fix: [ALAS] Add retry on first nemuipc connect --- module/device/method/nemu_ipc.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/module/device/method/nemu_ipc.py b/module/device/method/nemu_ipc.py index bd0ffc80c..556255f32 100644 --- a/module/device/method/nemu_ipc.py +++ b/module/device/method/nemu_ipc.py @@ -273,6 +273,10 @@ class NemuIpcImpl: self.connect_id = connect_id # logger.info(f'NemuIpc connected: {self.connect_id}') + @retry + def connect_with_retry(self, on_thread=True): + self.connect(on_thread=on_thread) + def disconnect(self): if self.connect_id == 0: return @@ -497,11 +501,13 @@ class NemuIpc(Platform): logger.info(f'nemu_ipc is not available on MuMuPlayerGlobal, {self.emulator_instance.path}') raise RequestHumanTakeover try: - return NemuIpcImpl( + impl = NemuIpcImpl( nemu_folder=self.emulator_instance.emulator.abspath('../'), instance_id=self.emulator_instance.MuMuPlayer12_id, display_id=0 - ).__enter__() + ) + impl.connect_with_retry() + return impl except (NemuIpcIncompatible, NemuIpcError, JobTimeout) as e: logger.error(e) logger.error('Unable to initialize NemuIpc') From 7e42f0ea6c8fc7e159c007929376ee8ee276082b Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 19 Dec 2025 01:21:03 +0800 Subject: [PATCH 15/24] Add: Event entrance of A Note Through the Firmament (event_20251218_cn) --- campaign/Readme.md | 1 + module/config/argument/args.json | 112 +++++++++++++++---------------- module/config/i18n/en-US.json | 1 + module/config/i18n/ja-JP.json | 1 + module/config/i18n/zh-CN.json | 1 + module/config/i18n/zh-TW.json | 1 + 6 files changed, 61 insertions(+), 56 deletions(-) diff --git a/campaign/Readme.md b/campaign/Readme.md index e4777b28d..925ecafc7 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -271,3 +271,4 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20251120 | coalition 20251120 | DATE A LANE | DATE A LANE | DATE A LANE | DATE A LANE | - | | 20251127 | coalition 20251120 | DATE A LANE | - | - | - | DATE A LANE | | 20251211 | event 20251023 cn | Tempesta and Islas de Libertád | - | - | - | 颶風與自由群島 | +| 20251218 | event 20251218 cn | A Note Through the Firmament | 响彻于天穹之音 | A Note Through the Firmament | 天穹に響く音謡 | - | diff --git a/module/config/argument/args.json b/module/config/argument/args.json index d04dc7414..dc37419cc 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -1634,25 +1634,25 @@ "type": "select", "value": "campaign_main", "option": [ - "event_20230914_cn", - "event_20251023_cn" + "event_20251023_cn", + "event_20251218_cn" ], "display": "hide", "option_cn": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_en": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_jp": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_tw": [ "event_20251023_cn" ], "option_bold": [ - "event_20230914_cn", - "event_20251023_cn" + "event_20251023_cn", + "event_20251218_cn" ] }, "Mode": { @@ -1915,24 +1915,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230914_cn", - "event_20251023_cn" + "event_20251023_cn", + "event_20251218_cn" ], "option_cn": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_en": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_jp": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_tw": [ "event_20251023_cn" ], "option_bold": [ - "event_20230914_cn", - "event_20251023_cn" + "event_20251023_cn", + "event_20251218_cn" ] }, "Mode": { @@ -2310,24 +2310,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230914_cn", - "event_20251023_cn" + "event_20251023_cn", + "event_20251218_cn" ], "option_cn": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_en": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_jp": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_tw": [ "event_20251023_cn" ], "option_bold": [ - "event_20230914_cn", - "event_20251023_cn" + "event_20251023_cn", + "event_20251218_cn" ] }, "Mode": { @@ -4031,24 +4031,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230914_cn", - "event_20251023_cn" + "event_20251023_cn", + "event_20251218_cn" ], "option_cn": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_en": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_jp": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_tw": [ "event_20251023_cn" ], "option_bold": [ - "event_20230914_cn", - "event_20251023_cn" + "event_20251023_cn", + "event_20251218_cn" ] }, "Mode": { @@ -4443,24 +4443,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230914_cn", - "event_20251023_cn" + "event_20251023_cn", + "event_20251218_cn" ], "option_cn": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_en": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_jp": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_tw": [ "event_20251023_cn" ], "option_bold": [ - "event_20230914_cn", - "event_20251023_cn" + "event_20251023_cn", + "event_20251218_cn" ] }, "Mode": { @@ -4855,24 +4855,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230914_cn", - "event_20251023_cn" + "event_20251023_cn", + "event_20251218_cn" ], "option_cn": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_en": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_jp": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_tw": [ "event_20251023_cn" ], "option_bold": [ - "event_20230914_cn", - "event_20251023_cn" + "event_20251023_cn", + "event_20251218_cn" ] }, "Mode": { @@ -5267,24 +5267,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230914_cn", - "event_20251023_cn" + "event_20251023_cn", + "event_20251218_cn" ], "option_cn": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_en": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_jp": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_tw": [ "event_20251023_cn" ], "option_bold": [ - "event_20230914_cn", - "event_20251023_cn" + "event_20251023_cn", + "event_20251218_cn" ] }, "Mode": { @@ -5669,24 +5669,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230914_cn", - "event_20251023_cn" + "event_20251023_cn", + "event_20251218_cn" ], "option_cn": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_en": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_jp": [ - "event_20230914_cn" + "event_20251218_cn" ], "option_tw": [ "event_20251023_cn" ], "option_bold": [ - "event_20230914_cn", - "event_20251023_cn" + "event_20251023_cn", + "event_20251218_cn" ] }, "Mode": { diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 847c50e06..a44582f70 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -763,6 +763,7 @@ "event_20250814_cn": "Secrets of the Abyss", "event_20250912_cn": "A Dance for Amahara Above", "event_20251023_cn": "Tempesta and Islas de Libertád", + "event_20251218_cn": "A Note Through the Firmament", "raid_20200624": "Air Raid Drills with Essex Rerun", "raid_20210708": "Cross Wave rerun", "raid_20220127": "Mystery Investigation", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 604b90644..18183507e 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -763,6 +763,7 @@ "event_20250814_cn": "淵層界の秘密", "event_20250912_cn": "アマハラに舞い奉れ", "event_20251023_cn": "テンペスタと自由群島", + "event_20251218_cn": "天穹に響く音謡", "raid_20200624": "特別演習超空強襲波(復刻)", "raid_20210708": "交錯する新たな波 (復刻)", "raid_20220127": "秘密事件調査", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 399021004..8237150a2 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -763,6 +763,7 @@ "event_20250814_cn": "奇渊下的秘密", "event_20250912_cn": "起舞于天原之上", "event_20251023_cn": "飓风与自由群岛", + "event_20251218_cn": "响彻于天穹之音", "raid_20200624": "复刻特别演习埃塞克斯级", "raid_20210708": "复刻穿越彼方的水线", "raid_20220127": "演习神秘事件调查", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index a057b8ece..15e3c7e8f 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -763,6 +763,7 @@ "event_20250814_cn": "奇淵下的秘密", "event_20250912_cn": "起舞於天原之上", "event_20251023_cn": "颶風與自由群島", + "event_20251218_cn": "A Note Through the Firmament", "raid_20200624": "特別演習埃塞克斯級(復刻)", "raid_20210708": "復刻穿越彼方的水線", "raid_20220127": "演習神秘事件調查", From 4a21f2e4e7c4fbb2a947b5dabd6b0bc42c270ecc Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 19 Dec 2025 02:34:55 +0800 Subject: [PATCH 16/24] Fix: fallback interval set if is_combat_loading() not detected --- module/combat/combat.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/module/combat/combat.py b/module/combat/combat.py index 4277395b6..5fed4186a 100644 --- a/module/combat/combat.py +++ b/module/combat/combat.py @@ -216,6 +216,7 @@ class Combat(Level, HPBalancer, Retirement, SubmarineCall, CombatAuto, CombatMan continue if self.handle_story_skip(): continue + # slow down the screenshot interval earlier if not interval_set: if self.is_combat_loading(): self.device.screenshot_interval_set('combat') @@ -227,6 +228,9 @@ class Combat(Level, HPBalancer, Retirement, SubmarineCall, CombatAuto, CombatMan logger.attr('BattleUI', pause) if emotion_reduce: self.emotion.reduce(fleet_index) + # fallback slow down if is_combat_loading() not detected + if not interval_set: + self.device.screenshot_interval_set('combat') break def handle_battle_preparation(self): @@ -626,3 +630,9 @@ class Combat(Level, HPBalancer, Retirement, SubmarineCall, CombatAuto, CombatMan # self.handle_map_after_combat_story() logger.info('Combat end.') + + +if __name__ == '__main__': + self = Combat('alas5') + self.image_file = r'C:\Users\LmeSzinc\Documents\MuMu共享文件夹\Screenshots\MuMu12-20251219-021500.png' + self.is_combat_loading() \ No newline at end of file From c36586f8c547f492c6bb22973f5e03e423646b36 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 19 Dec 2025 02:48:11 +0800 Subject: [PATCH 17/24] Upd: TEMPLATE_COMBAT_LOADING --- assets/cn/template/TEMPLATE_COMBAT_LOADING.png | Bin 781 -> 746 bytes assets/en/template/TEMPLATE_COMBAT_LOADING.png | Bin 781 -> 746 bytes assets/jp/template/TEMPLATE_COMBAT_LOADING.png | Bin 781 -> 746 bytes module/combat/combat.py | 2 +- 4 files changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/cn/template/TEMPLATE_COMBAT_LOADING.png b/assets/cn/template/TEMPLATE_COMBAT_LOADING.png index 2bf0123f5bd05ceebbd81243e1a5e5c419a24549..9086656f04cf95773ab7511a0bbc9f3d62cbf568 100644 GIT binary patch literal 746 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 0.85: loading = (button.area[0] + 38 - LOADING_BAR.area[0]) / (LOADING_BAR.area[2] - LOADING_BAR.area[0]) From c9478cb542d61a71d6ef9fc751bdd54bdcdadee8 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 19 Dec 2025 02:50:13 +0800 Subject: [PATCH 18/24] Add: chapter A --- .../cn/template/TEMPLATE_SIREN_Vboss_Star.gif | Bin 0 -> 7023 bytes .../en/template/TEMPLATE_SIREN_Vboss_Star.gif | Bin 0 -> 7023 bytes .../jp/template/TEMPLATE_SIREN_Vboss_Star.gif | Bin 0 -> 7023 bytes .../tw/template/TEMPLATE_SIREN_Vboss_Star.gif | Bin 0 -> 7023 bytes campaign/event_20251218_cn/a1.py | 96 ++++++++++++++++++ campaign/event_20251218_cn/a2.py | 75 ++++++++++++++ campaign/event_20251218_cn/a3.py | 81 +++++++++++++++ dev_tools/map_extractor.py | 6 ++ module/template/assets.py | 1 + 9 files changed, 259 insertions(+) create mode 100644 assets/cn/template/TEMPLATE_SIREN_Vboss_Star.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_Vboss_Star.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_Vboss_Star.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_Vboss_Star.gif create mode 100644 campaign/event_20251218_cn/a1.py create mode 100644 campaign/event_20251218_cn/a2.py create mode 100644 campaign/event_20251218_cn/a3.py diff --git a/assets/cn/template/TEMPLATE_SIREN_Vboss_Star.gif b/assets/cn/template/TEMPLATE_SIREN_Vboss_Star.gif new file mode 100644 index 0000000000000000000000000000000000000000..aa503f1369bdb4b7b95ce9ae9a9cc9749e26483b GIT binary patch literal 7023 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 literal 0 HcmV?d00001 diff --git a/assets/en/template/TEMPLATE_SIREN_Vboss_Star.gif b/assets/en/template/TEMPLATE_SIREN_Vboss_Star.gif new file mode 100644 index 0000000000000000000000000000000000000000..aa503f1369bdb4b7b95ce9ae9a9cc9749e26483b GIT binary patch literal 7023 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 literal 0 HcmV?d00001 diff --git a/assets/jp/template/TEMPLATE_SIREN_Vboss_Star.gif b/assets/jp/template/TEMPLATE_SIREN_Vboss_Star.gif new file mode 100644 index 0000000000000000000000000000000000000000..aa503f1369bdb4b7b95ce9ae9a9cc9749e26483b GIT binary patch literal 7023 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 literal 0 HcmV?d00001 diff --git a/assets/tw/template/TEMPLATE_SIREN_Vboss_Star.gif b/assets/tw/template/TEMPLATE_SIREN_Vboss_Star.gif new file mode 100644 index 0000000000000000000000000000000000000000..aa503f1369bdb4b7b95ce9ae9a9cc9749e26483b GIT binary patch literal 7023 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 literal 0 HcmV?d00001 diff --git a/campaign/event_20251218_cn/a1.py b/campaign/event_20251218_cn/a1.py new file mode 100644 index 000000000..7e692435f --- /dev/null +++ b/campaign/event_20251218_cn/a1.py @@ -0,0 +1,96 @@ +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('A1') +MAP.shape = 'J8' +MAP.camera_data = ['D3', 'D6', 'G3', 'G6'] +MAP.camera_data_spawn_point = ['G2'] +MAP.map_data = """ + ++ -- -- -- -- -- ++ -- SP -- + ++ ME ++ ++ ++ Me -- -- -- SP + -- -- -- -- Me -- -- MS -- -- + ME -- ME -- -- -- __ -- ++ ++ + ++ -- ++ ++ -- MS -- -- ++ ++ + -- -- -- ++ ME -- ++ Me -- -- + -- MB -- -- -- -- -- -- -- -- + -- -- -- ++ 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 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': 1}, + {'battle': 3, 'enemy': 1, 'boss': 1}, + {'battle': 4, 'enemy': 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: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Vboss_Star'] + 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 + 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 + } + HOMO_EDGE_COLOR_RANGE = (0, 17) + MAP_WALK_USE_CURRENT_FLEET = True + MAP_SWIPE_MULTIPLY = (1.232, 1.255) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.191, 1.213) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.156, 1.177) + + +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_3(self): + return self.clear_boss() diff --git a/campaign/event_20251218_cn/a2.py b/campaign/event_20251218_cn/a2.py new file mode 100644 index 000000000..40e981981 --- /dev/null +++ b/campaign/event_20251218_cn/a2.py @@ -0,0 +1,75 @@ +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 .a1 import Config as ConfigBase + +MAP = CampaignMap('A2') +MAP.shape = 'J8' +MAP.camera_data = ['E3', 'E6', 'F3', 'F6'] +MAP.camera_data_spawn_point = ['E6'] +MAP.map_data = """ + -- -- -- -- -- ++ ME ++ -- -- + -- -- MB -- -- ME -- ME -- -- + ++ ++ -- ++ ++ -- -- -- ME -- + ++ -- __ -- ++ Me -- ++ ++ ++ + -- MS -- MS -- -- -- Me -- -- + -- -- MS -- -- Me -- -- ME -- + ++ -- -- -- -- ++ -- ME ++ ++ + ++ SP -- SP -- 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': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, '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 = ['Vboss_Star'] + 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_4(self): + return self.clear_boss() diff --git a/campaign/event_20251218_cn/a3.py b/campaign/event_20251218_cn/a3.py new file mode 100644 index 000000000..368b00817 --- /dev/null +++ b/campaign/event_20251218_cn/a3.py @@ -0,0 +1,81 @@ +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 .a1 import Config as ConfigBase + +MAP = CampaignMap('A3') +MAP.shape = 'K10' +MAP.camera_data = ['F3', 'F6'] +MAP.camera_data_spawn_point = ['F6'] +MAP.map_data = """ + -- ++ ++ ++ -- -- -- ++ ++ ++ -- + -- ++ -- Me -- MB -- Me -- ++ -- + -- -- ME -- Me -- Me -- ME -- -- + -- -- ++ MS -- __ -- MS ++ -- -- + -- -- ++ -- -- MS -- -- ++ -- -- + ++ ++ ME -- -- -- -- -- ME ++ ++ + ++ ++ -- -- SP -- SP -- -- ++ ++ + -- -- 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 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 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': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, K8, \ +A9, B9, C9, D9, E9, F9, G9, H9, I9, J9, K9, \ +A10, B10, C10, D10, E10, F10, G10, H10, I10, J10, K10, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Vboss_Star'] + 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_4(self): + return self.clear_boss() diff --git a/dev_tools/map_extractor.py b/dev_tools/map_extractor.py index f9e1eb44a..b61bbf6cd 100644 --- a/dev_tools/map_extractor.py +++ b/dev_tools/map_extractor.py @@ -311,6 +311,12 @@ DIC_SIREN_NAME_CHI_TO_ENG = { 'jiulaimu_shixianggui': 'Jiulaimu_Statue', 'jiulaimu_emo': 'Jiulaimu_Demon', 'youlin_ylsb': 'Jiulaimu_Ghost', + + # A Note Through the Firmament + 'unknownV_boss_star': 'Vboss_Star', + 'unknownV_boss_hermit': 'Vboss_Hermit', + 'unknownV_boss_lovers': 'Vboss_Lovers', + 'unknownV_boss_chariot': 'Vboss_Chariot', } diff --git a/module/template/assets.py b/module/template/assets.py index 59b6b26bd..05b2a6d12 100644 --- a/module/template/assets.py +++ b/module/template/assets.py @@ -239,6 +239,7 @@ TEMPLATE_SIREN_U81 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_U TEMPLATE_SIREN_UDFFortress2 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_UDFFortress2.gif', 'en': './assets/en/template/TEMPLATE_SIREN_UDFFortress2.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_UDFFortress2.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_UDFFortress2.gif'}) TEMPLATE_SIREN_UlrichVonHutten = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_UlrichVonHutten.gif', 'en': './assets/en/template/TEMPLATE_SIREN_UlrichVonHutten.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_UlrichVonHutten.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_UlrichVonHutten.gif'}) TEMPLATE_SIREN_Vauquelin = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Vauquelin.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Vauquelin.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Vauquelin.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Vauquelin.gif'}) +TEMPLATE_SIREN_Vboss_Star = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Vboss_Star.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Vboss_Star.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Vboss_Star.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Vboss_Star.gif'}) TEMPLATE_SIREN_Victorious = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Victorious.gif', 'en': './assets/cn/template/TEMPLATE_SIREN_Victorious.gif', 'jp': './assets/cn/template/TEMPLATE_SIREN_Victorious.gif', 'tw': './assets/cn/template/TEMPLATE_SIREN_Victorious.gif'}) TEMPLATE_SIREN_Volga = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Volga.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Volga.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Volga.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Volga.gif'}) TEMPLATE_SIREN_Wakaba = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Wakaba.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Wakaba.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Wakaba.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Wakaba.gif'}) From eb308602607773092da58050ce9244c4bf46a409 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 19 Dec 2025 03:44:02 +0800 Subject: [PATCH 19/24] Opt: Faster fleet set by setting fleet 2 and submarine together --- module/map/map_fleet_preparation.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/module/map/map_fleet_preparation.py b/module/map/map_fleet_preparation.py index f10ec8124..1edb78787 100644 --- a/module/map/map_fleet_preparation.py +++ b/module/map/map_fleet_preparation.py @@ -365,9 +365,23 @@ class FleetPreparation(InfoHandler): logger.attr('map_allow_submarine', map_allow_submarine) if map_allow_submarine: if self.config.Submarine_Fleet: + if fleet_2.allow(): + self.device.click(fleet_2._clear) + # no need to take new screenshot, because submarine check does not need the fleet 2 part submarine.ensure_to_be(self.config.Submarine_Fleet) else: - submarine.clear() + # clear submarine and fleet2 together using simple click + # this is faster because no need to wait clicking animation to disappear + # click success can be guaranteed by later calls of clear() + op = False + if fleet_2.allow(): + self.device.click(fleet_2._clear) + op = True + if submarine.allow(): + self.device.click(submarine._clear) + op = True + if op: + self.device.screenshot() # No need, this may clear FLEET_2 by mistake, clear FLEET_2 in map config. # if not fleet_2.allow(): From 63a2d7388f5627d3f5bb1d415ef77726dcc46e83 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 19 Dec 2025 03:54:21 +0800 Subject: [PATCH 20/24] Upd: crop fleet clear assets to avoid collision with info_bar --- assets/cn/map/FLEET_1_CLEAR.png | Bin 8350 -> 3912 bytes assets/cn/map/FLEET_2_CLEAR.png | Bin 8161 -> 3828 bytes assets/cn/map/SUBMARINE_CLEAR.png | Bin 8155 -> 3837 bytes assets/en/map/FLEET_1_CLEAR.png | Bin 10909 -> 4061 bytes assets/en/map/FLEET_2_CLEAR.png | Bin 10861 -> 4044 bytes assets/en/map/SUBMARINE_CLEAR.png | Bin 10868 -> 4033 bytes assets/jp/map/FLEET_1_CLEAR.png | Bin 8382 -> 4166 bytes assets/jp/map/FLEET_2_CLEAR.png | Bin 8422 -> 4143 bytes assets/jp/map/SUBMARINE_CLEAR.png | Bin 8363 -> 4103 bytes assets/tw/map/FLEET_1_CLEAR.png | Bin 9258 -> 4253 bytes assets/tw/map/FLEET_2_CLEAR.png | Bin 9482 -> 4017 bytes assets/tw/map/SUBMARINE_CLEAR.png | Bin 9487 -> 4102 bytes module/map/assets.py | 6 +++--- 13 files changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/cn/map/FLEET_1_CLEAR.png b/assets/cn/map/FLEET_1_CLEAR.png index 8eb37ee91a02fd4b710aa38163afb944d990fcb2..212b44e14c0a6b1b646c1f087c113b4b5d65120f 100644 GIT binary patch delta 1309 zcmV+&1>*XiLC7AEBV7*EvW;x+R;{$?9ZzlYtJ>MgkppV^5@Yre)_}3mGl)JSi0Fcy}qp>4&>} z+3Nwb!5IMqfABx{m7f3r0Qkb4ygE62bl6@mmgTG0uj;?bc-{Y|$n&h%%f=5!ZHEv- z{Cxi6=caG?*u-&cZ#XEPK6#p&mdoYI>y!36TupHG*R!9Vc@|sswVwb00QkbqFXu6f zW~;cm%B%5WFc=*l9bX68EDPZ}?*910_c!wM>y!3we=!*5?JPINyV<%u&-2lPaT|KC z=Zy1Ll?NdJ0{{SQSGfwJp(z4q(D{=xGX&*Oh7v+j*|cE8(A{a^m_^2Yd3x7j&s z_&o(+e*gf0|ET=iVtzRvjYjR)e%8I`L@S- z)3M&ze0=nMwq6-tEEjS9!$*hBapG0SvWk7{e>7(Zo`V1k006LM!@Nj~x@A?q`Rz^2 zzLUu$br?sTrP|n`J3NNxI@H;!!gF<14J$8F|Co4}%jMg5aklz&avC#mTUk2KdsS66 z^|w|-%5vdB2*3aU0NWKqZz|LrvujMJJL8?vgVFl_<{EH%XHsi+F*~1~$BXmXYA-`|hnrAOHgZ0NjVFT5WqC4pJ59RVC;8 zdVg|V-?cwE9q28~vfH>j9;d_{({D_?G3BNX^UHZr6se?ETXFh)J`YvtK?uMA007$- zs%kkL6z!Lt@y^NXUt@;-@Uh&^s&GH0f8YK6{bmjM%0~Ka&1SQhkkcON7>4V*o(aGL zFaQ9+Jvf`5ci-+C!*JTD{N4cE+>QBmGMThX#G}!usi9S_gYNux`t3FKpQqDl9G=#Y zRze=7hj z00RI3+?U~CG#m_59jvyfRdPBx4W0KCjiRPRR@>Nqwr@o0l+NmXcma7s49}i|01N;C zuyyIJzrCg?^v2zT{euq=4^0dnek}2(sC>IUcoDDw3;+Od4~n9{5mUPs%SE>_trd48 zZ2Xx0F`Hk^ds%NI;2s|xchhxxfA5jZD*yuk0Nl61V34l6uQj>~z&H0NcbAKMH;(Xz z=3sFCkNy{=VF4Hb0AS0SG<&@Qe7gwN-tOKW-3|D5x`LHref0RRB*L!RgT zbzTi2ESBX)d_9|^% z9zr#KI4+9fR@UvM<=dxEp57g9J5jjEi^E69>u+^x|HOAMApipa0Q`&in_UIn_H(tF zd9yxMXfx^^<)GI+vnJer%0E}+DGz5UV~5NpXaN`i0AS0?sy>^ZwTU!@s#yTeV#~%R z=J|4QIyt>DGRs0$r6auU5+vc)k=~7U<9faB+wZ5A+G~)r!5PB_lRyh(7r4{knwa}A TJQH1100000NkvXXu0mjfek_{T literal 8350 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 pfqw}6L*O3*{|^udZQMVm0?uF}PH#<|3 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 literal 8155 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 QwSSi2POgqs4p)-?1`0azng9R* literal 10909 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 diff --git a/assets/en/map/FLEET_2_CLEAR.png b/assets/en/map/FLEET_2_CLEAR.png index a6716804b6ff0a4c2ea0f0288aa66814d881d640..52b810f02cf045cf770b53cc637cfe0005a79949 100644 GIT binary patch literal 4044 zcmeIy`7;}67zgm^me56dsI$A)_F$>d4ib_GTB~eDYZ|H=M_aY(D0N2MYK=O#>B>}# zt#;|S(k4NI2&Gh=Y1V2)5@$lyEvX=~vHMqaChsrr``h!(=l#w%=Mu_A??i*I!C%+sF-IM?T5Z?8?YN0a&qIB4IPhjQ&(cGlM(LARlsfF zGaQIvt8S~W56QvDzzUoOY{J#*_&=e5Y~B*y=K8`NX=~cMJs$VvJwXn*c>MFN`Yv`-fRn7BP7iQEXg0ueF$o)^_ly1pEj zmM>?UYI0;dgidOF3OW9s3%>qj}~uvFrcc3>~SrT=@B{Qn|o?7^R95nSuEUE&*Q-whMTp}$DqS^ z#49TtozY_-&bK5N7JyY6!9Lo%s8fsWf?fKq=-mWp)^I~VsfQp;F?uWk0@Ir)d7d?iYKV8I@p!~}In9O{0 zoYPC%_Mw?PH(Q7>=W}=Ko~*nKWu+{%#>FAeL0fK7!8Cp7H;i!u z9*1LY#AsXh8N6{Xl~K6pV@*dAb5pgA($+oJ*IL#*CG|4z&OlfowfdLQ3xIC`fbq15 zHxWKwvVjiYP$N1%C^IZs_<3VtBw-Fdw9vd%x#<;*PM9fN!%yQyMl9eq?lPrmi%@Y& z->^_90DK!Dr!rvXTScUHnN(NQnL*N1^B&fnm_NyVFwjd%AcoJf=fmK7#Jg&X`ffIV zhpA4VK)rX?E29{CTV%ZYE0w`NwJP~RxE4->hDJl&St(;6EL`Gps0OU0E)V?iYBDKw zu&8M?FP+ycC<@JX8;wPz!Wg78c1WyNNh71>wHRF-M8@is5=}8$&hfcW+#|yz9tfA~ zon_npe`GH5`_E-nhV0C+lC~0?+sy7SOx30!3nAC)(?+a^vnwdJ3D4Wk;ju-*^Qod{6 znI$rgA#lx!zNC@*h!OM1*m+=)my0>3HVAEQX2(W3^=KotSgiTC(*qO+7wkY!T)#tE zuc*(hkT$%?w9p)nYeig_2XA7~%l}iDUC1#!rf@(YV;;X)XM+k?e%98o!k!x-o`pIUJgy;|zF^_LQyEX!NV?6FUY zI%ogWI3DJVK9VdQ)xpX1mzI_qxdsis)s=QTg10y9{o86kRiYAIANuvn>c*b+>0rk_ zwwdDYoIY}Od1HKDa1}Z3jIdI3YLSYWp@k4y4{*qijo0;Rxaji2h5}AV$Lh|26<==# zq`VTonnRRVE|s;r(u0ik7^5t{osWa1(ab)~rM?D?ta)efWy8#|?tjL5>WImrop?sn pXR%b#Mnxav9DtrTQOt{ zjctq}yD`Q-#xlO6KL7sy{{7>R`+Dv@_nvc}bMEuJpZ9s5fAw`W*pKla0|0m6YCf{RqN!0{@e~vw-nfB^;=A|m9JFj1vM}aMGEeVb0R0Ic*Nu-^@ox0i7+1+k<4`eVT`9W$C-t>W;&XkjM1+?)2#fD{%j{)xiz!e^JR|G(^1B>fg z%13~q-1t#mVCd7?Tvi~O0Z6{2agkBA7O(|BGq}pw*bHRmtBOc5Hx@F4nN?obU<^Ya z0eoXj<2Y4qfw1JeS33dWTa193;K?o~VQr?&Ykdvlxi;<*RhkSyV@E<)(!;(Rr>YWu z^82kWkN-aZyVq=g4 z`9yPBhKVSjUm?)y-Y_x)T)I8v5u54h0Va10L$ObTORfblVhlVbP_1s@*fPzJ{S2T+ z!Ef!V3Z{S5Z@Yc&?6Kp=Nuu^2(bp!Ul=p8;z{aCOHtBC^xPWEABSkg2pfM|a&%@5m zx6mMFwuAYuj2mV40u2)px)*b~_qS|`<<--#S4{t{(ihRez^e`3-aFr(@SA%+^!kcW z;vQSPA3KmAsn@7m$x_kb+8DCLz!=40+UEd;>LBRe}NN zO8Ptr0CjVGmS5lVYPYfiz`e|8SBmejoM<|g-^h{Lbgr(Em(lL%J=GHz8*g*nJvtS3 z_Si?h#5-q<8Wo0^D~g%;Gyh4M;3{vDxy3#^&TaXO=+1l8mM^`TuP%~}`A!?_NxSn3 zul})*84~GcdL?MMX>j@>5Rl!#N*sAoz8R zLs+j2hvS=JJIgmO@7w-s$}fiDahNs*8OMSg&Y8;jo)&0KwB1ikXDcxh|MdPk(9oKTv#A!-?HvFvI$K{-=Ek=xkwvSD*mWJgEC%r|*amMMr z+iCwcg*v6s^6IxX+oy{LpWkyo06kHeX8w|K{cdt5@=;fA`Y%@GD}@YmEoi2%zO>=X z+>^3CDWY8n9<`3ol3CcFDb7yLl&8}3-ZgCaaKZaYKa=`g=2+%u=fl_iPOwL^hhsGD zFP(8Y6L=q;o;+;sIdE<6&BAU2KZ98Po<}xW^)`FYw;k9^ zBO}x^BQ>*(98j%iqR;cRUVpM;dUwFnn2C7R<%5pBMJaVr+xN(hfUk6*wxOCA(lOuh ztz+7ZM;8M}YsvVs{BY`n?(^O3-GP!!k}8rV1CRp8f{+5ak${o<5qpv+iHAfSA^W(e zsis{`+faZiP<+^GZq_`iiKxN(^eia%I}qXXY#To|IOg%a8XM5{tPS1;@&LJ4NbZ^} z>&>_`t}?eAmOJAd=3G8FSM@HxnE3in$J3g(-=AjnYGsL6i7mZ!ngsdtDm&)G&f4e8 zjy)N5xov0fd>!}s`{$Oa`paGKT~ZutddvI0J3HI1j^+>Lw=c%XV^dwy?dpf?aJ$hF zU+$;2Jczm(g-IMq4C*+NsFO&^|6r_a3^(2|9?aJouq0k3LI+G-^#x22ClCsVj>@kE zh=T9F2q@vy?^Cgt`z~)7x{b&z?k*l%Oj$filHau36y1bw_MGcH%YAM@(OWUd)7z)h z*VVm__<2J1TkiMVZ}TQj0!|;j($+w{*$?A7xRZR7cnzUBuXEfo0y+|=`IlYEbz&iXRN^tVUnWLgd)r+F=IR@&Ov+RS5OXr~7Z%Ww=p(g9rB5iIzI%d=-Au?c9@faa zDnNC(G3sdz_O{@^PQEfuf{c8UsVY?pGoGW z2A{foOlUK*^U!BW+gWFO|>EpQt9dIln-$=aCKNjRE1R`tDgD4 z+`7M##O;0ZA{*)7sqaJImHwUdVw`nNxsf`RVwC9ZP&hsMshW3YzPlsc@3tApEH3C) z#0T!AQkCg&;k)|Me0tM4ZaU{quD(D-=-sdX6#eN@399PB?RPV2#tECZ@QT4|+fO6) z)O}iSu<02{z~7#ESAAhk$N1jBSbop2$FQXQ`_%WTSqALRiRBW5*HD*GdX5qj@$6IZ z8R!pz_?JH@Qx~XSYq-;{5!$_3UZG|`&ozitp5X$#Z~$Di{A zq2r46tBT8ps{GAX#zh+L*YaG5GUWA>lCd(VdF=1J+!x&Ow4*d}Pye^60eBSxA6<5WMu3C>IaFaN&HN7%cqz%6g@yg?qGjLF0&U1tVB->*gzkQd4CLmY{Ybxcm3#M z0@;B`7M+#(xYdt0vo-_LLajQC_X_e*^}}K#0}Xh;z%`EWbEg%@$nO{HDkS_(T+sJ} zH{AM`p5tTr?FDKYW9K)d0$DcilZg;-nCoa!LqjPW)Zk{cpr(TRG$IT( zf*_^%Rk)j9;b^`y-6T%P4ho#qpZnPTZS-3gAvqMa!AjJGOY|u;_~c7wK{J&;qRDe_ zveM33pVO#E?T3(MCLMe*pjeai%(P2NE7Ymy@sl}^bJEjvRg``ukHRV1yU8wAkF3y6 zYCY*HyxvRNC>u)q+SqKY)pDKtx(LM{CyIJlpj4=&5#qi#p;=@BBR-*YkW6kDdavsc z6?@73q1%u~tk>Yypp;bx98GRr6hOI&;m=ly)@*F~ZjyNYjxA}AS_Q=V7wy)M>@Bct zb1sCI(@LH+LdUmk8*O{OnQ@Xi*j}d7-tYInoaoc&)WBX)zYrapCL|=l&W~Pw+#NrW zQ<`(K=SPU~KAh;4H%r+2z4Nfgba!a^I5n!Lp%9+C=1I=WEmFW-zzEfK!%6R=9-^sotw60O0Kq?GK+Tep{47_0mO!~q==fAVSz&}^4=xKt#3bz1UDXKbBz-| z8r<}JX+omwsiUl*xW~iQZDm2>*e|`BHhZ^};Gy*yLSU@Tak_rMt91t$!@7C*3K zVr>#l5WJ0JzP{Q~l z>14jMZlUS-8V7mFWtN2tG$Em12UA-KVHI`bcU6=BM9^&~fw`He`;s=Dc}MZzN1r62 zDu;LAVpE{NB(kF%Rj$rAU>Fr7Q^b;?l8>xRxntOsxdNx8{)s*7BfHbcnI1>1o2PaE zYD=A9&}OD_UIHiIA6&MrhPZ6H8bc9fk9}!$&6Pt%BNs>57LT%^MEhTWe^< z^Vbiin&t0Qc7ze!Ub|D;l3rB9N&=UcM`&;cy&j&bpprtC45j6X%~ZC7u9<$3;GA00 zQVZG#=c~vZihctxSmX5)^6&Y(q+3oUreG*Ck_`1@74-HBB+a~bZoCs5-j2>5!%Crv zsHzCsANCnGHX@mb*4MlVmE?(1KuR$#@sO-5PF2aTn_9d~Vri&lH3fqQA+;y?bj=v) zc|>4c--~}=s-zIvV*jXPdKXrw=Dy}8v}6vpqAtvxJQ+s+M0LNeMO~owMP)!W($^3K z548k$S-@C5t#A1Ei=Af?V~`F^_los!FCkYT10)&yWEc+k@4As8Xvk_II%yMZu|_S0 z^wXfRvlemGs@H!u+WkxAh%b1J%IPY9?Y(Fty#ugOIZ=Q&>dNSXcsm$P;yIcKQ)ZhF zI-AUzyPjZ5{m4uprz&1iy+mdl*NcvZ>jzzib-OWgU!`hDr{Con*w*Hn*I8oSZ{<4{ zqbVPoSD|7@SO_cRJPYn1F~+{YKY``v!&>J$-{mfzu_c-t&DFZ=sZsn&wN@kQgr7-d zD>{@AaK(LRw04cLFu3#mUz6yYFRUd@=LhCtkr0&Ha$)IW_AyFuRC~RYtgnXOR$cgx z#+YEx(vAMG^~AqDdbBJ9`(NO(DM$#eGO^=HG-g(0Tp(j7OzuTfymJez>zvH(UiDnC2B`BlE<#zJo9{w2{T23DIhBDrpE+LQisBp?~DMmvl`==L8 z4o)4Jn3VVjo=886taKtM1ZJAmJJ*M~oi>28X~tR8zJ_}>G&~+5FH#vTHdt&9jz5{PDdCS` ztF+I`G)yfhO%S`aUFF#01VVHzOw7hYcnR4;+QhLO%EC(gWWW|RydQ%bmK1eMNuf;{ zM`ON)KlDhlktS|MnSsLhMC)|$do3j79jxc@9&Oh{52g!QZJO$IC>$h0c+Ga_L5Q0@utD+tT`g=T1YhW~iOpA+Q}>~C<5NPe73_po*$_8s zkj{{y6E5DtwcmXM>+9EUgk)uD;b~h=V64&@TmzAn5-g8XOh>jqwe0820fRwk`2woF zbsl!%B6lSM*&F>xM!i&Lkw21!`Hx`ON*o^?^T5n$k zG?=1{HX&sfyre_Ua8emW4zF9|N1NBh)2O5x$~<~IcE64wS%N2Ad+gr+2A_T0J62Ey ziP>MP!tp)+`Kz5K%#zKhA*U|R;7Qkcd!k%$pSlt;2|cQ#6tr4A69or@E1=k^na|49 zX?#uKtXr2&A!NgI?7r&BFtpRj12E1E^+kjl`E}RfOK}>p83S1uOvP@E5}S9%K4sQt zzifwou_P&5mQg;uyh$=`D1_kh)J7j)&qX3Jv9(|7CMm5jTDVTy+1XucUAi*d91NZ$ z<`{-XN2>a6xA7DN6a`{N95z=j?bTGE%NgasKde0K~3Ke1n zE;7cRP-hXbqXVzSW^GVKK7C);TI$5)#6i_ExziB1=O{~t!%md1A=YigjVX>)o=H{t zLy9s7#pG&oYq1b;?UvtAF^7616Jtj$cvIv< zJV*C-J3MsUbRpaQ&XW7(x0kiMA_hH(#(uO$pW3=9>-D$)Ic+9#SSk%#IqB6gy^X)U zSy5&pPS;32#j*;wOC|Sc&+6p#LvWi@bsf$iYa^*%Nx*d2*wz^>San zQPvS&yPMCIhyooRw&V$^I>r)luz+KjcZZsKCajCKbUF|}Sm^M9~r zltgmu;Q`rPb&-WEIH{x!EanYI1jeXmnWG_kJ;NqgC{QXPVR8h8&ptZ~%ah{L&B0gi z2=2}Q{ybh_fm)cG`usKWHKJd+TEZtk_;mn{v zgN{fIV|nxtNGuuz1;I@F5&d+~Sy>rwZ_Gky_>lVp@d;?H#$i|E*!|tDsgNvztQv|m zg+rN~C64jgnRKHNG(rP@=^RN%@K|2u!Hz-n5-HY>bancR95>1`wCO&(9!>dT^VfSVSv(l#mQ5hL-$FAYjLqm-jfz#L{ zCVQ(Ewp((n>dgoJf9Y^_(?i9IC%D2n4~l~n%Hg}~5pHF%bW5Te503qA&Ca6q3KWSf z$mZ#B1fk(Z{hZmL9nS&0#@;;oAbEvmKk(U%-5FGaBDxe+jVVS#e*T&ZKpFY*;%G~X z^Bk2OQHYswGIF6=#%gqHQkILhO$a5ak!9HF6<@&C#R~jQ$084GK^)9MaTe{RaXvQ0 z8e3ooT3DaHw5dP;*Zgx_z#9R9@?2ZArCxGfmoKA-A^zQX-jd2CkGSx~KOAH^xY9Y# zssM>!lwOEHi30~L5bbpxkJ^(Ttql??$U{O+z=((3<8G93j6ELcW{Q<$ z3&Ga6T(q5JpFHummBro)Ov(d;1FR=(0lebp2or5lkS6Hu@}WjaUI^ zjliIs2q(iQRO#8jJS)J7Z<&9j(t;zXnWNG2?tgTWtMpzawANX5B~~u@Kd6&tPeCsH z9_9=Xaqlnu+fv6z)zKu3y-YUUF5*nN@XYHgTG2F79{P{;ub}0 zaradfnJMXiG0SlK-`=A-egnPjl&wwVX5n|tanHV4lBL?XH|P>pA)$3o~?fK T(s=j*chtJCd#~`W?eqTuH%WuK diff --git a/assets/en/map/SUBMARINE_CLEAR.png b/assets/en/map/SUBMARINE_CLEAR.png index 1c1bc22928f472e7012d4e003a8d784a23b49eca..2acc99cfcbe3deafa8b8897a3c482d485d01115e 100644 GIT binary patch literal 4033 zcmeI!`7_&T90%}kwOy3Z!%9mVM{Vu46x%8irAkKCkzT5v=yjPtFxLN60>{ zeEh=_yP4#xERHT6FCp2VdL8nf6|Y zpOric_KqFP!a~ZP%-CrjXZ0d3#%-GIJl-QaQC@NZxqw_iE+7~99}3t6mai)VKpK9; zgRwKmvv0P-h&~jKPUk8j2l-=W7WET8DW68x?!@H?!Yek^%aTN0P%I}~cjb_**&U13 za>1fNpn)_iXN5p1lc7y{>_~*Rwf2o-P}F^O3)OtJVP&*g@Pv>}@ZLLWRN6g!))|Ad zjE_yI);`f`>vj%q$?S2QUYQH%Fg8g8|{C7Ckcg< z8cIF<9vlj^WQoZ}b+vFCaHR76@Fvia5xA7xaCD}KzrkFAtgPagp9yG}wouPf` z5b5G8o+tXHdy=I^i*M_jjgGC^MMq{8M1||=HoY)sy7+ZiSG5KGbutBBhWEqY=at9kdb$VG<>@ z3hF*VWQ|2~V_Y!_)vC^Fj%^Fo;|o!Zl<}}qu*vtVIDA5_&;aTbcVB}-6O14g4gf3f&`h|OOtyx3XIIg^tWj*7`IkN~Z9~}V8*XQsD;t{+`p>Pc zeU!wXg9IE^uryc$`5@mb$oTQ}?KZuvV(9MUX|j*gf}Kd0$)QEf@lgYkYgW$GKp3fe zNL(Xs;CQZvm;O9@pI$@4i!=#Q#Ob$TWx==u7X8w92)C|A3HCj1?B-&3s*#|Xir-@j z0IeyX$ceS$+XJvZaM4SDC!vn#U8gtFZY*Q>DMysJbaK0bXnHurXiNz|Udz^8ls@?_ z-~g)V1I`kLQh<(JTuv_#q(S$RHdQ@9OB_h{Q_jw0zbhC5Fm`kziqQOlAHCk3lAjfjJ0-HDiZ-u5 zVq*{8-OJdR1eZPABP^crpgfIGS!OCNl(B{qsq_l1z_Flv*Z?Ko=A_CVVigH`ikh1d zqIg&NO-1}RC;7XuI~M*fX2(M6eH_KA7P;`wmJq;iAcw9AeC8GOz7LD7ywW7b`M!0SrX0+zo(i+NS>*XaE gkPG}50_)LRDyVmoGn8UT(U0?;kZun37yZ-!0mRwc1^@s6 literal 10868 zcmeHN`9G9h*uO0m$&$6m5~T%^vP8BNDtpGhrpVZ3%-Ba#J&$auWErZdWElG}#vW2l z$TIe^GZ>6*Y-4zbp3nOqyuZ93Kg{QvGxs_7Ip=$A-|L+D$JAJ#^QiDq001~|8{9Mp zfJ2P0%zxMpGelcB(UKw9{S0g#0{{o#-iHZD%Qyi5M~ysmbxlnl`3Cwve&p*Xaa&hc z!Y{zr&BN;<0KobY_n_9v>w=oY>kqjtZ}ct}rFcaFl2UnWKX`0D^1K3Ep7QW&H^sa- zYRNBfJi`Fg_=IrO0P$k%{dugr&c82gV?p++3*v*>nD7wF{5-9PRz=DnZMO!ual?=E zN+(Ty1OwO1W3H?9iYJ&DH2$oHGYc4uuuAYu;lH^bY65^omS9*!V4>DFQ-LqQ4EPZ) zo#AaB-HpbXN?QRENx+CCFNuRG(H!`3$>Ik;@Z$tfc(3HaQQ$QIcm;>ukOWYiz})I> z%|k$MPV%4-(EIUJ4jT~11f-tVKf|nD2{?nI%w?JDz5(y^v?VXG*5xz7ZORn&nc>xk zfS`EmL~d7_z)q=%^jZaq^478ZZHM_%|&ncRQ}|W8eG{ zhAuCTjGZ3)=2djVMd$*L8~cQ0MoPLAp8<)*u=N-K2yeF6@2F}elBOm`r`$+hl+~t> zJD!WalA5QNhIgu7GP43a#%+{-r^(4~7QbeuLP)J=jvdf%2|OC!bht9W{@(WJpODSi zVAXAHvCI#qKdy_OI?BN@fA;=|YK8Gw&D|@bz9X>_YmBEm10jomf0}kGx(*pl_jmCL z$~TWE;aP87_E{%M?KH%=<9<~!cpU(eYc~_LWtf1L zluzRTP&IwR{_ATY!|!YWaPxiC#X_AU$Ljg>>bNrMMXTzBm|YIv)IN5m?mEwn!xQjR zM?ai+t8>z#POX;}Q^+Fx{&?CbPig&SRZh|fuYDBRPw24oiOg>&s-Cg4>il5ib2+W{ z;`sgeUddKAq11R*Nf(2wui&2~W?t}{NjCim_{5xZ1DxbwAhj$Pz<({yUVAHX;D?0b zzuW&->0f>wRcyx6#SGD|_$n^^@AvnQ+XJt1JHX$5^lTR{71My1eavpZI}Hg0!vBqT zg|}bka(mh5V*m2_E$4r%g{7MXT_>%TEEAMmMXgnW1VrjGT_|j4m}B95b8L=JdA@l) zNletYHni6LdUj5#lo!Wl#UB0i^0#x6$zM%M&xY`BHp1?!6(w5hr+c3?J9s=Y45i75-am&X*oxtK5-CaLiQI`M zuV_CTCd&EMnqG_RE9i@j_ldPY!6mO)yN13(cWOlKkUZ`c+-u8YUWGa8} zc@E!INZQ$!bU|JGCpjeHPnw6j$ND4rnLr#nFvGq?zbd=rPV`oYBn& z_s^g7JQ;d2`$YLk`BcL%hdNVIe^@B=D2k-IzvF)A3$nhrb}>vK=@;)CwKtY;BHoZt z7NExfKN)vg@Vnx}CF>jA0hTOeSR$GU#r=f~kyN2sN;jolTt(q3 zn{whwugj{gi@y_Hr#;_!VA~g;j($Cke}qeFe1vSjjXZ~yUU=?4t^^a(bj$NSbwBUw z(8EE`>n`^_6bC*verlSixzO_3GtCXxUfLP>`}Yso!MxtQpL6lo2pOK4E;W5s1KV*i zpKoO}-HBC>ZGPMTHVl90t%eqU zk?ED`gXli*F5+*Ertn;v(WP{epAHQg6rI(@b?Y(z-{Xkv^z3gdi6nW)AV(WVTD6!- zNrrT0w}SVNfkwNLYJ8}(nx@9Xt=1V9&F`AbSs_`^YrfP-4r|m%MRZ4`MjYABq^WP= z=?NRPqruC9OU8$snd+G)nX03Nqe@sjS;SdWSwA09Iuv)P^053dO@SN7*g0*)1Co8~ zgqB4%U9Swf%civp{9;20*otf^{FXKp>pmX;tc`7$C&Ks3rs2%*GPV~Z`d%-v;vOec zg*LoxGvkBH(^6_uZ~|z$az_zJ^(HY2y)K@dzpK=&ZT4FSQIu2 z_I%^kQVMS%-x>D#exhxoIp&oW>%*xn_ z5JnC5?(ZMEQ~qn7Y(V}*_Q_kfsV%ru4b~z2dA7)j7Fmj$6mjytGZgqC1Wb)@DQ)@H z!lLA&G;jC2EN@`>gEDe01QF?gx1^(U%WL|i`@3t2(9jjGXi)+6Ap9;5x$No{gSM4q3s~l<#vQPFDoyb$#0g5jV;NCK>2yQZH$ zdt{4yHnMc5=wY4r$cA&Bb6bNAH-(G+dFIaR-OlHu9s0lZ2~v7eaR~@g5Nm z$)nlD*?eukA}n`<$&YhM!}KxQ-8Sp(-bIeh*tXjI;GC5JN^VYpTC-HMcvWk##?qH< zbn8Gk1xvvVH&=_Np5NBqF*UpF;0kV&VSm$Dt@A9c;<A)lo zJm(-v97M!}#Bq=$4+y~lZ#v+J2UPn1ylhZj7T7C5bXUo{8*LQ#X0l2jwt9(XbRX12XK6ce7UzCPQxLZt0Z>x-Y4+ACe)I<{5Tt3~q#^xm%yE7%FSaVHSre*5f_ zuXxY$WbxKw4^_9;SnSx_{Q~D$$M#~Op!^i(awFZ;k#F|Kw-EgXR?l~vToS@P< zC+y`riv0Vvk%IL~3O=n(h#ncQ|4TFhQMm}a;>*MDtMO#<_r`?35vzSz$h0AUoswI*sIqU1?6W_s@Wp(at-Xn~zCo=pI#LK=_9}-WAiFL2x2oH)MuZ_vw`2~qu zJR`BAL=lGtMAi{7S#xV7qf7VTd)lfGAu@|FaJ8*^XJuDTap_oCzsd78vAfKpw+~{& z>fzG`7!>0sfv{C+G(0~vCSTy1Cte`6|CEIQii;O7AfQAsX)PqoMp<|yiDj7O?~e_ zco(L}l+h@z6g-%W`Z>{IP{+X$KIpeij(@y8L{V(tn5cp0$`mNv{Ld1JP?%G0M9he7 zd4FGD#U`ha9$z=QY(Amg8)i~T-I0HJ_(9=*=?*WiNEu$DG0@v?s*+AdlqA8C<*MCV zX|5Ka&}2C5CwA8BqQWI#hWg<3CmhO0zT3Uzu(y&EOpzQB$!hDX@litt1rx>~mDGq6 z)1Mb)7#)FU}ycYus94)=

GG1*fh6!1o9FOgU(Bx1kFcl2yocHjqt*pM>je+F$ zsjS4F4j}3`AS%^CWK^_PTYgmm8JAY0RbALt=EL}@Z>8_Es{=Gk_u0+A4m4v9OE;9J z&d6)ckK2LJ{iw2GVm^@@O0Iv-JzLUN`<3BK<4f2togQ*2_>kq*GldSK9ICIm`(#Lv(4NTlj? z=kQllx8(b~q6{TCC$`?IG|M%KT=Fm)&gz~^w-F74n8qS+5pdwGol-ISwiz8SuZ3>Y z+|9$8S&jSHGJ*)1WV10DW z2BjHei$S4L{vZt+y#!@O2&foTAeQ%d_mY0rdK1Ar0XE~a*_1N%p5X>x(n2ZN0<-H? z8#FYKg9uf}gu7ST4k$eFC4!6WPl+Q@j+Pi?bNG*ph1Jfe+}a+O61ErkQ+u2Di_bMs z5$+i}7fOh?rBBsHbT-$bP*$MaaigrTV8sp}kONe6JuX)-w}jL@kkJ!|6SgAEf_iN3T_DIrdQRg(bWtBn*iR zFXk_KuB#8JMLvyak7sCk=FPlYiH+!Xk$7K^Eny82LE8*-1fgxo6mivHXorcYCQg+T zMp`h|3h*aJKJ{TNg?PJ#o0Lt9xwwDgcLHUWHH|}!dz3nO9}7#-+k`aN7aErh35%Oh z=FyIb1UM)c3DO8%oBQP>gujJBS~~PF=E)D*`QQ|eWkkxs)Glx}s&BUiT&$5ZQ|%$T zy$S9j;}!x@l#N#GR2zvpF_Ro2ym*^>P36|RddFGDwtxmgH~j~00meGC34`9pKvp!r z+o@1?N7{M}M@2y(vhGkTQ4<)djokg^R=Ex>V6EH42Wtf5hL6X`Q#) z{(F{rtnYr2s)G>}svDL&tG{K0TbSLbjr_rdbJ$I zx&tcmngaY!v1MBg*`YypU@V<>XUGg2TcvwwDfL#FfX5&1u%J=`i6em zg90~78+ffH?>o|8V`Expevp{cr&7W}No8P;Oc1B;UK3&xk{6`TL7g&pYDFN_kt{K< z>kHePRas@~D7EdWLMH)O7YLevp{yI#4H|%!`EDP>Kg^{UtdU2fpEG9hnb#t&H*`2< z*6bYu!~MfIE9G-BmYv*RFrkseK2w3z2}jALpcCzd@VuI{c;YKJzqCJ_01@iQW15%pF+ zg?_%OwkTgc7A}-wM_ey1%U47Agbm?lt#-F$w6?TQGVPsD`x$$pxw6F9VuMc&xA|64 z8#46mth|RS_?ev4(l z4cg-(z)mJQx4)giG(=67VpRSzg>6wALf`qul>&x46l8S|Y%*7T<9B9sc7A94WxWO! zcQ4#ZYjMW=UpS--wO~P*e*1y)?2zsWu6;5JM4U0!XD$oU?YeR_G4?O*I_zl=%0;V0 zwmA*V8kKva!4~vy637Lr6rKOQ&dSOjB+<(Gu}nVOQmP~nhygDMTBf$>u|43IrF{>6 zq~-7QiQn19?-Nl(RnZgw(K)b%NJHO%?9S4c%S)BA3IUVW&BqJL#tZcFQ874jYF%vO zGZ*9K3XjIcX-nOZ3(Vh6{zrI@#y%vE3p~L;(z^6F0gnoU2Dg87+hQUxcNePD=AaOUUxsw z9`>M+5?bFJ&z*Qh{$H~J9u%|fUr`)XqX*UK|9LffZ~<^|0dQ~u@c;7ypm&!WkiXL8 V3)k%{-Ag~WZyDdrzv2Ake*n+ong{>@ diff --git a/assets/jp/map/FLEET_1_CLEAR.png b/assets/jp/map/FLEET_1_CLEAR.png index 9814972672d1c1afa9d0421819d5565341869bfe..ac682f2b67b4e30aad6d36933bac29689d58a845 100644 GIT binary patch delta 1566 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 CIiIiq diff --git a/assets/jp/map/FLEET_2_CLEAR.png b/assets/jp/map/FLEET_2_CLEAR.png index 18d25c0d37c5d0d3c0f91e0dc4b178efc0f81549..30eef1e083189d28d1901766ced9ec5e7a5a11fd 100644 GIT binary patch delta 1555 zcmV+u2JHFfL9ZZ?BYzL}Nkla6Z;2!w+)sltU6;i`~-#T*2#bX>_M4#2Xaqi3K>`{`u?rIHaHz;T^X`sD zD`7hzix54J%y{OVU&~DO;rq_}CJ6ul0000000000000000JFdwn*@K{B0um5004kn z?yFyYRsWyXf0f?d-qw??QE+rTdY6aIG)*s`*jt^oPbQP`WL%cB_Ru)E-w!Kg?YKBD zn|;aU>y(Szb;Iv}_qA7Zy_P%z007|DOY78nzP<5iqkpd-{)P4YF#q-s-*!LiW?8my zS~zTVbu|Xy7cXD5Qf_}4c7+%mTEg=AH_tzK_qP7M-souLtq8yX007sYf7A0UTK4Yt z2KNVXJ0#ov;eJTJ)02>p%Y`~{vl(l=&CVwJ1|iCJ($1GZ|MI{1IcZuH#n-=80TzG( z006Ez|F+i3WbNTvQukgCLG&O$m`uV-7P4^ITwmKb$oE^7-Xwpnhn(ELVC?yPWmNu1 zv9OE)3;+P|DROX?QTspcKNvh{+BP0-tgo%N6YSuAe|K+pbToQzrcK*ncv?<9T>%&X z0N{Tn|0YRirSt5IXIYlT`fXFiZD-xO4!j=rj3>wMjncCka;ydq|2_;YwYS zWn9ij$*OKN8s$kf_Eo>RMShrjCju}40Khe?O0`M)^cPQ?{29D>xm}i%=76<_YjJN? z&du}jzsJeE#``hxdY*feW*M&5j3B);+|SZ1M&j5q91efI7XcUm0N|QsS?}4;wwm-C zV(s?p^Yok4-Ie?OezSLUn0HpXmqKoul$U4pEkAho(a|W&I?o<&HUnQB7ss*Yi~tM( z0C1gt{hMF53%R>{yG2p7Te2)`KFtm3v>p`tiey`LX-<;lBSP;&LVosSYjytN@nkZY z_m@Th1^|BmxK{0~yYqG@Kg^q!7-;KJuV%3}&+}LuUhMo_HkmkW@2yWPFC16zZ9X>c zt@g5Xc1ldYlS%2NdoR( zH=TcVrLMQrq?>lyGb+U$^LdZbE59!0TId1|003}>EK9eZY<074lYV#J?tCzvR&h5? z2lFn|qodKZD(zl4Z*{eQ9;%O(d~c2lFaQ8RWqLC0ti&2{+P~Lp*M7&7aY(P`F`*92ZKS=ML8zb z;c!?K#Rt#M(sbj|X1i#-Fr9C>?8c*wCRgtd_si0JzXC7-0Kg6Ee%2k_56O4X#MdY! z*gw90b;Z=aCrPq$p<$tDoYdvt$)s!sitep;V{y2-ax&nxT3Ps{6N|w4VIBhTh4lM&Csucx zh@0nmGxu+3+9NntTa*qbMdBCLIH0DJ#?*RLkG;|6buj0r}t~1c)sT;Sy z7$R5CkDLE+r_uRwe4Issv6bW|=VW<(cnEf512=+eLFb`Qk-`1cQM7b?smn#KfRw>2 z8R=2ZWL@?49%vLHgZk_hE}CV;PiNu|0N5f54vO&mB7aKo*$W^9Ktn>e=(^@EVw&{$ zOaZP`V3wN>O+k=i0CWo(bzcX%ZvbBmzda)d(gDCdI82cnsH6ne_cY{)fzgVzNhV;l zh^>MYNF)HV@2K4(RA>h5jH3+%2;o104`2mup)2qjf++I_5jDanC@~O_WR^m$U(CGAI$8DFEhKWF31Yi7NZWWfmxC!ul=Ggk-1lb1*^4}rH3Bi)53LFI=^}1!) z*~lpTzp#1%Ee4RleDiF;BM|DYDI(c}A8NNC|*n>%w&! zNa_*p@Q6(U!UQU_fdD`uVps4j3q>kG<18u?d=YYw5;5)`jpP3 z)kz8f${(WdetArC?ZreMVJspzfNlNlIExTiLH%>GcR-&axahqN+Iy3j(y<3oU+uwiTky{LZ5~4(~c<6VI zi?hq&bKzCLCbFp*4wbCmSp#k>B&+Dvn7zPjl&>jcy40WEVRmBkuI8c6l{Yv%2YxQCy2S_J#;!Va* z5yx#a#bF;4B8-6Bd+n!|Uys+d0*G;}0m7kLhDyGbPGF~0r~GB_J_4%F+Sx6su{=%W zO(Z2URFFteUa)r9wc4pVqFQ1+WW06!>4wh+;|69N>krCT$QQ`pm-di8^e1Z)Z_;mi z)imMXza}^6fC*kD+yAvswK|1T+xOTj-e+3F4r5WA68A+(#Z#EwA4ocE^`m#=-1oZEiefl1^28cNe$(>71+0qwM?8QzA9D8>(ERPPw2`V&kRElXKH62 zg5R6SnFO2cn~Z=phOICH7>{97cRg0q+-tegxrl~O)w$K}0l6MC*XOS%^AGUv8+wjE zSU+7SU(Z>;x*>I7f53a-anR4+%SOjO{K)T7n2(=-Z-6_f1yeF7+E&qC(Y9*p%dp(wx&L%?r-7!+PxSaMD>I2gUG`$y!{RZhQW*G zIA>_mc5=nr?~f*28+-zs!LIHG?hfm@jZux2jnP4|M=IM{bbj==$Tr?AwvV>UzFF`k zM7!ra%v;Pc%Jg%nS(+^R&a}LWL=*(dn2VXGgh{@7PnY#oekq1aQBU}W?ozp@Haq>! z%iLGGDy>C{Mf$anMopP_%lRf52a;2d!j(>*zt&at?|ew6Yj7_(mHFLwo?UGd<>6^? z|Cslfpj3KZdS0;srAubry^;HnI}lx`d-u{P7lW5QezB&-{yJRbIriP1U~qq>g(|Ky zsL`Wh)Dr%5FUazSWl*C!RNdmw!x^XZwPPNN7mQ)hlrMUXU%rht2AOZqa>G=b8F>;6 znF56#SQ|7w3v$^S2uD0ee9b)5n>RBs-f<0{+(|Ns87M7Py7$6VG@~ND2jN+>XYt*E z!9L@eG1fI}$kHV8E>ngr7zF-QbM!^Eae3ZU$95=eKiFe@d|DIoYXhT>DZzMx56xkp zHKDGLhkn1_qO4}!PF!NO_0XL5`xxT7pVU{^_p6Uc%wBB6vbO;|vGY;9_#h-d(i&lM zR$T>Y9pf7xhD`;A?o!3DGd!Bcrmwfu-wQHzgQ|q@dk$>Am`Y}O%Gv~5j+kmx3)Jl> zNDeIxB{@*RVqE>a+$TT7U|-2R48#*T)TKd7xlvx@xf?lw^&pG8R6idt{kT0-78bgo zxAGC$HrduUlN|}!C&j1--y4vI`GWk|&(TI?BVK5Zi zxy}ml!#b@a*o-WQ7WU%aZ*=aR$A{^U@ZJOzVa%SH-RXEq%MV&Zw zmH*Z~ltYJ|p9&wo+{N(@6h6dvn_Ld+2HF4+!V3UVF#vFUfge`^!2dn~tl0s8^m_nc z@_J|6p$Y(u^cu>Kje^G4r*so6O>;FyL!&hRKG^6 zaGKeZ*7Ho{jXJ`#BwdD|0Dl`lTVEG!BA*`-OFu|aj6LZ>WEWm&?jE2bWh*N+G;bc0 z!|{tw^umV*S0RFgURBSml&?eYgyc>n!K7;{?{XU$5HLpJpAj@HTOw&Qi6+3)>uU_o! z$Q6eeTQB8}C~c`e4%&{-N{<^{dh%nV>fQ1B*!mo*t*oaY?Q*7^_<9MI#fA`z`hKU+ zlKjy7H*LdyS8awjltQK{pxy9TYATuAe-CGuz%0ofFAnjyE)*t;bhCbQM9h3-&@s2W z5N%1V0bIpDs0iOsy_yua<{}m3mUKc1{_8NC!rs19!TkBGqNFXASKU?tyQ}JhQu0bAJ$v__?%)aWT(4!<U3C2iI1g1vxa5*YP7& z_ozq`HnazObH+s0%F+jphCe-lNugb2p`UV3G7Rl|;Dq?<3&(WL)McxTK-OobIj7hX zJ(IYf?mXLB#maBkVzV5-d#9dF;9`D!pnw;KpO0Dm>cc?}4K=0E=>xZ6xWys;u)dY$ zFVYoAUADwaAIHsus`qlaceXk~VQ!P*o;k~??c($Oh)2okJE}2zYYwIh+HQuH{wRr3 zqkJQkyK*P{YBPL!zQN%c`uV~CF(7DX%2*{#To01OFH)m^P;1{-_NzuNqwk(&p zx(#eLFYJRuk7hwT&%TZi5Rc=vG!_gL$@c4*>sv;*{Azaz_d*_rSs-hz7%G~VLH7j) z=hKDG#1og%5m{v`Sn%NG>34e@(8LPF;)Z} zkIv%Nm7c{*Br7Am$w)8P7^#=9C7Ujxe92!uu?ZD9LBtL+ zG_WZy*Vo2NXOjIs@ z(jC?}aEhV9E|t%BhJ9R>vkm+xc>HtA_UmeL>w(Fzon~F6?Spb7RprPa#;DvfjRcdm z4sBe8nXP`s#DicF^N8}6bKX&I!Qc37%yb9ghe!DAD@+rHPj$B08u%aZCuRu_4rvT6 z2RK~cvb!%$F=WU)15vv?%{v44YXcr=4;01~?&9a$XoJfa`_@JhYu)UlTt`c*Zw2a0 z=Wfbetq}_m$#w_7Oy`C^ce}Nn5f|M;CA(Pkc>^o2ojuqwtD`9_z4cl z6M`0Zzn;kRR3uwe+eZ7kEZbi5{MOp9DzZ}Azxi$Yb&=_MYjZQC8PfUyEmK_{OU)5b zbsjMO+@V#n!ur-+0MS!hmmBqt@AOriLiFUgut-=C}B zXpueXFGf8#DtXH6x3G0?Z!K^7G5@pUTri3u`nE3L!uFBXNjPZKIM9?9A8p{_^FFDW z=15`Z+CvXqZ6RLt#upLWySCs+nX{hyG+0>pLg$wn%)-LL#nEA#S8ES#d6i69buMo0 zbGh4X>jao;`)YlmRjy3-`uh4F?yNjA_@pDt)+p@)dXTo1p{v^r^S8!YO{}`YX2N#0 zArfkNLYuxJbBCw%{kB176GeY>6U~F?`a>^fBoO%FvI-sLe!%HuXzi--GcSzhkN z%3B3>4=KTij+x=c_(i1GTcmS4YCLoPOPfjCE4-v$b$ zuRPfrj-!q|RbtgwUZ0+xX%@3lnF&3_4*C1yX~9>IvxV|+&fm71n?svJJvRBg{H2MC4=y2X@K5Yx9emWEHNi8!%Y1~Vy?k)BQ0`*T?mj;91>9i#%ij~@8me_F zV{jxJGVwNbyFqBIn#$erNh*@Iv2W&@719-(XA@AAt{N=tA}iHEU=5BkP8;bYzDEq> z@B9mdsnk^_TK&CDqVQ1kPtYSXCh^b$A zy?MYA(J9rRGX|1;8<#$?QeHgdZnj~eSTH=eR^poD1oAb@Tmnh5CF2kN%ZG;6*f{(I zr`sGeu}l9Loi|bmUp-BzKK@^7Hc#8~69q?Xw$_Yp53)+UUf6CFh?S2Y%<~-+j%}Np zNmO+--^4Q#0-Xa%vLs%O`7vVyvl-dP$9+$lhVmZCh_3JS*jUAR`LD=6Jf_0BmEt;| ztEbNP_WYc07hng@=KD!Fh8s@1b@7y1J?6YPSipiz9(g6$$a9+zPXtV>UKe&r)ZyS?((+r?;mpiu73*rQ{bNh{}lK?6qv0%fe`@u(TAeOTNsAFU(`_1QLa(6d+|U2 CV9xab diff --git a/assets/jp/map/SUBMARINE_CLEAR.png b/assets/jp/map/SUBMARINE_CLEAR.png index 2c4bb8e68f586b093c03dbeea4e53c97634f41b8..a32ad469333dca10cfccd13d383c439839a9c226 100644 GIT binary patch delta 1501 zcmV<31tR*ZL5CoaBW(}PNkl2_cDGKa@bCVzi4cMTeY@u&vtmm;} z7Y7_u@b?j%k!JKHq|=W#^Cn5NK?`37lTZsqe}Mmc4}1jx0Kh%>`R_h2|4-BO{FyXu zefsOY$#jxs+49Y@v$Y*})rG^>o2x9#*V}m*sMRcXt@5}l?u`TG*L|M6-1Emj{N7J< zyMF2`0002)y|k>^i^s!{2mO!w;a>>g$@Jyu+fiq$mA)0hd%J^9yAw9%i}~nqv~J+y zf3W>$`(?@&&wTOapUeOA%OhND=dpTA?I)eZ>$zV=00RI3+;;w^^(f6-k2^d4-g;M> z=UMA9b+1P*fJkRr+eVD@R)yxdA00sa6cwZr0 z_HWYtaJ%f@yb94!uw@u8!{6?Q-SABPe>K%%8*v*RW?9y5w>Pr(<{u@zk>5iA0{{TL z$Np_RZuR^9_+0;^e$}EeUwhr&=y0^mmhl|sYWnxOQExc$ivR`y0Jx+4EpxW9|7^e0 z?o`!U&Fj4~UxtvB$vMjsu_~kNRWb<%n7`Z-ge~bVI z006l4{w@CO{bCU7H|A^n8?$zmuja2$LJ9xxA!9!W2QLoRZ*x9)HL+aH9*05>ZQLwX zd#hkZ00RI3+@_GXX_9~Xo6qW3-mcGc4jLg*!>-|ASnZn4X4O@`^~8O*)K2nVw^vQ} zhC%-H!75k9DR23E?WAwfz)3vG`6jADF6#Hmc0ApBJRbW|1TX*q!0n6mo2Kc}fB0zp&uKkz zLy-;#y%?+2`OitRc~9V4_Fh^y>+MOHbN02}Zr4vvj>}WkZ|z%d6ju^gr#3gzMlFx8m=JC?TlMv^X0K+|YFMMg zk>#)6A2YxJ0Kk1W`gT(L5m{lEC#B;Jf89Kyq+Uj+C)!y>~%QK&2e;)fe1TX*qz}-pH zP``WIPc9aJ9vzM^uj-sE7K@Enh1_ko+wr2}(6_66Rex1lE~ypIf1c0h>+yZ%0vG@Q z;4Z9Ir_~H_QKBJYhl62U`MJ6}cde;JV zIL6m5fB^si?oQ)TBZO;VeN&=JHTS!5Ti`2gOd2QU^l!ayL-!5_7xf!PemS$?vj7GF z0Jz)wefrC%@xt90sH=Q+a5&0p7y1?_KcB9*AC>=|uC{;Pf7|JH>n{%p9kO})-84;` zp{B#bUbnX~t9&#*%JcI)cJ}k#a35d*0N}n`ovuQ!F0*A`Gnr2Q^4EiGW0|YdE4H)6 zGTzoG#%-wIvZAx|)1jBkcrozJXO+2K4}Apy0Kh%>$;Y2Oc=+JWzus(ZZJnK+ot&I} z^|!CGEVS#{LdKCl{`>Od;^B`E9{%V1AHHw3T8*@EdUks7;$V6_{orRGoWGNgL^6bEj+*EfIv#!myYK?{Tf7hLbZzId?~<0_8Y00000NkvXXu0mjf DSA!UP literal 8363 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 C`bz5n literal 9258 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 diff --git a/assets/tw/map/FLEET_2_CLEAR.png b/assets/tw/map/FLEET_2_CLEAR.png index 34d892bd2351bf2bd51696f52f4727eff023025b..fcafb2fc0b5b3ed6bd19dbe14ecc673f6e89cc4f 100644 GIT binary patch literal 4017 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 WUdgf>W8bfEo;&Mxruy$8ng0XCqZpY0 diff --git a/assets/tw/map/SUBMARINE_CLEAR.png b/assets/tw/map/SUBMARINE_CLEAR.png index c77399ca4305d33f6ae8b2e15de59e90366e09d1..8091920655b24f842f5d682b901b35f31c5f6e54 100644 GIT binary patch literal 4102 zcmeH}`#;lr9LK+ubYorV;&M7EQZ{wmmZcKO=~z}ROd;n;YWZ$+nTajkB&SxEda&4| zY=+J)XK9MfpzcpFG+POL6%<@bg)mh=QM)RA_bOdw+bOdw+bOipN1Q=CcrnK{N z!!(uDkpZIH#!DFCbB%Rp(yT;TksT>K(dW^eew*UG)SRiFz1ituuUuZJ-e>e@O*JwY zS2=Rmmf2aRO`Vt?9;agGL*LwwPSDQWQ~)~mIkIG=(*-%%K0M&C2JF7=iocQngx0YH zZHJMJ`ccC>nR{YYr&US;o2v`~eNPOO9rHsK4B+yd8jKZ|*K46g-!K4Zb`4kr0NvMp zpZEZV5t+9+>+{v67PD%&noLoLk;=|?iB0RtqKtz*KzfDxACPBK=Sm5BSGYx2J5qq}c)@4^!B#7F0U&18jVEWF?A4=;ZDf#k+&nl34QK zqTzUlxb=ZElS)Gd%~DJAL{h1Z7#XeVV?w`ne*8=@A%7s?i1ud2^tG(PCNEgKvkN6EJCU))wNaDD z*mHQ)nzk`xNr2-F_It*%=UWbH1)AI}dVFeOk)=#InLHyMEp;o_dZ~tTw|?-gIH!V8awfc_+5NDykx(96KO@e%!wVbu725_TYD?hO zjwZ>YPo!&k5fyL+yU^?W0jn;~_-O(E?E$JpWj+GotSeWXtg0+HQghFgRC)bGbuVA^ z`kOcb8vuZ`l_3Cd=~|-$$lwd4%I4rM;*Pn@;=(R&p~Rp#^Uq0z95QE*z2ejX&fMtr zw0|I`_|#2H*Oq5`<}310j=L|$4B9T%#(28@W+(x^WTikTc{q|+9RzzK^MWk*dRXJK zOb-DYipCLrsUrsm5QWy@I}j}QyYV?y0jrzlRhN?T*@7a|ckaLf0Kf(cQ$7@tD)_{m zFw>~w*>Jd>X%w{SanGwNTgj^$`6hHJ#z1u)=l|Qzm+QAX8TxCTgvd<|>T2?gS+7jp zph~7eXyeX9Tx9}dYO1X*lpnd4E17r-GP2WIxU?Yl|=Xqm2V9T-mK(XS!mT`-Kki^?%90p5cUI1?CTSGc3X=!zTpUudIg)aH#bV zT=5Axw5Il5{#uzKGkLsWS^jhZcCAm|k5ycnr8SH3_$#sl>ztxeaiwGqha93HR`@F_}kJIY#_C$IVyN6u< E7a~yo82|tP literal 9487 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 Date: Sat, 20 Dec 2025 19:10:39 +0800 Subject: [PATCH 21/24] Add: Chapter B --- .../template/TEMPLATE_SIREN_Vboss_Chariot.gif | Bin 0 -> 3879 bytes .../template/TEMPLATE_SIREN_Vboss_Hermit.gif | Bin 0 -> 3821 bytes .../template/TEMPLATE_SIREN_Vboss_Lovers.gif | Bin 0 -> 4002 bytes .../template/TEMPLATE_SIREN_Vboss_Chariot.gif | Bin 0 -> 3879 bytes .../template/TEMPLATE_SIREN_Vboss_Hermit.gif | Bin 0 -> 3821 bytes .../template/TEMPLATE_SIREN_Vboss_Lovers.gif | Bin 0 -> 4002 bytes .../template/TEMPLATE_SIREN_Vboss_Chariot.gif | Bin 0 -> 3879 bytes .../template/TEMPLATE_SIREN_Vboss_Hermit.gif | Bin 0 -> 3821 bytes .../template/TEMPLATE_SIREN_Vboss_Lovers.gif | Bin 0 -> 4002 bytes .../template/TEMPLATE_SIREN_Vboss_Chariot.gif | Bin 0 -> 3879 bytes .../template/TEMPLATE_SIREN_Vboss_Hermit.gif | Bin 0 -> 3821 bytes .../template/TEMPLATE_SIREN_Vboss_Lovers.gif | Bin 0 -> 4002 bytes campaign/event_20251218_cn/b1.py | 96 ++++++++++++++++++ campaign/event_20251218_cn/b2.py | 76 ++++++++++++++ campaign/event_20251218_cn/b3.py | 82 +++++++++++++++ module/template/assets.py | 3 + 16 files changed, 257 insertions(+) create mode 100644 assets/cn/template/TEMPLATE_SIREN_Vboss_Chariot.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_Vboss_Hermit.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_Vboss_Lovers.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_Vboss_Chariot.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_Vboss_Hermit.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_Vboss_Lovers.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_Vboss_Chariot.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_Vboss_Hermit.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_Vboss_Lovers.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_Vboss_Chariot.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_Vboss_Hermit.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_Vboss_Lovers.gif create mode 100644 campaign/event_20251218_cn/b1.py create mode 100644 campaign/event_20251218_cn/b2.py create mode 100644 campaign/event_20251218_cn/b3.py diff --git a/assets/cn/template/TEMPLATE_SIREN_Vboss_Chariot.gif b/assets/cn/template/TEMPLATE_SIREN_Vboss_Chariot.gif new file mode 100644 index 0000000000000000000000000000000000000000..2d693b9451f72f6e6ea57715e9e9ba1d0901acbd GIT binary patch literal 3879 zcmeI!X-pGo9LMpQa60f< z9zTBk=+UEx4<9~w@ZkRa`}gkMyL(;Hy$;r{{^*D~NT)9%G(`962q@|@TS+ZpD z;>8OWE=);DnLmGia&q$AxpOfLn>~B>tXZ?-H5$#dY14v(gM)&CluD&s zE}t}Ml8=v%mzS4^hlf-ub#rr*NF>hA&Q4BFj*gB3fxyAR!QS4U&*$@aJT8}OV`IZ& zv8=7F84L#Ucxu}ySuxA z`W#H5d$8 zSy>=^_3G8DR;>crnVFf(moEq3>FMcX#8XpK7cE+}V8H@_4#X1@5@ybv3AiI7BEWZ8 zSXgLiXh=wiTCG;8R0@S+^5n?@0RjI0{@&i+pd5(1ySsyOS65enE*6VP-*$F(@0~mNZ;5i0LWj zYz|kJUL9Uw=cUr&kuGXmU(K(*krcI&;hvn)s1PCwx_83)*d7%{L7|%Yve@Ezowj0u zl~C45{qgg^a0B4iRjV7U(&t(+75vsTLTR9}BJ`e0$TtJ;~Ii{<;oS% zdg;<7SlQ>!or8Vd-rnBU)&^QXN4jg*E?C(+ckZmOuZOK&RaLcZ+cs!1Ol%m`fE3~j zn|kfqwV)Le3{;`Ku&K%5lCwG~DJd>44z$jgF$1(lM@K_&$<9ulI(5pFDPR_A>*wb; zapFXoOa^RWR(}eX>?};_vBFweSwUgJDT<FWt2wghzxZ|~TMjBFmn&}|d4HUQ68gOeB xR*5x<^GdwL^b{kCDX6x7%P^6?S7BCe6Mc3dQIeB|y2ZyyhuW!h9(i8fdl{m literal 0 HcmV?d00001 diff --git a/assets/cn/template/TEMPLATE_SIREN_Vboss_Hermit.gif b/assets/cn/template/TEMPLATE_SIREN_Vboss_Hermit.gif new file mode 100644 index 0000000000000000000000000000000000000000..be67af5078900b743ec04d7a5d9271e5f73cb657 GIT binary patch literal 3821 zcmeI!c~4VW9LDj}(w1(P0;M2}Qb1a;U_qiq5ihi5(TbN%MIEdNh&pOPf~bh4tO7!j zH4&9|P;p|AL1Retk5&)~xFRm2#tlX>q5^JcQ08ZDLd-0$0M9G9=j49!eL}-Sr2gxf zh=U3dnwXgQ_U+r(uV2T<$H&ITK7Rc8;lqdb@87?B_il7_ba;69&6_u`U%wt28hZKi z<@4vy`}_MJK79D#!GpVZ@AmfgUb=Ltqod=(g$w7;pKohxYi(_9Zf-tx>XgA?(ChU_ zj~+d8a@jv9Yl+F)>k5QIV06 z5fKqer7}D`TqctR2M1#q78n?~Xwjm8fB=7gf2maJ=jS(P&Kz%VZ?RbH;o;%#?(XX9 zDi8=}%$VWi&lI`sc+;NTGK(^)!cDwoX8oHPqCqp_eP?&32?jfZuX}NN19s{Lw zNA;Zt_<>?aXRg4k%*H3X4Ixub4sy^A;iF_MmqzD`T2x6)HllJm6fLTP8vD%YqM|(* z+13(~$^ZV~LQoB!zkK-uq(6Q71ga-VkBp3fYViE()vLk5K_LC?*|SHF9)apRckW!j ze*NmztKHq*U0q!O8%Uo!cMepaK7IPci4(_<9|zS94Go76AFi*j2iSz_%F4=v2M?B) zmzR~5m6Vk1-@hM_6T-oEc6Rpe-Me?~+O>1%&Wwx(;GXwrttFd2>oi%EpZw zlarG-Y}k;HkO11_3qycaKCOxT_~cdoCmF991!ySTUj z>6tTU5~`<9pAM>RZEXQIkH@pJvLay9XtXKtS5NgT(hnns^O!&$T)_RMPC`<-Fl*iB zqpHCKDpoFzZN7n#5t)qwny?D1S=}r&4Gm$fW(Af)U$lyg%Pvtp1WG@WHbGIrcUBG! zOJqG&(-uT!+5K@WpYA>j$y-c@cAc}RMyE!YnK@gyVyw-i0PXg=l^p%S!1C4;>8Oh$d4aCzIX2) z=PgX$)FeL9y)Xg^w!qaLYX1UKo{IXoO5$? zv$C=Xu9=ycz!f4qNtEdD+O=!ftXTs!UbSi!K@S<;ROp8K!@ke zn+F{Rv_3vQkYX<{FHcWTsIf>S5(tj`l18Y!fj`zIWi`b$$=|ZkC@tZHUaTSYJ7qf+Ru)E&m}ip%pvnL z#)nh$=o*GOpQ6zu7FP=qHwyP7^DDB&~ zZwaUa0|UfzzJLEdaJ_x|HgLUl>lTQ;a^=e9%a?&G%xRO!bmq(%SkX;QO|YM#v_C?H z%vMxX0N2veQbH_bHYX=%-@bi>TR;n$g%!Ph`*xrUfrYxliUzs_TG-Dpo};6qaU6%b zf?F8RKQ=ZfD2Uk4^XJb8s}hNX;0jg&>g0Ha(oS-P(!zM=a9}F^JX7ce=tq&I`bGjZ zjEW+3%1vC^(i+#WFw}y(U91*Gopm!AFfx@ESk$K*F)Jx$IdHg)r%!1tdpuKFr|*}U z&+?Po#RVIKbe2NAQ55-Gc$t|+avi#vm_N;y#Nl>n+B=vwi+)9FwKK}+du7n|WTYig rQM~j|e+tr)88p?fv9Xv&VtI0L3>mA0h$B*~o**)Xp`u`1E?W3E@!K3x literal 0 HcmV?d00001 diff --git a/assets/cn/template/TEMPLATE_SIREN_Vboss_Lovers.gif b/assets/cn/template/TEMPLATE_SIREN_Vboss_Lovers.gif new file mode 100644 index 0000000000000000000000000000000000000000..c5b4079807d2192facdedd8045eeaacc3780e7d3 GIT binary patch literal 4002 zcmeI!`A<{n9>?+1LbZTsDYBHcEv4*RK`2s{LP7Q^n<65#?4uX~72%2sMGJ+h6xpo` z6_8O>zzq?#lue*2ATbUxMiv#+mVGc>aRtoSfJ5{%j5OXL|D2 zAnTA~1X*5QUR+%K@ZrPz_wN@L7Ut*Y-@JJhJIG>+4e}6urH@a=HB8y?fo=-FNTa?ds~fefxGtM@M^m`_-#g+uGW$T)EQP z+Is2IrIwbKix)4RKYzZyzP_%muBxi)%$YM1iKM)|{PgM5r%s(ZdGe%KEEb7GB_$=r z#l=NMMFN4~=+UD`jvUF)&p&+laBgmHPEO8&0|)l+-@kY7-aUKv?B2aQH8qvb=O-j2 z#K*_)+O;b#E^g<}o!ho;i;9YhjEv-RxnW^pAt52b!NEa6K>+~){{H@cetteaK5RDI z+uM8d=FOWnZDO%lUS3`sH*RDynI0YnncHFsgxffVC$|9yKOSv z*&JMNpq<-ZH{&q1|qHp*H=nx30!Jf?&bVq}@tK3_m=I#I0V-Ypfeg`)(LXL>#tlNu^DOKFMA z>S)|rLQ0%zkB!Y?c2Arv$HcZGk||;YHDn3?CH~| zN~IFy4-E|s4h{l-RQ`hp4|;lfQ1-WO-MV@6=8YRSIy*bTKj6Q7`7+>dZf*wojg5_f zUn-TJJ$n|t0%~h(D=RDE76A68rKP}LC={x|=jG)cI&=uYXJut&W@hf&w-3w%`1JJj zw6ru}pOTUS@_{{okByDpv113YkB*K8`CuNv2L=YB;5i%)fCud>sjqa-U@(554#;h6 zY^<%Vfx4xo0?4TjT(w5iIF7HLK zVQp@`RDU7PK${wX&rH-bux91Y{e|=fRASfGH^>)@goL$ZVQV--3nJKtmgiDrGaB{k z0W!A^qUA`9E-@o+JpAur5sg(*&Lz)0(zc9}#Vk;GLuLAQol$>K2Q({5tE;=_d5M}N zm-rr5Ub(l%IxSs+^iOPySl^1&O&I@c+D}4H$dU4ivJ?&Cs#xBVB2igsXvJ&dIrBw^ zF28rO8Y5;EVr}Z><2HT0A+`1v>X~@_zx)37?c37Q(&x{gKYjWHeV?A5e);kx_b@l8!lp#0pq za{wKD*VNQhS68ER@zSHV~PZbZMR8YBB!LB zKvm@b-Y&z7?1D=(_~Ei*J+;8j7)fGt2~o`~yFj8NEY-1zN`2j0*sEUe6x-@8nebH* zoY%UwY80Iqsj_D26P6f_el^bVJ(=MQM4@eAVpeODI_!LVrd__P~J9+#p@5p+?7&sNOO7F9gEB1ONK<>z6NI zV8(-Ps5bzI=?=7Ey-!R`pc#MiKP^(14bccpRz^`Aw4z8izu-l>DGMNnO z-O$i*;lc&9;Sg|@Zdmf@jE4;mB`+&01Lgp{u&}V8py1fCW2ylUNr#w2!_j~zB_;8A zJaoFlZdXa)zI{8o-owMg0XwXB)oxdne9M+CE2sPa^$r7GwcgRN|8u~jRfi3ah8+g{ zFE&5X7r;LT;OXVQVqyg)F%p$sD&8XY-!4HW>bPHFlJ+2 zFQ{|EIvsO)u1$kLdCGqKwc~;88Ldhj4}f>3l&sURmUB89TQrGQ+Y*(`3O2{s!M`i+ z&j^~2t_P0UBT7sS(l=8lO63tUpR=xM%5swLadwrd0lkYI>3_1`A&{P-!60f< z9zTBk=+UEx4<9~w@ZkRa`}gkMyL(;Hy$;r{{^*D~NT)9%G(`962q@|@TS+ZpD z;>8OWE=);DnLmGia&q$AxpOfLn>~B>tXZ?-H5$#dY14v(gM)&CluD&s zE}t}Ml8=v%mzS4^hlf-ub#rr*NF>hA&Q4BFj*gB3fxyAR!QS4U&*$@aJT8}OV`IZ& zv8=7F84L#Ucxu}ySuxA z`W#H5d$8 zSy>=^_3G8DR;>crnVFf(moEq3>FMcX#8XpK7cE+}V8H@_4#X1@5@ybv3AiI7BEWZ8 zSXgLiXh=wiTCG;8R0@S+^5n?@0RjI0{@&i+pd5(1ySsyOS65enE*6VP-*$F(@0~mNZ;5i0LWj zYz|kJUL9Uw=cUr&kuGXmU(K(*krcI&;hvn)s1PCwx_83)*d7%{L7|%Yve@Ezowj0u zl~C45{qgg^a0B4iRjV7U(&t(+75vsTLTR9}BJ`e0$TtJ;~Ii{<;oS% zdg;<7SlQ>!or8Vd-rnBU)&^QXN4jg*E?C(+ckZmOuZOK&RaLcZ+cs!1Ol%m`fE3~j zn|kfqwV)Le3{;`Ku&K%5lCwG~DJd>44z$jgF$1(lM@K_&$<9ulI(5pFDPR_A>*wb; zapFXoOa^RWR(}eX>?};_vBFweSwUgJDT<FWt2wghzxZ|~TMjBFmn&}|d4HUQ68gOeB xR*5x<^GdwL^b{kCDX6x7%P^6?S7BCe6Mc3dQIeB|y2ZyyhuW!h9(i8fdl{m literal 0 HcmV?d00001 diff --git a/assets/en/template/TEMPLATE_SIREN_Vboss_Hermit.gif b/assets/en/template/TEMPLATE_SIREN_Vboss_Hermit.gif new file mode 100644 index 0000000000000000000000000000000000000000..be67af5078900b743ec04d7a5d9271e5f73cb657 GIT binary patch literal 3821 zcmeI!c~4VW9LDj}(w1(P0;M2}Qb1a;U_qiq5ihi5(TbN%MIEdNh&pOPf~bh4tO7!j zH4&9|P;p|AL1Retk5&)~xFRm2#tlX>q5^JcQ08ZDLd-0$0M9G9=j49!eL}-Sr2gxf zh=U3dnwXgQ_U+r(uV2T<$H&ITK7Rc8;lqdb@87?B_il7_ba;69&6_u`U%wt28hZKi z<@4vy`}_MJK79D#!GpVZ@AmfgUb=Ltqod=(g$w7;pKohxYi(_9Zf-tx>XgA?(ChU_ zj~+d8a@jv9Yl+F)>k5QIV06 z5fKqer7}D`TqctR2M1#q78n?~Xwjm8fB=7gf2maJ=jS(P&Kz%VZ?RbH;o;%#?(XX9 zDi8=}%$VWi&lI`sc+;NTGK(^)!cDwoX8oHPqCqp_eP?&32?jfZuX}NN19s{Lw zNA;Zt_<>?aXRg4k%*H3X4Ixub4sy^A;iF_MmqzD`T2x6)HllJm6fLTP8vD%YqM|(* z+13(~$^ZV~LQoB!zkK-uq(6Q71ga-VkBp3fYViE()vLk5K_LC?*|SHF9)apRckW!j ze*NmztKHq*U0q!O8%Uo!cMepaK7IPci4(_<9|zS94Go76AFi*j2iSz_%F4=v2M?B) zmzR~5m6Vk1-@hM_6T-oEc6Rpe-Me?~+O>1%&Wwx(;GXwrttFd2>oi%EpZw zlarG-Y}k;HkO11_3qycaKCOxT_~cdoCmF991!ySTUj z>6tTU5~`<9pAM>RZEXQIkH@pJvLay9XtXKtS5NgT(hnns^O!&$T)_RMPC`<-Fl*iB zqpHCKDpoFzZN7n#5t)qwny?D1S=}r&4Gm$fW(Af)U$lyg%Pvtp1WG@WHbGIrcUBG! zOJqG&(-uT!+5K@WpYA>j$y-c@cAc}RMyE!YnK@gyVyw-i0PXg=l^p%S!1C4;>8Oh$d4aCzIX2) z=PgX$)FeL9y)Xg^w!qaLYX1UKo{IXoO5$? zv$C=Xu9=ycz!f4qNtEdD+O=!ftXTs!UbSi!K@S<;ROp8K!@ke zn+F{Rv_3vQkYX<{FHcWTsIf>S5(tj`l18Y!fj`zIWi`b$$=|ZkC@tZHUaTSYJ7qf+Ru)E&m}ip%pvnL z#)nh$=o*GOpQ6zu7FP=qHwyP7^DDB&~ zZwaUa0|UfzzJLEdaJ_x|HgLUl>lTQ;a^=e9%a?&G%xRO!bmq(%SkX;QO|YM#v_C?H z%vMxX0N2veQbH_bHYX=%-@bi>TR;n$g%!Ph`*xrUfrYxliUzs_TG-Dpo};6qaU6%b zf?F8RKQ=ZfD2Uk4^XJb8s}hNX;0jg&>g0Ha(oS-P(!zM=a9}F^JX7ce=tq&I`bGjZ zjEW+3%1vC^(i+#WFw}y(U91*Gopm!AFfx@ESk$K*F)Jx$IdHg)r%!1tdpuKFr|*}U z&+?Po#RVIKbe2NAQ55-Gc$t|+avi#vm_N;y#Nl>n+B=vwi+)9FwKK}+du7n|WTYig rQM~j|e+tr)88p?fv9Xv&VtI0L3>mA0h$B*~o**)Xp`u`1E?W3E@!K3x literal 0 HcmV?d00001 diff --git a/assets/en/template/TEMPLATE_SIREN_Vboss_Lovers.gif b/assets/en/template/TEMPLATE_SIREN_Vboss_Lovers.gif new file mode 100644 index 0000000000000000000000000000000000000000..c5b4079807d2192facdedd8045eeaacc3780e7d3 GIT binary patch literal 4002 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 literal 0 HcmV?d00001 diff --git a/assets/jp/template/TEMPLATE_SIREN_Vboss_Hermit.gif b/assets/jp/template/TEMPLATE_SIREN_Vboss_Hermit.gif new file mode 100644 index 0000000000000000000000000000000000000000..be67af5078900b743ec04d7a5d9271e5f73cb657 GIT binary patch literal 3821 zcmeI!c~4VW9LDj}(w1(P0;M2}Qb1a;U_qiq5ihi5(TbN%MIEdNh&pOPf~bh4tO7!j zH4&9|P;p|AL1Retk5&)~xFRm2#tlX>q5^JcQ08ZDLd-0$0M9G9=j49!eL}-Sr2gxf zh=U3dnwXgQ_U+r(uV2T<$H&ITK7Rc8;lqdb@87?B_il7_ba;69&6_u`U%wt28hZKi z<@4vy`}_MJK79D#!GpVZ@AmfgUb=Ltqod=(g$w7;pKohxYi(_9Zf-tx>XgA?(ChU_ zj~+d8a@jv9Yl+F)>k5QIV06 z5fKqer7}D`TqctR2M1#q78n?~Xwjm8fB=7gf2maJ=jS(P&Kz%VZ?RbH;o;%#?(XX9 zDi8=}%$VWi&lI`sc+;NTGK(^)!cDwoX8oHPqCqp_eP?&32?jfZuX}NN19s{Lw zNA;Zt_<>?aXRg4k%*H3X4Ixub4sy^A;iF_MmqzD`T2x6)HllJm6fLTP8vD%YqM|(* z+13(~$^ZV~LQoB!zkK-uq(6Q71ga-VkBp3fYViE()vLk5K_LC?*|SHF9)apRckW!j ze*NmztKHq*U0q!O8%Uo!cMepaK7IPci4(_<9|zS94Go76AFi*j2iSz_%F4=v2M?B) zmzR~5m6Vk1-@hM_6T-oEc6Rpe-Me?~+O>1%&Wwx(;GXwrttFd2>oi%EpZw zlarG-Y}k;HkO11_3qycaKCOxT_~cdoCmF991!ySTUj z>6tTU5~`<9pAM>RZEXQIkH@pJvLay9XtXKtS5NgT(hnns^O!&$T)_RMPC`<-Fl*iB zqpHCKDpoFzZN7n#5t)qwny?D1S=}r&4Gm$fW(Af)U$lyg%Pvtp1WG@WHbGIrcUBG! zOJqG&(-uT!+5K@WpYA>j$y-c@cAc}RMyE!YnK@gyVyw-i0PXg=l^p%S!1C4;>8Oh$d4aCzIX2) z=PgX$)FeL9y)Xg^w!qaLYX1UKo{IXoO5$? zv$C=Xu9=ycz!f4qNtEdD+O=!ftXTs!UbSi!K@S<;ROp8K!@ke zn+F{Rv_3vQkYX<{FHcWTsIf>S5(tj`l18Y!fj`zIWi`b$$=|ZkC@tZHUaTSYJ7qf+Ru)E&m}ip%pvnL z#)nh$=o*GOpQ6zu7FP=qHwyP7^DDB&~ zZwaUa0|UfzzJLEdaJ_x|HgLUl>lTQ;a^=e9%a?&G%xRO!bmq(%SkX;QO|YM#v_C?H z%vMxX0N2veQbH_bHYX=%-@bi>TR;n$g%!Ph`*xrUfrYxliUzs_TG-Dpo};6qaU6%b zf?F8RKQ=ZfD2Uk4^XJb8s}hNX;0jg&>g0Ha(oS-P(!zM=a9}F^JX7ce=tq&I`bGjZ zjEW+3%1vC^(i+#WFw}y(U91*Gopm!AFfx@ESk$K*F)Jx$IdHg)r%!1tdpuKFr|*}U z&+?Po#RVIKbe2NAQ55-Gc$t|+avi#vm_N;y#Nl>n+B=vwi+)9FwKK}+du7n|WTYig rQM~j|e+tr)88p?fv9Xv&VtI0L3>mA0h$B*~o**)Xp`u`1E?W3E@!K3x literal 0 HcmV?d00001 diff --git a/assets/jp/template/TEMPLATE_SIREN_Vboss_Lovers.gif b/assets/jp/template/TEMPLATE_SIREN_Vboss_Lovers.gif new file mode 100644 index 0000000000000000000000000000000000000000..c5b4079807d2192facdedd8045eeaacc3780e7d3 GIT binary patch literal 4002 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 literal 0 HcmV?d00001 diff --git a/assets/tw/template/TEMPLATE_SIREN_Vboss_Hermit.gif b/assets/tw/template/TEMPLATE_SIREN_Vboss_Hermit.gif new file mode 100644 index 0000000000000000000000000000000000000000..be67af5078900b743ec04d7a5d9271e5f73cb657 GIT binary patch literal 3821 zcmeI!c~4VW9LDj}(w1(P0;M2}Qb1a;U_qiq5ihi5(TbN%MIEdNh&pOPf~bh4tO7!j zH4&9|P;p|AL1Retk5&)~xFRm2#tlX>q5^JcQ08ZDLd-0$0M9G9=j49!eL}-Sr2gxf zh=U3dnwXgQ_U+r(uV2T<$H&ITK7Rc8;lqdb@87?B_il7_ba;69&6_u`U%wt28hZKi z<@4vy`}_MJK79D#!GpVZ@AmfgUb=Ltqod=(g$w7;pKohxYi(_9Zf-tx>XgA?(ChU_ zj~+d8a@jv9Yl+F)>k5QIV06 z5fKqer7}D`TqctR2M1#q78n?~Xwjm8fB=7gf2maJ=jS(P&Kz%VZ?RbH;o;%#?(XX9 zDi8=}%$VWi&lI`sc+;NTGK(^)!cDwoX8oHPqCqp_eP?&32?jfZuX}NN19s{Lw zNA;Zt_<>?aXRg4k%*H3X4Ixub4sy^A;iF_MmqzD`T2x6)HllJm6fLTP8vD%YqM|(* z+13(~$^ZV~LQoB!zkK-uq(6Q71ga-VkBp3fYViE()vLk5K_LC?*|SHF9)apRckW!j ze*NmztKHq*U0q!O8%Uo!cMepaK7IPci4(_<9|zS94Go76AFi*j2iSz_%F4=v2M?B) zmzR~5m6Vk1-@hM_6T-oEc6Rpe-Me?~+O>1%&Wwx(;GXwrttFd2>oi%EpZw zlarG-Y}k;HkO11_3qycaKCOxT_~cdoCmF991!ySTUj z>6tTU5~`<9pAM>RZEXQIkH@pJvLay9XtXKtS5NgT(hnns^O!&$T)_RMPC`<-Fl*iB zqpHCKDpoFzZN7n#5t)qwny?D1S=}r&4Gm$fW(Af)U$lyg%Pvtp1WG@WHbGIrcUBG! zOJqG&(-uT!+5K@WpYA>j$y-c@cAc}RMyE!YnK@gyVyw-i0PXg=l^p%S!1C4;>8Oh$d4aCzIX2) z=PgX$)FeL9y)Xg^w!qaLYX1UKo{IXoO5$? zv$C=Xu9=ycz!f4qNtEdD+O=!ftXTs!UbSi!K@S<;ROp8K!@ke zn+F{Rv_3vQkYX<{FHcWTsIf>S5(tj`l18Y!fj`zIWi`b$$=|ZkC@tZHUaTSYJ7qf+Ru)E&m}ip%pvnL z#)nh$=o*GOpQ6zu7FP=qHwyP7^DDB&~ zZwaUa0|UfzzJLEdaJ_x|HgLUl>lTQ;a^=e9%a?&G%xRO!bmq(%SkX;QO|YM#v_C?H z%vMxX0N2veQbH_bHYX=%-@bi>TR;n$g%!Ph`*xrUfrYxliUzs_TG-Dpo};6qaU6%b zf?F8RKQ=ZfD2Uk4^XJb8s}hNX;0jg&>g0Ha(oS-P(!zM=a9}F^JX7ce=tq&I`bGjZ zjEW+3%1vC^(i+#WFw}y(U91*Gopm!AFfx@ESk$K*F)Jx$IdHg)r%!1tdpuKFr|*}U z&+?Po#RVIKbe2NAQ55-Gc$t|+avi#vm_N;y#Nl>n+B=vwi+)9FwKK}+du7n|WTYig rQM~j|e+tr)88p?fv9Xv&VtI0L3>mA0h$B*~o**)Xp`u`1E?W3E@!K3x literal 0 HcmV?d00001 diff --git a/assets/tw/template/TEMPLATE_SIREN_Vboss_Lovers.gif b/assets/tw/template/TEMPLATE_SIREN_Vboss_Lovers.gif new file mode 100644 index 0000000000000000000000000000000000000000..c5b4079807d2192facdedd8045eeaacc3780e7d3 GIT binary patch literal 4002 zcmeI!`A<{n9>?+1LbZTsDYBHcEv4*RK`2s{LP7Q^n<65#?4uX~72%2sMGJ+h6xpo` z6_8O>zzq?#lue*2ATbUxMiv#+mVGc>aRtoSfJ5{%j5OXL|D2 zAnTA~1X*5QUR+%K@ZrPz_wN@L7Ut*Y-@JJhJIG>+4e}6urH@a=HB8y?fo=-FNTa?ds~fefxGtM@M^m`_-#g+uGW$T)EQP z+Is2IrIwbKix)4RKYzZyzP_%muBxi)%$YM1iKM)|{PgM5r%s(ZdGe%KEEb7GB_$=r z#l=NMMFN4~=+UD`jvUF)&p&+laBgmHPEO8&0|)l+-@kY7-aUKv?B2aQH8qvb=O-j2 z#K*_)+O;b#E^g<}o!ho;i;9YhjEv-RxnW^pAt52b!NEa6K>+~){{H@cetteaK5RDI z+uM8d=FOWnZDO%lUS3`sH*RDynI0YnncHFsgxffVC$|9yKOSv z*&JMNpq<-ZH{&q1|qHp*H=nx30!Jf?&bVq}@tK3_m=I#I0V-Ypfeg`)(LXL>#tlNu^DOKFMA z>S)|rLQ0%zkB!Y?c2Arv$HcZGk||;YHDn3?CH~| zN~IFy4-E|s4h{l-RQ`hp4|;lfQ1-WO-MV@6=8YRSIy*bTKj6Q7`7+>dZf*wojg5_f zUn-TJJ$n|t0%~h(D=RDE76A68rKP}LC={x|=jG)cI&=uYXJut&W@hf&w-3w%`1JJj zw6ru}pOTUS@_{{okByDpv113YkB*K8`CuNv2L=YB;5i%)fCud>sjqa-U@(554#;h6 zY^<%Vfx4xo0?4TjT(w5iIF7HLK zVQp@`RDU7PK${wX&rH-bux91Y{e|=fRASfGH^>)@goL$ZVQV--3nJKtmgiDrGaB{k z0W!A^qUA`9E-@o+JpAur5sg(*&Lz)0(zc9}#Vk;GLuLAQol$>K2Q({5tE;=_d5M}N zm-rr5Ub(l%IxSs+^iOPySl^1&O&I@c+D}4H$dU4ivJ?&Cs#xBVB2igsXvJ&dIrBw^ zF28rO8Y5;EVr}Z><2HT0A+`1v>X~@_zx)37?c37Q(&x{gKYjWHeV?A5e);kx_b@l8!lp#0pq za{wKD*VNQhS68ER@zSHV~PZbZMR8YBB!LB zKvm@b-Y&z7?1D=(_~Ei*J+;8j7)fGt2~o`~yFj8NEY-1zN`2j0*sEUe6x-@8nebH* zoY%UwY80Iqsj_D26P6f_el^bVJ(=MQM4@eAVpeODI_!LVrd__P~J9+#p@5p+?7&sNOO7F9gEB1ONK<>z6NI zV8(-Ps5bzI=?=7Ey-!R`pc#MiKP^(14bccpRz^`Aw4z8izu-l>DGMNnO z-O$i*;lc&9;Sg|@Zdmf@jE4;mB`+&01Lgp{u&}V8py1fCW2ylUNr#w2!_j~zB_;8A zJaoFlZdXa)zI{8o-owMg0XwXB)oxdne9M+CE2sPa^$r7GwcgRN|8u~jRfi3ah8+g{ zFE&5X7r;LT;OXVQVqyg)F%p$sD&8XY-!4HW>bPHFlJ+2 zFQ{|EIvsO)u1$kLdCGqKwc~;88Ldhj4}f>3l&sURmUB89TQrGQ+Y*(`3O2{s!M`i+ z&j^~2t_P0UBT7sS(l=8lO63tUpR=xM%5swLadwrd0lkYI>3_1`A&{P-! Date: Sat, 20 Dec 2025 19:20:47 +0800 Subject: [PATCH 22/24] Upd: [JP] TEMPLATE_COMBAT_LOADING (#5393) --- assets/jp/template/TEMPLATE_COMBAT_LOADING.png | Bin 746 -> 781 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/jp/template/TEMPLATE_COMBAT_LOADING.png b/assets/jp/template/TEMPLATE_COMBAT_LOADING.png index 9086656f04cf95773ab7511a0bbc9f3d62cbf568..2bf0123f5bd05ceebbd81243e1a5e5c419a24549 100644 GIT binary patch literal 781 zcmV+o1M>WdP) zj12FkNv5Xdm}q&|j?Vp@Gw0GCr4|eJ-s{`n$G7&{aIpLSeC%h(wRQl&{z3fJ`!5e3 z_oUJpr^^MWqfZ;_LV#-TMkeb*mCmx7nYnLO6#H>LgWbsF~%Hc;Ve90XOIt=+27L?#csFf zucG53$S)9p;_8~LBn8UL6-8zhEvFvoA;6M{FfJwBSa-V}h9M&;BQuNQf23oDfX}nwB%94rN;yiAw7sJ$3d1-`STi1{gH=nWn;a?B@hu`I5wZ|+Mf)@rZn47TzX z!aDGIiu`^*d(yqbL@K9)j0`YQlL^uk@|ys@{xt1&6snq9A8y=PT$U*9ADJYK{yDZ< zS?2K-yD&m;mRB%FcOLbmRf9}?UpaZARJ6Nx4&oVE=^q?<*7ueXyk0LcRnuyBsKgxm z5$hYBmh#R(Lqo%*3$0{vait+#^I==BI(H>GIwuHRXJ==F!rJ zk9CcO5Ms;cVkpR>&TUOm$k*@n zw6~^dB1Ds<12?Kwxz?%>1fjzO;eXgANgJ6gNv@BLv`#6?G+Lw-G5}dLK%yIF^BcFX zT_Tzp+Ta+SM>?hNSCNQD!auin2^NV&y1h_)a`k`X}PMj zD?Cnz1wb$qE*6XVd|uP)=;q+b_ix??9Td;ibyaSvRRL*JcV}vqN~QFdE|+D}6kK*YCt_xW6fLeYV#&E@n$zF=`^^cJ8Q44D1CdwPQ7<5w0| z)&&-ykpiHuca_t^YL`lq Date: Sat, 20 Dec 2025 19:29:51 +0800 Subject: [PATCH 23/24] Add: Chapter CD --- campaign/event_20251218_cn/c1.py | 96 +++++++++++++++++++++++++++++++ campaign/event_20251218_cn/c2.py | 75 ++++++++++++++++++++++++ campaign/event_20251218_cn/c3.py | 82 +++++++++++++++++++++++++++ campaign/event_20251218_cn/d1.py | 97 ++++++++++++++++++++++++++++++++ campaign/event_20251218_cn/d2.py | 85 ++++++++++++++++++++++++++++ campaign/event_20251218_cn/d3.py | 91 ++++++++++++++++++++++++++++++ 6 files changed, 526 insertions(+) create mode 100644 campaign/event_20251218_cn/c1.py create mode 100644 campaign/event_20251218_cn/c2.py create mode 100644 campaign/event_20251218_cn/c3.py create mode 100644 campaign/event_20251218_cn/d1.py create mode 100644 campaign/event_20251218_cn/d2.py create mode 100644 campaign/event_20251218_cn/d3.py diff --git a/campaign/event_20251218_cn/c1.py b/campaign/event_20251218_cn/c1.py new file mode 100644 index 000000000..fd594847a --- /dev/null +++ b/campaign/event_20251218_cn/c1.py @@ -0,0 +1,96 @@ +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('C1') +MAP.shape = 'J8' +MAP.camera_data = ['D3', 'D6', 'G3', 'G6'] +MAP.camera_data_spawn_point = ['G2'] +MAP.map_data = """ + ++ -- -- -- -- -- ++ -- SP -- + ++ ME ++ ++ ++ Me -- -- -- SP + -- -- -- -- Me -- -- MS -- -- + ME -- ME -- -- -- __ -- ++ ++ + ++ -- ++ ++ -- MS -- -- ++ ++ + -- -- -- ++ ME -- ++ Me -- -- + -- MB -- -- -- -- -- -- -- -- + -- -- -- ++ 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 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': 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: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Vboss_Star'] + 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 + 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 + } + HOMO_EDGE_COLOR_RANGE = (0, 17) + MAP_WALK_USE_CURRENT_FLEET = True + MAP_SWIPE_MULTIPLY = (1.232, 1.255) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.191, 1.213) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.156, 1.177) + + +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_20251218_cn/c2.py b/campaign/event_20251218_cn/c2.py new file mode 100644 index 000000000..87e2ebf10 --- /dev/null +++ b/campaign/event_20251218_cn/c2.py @@ -0,0 +1,75 @@ +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 .c1 import Config as ConfigBase + +MAP = CampaignMap('C2') +MAP.shape = 'J8' +MAP.camera_data = ['E3', 'E6', 'F3', 'F6'] +MAP.camera_data_spawn_point = ['E6'] +MAP.map_data = """ + -- -- -- -- -- ++ ME ++ -- -- + -- -- MB -- -- ME -- ME -- -- + ++ ++ -- ++ ++ -- -- -- ME -- + ++ -- __ -- ++ Me -- ++ ++ ++ + -- MS -- MS -- -- -- Me -- -- + -- -- MS -- -- Me -- -- ME -- + ++ -- -- -- -- ++ -- ME ++ ++ + ++ SP -- SP -- 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}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, '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 = ['Vboss_Star'] + 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_4(self): + return self.clear_boss() diff --git a/campaign/event_20251218_cn/c3.py b/campaign/event_20251218_cn/c3.py new file mode 100644 index 000000000..99f63596e --- /dev/null +++ b/campaign/event_20251218_cn/c3.py @@ -0,0 +1,82 @@ +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 .c1 import Config as ConfigBase + +MAP = CampaignMap('C3') +MAP.shape = 'K10' +MAP.camera_data = ['F3', 'F6'] +MAP.camera_data_spawn_point = ['F6'] +MAP.map_data = """ + -- ++ ++ ++ -- -- -- ++ ++ ++ -- + -- ++ -- Me -- MB -- Me -- ++ -- + -- -- ME -- Me -- Me -- ME -- -- + -- -- ++ MS -- __ -- MS ++ -- -- + -- -- ++ -- -- MS -- -- ++ -- -- + ++ ++ ME -- -- -- -- -- ME ++ ++ + ++ ++ -- -- SP -- SP -- -- ++ ++ + -- -- 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 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 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': 1}, + {'battle': 5, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, K8, \ +A9, B9, C9, D9, E9, F9, G9, H9, I9, J9, K9, \ +A10, B10, C10, D10, E10, F10, G10, H10, I10, J10, K10, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Vboss_Star'] + 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_20251218_cn/d1.py b/campaign/event_20251218_cn/d1.py new file mode 100644 index 000000000..cf99034b0 --- /dev/null +++ b/campaign/event_20251218_cn/d1.py @@ -0,0 +1,97 @@ +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 = 'J8' +MAP.camera_data = ['D3', 'D6', 'G3', 'G6'] +MAP.camera_data_spawn_point = ['G2'] +MAP.map_data = """ + ++ -- -- -- -- -- ++ -- SP -- + ++ ME ++ ++ ++ Me -- -- -- SP + -- -- -- -- Me -- -- MS -- -- + ME -- ME -- -- -- __ -- ++ ++ + ++ -- ++ ++ -- MS -- -- ++ ++ + -- -- -- ++ ME -- ++ Me -- -- + -- MB -- -- -- -- -- -- -- -- + -- -- -- ++ 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 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 9, 'siren': 2}, + {'battle': 1}, + {'battle': 2}, + {'battle': 3}, + {'battle': 4}, + {'battle': 5, '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: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Vboss_Hermit', 'Vboss_Lovers'] + 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 + 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 + } + HOMO_EDGE_COLOR_RANGE = (0, 17) + MAP_WALK_USE_CURRENT_FLEET = True + MAP_SWIPE_MULTIPLY = (1.217, 1.240) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.177, 1.199) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.143, 1.163) + + +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_20251218_cn/d2.py b/campaign/event_20251218_cn/d2.py new file mode 100644 index 000000000..ddf96d6e7 --- /dev/null +++ b/campaign/event_20251218_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 = ['E3', 'E6', 'F3', 'F6'] +MAP.camera_data_spawn_point = ['E6'] +MAP.map_data = """ + -- -- -- -- -- ++ ME ++ -- -- + -- -- MB -- -- ME -- ME -- -- + ++ ++ -- ++ ++ -- -- -- ME -- + ++ -- __ -- ++ Me -- ++ ++ ++ + -- MS -- MS -- -- -- Me -- -- + -- -- MS -- -- Me -- -- ME -- + ++ -- -- -- -- ++ -- ME ++ ++ + ++ SP -- SP -- 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': 9, 'siren': 3}, + {'battle': 1}, + {'battle': 2}, + {'battle': 3}, + {'battle': 4}, + {'battle': 5}, + {'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 = ['Vboss_Hermit', 'Vboss_Chariot'] + 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_20251218_cn/d3.py b/campaign/event_20251218_cn/d3.py new file mode 100644 index 000000000..107d0066e --- /dev/null +++ b/campaign/event_20251218_cn/d3.py @@ -0,0 +1,91 @@ +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 = 'K10' +MAP.camera_data = ['F3', 'F6'] +MAP.camera_data_spawn_point = ['F6'] +MAP.map_data = """ + -- ++ ++ ++ -- -- -- ++ ++ ++ -- + -- ++ -- Me -- MB -- Me -- ++ -- + -- -- ME -- Me -- Me -- ME -- -- + -- -- ++ MS -- __ -- MS ++ -- -- + -- -- ++ -- -- MS -- -- ++ -- -- + ++ ++ ME -- -- -- -- -- ME ++ ++ + ++ ++ -- -- SP -- SP -- -- ++ ++ + -- -- 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 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 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': 9, 'siren': 3}, + {'battle': 1}, + {'battle': 2}, + {'battle': 3}, + {'battle': 4}, + {'battle': 5}, + {'battle': 6, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, K8, \ +A9, B9, C9, D9, E9, F9, G9, H9, I9, J9, K9, \ +A10, B10, C10, D10, E10, F10, G10, H10, I10, J10, K10, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Vboss_Lovers', 'Vboss_Chariot'] + 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() From bcfe9b260e2cf98220492a89280a139cb744d8fe Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sat, 20 Dec 2025 21:24:30 +0800 Subject: [PATCH 24/24] Add: Chapter SP --- campaign/event_20251218_cn/sp.py | 111 +++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 campaign/event_20251218_cn/sp.py diff --git a/campaign/event_20251218_cn/sp.py b/campaign/event_20251218_cn/sp.py new file mode 100644 index 000000000..f74e5236f --- /dev/null +++ b/campaign/event_20251218_cn/sp.py @@ -0,0 +1,111 @@ +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('SP') +MAP.shape = 'I8' +MAP.camera_data = ['D3', 'D6', 'F3', 'F6'] +MAP.camera_data_spawn_point = ['F2'] +MAP.map_data = """ + ++ ++ ++ -- -- -- -- SP -- + -- ME -- -- -- MS -- -- SP + -- -- ME ++ -- -- MS -- -- + ME -- -- -- ME __ -- MS -- + -- ME -- ME ++ -- ++ ++ ME + ++ -- -- -- -- -- ++ ++ -- + -- MB -- ++ 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 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 10, 'siren': 3}, + {'battle': 1}, + {'battle': 2}, + {'battle': 3}, + {'battle': 4}, + {'battle': 5}, + {'battle': 6}, + {'battle': 7, '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: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Vboss_Hermit', 'Vboss_Lovers', 'Vboss_Chariot'] + 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 + STAR_REQUIRE_1 = 0 + STAR_REQUIRE_2 = 0 + STAR_REQUIRE_3 = 0 + # ===== End of generated config ===== + + MAP_CHAPTER_SWITCH_20241219 = True + STAGE_ENTRANCE = ['half', '20240725'] + STAGE_INCREASE_AB = 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 + } + HOMO_EDGE_COLOR_RANGE = (0, 17) + MAP_WALK_USE_CURRENT_FLEET = True + MAP_SWIPE_MULTIPLY = (1.180, 1.202) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.141, 1.162) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.108, 1.128) + MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom' + MAP_IS_ONE_TIME_STAGE = True + + +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=2): + 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_7(self): + return self.fleet_boss.clear_boss()