Add: Chapter T

This commit is contained in:
LmeSzinc 2024-10-25 19:37:55 +08:00
parent 3f6738af8c
commit 847dcd847b
25 changed files with 594 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -0,0 +1,51 @@
from module.base.utils import color_similarity_2d
from module.campaign.assets import SWITCH_20240725_COMBAT, SWITCH_20240725_STORY
from module.campaign.campaign_base import CampaignBase as CampaignBase_
from module.campaign.campaign_ui import ModeSwitch
from module.map_detection.grid import Grid
from module.template.assets import TEMPLATE_ENEMY_BOSS
MODE_SWITCH_20240912 = ModeSwitch('Mode_switch_20240912', is_selector=True, offset=(30, 30))
MODE_SWITCH_20240912.add_status('combat', SWITCH_20240725_COMBAT, offset=(444, 4))
MODE_SWITCH_20240912.add_status('story', SWITCH_20240725_STORY, offset=(444, 4))
class EventGrid(Grid):
def predict_enemy_genre(self):
if self.enemy_scale:
return ''
image = self.relative_crop((-0, -0.2, 0.8, 0.2), shape=(40, 20))
image = color_similarity_2d(image, color=(255, 150, 24))
if image[image > 221].shape[0] > 30:
if TEMPLATE_ENEMY_BOSS.match(image, similarity=0.6, scaling=0.5):
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_):
STAGE_INCREASE = [
"""
T1 > T2 > T3 > T4 > T5 > T6
"""
]
def campaign_ensure_mode(self, mode='normal'):
"""
Args:
mode (str): 'normal', 'hard', 'ex', 'story'
Returns:
bool: If mode changed.
"""
if mode == "story":
MODE_SWITCH_20240912.set('story', main=self)
elif mode in ['normal', 'hard', 'ex']:
# First switch to combat mode and then select Hard or Normal.
MODE_SWITCH_20240912.set('combat', main=self)
# super().campaign_ensure_mode(mode)

View File

@ -0,0 +1,92 @@
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('T1')
MAP.shape = 'I8'
MAP.camera_data = ['D3', 'D6']
MAP.camera_data_spawn_point = ['D2']
MAP.map_data = """
++ SP SP ++ ME -- ME -- --
-- -- -- -- -- -- -- ME ++
Me -- -- -- Me -- ME -- --
-- MS MS -- -- __ ++ ++ --
-- ++ ++ ++ Me -- ME -- --
-- -- ++ -- -- -- -- ME --
-- -- MB -- -- 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': 2},
{'battle': 2, 'enemy': 1},
{'battle': 3, 'enemy': 1},
{'battle': 4, '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 = ['Amity', 'Portsmouth']
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 =====
STAGE_ENTRANCE = ['half', '20240725']
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
'height': (80, 255 - 33),
'width': (0.9, 10),
'prominence': 10,
'distance': 35,
}
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
'height': (255 - 33, 255),
'prominence': 10,
'distance': 50,
# 'width': (0, 7),
'wlen': 1000
}
MAP_SWIPE_MULTIPLY = (1.235, 1.258)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.194, 1.216)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.159, 1.180)
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()

View File

@ -0,0 +1,79 @@
from .campaign_base import CampaignBase
from module.map.map_base import CampaignMap
from module.map.map_grids import SelectedGrids, RoadGrids
from module.logger import logger
from .t1 import Config as ConfigBase
MAP = CampaignMap('T2')
MAP.shape = 'I8'
MAP.camera_data = ['D3', 'D6', 'F3', 'F6']
MAP.camera_data_spawn_point = ['F2']
MAP.map_data = """
-- ++ ++ ++ ++ ++ SP -- SP
-- ME -- ++ ++ ++ -- -- --
-- -- ME ++ ++ ++ -- MS --
ME -- -- -- MB -- MS ++ MS
++ ++ ++ -- -- -- -- 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
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 3, 'siren': 1},
{'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, \
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(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = ['MaryCeleste', 'Amity', 'Portsmouth']
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.246, 1.269)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.205, 1.227)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.170, 1.191)
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()

