Add: Effulgence Before Eclipse chapter AC
BIN
assets/cn/template/TEMPLATE_SIREN_Asanagi.gif
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
assets/cn/template/TEMPLATE_SIREN_Hatsuzuki.gif
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
assets/en/template/TEMPLATE_SIREN_Asanagi.gif
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
assets/en/template/TEMPLATE_SIREN_Hatsuzuki.gif
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
assets/jp/template/TEMPLATE_SIREN_Asanagi.gif
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
assets/jp/template/TEMPLATE_SIREN_Hatsuzuki.gif
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
assets/tw/template/TEMPLATE_SIREN_Asanagi.gif
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
assets/tw/template/TEMPLATE_SIREN_Hatsuzuki.gif
Normal file
After Width: | Height: | Size: 4.3 KiB |
93
campaign/event_20230914_cn/a1.py
Normal file
@ -0,0 +1,93 @@
|
||||
from .campaign_base import CampaignBase
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import SelectedGrids, RoadGrids
|
||||
from module.logger import logger
|
||||
|
||||
MAP = CampaignMap('A1')
|
||||
MAP.shape = 'I8'
|
||||
MAP.camera_data = ['D3', 'D6', 'F3', 'F6']
|
||||
MAP.camera_data_spawn_point = ['D6']
|
||||
MAP.map_data = """
|
||||
-- -- -- -- -- ++ ++ -- --
|
||||
ME ME ++ MS MB ++ ++ ME --
|
||||
-- -- ++ -- -- MS -- -- ME
|
||||
ME -- -- MS ++ ++ ++ -- ++
|
||||
++ ME -- -- Me Me -- -- ME
|
||||
-- Me -- __ -- -- -- ME --
|
||||
ME -- SP -- SP -- 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': 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, \
|
||||
A8, B8, C8, D8, E8, F8, G8, H8, I8, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config:
|
||||
# ===== Start of generated config =====
|
||||
MAP_SIREN_TEMPLATE = []
|
||||
MOVABLE_ENEMY_TURN = (2,)
|
||||
MAP_HAS_SIREN = True
|
||||
MAP_HAS_MOVABLE_ENEMY = True
|
||||
MAP_HAS_MAP_STORY = True
|
||||
MAP_HAS_FLEET_STEP = True
|
||||
MAP_HAS_AMBUSH = False
|
||||
MAP_HAS_MYSTERY = False
|
||||
# ===== End of generated config =====
|
||||
|
||||
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (80, 255 - 17),
|
||||
'width': (0.9, 10),
|
||||
'prominence': 10,
|
||||
'distance': 35,
|
||||
}
|
||||
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||
'height': (255 - 17, 255),
|
||||
'prominence': 10,
|
||||
'distance': 50,
|
||||
'wlen': 1000
|
||||
}
|
||||
HOMO_EDGE_COLOR_RANGE = (0, 17)
|
||||
MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom'
|
||||
|
||||
MAP_SWIPE_MULTIPLY = (1.074, 1.095)
|
||||
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.039, 1.058)
|
||||
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.009, 1.027)
|
||||
|
||||
|
||||
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()
|
70
campaign/event_20230914_cn/a2.py
Normal file
@ -0,0 +1,70 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import SelectedGrids, RoadGrids
|
||||
from module.logger import logger
|
||||
from .a1 import Config as ConfigBase
|
||||
|
||||
MAP = CampaignMap('A2')
|
||||
MAP.shape = 'K5'
|
||||
MAP.camera_data = ['D3', 'F3', 'H3']
|
||||
MAP.camera_data_spawn_point = ['D2']
|
||||
MAP.map_data = """
|
||||
++ SP -- SP ++ ++ -- ME ME ++ --
|
||||
Me -- -- -- Me ++ ME -- -- ME ++
|
||||
-- -- MS -- -- __ -- -- -- -- MB
|
||||
Me MS ++ MS 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
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2, 'siren': 1},
|
||||
{'battle': 1, 'enemy': 1},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
# ===== Start of generated config =====
|
||||
MAP_SIREN_TEMPLATE = ['Kawakaze', 'Sakawa']
|
||||
MOVABLE_ENEMY_TURN = (2,)
|
||||
MAP_HAS_SIREN = True
|
||||
MAP_HAS_MOVABLE_ENEMY = True
|
||||
MAP_HAS_MAP_STORY = False
|
||||
MAP_HAS_FLEET_STEP = True
|
||||
MAP_HAS_AMBUSH = False
|
||||
MAP_HAS_MYSTERY = False
|
||||
# ===== End of generated config =====
|
||||
|
||||
MAP_SWIPE_MULTIPLY = (1.269, 1.293)
|
||||
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.227, 1.250)
|
||||
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.191, 1.213)
|
||||
|
||||
|
||||
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()
|
79
campaign/event_20230914_cn/a3.py
Normal file
@ -0,0 +1,79 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import SelectedGrids, RoadGrids
|
||||
from module.logger import logger
|
||||
from .a1 import Config as ConfigBase
|
||||
|
||||
MAP = CampaignMap('A3')
|
||||
MAP.shape = 'H8'
|
||||
MAP.camera_data = ['D3', 'D6']
|
||||
MAP.camera_data_spawn_point = ['D6']
|
||||
MAP.map_data = """
|
||||
-- ++ ++ -- ME ME -- ++
|
||||
ME ++ ++ ME -- -- MB --
|
||||
-- Me Me -- -- ME -- ME
|
||||
-- -- -- -- __ -- -- ME
|
||||
-- MS ++ ++ -- -- ME --
|
||||
-- -- MS ++ -- Me ++ ++
|
||||
SP -- -- MS -- Me ++ ++
|
||||
++ SP -- -- -- -- ME --
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2, 'siren': 1},
|
||||
{'battle': 1, 'enemy': 1},
|
||||
{'battle': 2, 'enemy': 1},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, \
|
||||
A8, B8, C8, D8, E8, F8, G8, H8, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
# ===== Start of generated config =====
|
||||
MAP_SIREN_TEMPLATE = ['Asanagi', 'Hatsuzuki']
|
||||
MOVABLE_ENEMY_TURN = (2,)
|
||||
MAP_HAS_SIREN = True
|
||||
MAP_HAS_MOVABLE_ENEMY = True
|
||||
MAP_HAS_MAP_STORY = True
|
||||
MAP_HAS_FLEET_STEP = True
|
||||
MAP_HAS_AMBUSH = False
|
||||
MAP_HAS_MYSTERY = False
|
||||
# ===== End of generated config =====
|
||||
|
||||
MAP_SWIPE_MULTIPLY = (1.091, 1.111)
|
||||
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.055, 1.074)
|
||||
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.024, 1.043)
|
||||
|
||||
|
||||
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()
|
78
campaign/event_20230914_cn/c1.py
Normal file
@ -0,0 +1,78 @@
|
||||
from .campaign_base import CampaignBase
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import SelectedGrids, RoadGrids
|
||||
from module.logger import logger
|
||||
|
||||
MAP = CampaignMap('C1')
|
||||
MAP.shape = 'I8'
|
||||
MAP.camera_data = ['D3', 'D6', 'F3', 'F6']
|
||||
MAP.camera_data_spawn_point = ['D6']
|
||||
MAP.map_data = """
|
||||
-- -- -- -- -- ++ ++ -- --
|
||||
ME ME ++ MS MB ++ ++ ME --
|
||||
-- -- ++ -- -- MS -- -- ME
|
||||
ME -- -- MS ++ ++ ++ -- ++
|
||||
++ ME -- -- Me Me -- -- ME
|
||||
-- Me -- __ -- -- -- ME --
|
||||
ME -- SP -- SP -- 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': 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 = ['wuxing_qz']
|
||||
MOVABLE_ENEMY_TURN = (2,)
|
||||
MAP_HAS_SIREN = True
|
||||
MAP_HAS_MOVABLE_ENEMY = True
|
||||
MAP_HAS_MAP_STORY = True
|
||||
MAP_HAS_FLEET_STEP = True
|
||||
MAP_HAS_AMBUSH = False
|
||||
MAP_HAS_MYSTERY = False
|
||||
# ===== End of generated config =====
|
||||
|
||||
MAP_SWIPE_MULTIPLY = (1.074, 1.095)
|
||||
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.039, 1.058)
|
||||
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.009, 1.027)
|
||||
|
||||
|
||||
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()
|
70
campaign/event_20230914_cn/c2.py
Normal file
@ -0,0 +1,70 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import SelectedGrids, RoadGrids
|
||||
from module.logger import logger
|
||||
from .c1 import Config as ConfigBase
|
||||
|
||||
MAP = CampaignMap('C2')
|
||||
MAP.shape = 'K5'
|
||||
MAP.camera_data = ['D3', 'F3', 'H3']
|
||||
MAP.camera_data_spawn_point = ['D2']
|
||||
MAP.map_data = """
|
||||
++ SP -- SP ++ ++ -- ME ME ++ --
|
||||
Me -- -- -- Me ++ ME -- -- ME ++
|
||||
-- -- MS -- -- __ -- -- -- -- MB
|
||||
Me MS ++ MS 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
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2, 'siren': 2},
|
||||
{'battle': 1, 'enemy': 1},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, 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, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
# ===== Start of generated config =====
|
||||
MAP_SIREN_TEMPLATE = ['Kawakaze', 'Sakawa']
|
||||
MOVABLE_ENEMY_TURN = (2,)
|
||||
MAP_HAS_SIREN = True
|
||||
MAP_HAS_MOVABLE_ENEMY = True
|
||||
MAP_HAS_MAP_STORY = False
|
||||
MAP_HAS_FLEET_STEP = True
|
||||
MAP_HAS_AMBUSH = False
|
||||
MAP_HAS_MYSTERY = False
|
||||
# ===== End of generated config =====
|
||||
|
||||
MAP_SWIPE_MULTIPLY = (1.269, 1.293)
|
||||
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.227, 1.250)
|
||||
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.191, 1.213)
|
||||
|
||||
|
||||
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()
|
80
campaign/event_20230914_cn/c3.py
Normal file
@ -0,0 +1,80 @@
|
||||
from module.campaign.campaign_base import CampaignBase
|
||||
from module.map.map_base import CampaignMap
|
||||
from module.map.map_grids import SelectedGrids, RoadGrids
|
||||
from module.logger import logger
|
||||
from .c1 import Config as ConfigBase
|
||||
|
||||
MAP = CampaignMap('C3')
|
||||
MAP.shape = 'H8'
|
||||
MAP.camera_data = ['D3', 'D6']
|
||||
MAP.camera_data_spawn_point = ['D6']
|
||||
MAP.map_data = """
|
||||
-- ++ ++ -- ME ME -- ++
|
||||
ME ++ ++ ME -- -- MB --
|
||||
-- Me Me -- -- ME -- ME
|
||||
-- -- -- -- __ -- -- ME
|
||||
-- MS ++ ++ -- -- ME --
|
||||
-- -- MS ++ -- Me ++ ++
|
||||
SP -- -- MS -- Me ++ ++
|
||||
++ SP -- -- -- -- ME --
|
||||
"""
|
||||
MAP.weight_data = """
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
50 50 50 50 50 50 50 50
|
||||
"""
|
||||
MAP.spawn_data = [
|
||||
{'battle': 0, 'enemy': 2, 'siren': 2},
|
||||
{'battle': 1, 'enemy': 1},
|
||||
{'battle': 2, 'enemy': 2},
|
||||
{'battle': 3, 'enemy': 1},
|
||||
{'battle': 4, 'enemy': 1},
|
||||
{'battle': 5, 'boss': 1},
|
||||
]
|
||||
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||
A6, B6, C6, D6, E6, F6, G6, H6, \
|
||||
A7, B7, C7, D7, E7, F7, G7, H7, \
|
||||
A8, B8, C8, D8, E8, F8, G8, H8, \
|
||||
= MAP.flatten()
|
||||
|
||||
|
||||
class Config(ConfigBase):
|
||||
# ===== Start of generated config =====
|
||||
MAP_SIREN_TEMPLATE = ['Hatsuzuki', 'Zuiho']
|
||||
MOVABLE_ENEMY_TURN = (2,)
|
||||
MAP_HAS_SIREN = True
|
||||
MAP_HAS_MOVABLE_ENEMY = True
|
||||
MAP_HAS_MAP_STORY = True
|
||||
MAP_HAS_FLEET_STEP = True
|
||||
MAP_HAS_AMBUSH = False
|
||||
MAP_HAS_MYSTERY = False
|
||||
# ===== End of generated config =====
|
||||
|
||||
MAP_SWIPE_MULTIPLY = (1.091, 1.111)
|
||||
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.055, 1.074)
|
||||
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.024, 1.043)
|
||||
|
||||
|
||||
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()
|
30
campaign/event_20230914_cn/campaign_base.py
Normal file
@ -0,0 +1,30 @@
|
||||
from module.base.utils import color_similarity_2d
|
||||
from module.campaign.campaign_base import CampaignBase as CampaignBase_
|
||||
from module.map_detection.grid import Grid
|
||||
from module.template.assets import TEMPLATE_ENEMY_BOSS
|
||||
|
||||
|
||||
class EventGrid(Grid):
|
||||
def predict_enemy_genre(self):
|
||||
if self.enemy_scale:
|
||||
return ''
|
||||
|
||||
image = self.relative_crop((-0.55, -0.2, 0.45, 0.2), shape=(50, 20))
|
||||
image = color_similarity_2d(image, color=(255, 150, 24))
|
||||
if image[image > 221].shape[0] > 200:
|
||||
if TEMPLATE_ENEMY_BOSS.match(image, similarity=0.6):
|
||||
return 'Siren_Siren'
|
||||
|
||||
return super().predict_enemy_genre()
|
||||
|
||||
def predict_boss(self):
|
||||
if self.enemy_genre == 'Siren_Siren':
|
||||
return False
|
||||
return super().predict_boss()
|
||||
|
||||
|
||||
class CampaignBase(CampaignBase_):
|
||||
"""
|
||||
Not all event maps use this, some are the same like the classics
|
||||
"""
|
||||
grid_class = EventGrid
|
@ -46,6 +46,7 @@ TEMPLATE_SIREN_Amazon = Template(file={'cn': './assets/cn/template/TEMPLATE_SIRE
|
||||
TEMPLATE_SIREN_Arethusa = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Arethusa.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Arethusa.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Arethusa.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Arethusa.gif'})
|
||||
TEMPLATE_SIREN_Arizona = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Arizona.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Arizona.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Arizona.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Arizona.gif'})
|
||||
TEMPLATE_SIREN_ArkRoyal = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_ArkRoyal.gif', 'en': './assets/en/template/TEMPLATE_SIREN_ArkRoyal.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_ArkRoyal.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_ArkRoyal.gif'})
|
||||
TEMPLATE_SIREN_Asanagi = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Asanagi.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Asanagi.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Asanagi.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Asanagi.gif'})
|
||||
TEMPLATE_SIREN_Atlanta = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Atlanta.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Atlanta.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Atlanta.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Atlanta.gif'})
|
||||
TEMPLATE_SIREN_August = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_August.gif', 'en': './assets/en/template/TEMPLATE_SIREN_August.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_August.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_August.gif'})
|
||||
TEMPLATE_SIREN_AzusaMiura = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_AzusaMiura.gif', 'en': './assets/en/template/TEMPLATE_SIREN_AzusaMiura.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_AzusaMiura.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_AzusaMiura.gif'})
|
||||
@ -102,6 +103,7 @@ TEMPLATE_SIREN_HarukaAmami = Template(file={'cn': './assets/cn/template/TEMPLATE
|
||||
TEMPLATE_SIREN_Haruna = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Haruna.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Haruna.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Haruna.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Haruna.gif'})
|
||||
TEMPLATE_SIREN_Harutsuki = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Harutsuki.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Harutsuki.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Harutsuki.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Harutsuki.gif'})
|
||||
TEMPLATE_SIREN_Hatakaze = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Hatakaze.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Hatakaze.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Hatakaze.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Hatakaze.gif'})
|
||||
TEMPLATE_SIREN_Hatsuzuki = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Hatsuzuki.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Hatsuzuki.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Hatsuzuki.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Hatsuzuki.gif'})
|
||||
TEMPLATE_SIREN_Hermes_ghost = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Hermes_ghost.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Hermes_ghost.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Hermes_ghost.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Hermes_ghost.gif'})
|
||||
TEMPLATE_SIREN_Hibiki = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Hibiki.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Hibiki.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Hibiki.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Hibiki.gif'})
|
||||
TEMPLATE_SIREN_Hiei = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Hiei.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Hiei.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Hiei.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Hiei.gif'})
|
||||
|