diff --git a/assets/cn/handler/USE_DATA_KEY_NOTIFIED.png b/assets/cn/handler/USE_DATA_KEY_NOTIFIED.png index 022cdf93f..b855ef36d 100644 Binary files a/assets/cn/handler/USE_DATA_KEY_NOTIFIED.png and b/assets/cn/handler/USE_DATA_KEY_NOTIFIED.png differ diff --git a/assets/cn/war_archives/TEMPLATE_VIOLET_TEMPEST_BLOOMING_LYCORIS.png b/assets/cn/war_archives/TEMPLATE_VIOLET_TEMPEST_BLOOMING_LYCORIS.png new file mode 100644 index 000000000..52209141d Binary files /dev/null and b/assets/cn/war_archives/TEMPLATE_VIOLET_TEMPEST_BLOOMING_LYCORIS.png differ diff --git a/campaign/Readme.md b/campaign/Readme.md index 1a4bc485a..c35252bf2 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -55,6 +55,7 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20250619 | war archives 20220728 cn | Aquilifer's Ballade | 雄鹰的叙事歌 | Aquilifer's Ballade | 鋼鷲の冒険譚 | 雄鷹的敘事歌 | | 20250717 | war archives 20220428 cn | Rondo at Rainbow's End | 虹彩的终幕曲 | Rondo at Rainbow's End | 吟ずる瑠璃の楽章 | 虹彩的終幕曲 | | 20251016 | war archives 20231026 cn | Tempesta and the Fountain of Youth | 飓风与青春之泉 | Tempesta and the Fountain of Youth | テンペスタと若返りの泉 | 飓風與青春之泉 | +| 20251106 | war archives 20220915 cn | Violet Tempest Blooming Lycoris | 紫绛槿岚 | Violet Tempest Blooming Lycoris | 赫の涙月 菫の暁風 | 紫絳槿嵐 | | 20200227 | event 20200227 cn | Northern Overture | 北境序曲 | Northern Overture | 凍絶の北海 | - | | 20200312 | event 20200312 cn | The Solomon Ranger | 复刻斯图尔特的硝烟 | The Solomon Ranger Rerun | 南洋に靡く硝煙(復刻) | - | | 20200326 | event 20200326 cn | Microlayer Medley | 微层混合 | Microlayer Medley | 闇靄払う銀翼 | - | @@ -264,3 +265,5 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20251016 | event 20230817 cn | The Fool's Scales | 复刻愚者的天平 | The Fool's Scales Rerun | 愚者の天秤(復刻) | - | | 20251023 | event 20251023 cn | Tempesta and Islas de Libertád | 飓风与自由群岛 | Tempesta and Islas de Libertád | テンペスタと自由群島 | - | | 20251106 | event 20230803 cn | Anthem of Remembrance | 复刻奏响鸢尾之歌 | Anthem of Remembrance Rerun | 燃ゆる聖都の回想曲(復刻) | - | +| 20251106 | event 20250227 cn | Paradiso of Shackled Light | - | - | - | 樊籠內的神光 | +| 20251113 | event 20230914 cn | Effulgence Before Eclipse | 复刻须臾望月抄 | Effulgence Before Eclipse Rerun | 須臾望月抄(復刻) | - | diff --git a/campaign/event_20230914_cn/a1.py b/campaign/event_20230914_cn/a1.py index 447dcae3a..9a7ee2a89 100644 --- a/campaign/event_20230914_cn/a1.py +++ b/campaign/event_20230914_cn/a1.py @@ -76,7 +76,9 @@ class Config: MAP_SWIPE_MULTIPLY = (1.074, 1.095) MAP_SWIPE_MULTIPLY_MINITOUCH = (1.039, 1.058) MAP_SWIPE_MULTIPLY_MAATOUCH = (1.009, 1.027) - + STAGE_INCREASE_CUSTOM = [ + 'A1 > A2 > A3 > B1 > B2 > B3 > C1 > C2 > C3 > D1 > D2 > D3', + ] class Campaign(CampaignBase): MAP = MAP diff --git a/campaign/event_20230914_cn/b1.py b/campaign/event_20230914_cn/b1.py index ed6df54e8..8a0a57f89 100644 --- a/campaign/event_20230914_cn/b1.py +++ b/campaign/event_20230914_cn/b1.py @@ -75,7 +75,9 @@ class Config: MAP_SWIPE_MULTIPLY = (1.146, 1.167) MAP_SWIPE_MULTIPLY_MINITOUCH = (1.108, 1.128) MAP_SWIPE_MULTIPLY_MAATOUCH = (1.076, 1.095) - + STAGE_INCREASE_CUSTOM = [ + 'A1 > A2 > A3 > B1 > B2 > B3 > C1 > C2 > C3 > D1 > D2 > D3', + ] class Campaign(CampaignBase): MAP = MAP diff --git a/campaign/event_20230914_cn/c1.py b/campaign/event_20230914_cn/c1.py index 9ecf8bfdf..5baeb29b0 100644 --- a/campaign/event_20230914_cn/c1.py +++ b/campaign/event_20230914_cn/c1.py @@ -61,7 +61,9 @@ class Config: MAP_SWIPE_MULTIPLY = (1.074, 1.095) MAP_SWIPE_MULTIPLY_MINITOUCH = (1.039, 1.058) MAP_SWIPE_MULTIPLY_MAATOUCH = (1.009, 1.027) - + STAGE_INCREASE_CUSTOM = [ + 'A1 > A2 > A3 > B1 > B2 > B3 > C1 > C2 > C3 > D1 > D2 > D3', + ] class Campaign(CampaignBase): MAP = MAP diff --git a/campaign/event_20230914_cn/d1.py b/campaign/event_20230914_cn/d1.py index dc752a208..721e2c5af 100644 --- a/campaign/event_20230914_cn/d1.py +++ b/campaign/event_20230914_cn/d1.py @@ -75,7 +75,9 @@ class Config: MAP_SWIPE_MULTIPLY = (1.146, 1.167) MAP_SWIPE_MULTIPLY_MINITOUCH = (1.108, 1.128) MAP_SWIPE_MULTIPLY_MAATOUCH = (1.076, 1.095) - + STAGE_INCREASE_CUSTOM = [ + 'A1 > A2 > A3 > B1 > B2 > B3 > C1 > C2 > C3 > D1 > D2 > D3', + ] class Campaign(CampaignBase): MAP = MAP diff --git a/campaign/war_archives_20220915_cn/a1.py b/campaign/war_archives_20220915_cn/a1.py new file mode 100644 index 000000000..42916550d --- /dev/null +++ b/campaign/war_archives_20220915_cn/a1.py @@ -0,0 +1,94 @@ +from .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 = 'H8' +MAP.camera_data = ['D3', 'E4', 'E6'] +MAP.camera_data_spawn_point = ['D6'] +MAP.map_data = """ + -- ++ ++ -- -- -- -- -- + -- ME ++ ME Me ++ ++ -- + ME -- -- -- -- ++ ++ -- + MS -- MS -- Me -- MB -- + -- -- ++ ME __ -- -- ME + -- -- ++ MS -- Me ME -- + SP -- -- -- Me ++ ++ -- + -- 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 +""" +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, \ +A2, B2, C2, D2, E2, F2, G2, H2, \ +A3, B3, C3, D3, E3, F3, G3, H3, \ +A4, B4, C4, D4, E4, F4, G4, H4, \ +A5, B5, C5, D5, E5, F5, G5, H5, \ +A6, B6, C6, D6, E6, F6, G6, H6, \ +A7, B7, C7, D7, E7, F7, G7, H7, \ +A8, B8, C8, D8, E8, F8, G8, H8, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Wakaba', 'Suzutsuki'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 33), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 33, 255), + 'prominence': 10, + 'distance': 50, + # 'width': (0, 7), + 'wlen': 1000 + } + MAP_SWIPE_MULTIPLY = (1.093, 1.113) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.057, 1.076) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.026, 1.045) + HOMO_EDGE_HOUGHLINES_THRESHOLD = 210 + MAP_WALK_USE_CURRENT_FLEET = True + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD = 0.65 + + 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/war_archives_20220915_cn/a2.py b/campaign/war_archives_20220915_cn/a2.py new file mode 100644 index 000000000..d028c6469 --- /dev/null +++ b/campaign/war_archives_20220915_cn/a2.py @@ -0,0 +1,80 @@ +from .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 = 'H8' +MAP.camera_data = ['D4', 'D6', 'E3'] +MAP.camera_data_spawn_point = ['D2'] +MAP.map_data = """ + -- SP ++ ++ -- ME -- ME + SP -- -- ++ Me -- -- -- + -- -- ME MS -- Me -- ++ + Me -- -- -- __ -- -- ++ + -- MS Me -- -- -- MB -- + -- ++ ++ ++ -- ++ ++ -- + ME -- -- ME -- ++ ++ -- + -- ME ++ -- ME -- -- ++ +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 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, \ +A2, B2, C2, D2, E2, F2, G2, H2, \ +A3, B3, C3, D3, E3, F3, G3, H3, \ +A4, B4, C4, D4, E4, F4, G4, H4, \ +A5, B5, C5, D5, E5, F5, G5, H5, \ +A6, B6, C6, D6, E6, F6, G6, H6, \ +A7, B7, C7, D7, E7, F7, G7, H7, \ +A8, B8, C8, D8, E8, F8, G8, H8, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Miyuki', 'Jintsuu'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (1.220, 1.243) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.180, 1.201) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.145, 1.166) + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD = 0.65 + + 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/war_archives_20220915_cn/a3.py b/campaign/war_archives_20220915_cn/a3.py new file mode 100644 index 000000000..0580791da --- /dev/null +++ b/campaign/war_archives_20220915_cn/a3.py @@ -0,0 +1,80 @@ +from .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 = 'H8' +MAP.camera_data = ['D3', 'E4', 'E6'] +MAP.camera_data_spawn_point = ['E2'] +MAP.map_data = """ + ++ ++ ++ ME -- -- SP -- + ME -- Me -- MS -- -- SP + -- -- -- -- -- ++ -- -- + ME -- ME -- Me -- MS -- + -- ++ ++ ++ ME __ -- 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 +""" +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, \ +A2, B2, C2, D2, E2, F2, G2, H2, \ +A3, B3, C3, D3, E3, F3, G3, H3, \ +A4, B4, C4, D4, E4, F4, G4, H4, \ +A5, B5, C5, D5, E5, F5, G5, H5, \ +A6, B6, C6, D6, E6, F6, G6, H6, \ +A7, B7, C7, D7, E7, F7, G7, H7, \ +A8, B8, C8, D8, E8, F8, G8, H8, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Hatakaze', 'Kinu', 'Haguro'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (1.220, 1.243) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.180, 1.201) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.145, 1.166) + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD = 0.65 + + 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/war_archives_20220915_cn/b1.py b/campaign/war_archives_20220915_cn/b1.py new file mode 100644 index 000000000..558f64dc5 --- /dev/null +++ b/campaign/war_archives_20220915_cn/b1.py @@ -0,0 +1,94 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger + +MAP = CampaignMap('B1') +MAP.shape = 'H8' +MAP.camera_data = ['D3', 'D5'] +MAP.camera_data_spawn_point = ['E6'] +MAP.map_data = """ + ++ -- -- -- ME -- -- -- + -- -- -- ME -- ME ++ -- + -- ++ ++ ME -- Me ++ ME + -- MB -- -- -- -- -- -- + Me -- -- __ Me ME MS -- + ++ ME -- ME -- ++ -- -- + -- -- Me -- MS -- -- SP + -- ++ ++ ++ -- -- SP -- +""" +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 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 1}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2, 'boss': 1}, + {'battle': 5, 'enemy': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, \ +A2, B2, C2, D2, E2, F2, G2, H2, \ +A3, B3, C3, D3, E3, F3, G3, H3, \ +A4, B4, C4, D4, E4, F4, G4, H4, \ +A5, B5, C5, D5, E5, F5, G5, H5, \ +A6, B6, C6, D6, E6, F6, G6, H6, \ +A7, B7, C7, D7, E7, F7, G7, H7, \ +A8, B8, C8, D8, E8, F8, G8, H8, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Harutsuki', 'Kawakaze', 'Hiei'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 33), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 33, 255), + 'prominence': 10, + 'distance': 50, + # 'width': (0, 7), + 'wlen': 1000 + } + MAP_WALK_USE_CURRENT_FLEET = True + MAP_SWIPE_MULTIPLY = (1.023, 1.043) + MAP_SWIPE_MULTIPLY_MINITOUCH = (0.990, 1.008) + MAP_SWIPE_MULTIPLY_MAATOUCH = (0.961, 0.978) + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD = 0.65 + + 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/war_archives_20220915_cn/b2.py b/campaign/war_archives_20220915_cn/b2.py new file mode 100644 index 000000000..a6e235ee3 --- /dev/null +++ b/campaign/war_archives_20220915_cn/b2.py @@ -0,0 +1,75 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .b1 import Config as ConfigBase + +MAP = CampaignMap('B2') +MAP.shape = 'M6' +MAP.camera_data = ['D4', 'E3', 'G3', 'G4'] +MAP.camera_data_spawn_point = ['H3'] +MAP.map_data = """ + -- -- -- -- ME -- ++ ++ -- Me ++ ++ ++ + ++ ++ ++ ME -- Me ++ ++ MS -- -- -- -- + ++ ++ ++ ME -- __ -- MS -- -- SP ++ ++ + ++ ++ MB -- -- __ -- MS -- -- SP ++ ++ + ME -- -- -- -- Me ++ ++ MS -- -- -- -- + -- ME ME ++ ME -- ++ ++ -- Me ++ ++ ++ +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 1}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2}, + {'battle': 5, 'enemy': 1, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, L1, M1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, L2, M2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, L3, M3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, L4, M4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, L5, M5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, L6, M6, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Kongo', 'Yamashiro', 'Akagi', 'Kaga'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (1.123, 1.144) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.086, 1.106) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.054, 1.073) + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD = 0.65 + + 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/war_archives_20220915_cn/b3.py b/campaign/war_archives_20220915_cn/b3.py new file mode 100644 index 000000000..8dd25bf78 --- /dev/null +++ b/campaign/war_archives_20220915_cn/b3.py @@ -0,0 +1,85 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .b1 import Config as ConfigBase + +MAP = CampaignMap('B3') +MAP.shape = 'I9' +MAP.camera_data = ['D3', 'D5', 'E5'] +MAP.camera_data_spawn_point = ['D7'] +MAP.map_covered = ['E3'] +MAP.map_data = """ + ++ -- -- -- ME -- -- -- ++ + -- ME ME -- -- -- ME ME -- + -- ME ++ Me MS Me ++ ME -- + -- -- Me -- -- -- Me -- -- + ME -- MS -- ++ -- MS -- ME + -- -- Me -- MB -- Me -- -- + -- ME ++ -- MS -- ++ ME -- + -- -- -- -- __ -- -- -- -- + ++ ++ ++ SP -- SP ++ ++ ++ +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 2}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2}, + {'battle': 5, 'enemy': 1, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, \ +A9, B9, C9, D9, E9, F9, G9, H9, I9, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Mikasa', 'Nagato', 'Akagi', 'Kaga'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (0.985, 1.003) + MAP_SWIPE_MULTIPLY_MINITOUCH = (0.952, 0.970) + MAP_SWIPE_MULTIPLY_MAATOUCH = (0.925, 0.941) + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD = 0.65 + + 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/war_archives_20220915_cn/c1.py b/campaign/war_archives_20220915_cn/c1.py new file mode 100644 index 000000000..8da18f1d2 --- /dev/null +++ b/campaign/war_archives_20220915_cn/c1.py @@ -0,0 +1,79 @@ +from .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 = 'H8' +MAP.camera_data = ['D3', 'E4', 'E6'] +MAP.camera_data_spawn_point = ['D6'] +MAP.map_data = """ + -- ++ ++ -- -- -- -- -- + -- ME ++ ME Me ++ ++ -- + ME -- -- -- -- ++ ++ -- + MS -- MS -- Me -- MB -- + -- -- ++ ME __ -- -- ME + -- -- ++ MS -- Me ME -- + SP -- -- -- Me ++ ++ -- + -- 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 +""" +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, \ +A2, B2, C2, D2, E2, F2, G2, H2, \ +A3, B3, C3, D3, E3, F3, G3, H3, \ +A4, B4, C4, D4, E4, F4, G4, H4, \ +A5, B5, C5, D5, E5, F5, G5, H5, \ +A6, B6, C6, D6, E6, F6, G6, H6, \ +A7, B7, C7, D7, E7, F7, G7, H7, \ +A8, B8, C8, D8, E8, F8, G8, H8, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Sakawa', 'Chitose', 'Chiyoda'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (1.093, 1.113) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.057, 1.076) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.026, 1.045) + MAP_WALK_USE_CURRENT_FLEET = 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=0): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/war_archives_20220915_cn/c2.py b/campaign/war_archives_20220915_cn/c2.py new file mode 100644 index 000000000..5fb1974a9 --- /dev/null +++ b/campaign/war_archives_20220915_cn/c2.py @@ -0,0 +1,79 @@ +from .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 = 'H8' +MAP.camera_data = ['D4', 'D6', 'E3'] +MAP.camera_data_spawn_point = ['D2'] +MAP.map_data = """ + -- SP ++ ++ -- ME -- ME + SP -- -- ++ Me -- -- -- + -- -- ME MS -- Me -- ++ + Me -- -- -- __ -- -- ++ + -- MS Me -- -- -- MB -- + -- ++ ++ ++ -- ++ ++ -- + ME -- -- ME -- ++ ++ -- + -- ME ++ -- ME -- -- ++ +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 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, \ +A2, B2, C2, D2, E2, F2, G2, H2, \ +A3, B3, C3, D3, E3, F3, G3, H3, \ +A4, B4, C4, D4, E4, F4, G4, H4, \ +A5, B5, C5, D5, E5, F5, G5, H5, \ +A6, B6, C6, D6, E6, F6, G6, H6, \ +A7, B7, C7, D7, E7, F7, G7, H7, \ +A8, B8, C8, D8, E8, F8, G8, H8, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Jintsuu', 'Ryuuhou', 'Kaga'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (1.220, 1.243) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.180, 1.201) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.145, 1.166) + + +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/war_archives_20220915_cn/c3.py b/campaign/war_archives_20220915_cn/c3.py new file mode 100644 index 000000000..82e35b41d --- /dev/null +++ b/campaign/war_archives_20220915_cn/c3.py @@ -0,0 +1,80 @@ +from .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 = 'H8' +MAP.camera_data = ['D3', 'E4', 'E6'] +MAP.camera_data_spawn_point = ['E2'] +MAP.map_data = """ + ++ ++ ++ ME -- -- SP -- + ME -- Me -- MS -- -- SP + -- -- -- -- -- ++ -- -- + ME -- ME -- Me -- MS -- + -- ++ ++ ++ ME __ -- 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 +""" +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, \ +A2, B2, C2, D2, E2, F2, G2, H2, \ +A3, B3, C3, D3, E3, F3, G3, H3, \ +A4, B4, C4, D4, E4, F4, G4, H4, \ +A5, B5, C5, D5, E5, F5, G5, H5, \ +A6, B6, C6, D6, E6, F6, G6, H6, \ +A7, B7, C7, D7, E7, F7, G7, H7, \ +A8, B8, C8, D8, E8, F8, G8, H8, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Haguro', 'Kongo', 'Kirishima'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (1.220, 1.243) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.180, 1.201) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.145, 1.166) + + +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/war_archives_20220915_cn/campaign_base.py b/campaign/war_archives_20220915_cn/campaign_base.py new file mode 100644 index 000000000..1ca22192e --- /dev/null +++ b/campaign/war_archives_20220915_cn/campaign_base.py @@ -0,0 +1,14 @@ +from module.base.utils import get_color, red_overlay_transparency +from ..campaign_war_archives.campaign_base import CampaignBase as CampaignBase_ +from module.handler.assets import MAP_ENEMY_SEARCHING +from module.map.assets import SWITCH_OVER + + +class CampaignBase(CampaignBase_): + def enemy_searching_appear(self): + if not self.appear(SWITCH_OVER, offset=(20, 20)): + return False + + return red_overlay_transparency( + MAP_ENEMY_SEARCHING.color, get_color(self.device.image, MAP_ENEMY_SEARCHING.area) + ) > self.MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD diff --git a/campaign/war_archives_20220915_cn/d1.py b/campaign/war_archives_20220915_cn/d1.py new file mode 100644 index 000000000..1d6e32f28 --- /dev/null +++ b/campaign/war_archives_20220915_cn/d1.py @@ -0,0 +1,93 @@ +from .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 = 'H8' +MAP.camera_data = ['D3', 'D5'] +MAP.camera_data_spawn_point = ['E6'] +MAP.map_data = """ + ++ -- -- -- ME -- -- -- + -- -- -- ME -- ME ++ -- + -- ++ ++ ME -- Me ++ ME + -- MB -- -- -- -- -- -- + Me -- -- __ Me ME MS -- + ++ ME -- ME -- ++ -- -- + -- -- Me -- MS -- -- SP + -- ++ ++ ++ -- -- SP -- +""" +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 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 2}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2}, + {'battle': 5, 'enemy': 1, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, \ +A2, B2, C2, D2, E2, F2, G2, H2, \ +A3, B3, C3, D3, E3, F3, G3, H3, \ +A4, B4, C4, D4, E4, F4, G4, H4, \ +A5, B5, C5, D5, E5, F5, G5, H5, \ +A6, B6, C6, D6, E6, F6, G6, H6, \ +A7, B7, C7, D7, E7, F7, G7, H7, \ +A8, B8, C8, D8, E8, F8, G8, H8, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Hiei', 'Haruna', 'Shokaku'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 33), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 33, 255), + 'prominence': 10, + 'distance': 50, + # 'width': (0, 7), + 'wlen': 1000 + } + MAP_WALK_USE_CURRENT_FLEET = True + MAP_SWIPE_MULTIPLY = (1.023, 1.043) + MAP_SWIPE_MULTIPLY_MINITOUCH = (0.990, 1.008) + MAP_SWIPE_MULTIPLY_MAATOUCH = (0.961, 0.978) + + +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/war_archives_20220915_cn/d2.py b/campaign/war_archives_20220915_cn/d2.py new file mode 100644 index 000000000..3fa21f78d --- /dev/null +++ b/campaign/war_archives_20220915_cn/d2.py @@ -0,0 +1,83 @@ +from .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 = 'M6' +MAP.camera_data = ['D4', 'E3', 'G3', 'G4'] +MAP.camera_data_spawn_point = ['H3'] +MAP.map_data = """ + -- -- -- -- ME -- ++ ++ -- Me ++ ++ ++ + ++ ++ ++ ME -- Me ++ ++ MS -- -- -- -- + ++ ++ ++ ME -- __ -- MS -- -- SP ++ ++ + ++ ++ MB -- -- __ -- MS -- -- SP ++ ++ + ME -- -- -- -- Me ++ ++ MS -- -- -- -- + -- ME ME ++ ME -- ++ ++ -- Me ++ ++ ++ +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 2}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2, 'siren': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2}, + {'battle': 5, 'enemy': 1}, + {'battle': 6, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, L1, M1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, L2, M2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, L3, M3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, L4, M4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, L5, M5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, L6, M6, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Kongo', 'Yamashiro', 'Akagi', 'Kaga'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (1.123, 1.144) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.086, 1.106) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.054, 1.073) + + +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/war_archives_20220915_cn/d3.py b/campaign/war_archives_20220915_cn/d3.py new file mode 100644 index 000000000..51acc8f7a --- /dev/null +++ b/campaign/war_archives_20220915_cn/d3.py @@ -0,0 +1,93 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .d1 import Config as ConfigBase + +MAP = CampaignMap('D3') +MAP.shape = 'I9' +MAP.camera_data = ['D3', 'D5', 'E5'] +MAP.camera_data_spawn_point = ['D7'] +MAP.map_covered = ['E3'] +MAP.map_data = """ + ++ -- -- -- ME -- -- -- ++ + -- ME ME -- -- -- ME ME -- + -- ME ++ Me MS Me ++ ME -- + -- -- Me -- -- -- Me -- -- + ME -- MS -- ++ -- MS -- ME + -- -- Me -- MB -- Me -- -- + -- ME ++ -- MS -- ++ ME -- + -- -- -- -- __ -- -- -- -- + ++ ++ ++ SP -- SP ++ ++ ++ +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 2}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2, 'siren': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2}, + {'battle': 5, 'enemy': 1}, + {'battle': 6, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, \ +A9, B9, C9, D9, E9, F9, G9, H9, I9, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Mikasa', 'Nagato', 'Akagi', 'Kaga'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (0.985, 1.003) + MAP_SWIPE_MULTIPLY_MINITOUCH = (0.952, 0.970) + MAP_SWIPE_MULTIPLY_MAATOUCH = (0.925, 0.941) + + +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/config/template.json b/config/template.json index f07fba58e..fd8fde938 100644 --- a/config/template.json +++ b/config/template.json @@ -491,10 +491,10 @@ }, "EventPt": { "EventPtSwitch": false, - "Event2MapName": "SP3", - "EventDailyAMapName": "sp1 > sp2 > sp3", - "EventDailySpMapName": false, - "EventDailyCD": false + "Event2MapName": "d3", + "EventDailyAMapName": "a1 > a2 > a3 > b1 > b2 > b3", + "EventDailySpMapName": "sp", + "EventDailyCD": "c1 > c2 > c3 > d1 > d2 > d3" }, "Fleet": { "Fleet1": 1, @@ -860,7 +860,7 @@ }, "Campaign": { "Name": "D3", - "Event": "war_archives_20231026_cn", + "Event": "war_archives_20220915_cn", "Mode": "normal", "UseClearMode": true, "UseFleetLock": true, diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 0bdcb7993..583fcf537 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -1977,25 +1977,25 @@ "type": "select", "value": "campaign_main", "option": [ - "event_20230803_cn", - "event_20250912_cn" + "event_20230914_cn", + "event_20250227_cn" ], "display": "hide", "option_cn": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_en": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_jp": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_tw": [ - "event_20250912_cn" + "event_20250227_cn" ], "option_bold": [ - "event_20230803_cn", - "event_20250912_cn" + "event_20230914_cn", + "event_20250227_cn" ] }, "Mode": { @@ -2258,24 +2258,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230803_cn", - "event_20250912_cn" + "event_20230914_cn", + "event_20250227_cn" ], "option_cn": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_en": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_jp": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_tw": [ - "event_20250912_cn" + "event_20250227_cn" ], "option_bold": [ - "event_20230803_cn", - "event_20250912_cn" + "event_20230914_cn", + "event_20250227_cn" ] }, "Mode": { @@ -2349,22 +2349,22 @@ }, "Event2MapName": { "type": "state", - "value": "SP3", + "value": "d3", "display": "display" }, "EventDailyAMapName": { "type": "state", - "value": "sp1 > sp2 > sp3", + "value": "a1 > a2 > a3 > b1 > b2 > b3", "display": "display" }, "EventDailySpMapName": { "type": "state", - "value": false, + "value": "sp", "display": "display" }, "EventDailyCD": { "type": "state", - "value": false, + "value": "c1 > c2 > c3 > d1 > d2 > d3", "display": "display" } }, @@ -2679,24 +2679,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230803_cn", - "event_20250912_cn" + "event_20230914_cn", + "event_20250227_cn" ], "option_cn": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_en": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_jp": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_tw": [ - "event_20250912_cn" + "event_20250227_cn" ], "option_bold": [ - "event_20230803_cn", - "event_20250912_cn" + "event_20230914_cn", + "event_20250227_cn" ] }, "Mode": { @@ -3074,24 +3074,24 @@ "type": "select", "value": "campaign_main", "option": [ - "event_20230803_cn", - "event_20250912_cn" + "event_20230914_cn", + "event_20250227_cn" ], "option_cn": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_en": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_jp": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_tw": [ - "event_20250912_cn" + "event_20250227_cn" ], "option_bold": [ - "event_20230803_cn", - "event_20250912_cn" + "event_20230914_cn", + "event_20250227_cn" ] }, "Mode": { @@ -4254,9 +4254,11 @@ "war_archives_20220428_cn", "war_archives_20220526_cn", "war_archives_20220728_cn", + "war_archives_20220915_cn", "war_archives_20231026_cn" ], "option_cn": [ + "war_archives_20220915_cn", "war_archives_20231026_cn", "war_archives_20220428_cn", "war_archives_20220728_cn", @@ -4300,6 +4302,7 @@ "war_archives_20181020_en" ], "option_en": [ + "war_archives_20220915_cn", "war_archives_20231026_cn", "war_archives_20220428_cn", "war_archives_20220728_cn", @@ -4343,6 +4346,7 @@ "war_archives_20181020_en" ], "option_jp": [ + "war_archives_20220915_cn", "war_archives_20231026_cn", "war_archives_20220428_cn", "war_archives_20220728_cn", @@ -4386,6 +4390,7 @@ "war_archives_20181020_en" ], "option_tw": [ + "war_archives_20220915_cn", "war_archives_20231026_cn", "war_archives_20220428_cn", "war_archives_20220728_cn", @@ -4819,24 +4824,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230803_cn", - "event_20250912_cn" + "event_20230914_cn", + "event_20250227_cn" ], "option_cn": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_en": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_jp": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_tw": [ - "event_20250912_cn" + "event_20250227_cn" ], "option_bold": [ - "event_20230803_cn", - "event_20250912_cn" + "event_20230914_cn", + "event_20250227_cn" ] }, "Mode": { @@ -5235,24 +5240,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230803_cn", - "event_20250912_cn" + "event_20230914_cn", + "event_20250227_cn" ], "option_cn": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_en": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_jp": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_tw": [ - "event_20250912_cn" + "event_20250227_cn" ], "option_bold": [ - "event_20230803_cn", - "event_20250912_cn" + "event_20230914_cn", + "event_20250227_cn" ] }, "Mode": { @@ -5651,24 +5656,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230803_cn", - "event_20250912_cn" + "event_20230914_cn", + "event_20250227_cn" ], "option_cn": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_en": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_jp": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_tw": [ - "event_20250912_cn" + "event_20250227_cn" ], "option_bold": [ - "event_20230803_cn", - "event_20250912_cn" + "event_20230914_cn", + "event_20250227_cn" ] }, "Mode": { @@ -6067,24 +6072,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230803_cn", - "event_20250912_cn" + "event_20230914_cn", + "event_20250227_cn" ], "option_cn": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_en": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_jp": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_tw": [ - "event_20250912_cn" + "event_20250227_cn" ], "option_bold": [ - "event_20230803_cn", - "event_20250912_cn" + "event_20230914_cn", + "event_20250227_cn" ] }, "Mode": { @@ -6483,24 +6488,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230803_cn", - "event_20250912_cn" + "event_20230914_cn", + "event_20250227_cn" ], "option_cn": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_en": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_jp": [ - "event_20230803_cn" + "event_20230914_cn" ], "option_tw": [ - "event_20250912_cn" + "event_20250227_cn" ], "option_bold": [ - "event_20230803_cn", - "event_20250912_cn" + "event_20230914_cn", + "event_20250227_cn" ] }, "Mode": { diff --git a/module/config/argument/override.yaml b/module/config/argument/override.yaml index b2a238045..9b0b31eda 100644 --- a/module/config/argument/override.yaml +++ b/module/config/argument/override.yaml @@ -61,19 +61,19 @@ Event: AmbushEvade: true EventPt: Event2MapName: - value: SP3 + value: d3 type: state display: display EventDailyAMapName: - value: sp1 > sp2 > sp3 + value: a1 > a2 > a3 > b1 > b2 > b3 type: state display: display EventDailySpMapName: - value: false + value: sp type: state display: display EventDailyCD: - value: false + value: c1 > c2 > c3 > d1 > d2 > d3 type: state display: display diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 8b8ca645e..417044056 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -1060,7 +1060,7 @@ "event_20230525_cn": "Confluence of Nothingness Rerun", "event_20230803_cn": "Anthem of Remembrance Rerun", "event_20230817_cn": "The Fools Scales Rerun", - "event_20230914_cn": "Effulgence Before Eclipse", + "event_20230914_cn": "Effulgence Before Eclipse Rerun", "event_20231026_cn": "Tempesta and the Fountain of Youth", "event_20231123_cn": "The Ninja Scrolls: Azur Flash", "event_20231221_cn": "Light-Chasing Sea of Stars", @@ -1131,6 +1131,7 @@ "war_archives_20220428_cn": "archives Rondo at Rainbows End", "war_archives_20220526_cn": "archives Pledge of the Radiant Court", "war_archives_20220728_cn": "archives Aquilifers Ballade", + "war_archives_20220915_cn": "archives Violet Tempest Blooming Lycoris", "war_archives_20231026_cn": "archives Tempesta and the Fountain of Youth" }, "Mode": { diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index b4d65e7de..2a492035f 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -1060,7 +1060,7 @@ "event_20230525_cn": "覆天せし万象の塵(復刻)", "event_20230803_cn": "燃ゆる聖都の回想曲(復刻)", "event_20230817_cn": "愚者の天秤(復刻)", - "event_20230914_cn": "須臾望月抄", + "event_20230914_cn": "須臾望月抄(復刻)", "event_20231026_cn": "テンペスタと若返りの泉", "event_20231123_cn": "蒼閃忍法帖", "event_20231221_cn": "光追う星の海", @@ -1131,6 +1131,7 @@ "war_archives_20220428_cn": "檔案 吟ずる瑠璃の楽章", "war_archives_20220526_cn": "檔案 诚閃の剣 搖光の城", "war_archives_20220728_cn": "檔案 鋼鷲の冒険譚", + "war_archives_20220915_cn": "檔案 赫の涙月 菫の暁風", "war_archives_20231026_cn": "檔案 テンペスタと若返りの泉" }, "Mode": { diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 9f68b0111..239c97d0c 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -1060,7 +1060,7 @@ "event_20230525_cn": "复刻空相交汇点", "event_20230803_cn": "复刻奏响鸢尾之歌", "event_20230817_cn": "复刻愚者的天平", - "event_20230914_cn": "须臾望月抄", + "event_20230914_cn": "复刻须臾望月抄", "event_20231026_cn": "飓风与青春之泉", "event_20231123_cn": "苍闪忍法帖", "event_20231221_cn": "星海逐光", @@ -1131,6 +1131,7 @@ "war_archives_20220428_cn": "档案 虹彩的终幕曲", "war_archives_20220526_cn": "档案 泠誓光庭", "war_archives_20220728_cn": "档案 雄鹰的叙事歌", + "war_archives_20220915_cn": "档案 紫绛槿岚", "war_archives_20231026_cn": "档案 飓风与青春之泉" }, "Mode": { diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 1400e413c..09351474c 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -1074,7 +1074,7 @@ "event_20241024_cn": "颶風與沉眠之海", "event_20241121_cn": "危險發明逼近中", "event_20241219_cn": "星光下的餘暉", - "event_20250227_cn": "Paradiso of Shackled Light", + "event_20250227_cn": "樊籠內的神光", "event_20250424_cn": "揚起鬱金之旗", "event_20250520_cn": "高塔上的薔薇", "event_20250724_cn": "鍊金術士與天際交會之塔", @@ -1131,6 +1131,7 @@ "war_archives_20220428_cn": "檔案 虹彩的終幕曲", "war_archives_20220526_cn": "檔案 泠誓光庭", "war_archives_20220728_cn": "檔案 雄鷹的敘事歌", + "war_archives_20220915_cn": "檔案 紫絳槿嵐", "war_archives_20231026_cn": "檔案 飓風與青春之泉" }, "Mode": { diff --git a/module/handler/assets.py b/module/handler/assets.py index 92a3f76f1..5ce081c52 100644 --- a/module/handler/assets.py +++ b/module/handler/assets.py @@ -101,6 +101,6 @@ SUBMARINE_VIEW_ON = Button(area={'cn': (1140, 435, 1170, 468), 'en': (1140, 435, TEMPLATE_MANJUU = Template(file={'cn': './assets/cn/handler/TEMPLATE_MANJUU.png', 'en': './assets/cn/handler/TEMPLATE_MANJUU.png', 'jp': './assets/cn/handler/TEMPLATE_MANJUU.png', 'tw': './assets/cn/handler/TEMPLATE_MANJUU.png'}) USER_AGREEMENT_CONFIRM = Button(area={'cn': (709, 526, 742, 542), 'en': (709, 526, 742, 542), 'jp': (709, 526, 742, 542), 'tw': (709, 526, 742, 542)}, color={'cn': (151, 216, 243), 'en': (151, 216, 243), 'jp': (151, 216, 243), 'tw': (151, 216, 243)}, button={'cn': (709, 526, 742, 542), 'en': (709, 526, 742, 542), 'jp': (709, 526, 742, 542), 'tw': (709, 526, 742, 542)}, file={'cn': './assets/cn/handler/USER_AGREEMENT_CONFIRM.png', 'en': './assets/en/handler/USER_AGREEMENT_CONFIRM.png', 'jp': './assets/jp/handler/USER_AGREEMENT_CONFIRM.png', 'tw': './assets/tw/handler/USER_AGREEMENT_CONFIRM.png'}) USE_DATA_KEY = Button(area={'cn': (688, 316, 781, 338), 'en': (759, 323, 889, 342), 'jp': (627, 300, 743, 321), 'tw': (688, 316, 782, 338)}, color={'cn': (165, 154, 99), 'en': (170, 160, 94), 'jp': (127, 128, 116), 'tw': (159, 150, 97)}, button={'cn': (688, 316, 781, 338), 'en': (759, 323, 889, 342), 'jp': (627, 300, 743, 321), 'tw': (688, 316, 782, 338)}, file={'cn': './assets/cn/handler/USE_DATA_KEY.png', 'en': './assets/en/handler/USE_DATA_KEY.png', 'jp': './assets/jp/handler/USE_DATA_KEY.png', 'tw': './assets/tw/handler/USE_DATA_KEY.png'}) -USE_DATA_KEY_NOTIFIED = Button(area={'cn': (770, 434, 793, 456), 'en': (820, 440, 837, 456), 'jp': (686, 430, 709, 456), 'tw': (782, 440, 799, 456)}, color={'cn': (41, 44, 49), 'en': (33, 40, 41), 'jp': (33, 44, 49), 'tw': (34, 40, 48)}, button={'cn': (770, 434, 793, 456), 'en': (820, 440, 837, 456), 'jp': (686, 430, 709, 456), 'tw': (782, 440, 799, 456)}, file={'cn': './assets/cn/handler/USE_DATA_KEY_NOTIFIED.png', 'en': './assets/en/handler/USE_DATA_KEY_NOTIFIED.png', 'jp': './assets/jp/handler/USE_DATA_KEY_NOTIFIED.png', 'tw': './assets/tw/handler/USE_DATA_KEY_NOTIFIED.png'}) +USE_DATA_KEY_NOTIFIED = Button(area={'cn': (690, 185, 713, 207), 'en': (820, 440, 837, 456), 'jp': (686, 430, 709, 456), 'tw': (782, 440, 799, 456)}, color={'cn': (34, 49, 75), 'en': (33, 40, 41), 'jp': (33, 44, 49), 'tw': (34, 40, 48)}, button={'cn': (690, 185, 713, 207), 'en': (820, 440, 837, 456), 'jp': (686, 430, 709, 456), 'tw': (782, 440, 799, 456)}, file={'cn': './assets/cn/handler/USE_DATA_KEY_NOTIFIED.png', 'en': './assets/en/handler/USE_DATA_KEY_NOTIFIED.png', 'jp': './assets/jp/handler/USE_DATA_KEY_NOTIFIED.png', 'tw': './assets/tw/handler/USE_DATA_KEY_NOTIFIED.png'}) VOTE_CANCEL = Button(area={'cn': (404, 483, 576, 539), 'en': (413, 489, 566, 532), 'jp': (407, 483, 577, 538), 'tw': (404, 483, 576, 539)}, color={'cn': (167, 169, 171), 'en': (169, 170, 172), 'jp': (163, 164, 166), 'tw': (167, 169, 171)}, button={'cn': (404, 483, 576, 539), 'en': (413, 489, 566, 532), 'jp': (407, 483, 577, 538), 'tw': (404, 483, 576, 539)}, file={'cn': './assets/cn/handler/VOTE_CANCEL.png', 'en': './assets/en/handler/VOTE_CANCEL.png', 'jp': './assets/jp/handler/VOTE_CANCEL.png', 'tw': './assets/cn/handler/VOTE_CANCEL.png'}) otherlogin = Button(area={'cn': (568, 333, 715, 356), 'en': (370, 340, 905, 354), 'jp': (472, 334, 640, 357), 'tw': (568, 333, 715, 356)}, color={'cn': (144, 149, 154), 'en': (180, 183, 186), 'jp': (151, 155, 159), 'tw': (144, 149, 154)}, button={'cn': (568, 333, 715, 356), 'en': (370, 340, 905, 354), 'jp': (472, 334, 640, 357), 'tw': (568, 333, 715, 356)}, file={'cn': './assets/cn/handler/otherlogin.png', 'en': './assets/en/handler/otherlogin.png', 'jp': './assets/jp/handler/otherlogin.png', 'tw': './assets/cn/handler/otherlogin.png'}) diff --git a/module/os/map_operation.py b/module/os/map_operation.py index 6a876dd05..7a9fa8fd4 100644 --- a/module/os/map_operation.py +++ b/module/os/map_operation.py @@ -96,6 +96,10 @@ class OSMapOperation(MapOrderHandler, MissionHandler, PortHandler, StorageHandle name = name.replace('ジブフルタル', 'ジブラルタル') name = name.replace('タント', 'タラント').replace('タフント', 'タラント') name = name.replace('N海域', 'NA海域') + # リバープル -> リバープール + name = name.replace('リバプル', 'リバープール') + name = name.replace('リバープル', 'リバープール') + name = name.replace('リバプール', 'リバープール') return name @Config.when(SERVER='tw') diff --git a/module/ui/ui.py b/module/ui/ui.py index 02eb71883..98370bb82 100644 --- a/module/ui/ui.py +++ b/module/ui/ui.py @@ -616,6 +616,8 @@ class UI(InfoHandler): self.interval_reset(GET_SHIP) if button == DORMMENU_GOTO_DORM: self.interval_reset(GET_SHIP) + if button == DORMMENU_GOTO_MEOWFFICER: + self.interval_reset(GET_SHIP) for switch_button in page_main.links.values(): if button == switch_button: self.interval_reset(GET_SHIP) diff --git a/module/war_archives/assets.py b/module/war_archives/assets.py index cbedb971d..b1ad00ed0 100644 --- a/module/war_archives/assets.py +++ b/module/war_archives/assets.py @@ -44,6 +44,7 @@ TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT = Template(file={'cn': './assets/cn/war_archi TEMPLATE_TOWER_OF_TRANSCENDENCE = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_TOWER_OF_TRANSCENDENCE.png', 'en': './assets/cn/war_archives/TEMPLATE_TOWER_OF_TRANSCENDENCE.png', 'jp': './assets/cn/war_archives/TEMPLATE_TOWER_OF_TRANSCENDENCE.png', 'tw': './assets/cn/war_archives/TEMPLATE_TOWER_OF_TRANSCENDENCE.png'}) TEMPLATE_UNIVERSE_IN_UNISON = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png', 'en': './assets/en/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png', 'jp': './assets/jp/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png', 'tw': './assets/cn/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png'}) TEMPLATE_UPON_THE_SHIMMERING_BLUE = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_UPON_THE_SHIMMERING_BLUE.png', 'en': './assets/cn/war_archives/TEMPLATE_UPON_THE_SHIMMERING_BLUE.png', 'jp': './assets/cn/war_archives/TEMPLATE_UPON_THE_SHIMMERING_BLUE.png', 'tw': './assets/cn/war_archives/TEMPLATE_UPON_THE_SHIMMERING_BLUE.png'}) +TEMPLATE_VIOLET_TEMPEST_BLOOMING_LYCORIS = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_VIOLET_TEMPEST_BLOOMING_LYCORIS.png', 'en': './assets/cn/war_archives/TEMPLATE_VIOLET_TEMPEST_BLOOMING_LYCORIS.png', 'jp': './assets/cn/war_archives/TEMPLATE_VIOLET_TEMPEST_BLOOMING_LYCORIS.png', 'tw': './assets/cn/war_archives/TEMPLATE_VIOLET_TEMPEST_BLOOMING_LYCORIS.png'}) TEMPLATE_VIRTUAL_TOWER = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_VIRTUAL_TOWER.png', 'en': './assets/cn/war_archives/TEMPLATE_VIRTUAL_TOWER.png', 'jp': './assets/cn/war_archives/TEMPLATE_VIRTUAL_TOWER.png', 'tw': './assets/cn/war_archives/TEMPLATE_VIRTUAL_TOWER.png'}) TEMPLATE_VISITORS_DYED_IN_RED = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png', 'en': './assets/en/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png', 'jp': './assets/jp/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png', 'tw': './assets/tw/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png'}) TEMPLATE_WINTERS_CROWN = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_WINTERS_CROWN.png', 'en': './assets/en/war_archives/TEMPLATE_WINTERS_CROWN.png', 'jp': './assets/jp/war_archives/TEMPLATE_WINTERS_CROWN.png', 'tw': './assets/tw/war_archives/TEMPLATE_WINTERS_CROWN.png'}) diff --git a/module/war_archives/dictionary.py b/module/war_archives/dictionary.py index 1afa4350a..ce0a75edf 100644 --- a/module/war_archives/dictionary.py +++ b/module/war_archives/dictionary.py @@ -42,4 +42,5 @@ dic_archives_template = { 'war_archives_20220728_cn': TEMPLATE_AQUILIFERS_BALLADE, 'war_archives_20220428_cn': TEMPLATE_RONDO_AT_RAINBOWS_END, 'war_archives_20231026_cn': TEMPLATE_TEMPESTA_AND_THE_FOUNTAIN_OF_YOUTH, + 'war_archives_20220915_cn': TEMPLATE_VIOLET_TEMPEST_BLOOMING_LYCORIS, }