From caeb091ce663b39961ba8e0c844c60c8d4acd08d Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Mon, 11 Mar 2024 21:19:26 +0800 Subject: [PATCH] Add: War Archives Counterattack within the Fjord --- ...EMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png | Bin 0 -> 18975 bytes campaign/Readme.md | 19 +++-- campaign/war_archives_20200603_cn/sp1.py | 74 +++++++++++++++++ campaign/war_archives_20200603_cn/sp2.py | 76 +++++++++++++++++ campaign/war_archives_20200603_cn/sp3.py | 77 ++++++++++++++++++ module/config/argument/args.json | 6 +- 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 | 19 +++-- module/war_archives/assets.py | 1 + module/war_archives/dictionary.py | 1 + 12 files changed, 255 insertions(+), 21 deletions(-) create mode 100644 assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png create mode 100644 campaign/war_archives_20200603_cn/sp1.py create mode 100644 campaign/war_archives_20200603_cn/sp2.py create mode 100644 campaign/war_archives_20200603_cn/sp3.py diff --git a/assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png b/assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png new file mode 100644 index 0000000000000000000000000000000000000000..59e24d63c0af8c4ae6a766564b6d8d870feae5ac GIT binary patch literal 18975 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 literal 0 HcmV?d00001 diff --git a/campaign/Readme.md b/campaign/Readme.md index 7ab90fea2..862285ac2 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -24,22 +24,23 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20180607 | war archives 20180607 cn | Ink Stained Steel Sakura | 墨染的钢铁之花 | Ink Stained Steel Sakura | 墨染まりし鋼の桜 | 墨染的鋼鐵之花 | | 20180726 | war archives 20180726 cn | Iris of Light and Dark | 光与影的鸢尾之华 | Iris of Light and Dark | 光と影のアイリス | 光與影的鳶尾之華 | | 20210121 | war archives 20181227 cn | Crimson Echoes | 苍红的回响 | Crimson Echoes | 縹映る深緋の残響 | 蒼紅的迴響 | -| 20210513 | war archives 20200820 cn | Scherzo of Iron and Blood | 铁血音符誓言 | Scherzo of Iron and Blood | 黒鉄の楽章 誓いの海 | - | +| 20210513 | war archives 20200820 cn | Scherzo of Iron and Blood | 铁血音符誓言 | Scherzo of Iron and Blood | 黒鉄の楽章 誓いの海 | 鐵血音符誓言 | | 20211014 | war archives 20211014 cn | Crescendo of Polaris | 激奏的Polaris | Crescendo of Polaris | 激奏のポラリス | 激奏的Polaris | -| 20220113 | war archives 20190911 cn | Empyreal Tragicomedy | 神圣的悲喜剧 | Empyreal Tragicomedy | 悲歎せし焔海の詩 | - | -| 20220407 | war archives 20210325 cn | Ashen Simulacrum | 箱庭疗法 | Ashen Simulacrum | 開かれし紺碧の砂箱 | - | +| 20220113 | war archives 20190911 cn | Empyreal Tragicomedy | 神圣的悲喜剧 | Empyreal Tragicomedy | 悲歎せし焔海の詩 | 神聖的悲喜劇 | +| 20220407 | war archives 20210325 cn | Ashen Simulacrum | 箱庭疗法 | Ashen Simulacrum | 開かれし紺碧の砂箱 | 箱庭療法 | | 20220721 | war archives 20210624 cn | Swirling Cherry Blossoms | 浮樱影华 | Swirling Cherry Blossoms | 翳りし満ちる影の華 | 浮櫻影華 | -| 20220901 | war archives 20200806 cn | The Enigma and the Shark | 最重要的宝物 | The Enigma and the Shark | 鉄血鮫とエニグマ | - | -| 20221013 | war archives 20201029 cn | Universe in Unison | 激唱的UNIVERSE | Universe in Unison | 激唱のユニバース | - | +| 20220901 | war archives 20200806 cn | The Enigma and the Shark | 最重要的宝物 | The Enigma and the Shark | 鉄血鮫とエニグマ | 最重要的寶物 | +| 20221013 | war archives 20201029 cn | Universe in Unison | 激唱的UNIVERSE | Universe in Unison | 激唱のユニバース | 激唱的UNIVERSE | | 20221117 | war archives 20200903 cn | Stars of the Shimmering Fjord | 峡湾间的星辰 | Stars of the Shimmering Fjord | 輝ける峡湾の星 | 峽灣間的星辰 | | 20221117 | war archives 20210819 cn | Microlayer Medley | 微层混合 | Microlayer Medley | 闇靄払う銀翼 | 微層混合 | | 20211028 | war archives 20211028 cn | Skybound Oratorio | 穹顶下的圣咏曲 | Skybound Oratorio | 神穹を衝く聖歌 | 穹頂下的聖詠曲 | | 20230420 | war archives 20220210 cn | Northern Overture | 北境序曲 | Northern Overture | 凍絶の北海 | 北境序曲 | | 20230511 | war archives 20220414 cn | Aurora Noctis | 永夜幻光 | Aurora Noctis | 極夜照らす幻光 | 永夜幻光 | -| 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 | 暁射す氷華の嵐 | - | +| 20230713 | war archives 20200603 cn | Counterattack Within the Fjord | 峡湾间的反击 | Counterattack Within the Fjord | 峡湾間の反撃 | 峽灣間的反擊 | +| 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_20200603_cn/sp1.py b/campaign/war_archives_20200603_cn/sp1.py new file mode 100644 index 000000000..fedbeea0f --- /dev/null +++ b/campaign/war_archives_20200603_cn/sp1.py @@ -0,0 +1,74 @@ +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('SP1') +MAP.shape = 'K7' +MAP.camera_data = ['D2', 'D5', 'H2', 'H5'] +MAP.camera_data_spawn_point = ['H5'] +MAP.map_data = """ + ++ ++ ++ -- ME -- -- -- -- ++ -- + -- ME -- ++ -- ++ ++ ME -- ++ ME + ME -- -- Me -- ME ++ -- Me ++ -- + -- -- -- -- -- ++ ME -- -- -- SP + ME -- -- Me -- -- -- __ -- -- SP + -- -- ME ++ -- MS -- Me -- -- -- + -- -- -- ++ MB -- 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 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 1}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, '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: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Z18'] + MOVABLE_ENEMY_TURN = (3,) + 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.073, 1.093) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.038, 1.057) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.008, 1.026) + + +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_20200603_cn/sp2.py b/campaign/war_archives_20200603_cn/sp2.py new file mode 100644 index 000000000..4d69a20a9 --- /dev/null +++ b/campaign/war_archives_20200603_cn/sp2.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 .sp1 import Config as ConfigBase + +MAP = CampaignMap('SP2') +MAP.shape = 'K7' +MAP.camera_data = ['D2', 'D5', 'H2', 'H5'] +MAP.camera_data_spawn_point = ['D2', 'H2'] +MAP.map_data = """ + -- -- ++ ++ SP -- SP ++ ++ ++ ++ + -- ME ++ ++ -- -- -- -- -- ME ME + ME -- -- MS -- -- -- ME -- -- MB + ++ -- -- -- Me -- Me ++ __ -- MB + -- -- ++ ++ ++ MS -- ++ -- -- ME + -- 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 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 2}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, '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 = ['Z2'] + MOVABLE_ENEMY_TURN = (3,) + 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.135, 1.157) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.098, 1.118) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.066, 1.085) + + +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_20200603_cn/sp3.py b/campaign/war_archives_20200603_cn/sp3.py new file mode 100644 index 000000000..0b6442b84 --- /dev/null +++ b/campaign/war_archives_20200603_cn/sp3.py @@ -0,0 +1,77 @@ +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 .sp1 import Config as ConfigBase + +MAP = CampaignMap('SP3') +MAP.shape = 'K7' +MAP.camera_data = ['D2', 'D5', 'H2', 'H5'] +MAP.camera_data_spawn_point = ['D2'] +MAP.map_data = """ + ++ ++ ++ MS ++ ME -- ME ++ ++ ++ + SP -- -- -- -- -- MS -- ME Me -- + SP -- -- -- -- Me -- __ -- -- ME + ++ ++ ++ MS -- ++ ++ -- Me ++ -- + MB MB ++ -- Me ++ ++ -- -- ++ ++ + -- -- -- -- -- -- -- -- -- ME -- + 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 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 2}, + {'battle': 1, 'enemy': 2, 'siren': 1}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1}, + {'battle': 5, '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 = ['Z19'] + MOVABLE_ENEMY_TURN = (3,) + 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.168, 1.190) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.130, 1.150) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.097, 1.116) + + +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/module/config/argument/args.json b/module/config/argument/args.json index 2eda65ce6..2b187ba39 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -3376,6 +3376,7 @@ "war_archives_20190911_cn", "war_archives_20191010_en", "war_archives_20191031_en", + "war_archives_20200603_cn", "war_archives_20200806_cn", "war_archives_20200820_cn", "war_archives_20200903_cn", @@ -3393,13 +3394,12 @@ "war_archives_20220414_cn" ], "option_bold": [ - "war_archives_20210225_cn", - "war_archives_20220414_cn" + "war_archives_20210225_cn" ], "cn": "war_archives_20210225_cn", "en": "war_archives_20210225_cn", "jp": "war_archives_20210225_cn", - "tw": "war_archives_20220414_cn" + "tw": "war_archives_20210225_cn" }, "Mode": { "type": "select", diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 7b793dcd1..b135651f9 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -731,6 +731,7 @@ "war_archives_20190911_cn": "archives Empyreal Tragicomedy", "war_archives_20191010_en": "archives Encircling Graf Spee", "war_archives_20191031_en": "archives Divergent Chessboard", + "war_archives_20200603_cn": "archives Counterattack Within the Fjord", "war_archives_20200806_cn": "archives The Enigma and the Shark", "war_archives_20200820_cn": "archives Scherzo of Iron and Blood", "war_archives_20200903_cn": "archives Stars of the Shimmering Fjord", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index ef7c6a883..292d80a98 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -731,6 +731,7 @@ "war_archives_20190911_cn": "檔案 悲歎せし焔海の詩", "war_archives_20191010_en": "檔案 アドミラル・グラーフ・シュペー追撃戦", "war_archives_20191031_en": "檔案 鏡写されし異色", + "war_archives_20200603_cn": "檔案 峡湾間の反撃", "war_archives_20200806_cn": "檔案 鉄血鮫とエニグマ", "war_archives_20200820_cn": "檔案 黒鉄の楽章 誓いの海", "war_archives_20200903_cn": "檔案 輝ける峡湾の星", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 5c226df52..597a58969 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -731,6 +731,7 @@ "war_archives_20190911_cn": "档案 神圣的悲喜剧", "war_archives_20191010_en": "档案 围剿斯佩伯爵", "war_archives_20191031_en": "档案 异色格", + "war_archives_20200603_cn": "档案 峡湾间的反击", "war_archives_20200806_cn": "档案 最重要的宝物", "war_archives_20200820_cn": "档案 铁血音符誓言", "war_archives_20200903_cn": "档案 峡湾间的星辰", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 611647c01..1e9080fcf 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -728,18 +728,19 @@ "war_archives_20190221_en": "檔案 凜冬王冠", "war_archives_20190321_en": "檔案 紅染的參訪者", "war_archives_20190620_en": "檔案 光榮的一戰", - "war_archives_20190911_cn": "archives Empyreal Tragicomedy", + "war_archives_20190911_cn": "檔案 神聖的悲喜劇", "war_archives_20191010_en": "檔案 圍剿斯佩伯爵", "war_archives_20191031_en": "檔案 異色格", - "war_archives_20200806_cn": "archives The Enigma and the Shark", - "war_archives_20200820_cn": "archives Scherzo of Iron and Blood", + "war_archives_20200603_cn": "檔案 峽灣間的反擊", + "war_archives_20200806_cn": "檔案 最重要的寶物", + "war_archives_20200820_cn": "檔案 鐵血音符誓言", "war_archives_20200903_cn": "檔案 峽灣間的星辰", - "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 Dawns Rime", - "war_archives_20210325_cn": "archives Ashen Simulacrum", - "war_archives_20210527_cn": "archives Mirror Involution", + "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": "檔案 浮櫻影華", "war_archives_20210819_cn": "檔案 微層混合", "war_archives_20211014_cn": "檔案 激奏的Polaris", diff --git a/module/war_archives/assets.py b/module/war_archives/assets.py index 52b5e16c7..28c72e747 100644 --- a/module/war_archives/assets.py +++ b/module/war_archives/assets.py @@ -7,6 +7,7 @@ from module.base.template import Template OCR_DATA_KEY_CAMPAIGN = Button(area={'cn': (1188, 107, 1272, 131), 'en': (1188, 107, 1272, 131), 'jp': (1188, 107, 1272, 131), 'tw': (1188, 107, 1272, 131)}, color={'cn': (104, 101, 107), 'en': (104, 101, 107), 'jp': (104, 101, 107), 'tw': (104, 101, 107)}, button={'cn': (1188, 107, 1272, 131), 'en': (1188, 107, 1272, 131), 'jp': (1188, 107, 1272, 131), 'tw': (1188, 107, 1272, 131)}, file={'cn': './assets/cn/war_archives/OCR_DATA_KEY_CAMPAIGN.png', 'en': './assets/en/war_archives/OCR_DATA_KEY_CAMPAIGN.png', 'jp': './assets/jp/war_archives/OCR_DATA_KEY_CAMPAIGN.png', 'tw': './assets/tw/war_archives/OCR_DATA_KEY_CAMPAIGN.png'}) TEMPLATE_ASHEN_SIMULACRUM = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_ASHEN_SIMULACRUM.png', 'en': './assets/en/war_archives/TEMPLATE_ASHEN_SIMULACRUM.png', 'jp': './assets/cn/war_archives/TEMPLATE_ASHEN_SIMULACRUM.png', 'tw': './assets/cn/war_archives/TEMPLATE_ASHEN_SIMULACRUM.png'}) TEMPLATE_AURORA_NOCTIS = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_AURORA_NOCTIS.png', 'en': './assets/en/war_archives/TEMPLATE_AURORA_NOCTIS.png', 'jp': './assets/cn/war_archives/TEMPLATE_AURORA_NOCTIS.png', 'tw': './assets/cn/war_archives/TEMPLATE_AURORA_NOCTIS.png'}) +TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png', 'en': './assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png', 'jp': './assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png', 'tw': './assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png'}) TEMPLATE_CRESCENDO_OF_POLARIS = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png', 'en': './assets/en/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png', 'jp': './assets/jp/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png', 'tw': './assets/cn/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png'}) TEMPLATE_CRIMSON_ECHOES = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_CRIMSON_ECHOES.png', 'en': './assets/en/war_archives/TEMPLATE_CRIMSON_ECHOES.png', 'jp': './assets/jp/war_archives/TEMPLATE_CRIMSON_ECHOES.png', 'tw': './assets/cn/war_archives/TEMPLATE_CRIMSON_ECHOES.png'}) TEMPLATE_DIVERGENT_CHESSBOARD = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png', 'en': './assets/en/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png', 'jp': './assets/jp/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png', 'tw': './assets/tw/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png'}) diff --git a/module/war_archives/dictionary.py b/module/war_archives/dictionary.py index 0ecee5f89..752dffbce 100644 --- a/module/war_archives/dictionary.py +++ b/module/war_archives/dictionary.py @@ -27,4 +27,5 @@ dic_archives_template = { 'war_archives_20200917_cn': TEMPLATE_DREAMWAKERS_BUTTERFLY, 'war_archives_20210527_cn': TEMPLATE_MIRROR_INVOLUTION, 'war_archives_20210225_cn': TEMPLATE_KHOROVOD_OF_DAWNS_RIME, + 'war_archives_20200603_cn': TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD, }