View File

@ -0,0 +1,82 @@
from .campaign_base import CampaignBase, EventGrid
from module.map.map_base import CampaignMap
from module.map.map_grids import SelectedGrids, RoadGrids
from module.logger import logger
from .t1 import Config as ConfigBase
MAP = CampaignMap('T3')
MAP.shape = 'J8'
MAP.camera_data = ['D2', 'D5', 'G2', 'G5']
MAP.camera_data_spawn_point = ['D5']
MAP.map_data = """
-- -- Me -- -- -- -- ++ ++ ++
++ Me -- Me ++ ++ -- ME -- ME
++ -- __ -- ME ++ ME -- ++ --
MS -- MS -- -- -- -- -- ME --
-- -- MS -- ME -- ME -- -- --
-- -- ++ ++ ++ ME ++ -- ++ ME
SP SP ++ ++ ++ -- ME -- MB --
++ ++ ++ ++ ++ -- ++ -- -- --
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 3, 'siren': 2},
{'battle': 1, 'enemy': 2},
{'battle': 2, 'enemy': 1},
{'battle': 3, 'enemy': 1},
{'battle': 4},
{'battle': 5, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, \
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, \
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, \
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, \
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, \
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, \
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, \
A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, \
= MAP.flatten()
class Config(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = []
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.105, 1.126)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.069, 1.089)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.038, 1.057)
class Campaign(CampaignBase):
MAP = MAP
ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C'
grid_class = EventGrid
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()

View File

@ -0,0 +1,96 @@
from .campaign_base import CampaignBase, EventGrid
from module.map.map_base import CampaignMap
from module.map.map_grids import SelectedGrids, RoadGrids
from module.logger import logger
from .t1 import Config as ConfigBase
MAP = CampaignMap('T4')
MAP.shape = 'J8'
MAP.camera_data = ['D4', 'G4', 'E6']
MAP.camera_data_spawn_point = ['E2']
MAP.map_data = """
-- ++ ++ ++ SP SP ++ ++ ++ --
-- -- -- -- -- -- -- -- -- --
ME -- ++ MS -- -- MS ++ -- ME
-- -- ++ -- ME ME -- ++ -- --
ME -- ME -- __ __ -- ME -- ME
++ -- -- ME -- -- ME -- -- ++
++ ++ -- -- MB MB -- -- ++ --
++ ++ -- ME -- -- ME -- -- --
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 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, 'enemy': 1},
{'battle': 5, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, \
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, \
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, \
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, \
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, \
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, \
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, \
A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, \
= MAP.flatten()
class Config(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = []
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 =====
STAGE_ENTRANCE = ['half', '20240725']
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,
# 'width': (0, 7),
'wlen': 1000
}
MAP_SWIPE_MULTIPLY = (1.264, 1.287)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.222, 1.245)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.186, 1.208)
class Campaign(CampaignBase):
MAP = MAP
ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C'
grid_class = EventGrid
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()

View File

