diff --git a/assets/cn/war_archives/TEMPLATE_KHOROVOD_OF_DAWNS_RIME.png b/assets/cn/war_archives/TEMPLATE_KHOROVOD_OF_DAWNS_RIME.png new file mode 100644 index 000000000..bc55d47f3 Binary files /dev/null and b/assets/cn/war_archives/TEMPLATE_KHOROVOD_OF_DAWNS_RIME.png differ diff --git a/campaign/Readme.md b/campaign/Readme.md index 23b816024..7918b0346 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -39,6 +39,7 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20230831 | war archives 20201229 cn | Inverted Orthant | 负象限作战 | Inverted Orthant | 虚畳なりし限象 | - | | 20240118 | war archives 20200917 cn | Dreamwaker's Butterfly | 蝶海梦花 | Dreamwaker's Butterfly | 刹那觀る胡蝶の夢 | - | | 20240118 | war archives 20210527 cn | Mirror Involution | 镜位螺旋 | Mirror Involution | 照らす螺旋の鏡海 | - | +| 20240222 | war archives 20210225 cn | Khorovod of Dawn's Rime | 破晓冰华 | Khorovod of Dawn's Rime | 暁射す氷華の嵐 | - | | 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 | 闇靄払う銀翼 | - | diff --git a/campaign/war_archives_20210225_cn/a1.py b/campaign/war_archives_20210225_cn/a1.py new file mode 100644 index 000000000..6ce6a4954 --- /dev/null +++ b/campaign/war_archives_20210225_cn/a1.py @@ -0,0 +1,85 @@ +from ..campaign_war_archives.campaign_base import CampaignBase +from module.logger import logger +from module.map.map_base import CampaignMap +from module.map.map_grids import RoadGrids, SelectedGrids + +MAP = CampaignMap('A1') +MAP.shape = 'I7' +MAP.camera_data = ['D2', 'D5', 'F2', 'F5'] +MAP.camera_data_spawn_point = ['D5'] +MAP.map_data = """ + ++ ME -- -- -- -- -- -- -- + ME -- ME ++ ME -- Me ++ ++ + -- -- -- Me -- -- ME ++ ++ + -- MS -- ++ ++ -- -- ME -- + Me -- -- ME ++ MS __ -- MB + ++ -- -- -- -- -- -- 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 +""" +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, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['DD'] + 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 + # ===== End of generated config ===== + + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 24), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 24, 255), + 'prominence': 10, + 'distance': 50, + # 'width': (0, 7), + 'wlen': 1000 + } + MAP_ENEMY_GENRE_DETECTION_SCALING = { + 'DD': 1.111, + 'CL': 1.111, + } + + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + + return self.battle_default() + + def battle_3(self): + return self.clear_boss() diff --git a/campaign/war_archives_20210225_cn/a2.py b/campaign/war_archives_20210225_cn/a2.py new file mode 100644 index 000000000..d3357c815 --- /dev/null +++ b/campaign/war_archives_20210225_cn/a2.py @@ -0,0 +1,69 @@ +from ..campaign_war_archives.campaign_base import CampaignBase +from module.logger import logger +from module.map.map_base import CampaignMap +from module.map.map_grids import RoadGrids, SelectedGrids + +from .a1 import Config as ConfigBase + +MAP = CampaignMap('A2') +MAP.shape = 'I7' +MAP.camera_data = ['D2', 'D5', 'F2', 'F5'] +MAP.camera_data_spawn_point = ['D5'] +MAP.map_data = """ + -- Me ++ ++ ++ MB ++ ++ ++ + ME -- ME ++ ME -- ME ++ -- + -- -- -- -- -- -- -- ME -- + MS ++ -- ++ Me __ -- -- Me + -- -- -- ++ -- -- -- ME -- + SP -- -- MS ME -- 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 +""" +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, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['CL'] + 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 + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/war_archives_20210225_cn/a3.py b/campaign/war_archives_20210225_cn/a3.py new file mode 100644 index 000000000..13d64c985 --- /dev/null +++ b/campaign/war_archives_20210225_cn/a3.py @@ -0,0 +1,78 @@ +from ..campaign_war_archives.campaign_base import CampaignBase +from module.logger import logger +from module.map.map_base import CampaignMap +from module.map.map_grids import RoadGrids, SelectedGrids + +from .a1 import Config as ConfigBase + +MAP = CampaignMap('A3') +MAP.shape = 'I10' +MAP.camera_data = ['E3', 'E6'] +MAP.camera_data_spawn_point = ['E6'] +MAP.map_data = """ + -- ++ ++ ++ ++ ++ ++ ++ -- + ++ -- -- -- Me -- -- -- ++ + ++ -- ++ ME -- ME ++ -- ++ + -- -- ME -- MS -- ME -- -- + -- Me -- MS MB MS -- Me -- + -- -- ME -- MS -- 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 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, \ +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, \ +A10, B10, C10, D10, E10, F10, G10, H10, I10, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['CL'] + 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 + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/war_archives_20210225_cn/b1.py b/campaign/war_archives_20210225_cn/b1.py new file mode 100644 index 000000000..780175ab8 --- /dev/null +++ b/campaign/war_archives_20210225_cn/b1.py @@ -0,0 +1,92 @@ +from ..campaign_war_archives.campaign_base import CampaignBase +from module.logger import logger +from module.map.map_base import CampaignMap +from module.map.map_grids import RoadGrids, SelectedGrids + +MAP = CampaignMap('B1') +MAP.shape = 'I8' +MAP.camera_data = ['D2', 'D5', 'E2', 'E5'] +MAP.camera_data_spawn_point = ['D2', 'E2'] +MAP.map_data = """ + -- ++ ++ ++ MB ++ ++ ++ -- + -- ME ++ SP -- SP ++ -- -- + Me -- -- -- -- -- -- ME ++ + ++ ME ++ -- __ -- MS Me ++ + -- ME ++ MS -- MS -- ME -- + Me -- -- -- -- -- ++ ++ ++ + -- 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 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 1}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2, 'boss': 1}, + {'battle': 5, 'enemy': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['CL', 'CAred'] + 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 + # ===== End of generated config ===== + + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 24), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 24, 255), + 'prominence': 10, + 'distance': 50, + # 'width': (0, 7), + 'wlen': 1000 + } + MAP_ENEMY_GENRE_DETECTION_SCALING = { + 'CL': 1.111, + 'CAred': 1.111, + 'BBred': 1.111, + } + MAP_SWIPE_MULTIPLY = (1.159, 1.181) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.121, 1.141) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.088, 1.108) + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/war_archives_20210225_cn/b2.py b/campaign/war_archives_20210225_cn/b2.py new file mode 100644 index 000000000..edd9f54eb --- /dev/null +++ b/campaign/war_archives_20210225_cn/b2.py @@ -0,0 +1,70 @@ +from ..campaign_war_archives.campaign_base import CampaignBase +from module.logger import logger +from module.map.map_base import CampaignMap +from module.map.map_grids import RoadGrids, SelectedGrids + +from .b1 import Config as ConfigBase + +MAP = CampaignMap('B2') +MAP.shape = 'K7' +MAP.camera_data = ['D2', 'D4', 'H2', 'H4'] +MAP.camera_data_spawn_point = ['H4'] +MAP.map_data = """ + -- -- -- -- -- -- -- ME ME -- ++ + ++ -- ME -- ++ ++ ME -- -- ME ++ + -- ME -- ME ++ ++ ++ -- MS ++ ++ + ++ ++ -- -- Me __ MS -- -- -- SP + -- ++ Me -- -- -- -- -- -- -- SP + MB -- -- -- Me -- ++ ME MS 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 +""" +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, \ +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, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['CL', 'CAred'] + 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 + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/war_archives_20210225_cn/b3.py b/campaign/war_archives_20210225_cn/b3.py new file mode 100644 index 000000000..3c65aca14 --- /dev/null +++ b/campaign/war_archives_20210225_cn/b3.py @@ -0,0 +1,79 @@ +from ..campaign_war_archives.campaign_base import CampaignBase +from module.logger import logger +from module.map.map_base import CampaignMap +from module.map.map_grids import RoadGrids, SelectedGrids + +from .b1 import Config as ConfigBase + +MAP = CampaignMap('B3') +MAP.shape = 'I10' +MAP.camera_data = ['D4', 'D8', 'F4', 'F8'] +MAP.camera_data_spawn_point = ['D4', 'F4'] +MAP.map_data = """ + -- ++ ++ ++ ++ ++ ++ ++ -- + ++ -- -- -- -- -- -- -- ++ + ++ ME ++ SP -- SP ++ ME ++ + ME -- -- -- -- -- -- -- ME + -- Me MS -- __ -- MS Me -- + ME -- -- -- -- -- -- -- ME + ++ ME ++ -- MS -- ++ ME ++ + ++ -- Me -- -- -- Me -- ++ + -- ++ ++ ++ -- ++ ++ ++ -- + -- -- ++ -- MB -- ++ -- -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 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, \ +A10, B10, C10, D10, E10, F10, G10, H10, I10, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['CL', 'CAred', 'BBred'] + 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 + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/war_archives_20210225_cn/c1.py b/campaign/war_archives_20210225_cn/c1.py new file mode 100644 index 000000000..258de071f --- /dev/null +++ b/campaign/war_archives_20210225_cn/c1.py @@ -0,0 +1,88 @@ +from ..campaign_war_archives.campaign_base import CampaignBase +from module.logger import logger +from module.map.map_base import CampaignMap +from module.map.map_grids import RoadGrids, SelectedGrids + +MAP = CampaignMap('C1') +MAP.shape = 'I7' +MAP.camera_data = ['D2', 'D5', 'F2', 'F5'] +MAP.camera_data_spawn_point = ['D5'] +MAP.map_data = """ + ++ ME -- -- -- -- -- -- -- + ME -- ME ++ ME -- Me ++ ++ + -- -- -- Me -- -- ME ++ ++ + -- MS -- ++ ++ -- -- ME -- + Me -- -- ME ++ MS __ -- MB + ++ -- -- -- -- -- -- 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 +""" +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, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['CL', 'CA'] + 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 + # ===== End of generated config ===== + + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 24), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 24, 255), + 'prominence': 10, + 'distance': 50, + # 'width': (0, 7), + 'wlen': 1000 + } + MAP_ENEMY_GENRE_DETECTION_SCALING = { + 'DD': 1.111, + 'CL': 1.111, + 'CA': 1.111, + 'CV': 1.111, + 'BB': 1.111, + } + + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/war_archives_20210225_cn/c2.py b/campaign/war_archives_20210225_cn/c2.py new file mode 100644 index 000000000..bee2b6c94 --- /dev/null +++ b/campaign/war_archives_20210225_cn/c2.py @@ -0,0 +1,76 @@ +from ..campaign_war_archives.campaign_base import CampaignBase +from module.logger import logger +from module.map.map_base import CampaignMap +from module.map.map_grids import RoadGrids, SelectedGrids + +from .c1 import Config as ConfigBase + +MAP = CampaignMap('C2') +MAP.shape = 'I7' +MAP.camera_data = ['D2', 'D5', 'F2', 'F5'] +MAP.camera_data_spawn_point = ['D5'] +MAP.map_data = """ + -- Me ++ ++ ++ MB ++ ++ ++ + ME -- ME ++ ME -- ME ++ -- + -- -- -- -- -- -- -- ME -- + MS ++ -- ++ Me __ -- -- Me + -- -- -- ++ -- -- -- ME -- + SP -- -- MS ME -- 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 +""" +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, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['CL', 'CA'] + 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 + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + + if self.clear_enemy(scale=(1,)): + return True + if self.clear_enemy(scale=(2,)): + return True + if self.clear_enemy(scale=(3,)): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/war_archives_20210225_cn/c3.py b/campaign/war_archives_20210225_cn/c3.py new file mode 100644 index 000000000..e2aa640f1 --- /dev/null +++ b/campaign/war_archives_20210225_cn/c3.py @@ -0,0 +1,79 @@ +from ..campaign_war_archives.campaign_base import CampaignBase +from module.logger import logger +from module.map.map_base import CampaignMap +from module.map.map_grids import RoadGrids, SelectedGrids + +from .c1 import Config as ConfigBase + +MAP = CampaignMap('C3') +MAP.shape = 'I10' +MAP.camera_data = ['E3', 'E6'] +MAP.camera_data_spawn_point = ['E6'] +MAP.map_data = """ + -- ++ ++ ++ ++ ++ ++ ++ -- + ++ -- -- -- Me -- -- -- ++ + ++ -- ++ ME -- ME ++ -- ++ + -- -- ME -- MS -- ME -- -- + -- Me -- MS MB MS -- Me -- + -- -- ME -- MS -- 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 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, \ +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, \ +A10, B10, C10, D10, E10, F10, G10, H10, I10, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['CL', 'CA', 'BB'] + 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 + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/war_archives_20210225_cn/d1.py b/campaign/war_archives_20210225_cn/d1.py new file mode 100644 index 000000000..48cf30b98 --- /dev/null +++ b/campaign/war_archives_20210225_cn/d1.py @@ -0,0 +1,100 @@ +from ..campaign_war_archives.campaign_base import CampaignBase +from module.logger import logger +from module.map.map_base import CampaignMap +from module.map.map_grids import RoadGrids, SelectedGrids + +MAP = CampaignMap('D1') +MAP.shape = 'I8' +MAP.camera_data = ['D2', 'D5', 'E2', 'E5'] +MAP.camera_data_spawn_point = ['D2', 'E2'] +MAP.map_data = """ + -- ++ ++ ++ MB ++ ++ ++ -- + -- ME ++ SP -- SP ++ -- -- + Me -- -- -- -- -- -- ME ++ + ++ ME ++ -- __ -- MS Me ++ + -- ME ++ MS -- MS -- ME -- + Me -- -- -- -- -- ++ ++ ++ + -- 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 +""" +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, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['CAred', 'BBred'] + 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 + # ===== End of generated config ===== + + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 24), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 24, 255), + 'prominence': 10, + 'distance': 50, + # 'width': (0, 7), + 'wlen': 1000 + } + MAP_ENEMY_GENRE_DETECTION_SCALING = { + 'CL': 1.111, + 'CAred': 1.111, + 'BBred': 1.111, + 'CV': 1.111, + } + MAP_SWIPE_MULTIPLY = (1.193, 1.215) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.154, 1.175) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.120, 1.140) + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + + if self.clear_enemy(scale=(1,)): + return True + if self.clear_enemy(scale=(2,)): + return True + if self.clear_enemy(scale=(3,)): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/war_archives_20210225_cn/d2.py b/campaign/war_archives_20210225_cn/d2.py new file mode 100644 index 000000000..d18d04763 --- /dev/null +++ b/campaign/war_archives_20210225_cn/d2.py @@ -0,0 +1,90 @@ +from ..campaign_war_archives.campaign_base import CampaignBase +from module.logger import logger +from module.map.map_base import CampaignMap +from module.map.map_grids import RoadGrids, SelectedGrids + +from .d1 import Config as ConfigBase + +MAP = CampaignMap('D2') +MAP.shape = 'K7' +MAP.camera_data = ['D2', 'D4', 'H2', 'H4'] +MAP.camera_data_spawn_point = ['H4'] +MAP.map_data = """ + -- -- -- -- -- -- -- ME ME -- ++ + ++ -- ME -- ++ ++ ME -- -- ME ++ + -- ME -- ME ++ ++ ++ -- MS ++ ++ + ++ ++ -- -- Me __ MS -- -- -- SP + -- ++ Me -- -- -- -- -- -- -- SP + MB -- -- -- Me -- ++ ME MS 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 +""" +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, \ +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, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['CAred', 'CV'] + 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 + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (1.084, 1.105) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.049, 1.068) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.018, 1.036) + + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + + if self.clear_enemy(scale=(2,)): + return True + if self.clear_enemy(scale=(3,)): + return True + + return self.battle_default() + + def battle_5(self): + if self.clear_enemy(scale=(1,)): + return True + if self.clear_enemy(scale=(2,)): + return True + if self.clear_enemy(scale=(3,)): + return True + + return self.battle_default() + + def battle_6(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/war_archives_20210225_cn/d3.py b/campaign/war_archives_20210225_cn/d3.py new file mode 100644 index 000000000..5f7a3b8e9 --- /dev/null +++ b/campaign/war_archives_20210225_cn/d3.py @@ -0,0 +1,99 @@ +from ..campaign_war_archives.campaign_base import CampaignBase +from module.logger import logger +from module.map.map_base import CampaignMap +from module.map.map_grids import RoadGrids, SelectedGrids + +from .d1 import Config as ConfigBase + +MAP = CampaignMap('D3') +MAP.shape = 'I10' +MAP.camera_data = ['D4', 'D8', 'F4', 'F8'] +MAP.camera_data_spawn_point = ['D4', 'F4'] +MAP.map_data = """ + -- ++ ++ ++ ++ ++ ++ ++ -- + ++ -- -- -- -- -- -- -- ++ + ++ ME ++ SP -- SP ++ ME ++ + ME -- -- -- -- -- -- -- ME + -- Me MS -- __ -- MS Me -- + ME -- -- -- -- -- -- -- ME + ++ ME ++ -- MS -- ++ ME ++ + ++ -- Me -- -- -- Me -- ++ + -- ++ ++ ++ -- ++ ++ ++ -- + -- -- ++ -- MB -- ++ -- -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 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, \ +A10, B10, C10, D10, E10, F10, G10, H10, I10, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['CAred', 'BBred', 'CV'] + 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 + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (1.163, 1.185) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.125, 1.146) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.092, 1.112) + + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + + if self.clear_enemy(scale=(2,)): + return True + if self.clear_enemy(scale=(3,)): + return True + + return self.battle_default() + + def battle_5(self): + if self.clear_enemy(scale=(1,)): + return True + if self.clear_enemy(scale=(2,)): + return True + if self.clear_enemy(scale=(3,)): + return True + + return self.battle_default() + + def battle_6(self): + return self.fleet_boss.clear_boss() diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 8e2faded3..8a29e2d2c 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -3386,15 +3386,16 @@ "war_archives_20211014_cn", "war_archives_20211028_cn", "war_archives_20220210_cn", - "war_archives_20220414_cn" + "war_archives_20220414_cn", + "war_archives_20210225_cn" ], "option_bold": [ "war_archives_20210527_cn", "war_archives_20220414_cn" ], - "cn": "war_archives_20210527_cn", - "en": "war_archives_20210527_cn", - "jp": "war_archives_20210527_cn", + "cn": "war_archives_20210225_cn", + "en": "war_archives_20210225_cn", + "jp": "war_archives_20210225_cn", "tw": "war_archives_20220414_cn" }, "Mode": { diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 2351df429..ff1521e16 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -736,6 +736,7 @@ "war_archives_20200917_cn": "archives Dreamwakers Butterfly", "war_archives_20201029_cn": "archives Universe in Unison", "war_archives_20201229_cn": "archives Inverted Orthant", + "war_archives_20210225_cn": "archives Khorovod of Dawn's Rime", "war_archives_20210325_cn": "archives Ashen Simulacrum", "war_archives_20210527_cn": "archives Mirror Involution", "war_archives_20210624_cn": "archives Swirling Cherry Blossoms", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index f06f9abc6..cbbdbabe4 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -736,6 +736,7 @@ "war_archives_20200917_cn": "檔案 刹那觀る胡蝶の夢", "war_archives_20201029_cn": "檔案 激唱のユニバース", "war_archives_20201229_cn": "檔案 虚畳なりし限象", + "war_archives_20210225_cn": "檔案 暁射す氷華の嵐", "war_archives_20210325_cn": "檔案 開かれし紺碧の砂箱", "war_archives_20210527_cn": "檔案 照らす螺旋の鏡海", "war_archives_20210624_cn": "檔案 翳りし満ちる影の華", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 2f8190dad..dc057fbc9 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -736,6 +736,7 @@ "war_archives_20200917_cn": "档案 蝶海梦花", "war_archives_20201029_cn": "档案 激唱的UNIVERSE", "war_archives_20201229_cn": "档案 负象限作战", + "war_archives_20210225_cn": "档案 破晓冰华", "war_archives_20210325_cn": "档案 箱庭疗法", "war_archives_20210527_cn": "档案 镜位螺旋", "war_archives_20210624_cn": "档案 浮樱影华", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 41ec45be2..f2ae651fd 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -736,6 +736,7 @@ "war_archives_20200917_cn": "archives Dreamwakers Butterfly", "war_archives_20201029_cn": "archives Universe in Unison", "war_archives_20201229_cn": "archives Inverted Orthant", + "war_archives_20210225_cn": "archives Khorovod of Dawn's Rime", "war_archives_20210325_cn": "archives Ashen Simulacrum", "war_archives_20210527_cn": "archives Mirror Involution", "war_archives_20210624_cn": "檔案 浮櫻影華", diff --git a/module/war_archives/assets.py b/module/war_archives/assets.py index c83f49d94..52b5e16c7 100644 --- a/module/war_archives/assets.py +++ b/module/war_archives/assets.py @@ -18,6 +18,7 @@ TEMPLATE_GLORIOUS_BATTLE = Template(file={'cn': './assets/cn/war_archives/TEMPLA TEMPLATE_INK_STAINED_STEEL_SAKURA = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_INK_STAINED_STEEL_SAKURA.png', 'en': './assets/en/war_archives/TEMPLATE_INK_STAINED_STEEL_SAKURA.png', 'jp': './assets/jp/war_archives/TEMPLATE_INK_STAINED_STEEL_SAKURA.png', 'tw': './assets/cn/war_archives/TEMPLATE_INK_STAINED_STEEL_SAKURA.png'}) TEMPLATE_INVERTED_ORTHANT = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_INVERTED_ORTHANT.png', 'en': './assets/cn/war_archives/TEMPLATE_INVERTED_ORTHANT.png', 'jp': './assets/cn/war_archives/TEMPLATE_INVERTED_ORTHANT.png', 'tw': './assets/cn/war_archives/TEMPLATE_INVERTED_ORTHANT.png'}) TEMPLATE_IRIS_OF_LIGHT_AND_DARK = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_IRIS_OF_LIGHT_AND_DARK.png', 'en': './assets/en/war_archives/TEMPLATE_IRIS_OF_LIGHT_AND_DARK.png', 'jp': './assets/jp/war_archives/TEMPLATE_IRIS_OF_LIGHT_AND_DARK.png', 'tw': './assets/cn/war_archives/TEMPLATE_IRIS_OF_LIGHT_AND_DARK.png'}) +TEMPLATE_KHOROVOD_OF_DAWNS_RIME = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_KHOROVOD_OF_DAWNS_RIME.png', 'en': './assets/cn/war_archives/TEMPLATE_KHOROVOD_OF_DAWNS_RIME.png', 'jp': './assets/cn/war_archives/TEMPLATE_KHOROVOD_OF_DAWNS_RIME.png', 'tw': './assets/cn/war_archives/TEMPLATE_KHOROVOD_OF_DAWNS_RIME.png'}) TEMPLATE_MICROLAYER_MEDLEY = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_MICROLAYER_MEDLEY.png', 'en': './assets/en/war_archives/TEMPLATE_MICROLAYER_MEDLEY.png', 'jp': './assets/cn/war_archives/TEMPLATE_MICROLAYER_MEDLEY.png', 'tw': './assets/tw/war_archives/TEMPLATE_MICROLAYER_MEDLEY.png'}) TEMPLATE_MIRROR_INVOLUTION = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_MIRROR_INVOLUTION.png', 'en': './assets/cn/war_archives/TEMPLATE_MIRROR_INVOLUTION.png', 'jp': './assets/cn/war_archives/TEMPLATE_MIRROR_INVOLUTION.png', 'tw': './assets/cn/war_archives/TEMPLATE_MIRROR_INVOLUTION.png'}) TEMPLATE_NORTHERN_OVERTURE = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_NORTHERN_OVERTURE.png', 'en': './assets/en/war_archives/TEMPLATE_NORTHERN_OVERTURE.png', 'jp': './assets/cn/war_archives/TEMPLATE_NORTHERN_OVERTURE.png', 'tw': './assets/cn/war_archives/TEMPLATE_NORTHERN_OVERTURE.png'}) diff --git a/module/war_archives/dictionary.py b/module/war_archives/dictionary.py index 54c6ef876..0ecee5f89 100644 --- a/module/war_archives/dictionary.py +++ b/module/war_archives/dictionary.py @@ -26,4 +26,5 @@ dic_archives_template = { 'war_archives_20201229_cn': TEMPLATE_INVERTED_ORTHANT, 'war_archives_20200917_cn': TEMPLATE_DREAMWAKERS_BUTTERFLY, 'war_archives_20210527_cn': TEMPLATE_MIRROR_INVOLUTION, + 'war_archives_20210225_cn': TEMPLATE_KHOROVOD_OF_DAWNS_RIME, }