From 88fad111611738bd33b5eaf1b83c0e825116786c Mon Sep 17 00:00:00 2001 From: julystone Date: Tue, 25 Jan 2022 11:19:27 +0800 Subject: [PATCH 1/2] Add: Add WarArchives Empyreal Tragicomedy --- campaign/Readme.md | 3 +- campaign/war_archives_20190911_cn/a1.py | 69 +++++++++++++++++++++ campaign/war_archives_20190911_cn/a2.py | 74 ++++++++++++++++++++++ campaign/war_archives_20190911_cn/a3.py | 74 ++++++++++++++++++++++ campaign/war_archives_20190911_cn/b1.py | 72 ++++++++++++++++++++++ campaign/war_archives_20190911_cn/b2.py | 73 ++++++++++++++++++++++ campaign/war_archives_20190911_cn/b3.py | 73 ++++++++++++++++++++++ campaign/war_archives_20190911_cn/c1.py | 69 +++++++++++++++++++++ campaign/war_archives_20190911_cn/c2.py | 74 ++++++++++++++++++++++ campaign/war_archives_20190911_cn/c3.py | 74 ++++++++++++++++++++++ campaign/war_archives_20190911_cn/d1.py | 72 ++++++++++++++++++++++ campaign/war_archives_20190911_cn/d2.py | 82 +++++++++++++++++++++++++ campaign/war_archives_20190911_cn/d3.py | 82 +++++++++++++++++++++++++ config/template.json | 2 +- module/config/argument/args.json | 7 ++- module/config/i18n/en-US.json | 1 + module/config/i18n/ja-JP.json | 1 + module/config/i18n/zh-CN.json | 1 + 18 files changed, 898 insertions(+), 5 deletions(-) create mode 100644 campaign/war_archives_20190911_cn/a1.py create mode 100644 campaign/war_archives_20190911_cn/a2.py create mode 100644 campaign/war_archives_20190911_cn/a3.py create mode 100644 campaign/war_archives_20190911_cn/b1.py create mode 100644 campaign/war_archives_20190911_cn/b2.py create mode 100644 campaign/war_archives_20190911_cn/b3.py create mode 100644 campaign/war_archives_20190911_cn/c1.py create mode 100644 campaign/war_archives_20190911_cn/c2.py create mode 100644 campaign/war_archives_20190911_cn/c3.py create mode 100644 campaign/war_archives_20190911_cn/d1.py create mode 100644 campaign/war_archives_20190911_cn/d2.py create mode 100644 campaign/war_archives_20190911_cn/d3.py diff --git a/campaign/Readme.md b/campaign/Readme.md index e68151d3e..6dec954b9 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -21,7 +21,8 @@ To add a new event, add a new row in here, and run `python -m dev_tools.event_ex | 20180226 | war archives 20190221 en | Winter\'s Crown | 凛冬王冠 | Winter\'s Crown | 凛冽なりし冬の王冠 | 凜冬王冠 | | 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 | 光と影のアイリス | 光與影的鳶尾之華 | -| 20180726 | war archives 20181227 cn | Crimson Echoes | 苍红的回响 | Crimson Echoes | 縹映る深緋の残響 | 蒼紅的迴響 | +| 20210121 | war archives 20181227 cn | Crimson Echoes | 苍红的回响 | Crimson Echoes | 縹映る深緋の残響 | 蒼紅的迴響 | +| 20220113 | war archives 20190911 cn | Empyreal Tragicomedy | 神圣的悲喜剧 | Empyreal Tragicomedy | 悲歎せし焔海の詩 | - | | 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_20190911_cn/a1.py b/campaign/war_archives_20190911_cn/a1.py new file mode 100644 index 000000000..3495ac609 --- /dev/null +++ b/campaign/war_archives_20190911_cn/a1.py @@ -0,0 +1,69 @@ +from ..campaign_war_archives.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 = 'H6' +MAP.camera_data = ['D2', 'D4', 'E2', 'E4'] +MAP.camera_data_spawn_point = ['D4'] +MAP.map_data = """ + -- ++ -- ME -- ++ ME -- + Me ++ -- MB -- Me -- -- + -- -- __ ++ ++ -- -- ME + -- Me -- ME ++ -- MS ME + SP -- ME -- ME -- ++ -- + SP SP -- -- -- -- 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 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 1}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1, 'boss': 1}, + {'battle': 4, 'enemy': 2}, + {'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, \ + = MAP.flatten() + + +class Config: + # ===== 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 = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_3(self): + return self.clear_boss() diff --git a/campaign/war_archives_20190911_cn/a2.py b/campaign/war_archives_20190911_cn/a2.py new file mode 100644 index 000000000..d05f06014 --- /dev/null +++ b/campaign/war_archives_20190911_cn/a2.py @@ -0,0 +1,74 @@ +from ..campaign_war_archives.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 = 'G7' +MAP.camera_data = ['C2', 'C5'] +MAP.camera_data_spawn_point = ['C5', 'C2'] +MAP.map_data = """ + -- ME MS MS -- ++ -- + ME -- -- -- -- ME -- + -- -- __ -- SP ++ ++ + ME -- ME ++ -- ++ ++ + Me -- -- ++ -- SP -- + -- MB MS -- -- ++ ++ + -- -- 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 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 1}, + {'battle': 1, 'enemy': 1, 'siren': 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, \ +A2, B2, C2, D2, E2, F2, G2, \ +A3, B3, C3, D3, E3, F3, G3, \ +A4, B4, C4, D4, E4, F4, G4, \ +A5, B5, C5, D5, E5, F5, G5, \ +A6, B6, C6, D6, E6, F6, G6, \ +A7, B7, C7, D7, E7, F7, G7, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Swordfish'] + MOVABLE_ENEMY_TURN = (1,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + STAR_REQUIRE_3 = 0 + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/war_archives_20190911_cn/a3.py b/campaign/war_archives_20190911_cn/a3.py new file mode 100644 index 000000000..4a9ff4262 --- /dev/null +++ b/campaign/war_archives_20190911_cn/a3.py @@ -0,0 +1,74 @@ +from ..campaign_war_archives.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 = 'I7' +MAP.camera_data = ['D2', 'D5', 'F2', 'F5'] +MAP.camera_data_spawn_point = ['F2'] +MAP.map_data = """ + -- -- -- MS -- -- SP ++ ++ + Me -- -- -- ++ -- -- ++ ++ + -- ME ME ME ++ -- -- -- SP + -- -- -- __ -- -- -- -- -- + -- MS -- -- MB -- ++ ++ -- + -- -- ++ MS ME -- -- -- MS + -- ME ++ -- MB -- Me -- -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 2}, + {'battle': 1, 'enemy': 1, 'siren': 1}, + {'battle': 2, 'enemy': 2, 'siren': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2, 'boss': 1}, + {'battle': 5, 'enemy': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Swordfish'] + MOVABLE_ENEMY_TURN = (1,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + STAR_REQUIRE_3 = 0 + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/war_archives_20190911_cn/b1.py b/campaign/war_archives_20190911_cn/b1.py new file mode 100644 index 000000000..1c6591afc --- /dev/null +++ b/campaign/war_archives_20190911_cn/b1.py @@ -0,0 +1,72 @@ +from ..campaign_war_archives.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 = 'H7' +MAP.camera_data = ['D2', 'D5', 'E2', 'E5'] +MAP.camera_data_spawn_point = ['D5'] +MAP.map_data = """ + -- -- -- MS -- -- -- -- + -- ME -- ++ ++ ME -- ++ + ++ -- MB ++ ++ -- -- ++ + MS ME -- __ -- ME -- Me + -- -- MS -- ME -- -- -- + ME ME -- -- -- ++ ++ ++ + -- -- SP SP -- -- Me -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 +""" +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, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Carabiniere', 'Trento'] + MOVABLE_ENEMY_TURN = (2, 3) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/war_archives_20190911_cn/b2.py b/campaign/war_archives_20190911_cn/b2.py new file mode 100644 index 000000000..93949e6f7 --- /dev/null +++ b/campaign/war_archives_20190911_cn/b2.py @@ -0,0 +1,73 @@ +from ..campaign_war_archives.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 = 'I7' +MAP.camera_data = ['D2', 'D5', 'F2', 'F5'] +MAP.camera_data_spawn_point = ['F2', 'D2'] +MAP.map_data = """ + -- -- -- -- SP SP ME -- -- + -- -- MS Me -- -- -- ME -- + ME ++ ++ ++ -- -- -- ++ ME + -- -- ME -- -- MS -- ++ -- + -- -- Me __ -- ++ -- -- ME + ++ ME ME -- -- -- Me -- -- + -- -- -- MB -- MB -- Me -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +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, \ +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 = ['Carabiniere', 'Trento'] + MOVABLE_ENEMY_TURN = (2, 3) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/war_archives_20190911_cn/b3.py b/campaign/war_archives_20190911_cn/b3.py new file mode 100644 index 000000000..b5fd8001b --- /dev/null +++ b/campaign/war_archives_20190911_cn/b3.py @@ -0,0 +1,73 @@ +from ..campaign_war_archives.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 = 'H7' +MAP.camera_data = ['D2', 'D5', 'E2', 'E5'] +MAP.camera_data_spawn_point = ['D2', 'D5'] +MAP.map_data = """ + -- -- MS -- ME -- -- -- + -- Me ++ MS -- Me ME ME + SP -- ME -- Me ++ ++ ++ + -- -- -- __ -- -- MB -- + SP -- -- -- -- ++ ++ ++ + -- Me ++ ++ ME -- -- ME + Me ME ++ ++ ME MS -- -- +""" +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 +""" +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, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Carabiniere', 'Trento', 'Littorio'] + MOVABLE_ENEMY_TURN = (2, 3) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/war_archives_20190911_cn/c1.py b/campaign/war_archives_20190911_cn/c1.py new file mode 100644 index 000000000..485f5917d --- /dev/null +++ b/campaign/war_archives_20190911_cn/c1.py @@ -0,0 +1,69 @@ +from ..campaign_war_archives.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 = 'H6' +MAP.camera_data = ['D2', 'D4', 'E2', 'E4'] +MAP.camera_data_spawn_point = ['D4'] +MAP.map_data = """ + -- ++ -- ME -- ++ ME -- + Me ++ -- MB -- Me -- -- + -- -- __ ++ ++ -- -- ME + -- Me -- ME ++ -- MS ME + SP -- ME -- ME -- ++ -- + SP SP -- -- -- -- 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 +""" +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, '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, \ + = 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 = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/war_archives_20190911_cn/c2.py b/campaign/war_archives_20190911_cn/c2.py new file mode 100644 index 000000000..9ebf435f4 --- /dev/null +++ b/campaign/war_archives_20190911_cn/c2.py @@ -0,0 +1,74 @@ +from ..campaign_war_archives.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 = 'G7' +MAP.camera_data = ['C2', 'C5'] +MAP.camera_data_spawn_point = ['C5', 'C2'] +MAP.map_data = """ + -- ME -- MS -- ++ -- + ME MS -- -- -- ME -- + -- -- __ -- SP ++ ++ + ME -- ME ++ -- ++ ++ + Me -- -- ++ -- SP -- + -- MB -- -- -- ++ ++ + -- MS 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 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 2}, + {'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, \ +A2, B2, C2, D2, E2, F2, G2, \ +A3, B3, C3, D3, E3, F3, G3, \ +A4, B4, C4, D4, E4, F4, G4, \ +A5, B5, C5, D5, E5, F5, G5, \ +A6, B6, C6, D6, E6, F6, G6, \ +A7, B7, C7, D7, E7, F7, G7, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Swordfish'] + MOVABLE_ENEMY_TURN = (1,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + STAR_REQUIRE_3 = 0 + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/war_archives_20190911_cn/c3.py b/campaign/war_archives_20190911_cn/c3.py new file mode 100644 index 000000000..245a4c12b --- /dev/null +++ b/campaign/war_archives_20190911_cn/c3.py @@ -0,0 +1,74 @@ +from ..campaign_war_archives.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 = 'I7' +MAP.camera_data = ['D2', 'D5', 'F2', 'F5'] +MAP.camera_data_spawn_point = ['F2'] +MAP.map_data = """ + -- -- -- MS -- -- SP ++ ++ + Me -- -- -- ++ -- -- ++ ++ + -- ME ME ME ++ -- -- -- SP + -- -- -- __ -- -- -- -- -- + -- MS Me -- MB -- ++ ++ -- + -- -- ++ MS -- -- -- -- MS + -- ME ++ -- MB -- ME -- -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 2}, + {'battle': 1, 'enemy': 1, 'siren': 1}, + {'battle': 2, 'enemy': 2, 'siren': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2}, + {'battle': 5, 'enemy': 1, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Swordfish'] + MOVABLE_ENEMY_TURN = (1,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + STAR_REQUIRE_3 = 0 + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/war_archives_20190911_cn/d1.py b/campaign/war_archives_20190911_cn/d1.py new file mode 100644 index 000000000..5f6e5eb48 --- /dev/null +++ b/campaign/war_archives_20190911_cn/d1.py @@ -0,0 +1,72 @@ +from ..campaign_war_archives.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 = 'H7' +MAP.camera_data = ['D2', 'D5', 'E2', 'E5'] +MAP.camera_data_spawn_point = ['D5'] +MAP.map_data = """ + -- -- -- MS -- -- -- -- + -- ME -- ++ ++ ME -- ++ + ++ -- MB ++ ++ -- -- ++ + MS ME -- __ -- ME -- Me + -- -- MS -- ME -- -- -- + ME ME -- -- -- ++ ++ ++ + -- -- SP SP -- -- Me -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 +""" +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, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Carabiniere', 'Trento'] + MOVABLE_ENEMY_TURN = (2, 3) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/war_archives_20190911_cn/d2.py b/campaign/war_archives_20190911_cn/d2.py new file mode 100644 index 000000000..9f4678831 --- /dev/null +++ b/campaign/war_archives_20190911_cn/d2.py @@ -0,0 +1,82 @@ +from ..campaign_war_archives.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 = 'I7' +MAP.camera_data = ['D2', 'D5', 'F2', 'F5'] +MAP.camera_data_spawn_point = ['F2', 'D2'] +MAP.map_data = """ + -- -- -- -- SP SP ME -- -- + -- -- MS Me -- -- -- ME -- + ME ++ ++ ++ -- -- -- ++ ME + -- -- ME -- -- MS -- ++ -- + -- -- Me __ -- ++ -- -- ME + ++ ME ME -- -- -- Me -- -- + -- -- -- MB -- MB -- Me -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +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, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Carabiniere', 'Trento', 'Littorio'] + MOVABLE_ENEMY_TURN = (2, 3) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): + return True + + return self.battle_default() + + def battle_5(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_6(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/war_archives_20190911_cn/d3.py b/campaign/war_archives_20190911_cn/d3.py new file mode 100644 index 000000000..331c641c9 --- /dev/null +++ b/campaign/war_archives_20190911_cn/d3.py @@ -0,0 +1,82 @@ +from ..campaign_war_archives.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 = 'H7' +MAP.camera_data = ['D2', 'D5', 'E2', 'E5'] +MAP.camera_data_spawn_point = ['D2', 'D5'] +MAP.map_data = """ + -- -- MS -- ME -- -- -- + -- Me ++ MS -- Me ME ME + SP -- ME -- Me ++ ++ ++ + -- -- -- __ -- -- MB -- + SP -- -- -- -- ++ ++ ++ + -- Me ++ ++ ME -- -- ME + Me ME ++ ++ ME MS -- -- +""" +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 +""" +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, \ +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, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Carabiniere', 'Trento', 'Littorio'] + MOVABLE_ENEMY_TURN = (2, 3) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): + return True + + return self.battle_default() + + def battle_5(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_6(self): + return self.fleet_boss.clear_boss() diff --git a/config/template.json b/config/template.json index eb2a48ac6..701a57c5b 100644 --- a/config/template.json +++ b/config/template.json @@ -1167,7 +1167,7 @@ }, "Campaign": { "Name": "7-2", - "Event": "war_archives_20181227_cn", + "Event": "war_archives_20190911_cn", "Mode": "normal", "UseClearMode": true, "UseFleetLock": true, diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 566e1431e..cf07a91b5 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -5479,6 +5479,7 @@ "type": "select", "value": "campaign_main", "option": [ + "war_archives_20190911_cn", "war_archives_20181227_cn", "war_archives_20180726_cn", "war_archives_20180607_cn", @@ -5490,9 +5491,9 @@ "war_archives_20191031_en", "war_archives_20181020_en" ], - "cn": "war_archives_20181227_cn", - "en": "war_archives_20181227_cn", - "jp": "war_archives_20181227_cn", + "cn": "war_archives_20190911_cn", + "en": "war_archives_20190911_cn", + "jp": "war_archives_20190911_cn", "tw": "war_archives_20181227_cn" }, "Mode": { diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index da4fd06d9..6f1002824 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -473,6 +473,7 @@ "event_20200423_cn": "Crimson Echoes Rerun", "event_20200326_cn": "Microlayer Medley", "event_20200227_cn": "Northern Overture", + "war_archives_20190911_cn": "archives Empyreal Tragicomedy", "war_archives_20181227_cn": "archives Crimson Echoes", "war_archives_20180726_cn": "archives Iris of Light and Dark", "war_archives_20180607_cn": "archives Ink Stained Steel Sakura", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 6349147ea..4ad14fe09 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -473,6 +473,7 @@ "event_20200423_cn": "縹映る深緋の残響(復刻)", "event_20200326_cn": "闇靄払う銀翼", "event_20200227_cn": "凍絶の北海", + "war_archives_20190911_cn": "檔案 悲歎せし焔海の詩", "war_archives_20181227_cn": "檔案 縹映る深緋の残響", "war_archives_20180726_cn": "檔案 光と影のアイリス", "war_archives_20180607_cn": "檔案 墨染まりし鋼の桜", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index b208854eb..75c83d23e 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -473,6 +473,7 @@ "event_20200423_cn": "复刻苍红的回响", "event_20200326_cn": "微层混合", "event_20200227_cn": "北境序曲", + "war_archives_20190911_cn": "档案 神圣的悲喜剧", "war_archives_20181227_cn": "档案 苍红的回响", "war_archives_20180726_cn": "档案 光与影的鸢尾之华", "war_archives_20180607_cn": "档案 墨染的钢铁之花", From 175f78367d7847cf4d5b4e9298a3ebee8a8c6b7e Mon Sep 17 00:00:00 2001 From: julystone Date: Wed, 26 Jan 2022 15:18:53 +0800 Subject: [PATCH 2/2] Mod: Improvement of Empyreal Tagicomedy WarArchives --- campaign/war_archives_20190911_cn/a1.py | 16 ++++ campaign/war_archives_20190911_cn/a2.py | 26 ++++-- campaign/war_archives_20190911_cn/a3.py | 20 ++++- campaign/war_archives_20190911_cn/as1.py | 70 ++++++++++++++++ campaign/war_archives_20190911_cn/as2.py | 74 +++++++++++++++++ campaign/war_archives_20190911_cn/b1.py | 16 ++++ campaign/war_archives_20190911_cn/b3.py | 4 +- campaign/war_archives_20190911_cn/c1.py | 16 ++++ campaign/war_archives_20190911_cn/c2.py | 31 +++++-- campaign/war_archives_20190911_cn/c3.py | 22 +++-- .../war_archives_20190911_cn/campaign_base.py | 58 +++++++++++++ campaign/war_archives_20190911_cn/cs1.py | 83 +++++++++++++++++++ campaign/war_archives_20190911_cn/cs2.py | 74 +++++++++++++++++ campaign/war_archives_20190911_cn/d1.py | 14 ++++ campaign/war_archives_20190911_cn/d3.py | 18 +--- 15 files changed, 501 insertions(+), 41 deletions(-) create mode 100644 campaign/war_archives_20190911_cn/as1.py create mode 100644 campaign/war_archives_20190911_cn/as2.py create mode 100644 campaign/war_archives_20190911_cn/campaign_base.py create mode 100644 campaign/war_archives_20190911_cn/cs1.py create mode 100644 campaign/war_archives_20190911_cn/cs2.py diff --git a/campaign/war_archives_20190911_cn/a1.py b/campaign/war_archives_20190911_cn/a1.py index 3495ac609..c9d764972 100644 --- a/campaign/war_archives_20190911_cn/a1.py +++ b/campaign/war_archives_20190911_cn/a1.py @@ -52,6 +52,22 @@ class Config: MAP_HAS_MYSTERY = False # ===== End of generated config ===== + MAP_SWIPE_MULTIPLY = 1.519 + MAP_SWIPE_MULTIPLY_MINITOUCH = 1.469 + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (150, 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 + } + class Campaign(CampaignBase): MAP = MAP diff --git a/campaign/war_archives_20190911_cn/a2.py b/campaign/war_archives_20190911_cn/a2.py index d05f06014..de59da863 100644 --- a/campaign/war_archives_20190911_cn/a2.py +++ b/campaign/war_archives_20190911_cn/a2.py @@ -6,14 +6,14 @@ from .a1 import Config as ConfigBase MAP = CampaignMap('A2') MAP.shape = 'G7' -MAP.camera_data = ['C2', 'C5'] -MAP.camera_data_spawn_point = ['C5', 'C2'] +MAP.camera_data = ['D2', 'D5'] +MAP.camera_data_spawn_point = ['D2', 'D5'] MAP.map_data = """ -- ME MS MS -- ++ -- ME -- -- -- -- ME -- -- -- __ -- SP ++ ++ ME -- ME ++ -- ++ ++ - Me -- -- ++ -- SP -- + ++ -- -- ++ -- SP -- -- MB MS -- -- ++ ++ -- -- MS ME -- -- -- """ @@ -21,7 +21,7 @@ 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 10 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 @@ -60,13 +60,25 @@ class Config(ConfigBase): class Campaign(CampaignBase): MAP = MAP - ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def get_map_clear_percentage(self): + """ + map clear here is shorter than normal, about 70% at max + + Returns: + float: 0 to 1. + """ + return super().get_map_clear_percentage() * 1.4 def battle_0(self): + if not self.map_is_clear_mode: + for grid in self.map: + grid.may_siren = True + + self.fleet_2_push_forward() + if self.clear_siren(): return True - if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): - return True return self.battle_default() diff --git a/campaign/war_archives_20190911_cn/a3.py b/campaign/war_archives_20190911_cn/a3.py index 4a9ff4262..25e9b2e4b 100644 --- a/campaign/war_archives_20190911_cn/a3.py +++ b/campaign/war_archives_20190911_cn/a3.py @@ -57,16 +57,30 @@ class Config(ConfigBase): STAR_REQUIRE_3 = 0 # ===== End of generated config ===== + STAR_REQUIRE_3 = 0 + MAP_SWIPE_MULTIPLY = 1.626 + MAP_SWIPE_MULTIPLY_MINITOUCH = 1.572 + class Campaign(CampaignBase): MAP = MAP - ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def get_map_clear_percentage(self): + """ + map clear here is shorter than normal, about 70% at max + + Returns: + float: 0 to 1. + """ + return super().get_map_clear_percentage() * 1.4 def battle_0(self): + if not self.map_is_clear_mode: + for grid in self.map: + grid.may_siren = True + if self.clear_siren(): return True - if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): - return True return self.battle_default() diff --git a/campaign/war_archives_20190911_cn/as1.py b/campaign/war_archives_20190911_cn/as1.py new file mode 100644 index 000000000..f97e15977 --- /dev/null +++ b/campaign/war_archives_20190911_cn/as1.py @@ -0,0 +1,70 @@ +from ..campaign_war_archives.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('AS1') +MAP.shape = 'H6' +MAP.camera_data = ['D2', 'D4', 'E2', 'E4'] +MAP.camera_data_spawn_point = ['D2', 'E2'] +MAP.map_data = """ + -- ++ -- ME MS -- -- ME + -- ++ -- -- -- ++ ++ -- + ME -- SP -- SP -- ++ Me + -- -- -- ME -- __ -- -- + ME -- -- -- -- -- ME -- + ME ++ MS -- 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 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 1}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1, 'boss': 1}, + {'battle': 4, 'enemy': 2}, + {'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, \ + = MAP.flatten() + + +class Config: + # ===== 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 = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + STAR_REQUIRE_1 = 0 + STAR_REQUIRE_2 = 0 + STAR_REQUIRE_3 = 0 + # ===== End of generated config ===== + + MAP_IS_ONE_TIME_STAGE = True + + +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_20190911_cn/as2.py b/campaign/war_archives_20190911_cn/as2.py new file mode 100644 index 000000000..e198d8bd2 --- /dev/null +++ b/campaign/war_archives_20190911_cn/as2.py @@ -0,0 +1,74 @@ +from ..campaign_war_archives.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 .as1 import Config as ConfigBase + +MAP = CampaignMap('AS2') +MAP.shape = 'H7' +MAP.camera_data = ['D2', 'D5', 'E2', 'E5'] +MAP.camera_data_spawn_point = ['D2', 'E2'] +MAP.map_data = """ + -- MS ++ -- -- MB -- -- + ME -- -- -- -- -- ++ -- + -- ME -- SP SP -- -- -- + -- ME -- -- -- ++ ++ -- + ME -- __ -- -- ++ ++ ME + ++ ++ ++ MB -- -- ME -- + -- -- ME -- ME -- MS -- +""" +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 +""" +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, \ + = 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 = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + STAR_REQUIRE_1 = 0 + STAR_REQUIRE_2 = 0 + STAR_REQUIRE_3 = 0 + # ===== End of generated config ===== + + MAP_IS_ONE_TIME_STAGE = True + + +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_20190911_cn/b1.py b/campaign/war_archives_20190911_cn/b1.py index 1c6591afc..fbc47123a 100644 --- a/campaign/war_archives_20190911_cn/b1.py +++ b/campaign/war_archives_20190911_cn/b1.py @@ -55,6 +55,22 @@ class Config: MAP_HAS_MYSTERY = False # ===== End of generated config ===== + MAP_SWIPE_MULTIPLY = 1.519 + MAP_SWIPE_MULTIPLY_MINITOUCH = 1.469 + 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 + } + class Campaign(CampaignBase): MAP = MAP diff --git a/campaign/war_archives_20190911_cn/b3.py b/campaign/war_archives_20190911_cn/b3.py index b5fd8001b..6277a1bd1 100644 --- a/campaign/war_archives_20190911_cn/b3.py +++ b/campaign/war_archives_20190911_cn/b3.py @@ -14,8 +14,8 @@ MAP.map_data = """ SP -- ME -- Me ++ ++ ++ -- -- -- __ -- -- MB -- SP -- -- -- -- ++ ++ ++ - -- Me ++ ++ ME -- -- ME - Me ME ++ ++ ME MS -- -- + -- Me ++ ++ MS -- -- ME + Me ME ++ ++ ME ME -- -- """ MAP.weight_data = """ 50 50 50 50 50 50 50 50 diff --git a/campaign/war_archives_20190911_cn/c1.py b/campaign/war_archives_20190911_cn/c1.py index 485f5917d..f77d2fae2 100644 --- a/campaign/war_archives_20190911_cn/c1.py +++ b/campaign/war_archives_20190911_cn/c1.py @@ -52,6 +52,22 @@ class Config: MAP_HAS_MYSTERY = False # ===== End of generated config ===== + MAP_SWIPE_MULTIPLY = 1.519 + MAP_SWIPE_MULTIPLY_MINITOUCH = 1.469 + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (150, 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 + } + class Campaign(CampaignBase): MAP = MAP diff --git a/campaign/war_archives_20190911_cn/c2.py b/campaign/war_archives_20190911_cn/c2.py index 9ebf435f4..5eb026da6 100644 --- a/campaign/war_archives_20190911_cn/c2.py +++ b/campaign/war_archives_20190911_cn/c2.py @@ -6,14 +6,14 @@ from .c1 import Config as ConfigBase MAP = CampaignMap('C2') MAP.shape = 'G7' -MAP.camera_data = ['C2', 'C5'] -MAP.camera_data_spawn_point = ['C5', 'C2'] +MAP.camera_data = ['D2', 'D5'] +MAP.camera_data_spawn_point = ['D2', 'D5'] MAP.map_data = """ -- ME -- MS -- ++ -- ME MS -- -- -- ME -- -- -- __ -- SP ++ ++ ME -- ME ++ -- ++ ++ - Me -- -- ++ -- SP -- + ++ -- -- ++ -- SP -- -- MB -- -- -- ++ ++ -- MS MS ME -- -- -- """ @@ -21,7 +21,7 @@ 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 10 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 @@ -53,22 +53,35 @@ class Config(ConfigBase): MAP_HAS_MAP_STORY = False MAP_HAS_FLEET_STEP = True MAP_HAS_AMBUSH = False - MAP_HAS_MYSTERY = False - STAR_REQUIRE_3 = 0 # ===== End of generated config ===== + STAR_REQUIRE_3 = 0 + class Campaign(CampaignBase): MAP = MAP - ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def get_map_clear_percentage(self): + """ + map clear here is shorter than normal, about 70% at max + + Returns: + float: 0 to 1. + """ + return super().get_map_clear_percentage() * 1.4 def battle_0(self): + if not self.map_is_clear_mode: + for grid in self.map: + grid.may_siren = True + + self.fleet_2_push_forward() + 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_20190911_cn/c3.py b/campaign/war_archives_20190911_cn/c3.py index 245a4c12b..e731fb79c 100644 --- a/campaign/war_archives_20190911_cn/c3.py +++ b/campaign/war_archives_20190911_cn/c3.py @@ -53,20 +53,32 @@ class Config(ConfigBase): MAP_HAS_MAP_STORY = False MAP_HAS_FLEET_STEP = True MAP_HAS_AMBUSH = False - MAP_HAS_MYSTERY = False - STAR_REQUIRE_3 = 0 # ===== End of generated config ===== + STAR_REQUIRE_3 = 0 + MAP_SWIPE_MULTIPLY = 1.626 + MAP_SWIPE_MULTIPLY_MINITOUCH = 1.572 + class Campaign(CampaignBase): MAP = MAP - ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def get_map_clear_percentage(self): + """ + map clear here is shorter than normal, about 70% at max + + Returns: + float: 0 to 1. + """ + return super().get_map_clear_percentage() * 1.4 def battle_0(self): + if not self.map_is_clear_mode: + for grid in self.map: + grid.may_siren = True + if self.clear_siren(): return True - if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): - return True return self.battle_default() diff --git a/campaign/war_archives_20190911_cn/campaign_base.py b/campaign/war_archives_20190911_cn/campaign_base.py new file mode 100644 index 000000000..3ec647ed8 --- /dev/null +++ b/campaign/war_archives_20190911_cn/campaign_base.py @@ -0,0 +1,58 @@ +from ..campaign_war_archives.campaign_base import CampaignBase as CampaignBase_ +from module.logger import logger +from module.exception import CampaignNameError + +class CampaignBase(CampaignBase_): + def campaign_set_chapter(self, name, mode='normal'): + """ + Args: + name (str): Campaign name, such as '7-2', 'd3', 'sp3'. + mode (str): 'normal' or 'hard'. + """ + chapter, _ = self._campaign_separate_name(name) + + if chapter.isdigit(): + self.ui_goto_campaign() + self.campaign_ensure_mode('normal') + self.campaign_ensure_chapter(index=chapter) + if mode == 'hard': + self.campaign_ensure_mode('hard') + self.campaign_ensure_chapter(index=chapter) + + elif chapter in 'abcd' or chapter == 'ex_sp' or chapter in ['as', 'cs']: + self.ui_goto_event() + if chapter in 'ab' or chapter == 'as': + self.campaign_ensure_mode('normal') + elif chapter in 'cd' or chapter == 'cs': + self.campaign_ensure_mode('hard') + elif chapter == 'ex_sp': + self.campaign_ensure_mode('ex') + self.campaign_ensure_chapter(index=chapter) + + elif chapter == 'sp': + self.ui_goto_sp() + self.campaign_ensure_chapter(index=chapter) + + else: + logger.warning(f'Unknown campaign chapter: {name}') + + @staticmethod + def _campaign_get_chapter_index(name): + """ + Args: + name (str, int): + + Returns: + int + """ + if isinstance(name, int): + return name + else: + if name.isdigit(): + return int(name) + elif name in ['a', 'c', 'sp', 'ex_sp', 'as', 'cs']: + return 1 + elif name in ['b', 'd', 'ex_ex']: + return 2 + else: + raise CampaignNameError diff --git a/campaign/war_archives_20190911_cn/cs1.py b/campaign/war_archives_20190911_cn/cs1.py new file mode 100644 index 000000000..5a9a9de41 --- /dev/null +++ b/campaign/war_archives_20190911_cn/cs1.py @@ -0,0 +1,83 @@ +from ..campaign_war_archives.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('CS1') +MAP.shape = 'H6' +MAP.camera_data = ['D2', 'D4', 'E2', 'E4'] +MAP.camera_data_spawn_point = ['D2', 'E2'] +MAP.map_data = """ + -- ++ -- ME MS -- -- ME + -- ++ -- -- -- ++ ++ -- + ME -- SP -- SP -- ++ Me + -- -- -- ME -- __ -- -- + ME -- -- -- -- -- ME -- + ME ++ MS -- 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 + 90 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, '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, \ + = 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 = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + STAR_REQUIRE_1 = 0 + STAR_REQUIRE_2 = 0 + STAR_REQUIRE_3 = 0 + # ===== End of generated config ===== + + MAP_IS_ONE_TIME_STAGE = True + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (150, 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 + } + + +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_20190911_cn/cs2.py b/campaign/war_archives_20190911_cn/cs2.py new file mode 100644 index 000000000..f6101c184 --- /dev/null +++ b/campaign/war_archives_20190911_cn/cs2.py @@ -0,0 +1,74 @@ +from ..campaign_war_archives.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 .cs1 import Config as ConfigBase + +MAP = CampaignMap('CS2') +MAP.shape = 'H7' +MAP.camera_data = ['D2', 'D5', 'E2', 'E5'] +MAP.camera_data_spawn_point = ['D2', 'E2'] +MAP.map_data = """ + -- MS ++ -- -- MB -- -- + ME -- -- -- -- -- ++ -- + -- ME -- SP SP -- -- -- + -- ME -- -- -- ++ ++ -- + ME -- __ -- -- ++ ++ ME + ++ ++ ++ MB -- -- ME -- + -- -- ME -- ME -- MS -- +""" +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 +""" +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, '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, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['CL', 'CA', 'BB'] + MOVABLE_ENEMY_TURN = (2, 3) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + STAR_REQUIRE_1 = 0 + STAR_REQUIRE_2 = 0 + STAR_REQUIRE_3 = 0 + # ===== End of generated config ===== + + MAP_IS_ONE_TIME_STAGE = True + + +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_20190911_cn/d1.py b/campaign/war_archives_20190911_cn/d1.py index 5f6e5eb48..d1c939e6e 100644 --- a/campaign/war_archives_20190911_cn/d1.py +++ b/campaign/war_archives_20190911_cn/d1.py @@ -55,6 +55,20 @@ class Config: MAP_HAS_MYSTERY = 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 + } + class Campaign(CampaignBase): MAP = MAP diff --git a/campaign/war_archives_20190911_cn/d3.py b/campaign/war_archives_20190911_cn/d3.py index 331c641c9..14337a78a 100644 --- a/campaign/war_archives_20190911_cn/d3.py +++ b/campaign/war_archives_20190911_cn/d3.py @@ -1,4 +1,4 @@ -from ..campaign_war_archives.campaign_base import CampaignBase +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 @@ -14,8 +14,8 @@ MAP.map_data = """ SP -- ME -- Me ++ ++ ++ -- -- -- __ -- -- MB -- SP -- -- -- -- ++ ++ ++ - -- Me ++ ++ ME -- -- ME - Me ME ++ ++ ME MS -- -- + -- Me ++ ++ MS -- -- ME + Me ME ++ ++ ME ME -- -- """ MAP.weight_data = """ 50 50 50 50 50 50 50 50 @@ -54,27 +54,15 @@ class Config(ConfigBase): MAP_HAS_MAP_STORY = False MAP_HAS_FLEET_STEP = True MAP_HAS_AMBUSH = False - MAP_HAS_MYSTERY = False # ===== End of generated config ===== class Campaign(CampaignBase): MAP = MAP - ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' def battle_0(self): if self.clear_siren(): return True - if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): - return True - - return self.battle_default() - - def battle_5(self): - if self.clear_siren(): - return True - if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): - return True return self.battle_default()