@ -0,0 +1,91 @@
from .campaign_base import CampaignBase, EventGrid
from module.map.map_base import CampaignMap
from module.map.map_grids import SelectedGrids, RoadGrids
from module.logger import logger
from .t4 import Config as ConfigBase
MAP = CampaignMap('T5')
MAP.shape = 'L8'
MAP.camera_data = ['E3', 'E6', 'H6']
MAP.camera_data_spawn_point = ['D2']
MAP.map_data = """
-- ++ ++ ++ -- ME -- -- -- -- -- --
-- -- MS -- ME -- ME ++ ++ ++ ++ --
SP -- -- MS -- __ -- ++ ++ ++ ++ --
SP -- -- MS ++ -- ME ++ ++ ++ ++ --
++ -- MS -- ME -- -- -- MB -- -- --
++ ++ ++ -- -- -- 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 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},
{'battle': 6, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, L1, \
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, L2, \
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, L3, \
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, L4, \
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, L5, \
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, L6, \
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, L7, \
A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, K8, L8, \
= MAP.flatten()
class Config(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = []
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.150, 1.171)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.112, 1.133)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.080, 1.099)
class Campaign(CampaignBase):
MAP = MAP
ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C'
grid_class = EventGrid
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()

View File

@ -0,0 +1,97 @@
from .campaign_base import CampaignBase, EventGrid
from module.map.map_base import CampaignMap
from module.map.map_grids import SelectedGrids, RoadGrids
from module.logger import logger
from .t4 import Config as ConfigBase
MAP = CampaignMap('T6')
MAP.shape = 'K10'
MAP.camera_data = ['E3', 'G3']
MAP.camera_data_spawn_point = ['F4']
MAP.map_data = """
++ ++ -- -- ++ ++ ++ -- -- ++ ++
++ -- -- ME -- MB -- ME -- -- ++
-- -- ME -- MS -- MS -- ME -- --
-- ME -- ME -- MS -- ME -- ME --
-- -- ME -- -- __ -- -- ME -- --
++ -- -- -- SP -- SP -- -- -- ++
-- ++ ++ ++ ++ -- ++ ++ ++ ++ --
-- ++ ++ ++ ++ ++ ++ ++ ++ ++ --
-- ++ ++ ++ ++ -- ++ ++ ++ ++ --
-- -- -- ++ -- -- -- ++ -- -- --
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 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': 10, 'siren': 3},
{'battle': 1},
{'battle': 2},
{'battle': 3},
{'battle': 4},
{'battle': 5},
{'battle': 6, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, \
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, \
A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, K8, \
A9, B9, C9, D9, E9, F9, G9, H9, I9, J9, K9, \
A10, B10, C10, D10, E10, F10, G10, H10, I10, J10, K10, \
= MAP.flatten()
class Config(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = ['fengfanhaigu03']
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.124, 1.145)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.087, 1.107)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.055, 1.074)
class Campaign(CampaignBase):
MAP = MAP
ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C'
grid_class = EventGrid
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()

View File

@ -213,6 +213,7 @@ class CampaignRun(CampaignEvent):
if folder in [
'event_20211125_cn',
'event_20231026_cn',
'event_20241024_cn',
]:
name = convert.get(name, name)
# Convert between A/B/C/D and T/HT
@ -241,6 +242,7 @@ class CampaignRun(CampaignEvent):
'event_20231123_cn',
'event_20240725_cn',
'event_20240829_cn',
'event_20241024_cn',
]:
name = convert.get(name, name)
else:

View File

@ -46,6 +46,7 @@ TEMPLATE_SIREN_AlfredoOriani = Template(file={'cn': './assets/cn/template/TEMPLA
TEMPLATE_SIREN_Algerie = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Algerie.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Algerie.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Algerie.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Algerie.gif'})
TEMPLATE_SIREN_AmagiMasked = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_AmagiMasked.gif', 'en': './assets/en/template/TEMPLATE_SIREN_AmagiMasked.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_AmagiMasked.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_AmagiMasked.gif'})
TEMPLATE_SIREN_Amazon = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Amazon.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Amazon.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Amazon.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Amazon.gif'})
TEMPLATE_SIREN_Amity = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Amity.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Amity.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Amity.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Amity.gif'})
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'})
@ -151,6 +152,7 @@ TEMPLATE_SIREN_Lover = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN
TEMPLATE_SIREN_Magdeburg = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Magdeburg.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Magdeburg.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Magdeburg.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Magdeburg.gif'})
TEMPLATE_SIREN_Mainz = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Mainz.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Mainz.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Mainz.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Mainz.gif'})
TEMPLATE_SIREN_MarieRoseDOA = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_MarieRoseDOA.gif', 'en': './assets/en/template/TEMPLATE_SIREN_MarieRoseDOA.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_MarieRoseDOA.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_MarieRoseDOA.gif'})
TEMPLATE_SIREN_MaryCeleste = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_MaryCeleste.gif', 'en': './assets/en/template/TEMPLATE_SIREN_MaryCeleste.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_MaryCeleste.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_MaryCeleste.gif'})
TEMPLATE_SIREN_Maya = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Maya.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Maya.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Maya.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Maya.gif'})
TEMPLATE_SIREN_Mikasa = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Mikasa.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Mikasa.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Mikasa.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Mikasa.gif'})
TEMPLATE_SIREN_MisakiDOA = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_MisakiDOA.gif', 'en': './assets/en/template/TEMPLATE_SIREN_MisakiDOA.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_MisakiDOA.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_MisakiDOA.gif'})
@ -165,6 +167,7 @@ TEMPLATE_SIREN_NyotenguDOA = Template(file={'cn': './assets/cn/template/TEMPLATE
TEMPLATE_SIREN_Odin = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Odin.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Odin.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Odin.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Odin.gif'})
TEMPLATE_SIREN_PeterStrasser = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_PeterStrasser.gif', 'en': './assets/en/template/TEMPLATE_SIREN_PeterStrasser.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_PeterStrasser.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_PeterStrasser.gif'})
TEMPLATE_SIREN_PompeoMagno = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_PompeoMagno.gif', 'en': './assets/en/template/TEMPLATE_SIREN_PompeoMagno.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_PompeoMagno.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_PompeoMagno.gif'})
TEMPLATE_SIREN_Portsmouth = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Portsmouth.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Portsmouth.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Portsmouth.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Portsmouth.gif'})
TEMPLATE_SIREN_PrinceOfWales = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_PrinceOfWales.gif', 'en': './assets/en/template/TEMPLATE_SIREN_PrinceOfWales.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_PrinceOfWales.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_PrinceOfWales.gif'})
TEMPLATE_SIREN_PrinzAdalbert = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_PrinzAdalbert.gif', 'en': './assets/en/template/TEMPLATE_SIREN_PrinzAdalbert.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_PrinzAdalbert.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_PrinzAdalbert.gif'})
TEMPLATE_SIREN_PrinzEugen = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_PrinzEugen.gif', 'en': './assets/en/template/TEMPLATE_SIREN_PrinzEugen.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_PrinzEugen.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_PrinzEugen.gif'})
@ -228,6 +231,7 @@ TEMPLATE_SIREN_Z24 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Z
TEMPLATE_SIREN_Z46 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Z46.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Z46.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Z46.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Z46.gif'})
TEMPLATE_SIREN_Zuiho = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Zuiho.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Zuiho.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Zuiho.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Zuiho.gif'})
TEMPLATE_SIREN_Zuikaku = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Zuikaku.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Zuikaku.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Zuikaku.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Zuikaku.gif'})
TEMPLATE_SIREN_fengfanhaigu03 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_fengfanhaigu03.gif', 'en': './assets/en/template/TEMPLATE_SIREN_fengfanhaigu03.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_fengfanhaigu03.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_fengfanhaigu03.gif'})
TEMPLATE_SIREN_huiguangzhihe = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_huiguangzhihe.gif', 'en': './assets/en/template/TEMPLATE_SIREN_huiguangzhihe.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_huiguangzhihe.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_huiguangzhihe.gif'})
TEMPLATE_SIREN_shuguangjixie_huixing = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_shuguangjixie_huixing.gif', 'en': './assets/en/template/TEMPLATE_SIREN_shuguangjixie_huixing.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_shuguangjixie_huixing.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_shuguangjixie_huixing.gif'})
TEMPLATE_SIREN_shuguangjixie_shanliu = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_shuguangjixie_shanliu.gif', 'en': './assets/en/template/TEMPLATE_SIREN_shuguangjixie_shanliu.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_shuguangjixie_shanliu.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_shuguangjixie_shanliu.gif'})