Add: Heart-Linking Harmony chapter SP

This commit is contained in:
LmeSzinc 2024-04-26 02:36:53 +08:00
parent 75644f91d0
commit fbf7bc02c6
43 changed files with 480 additions and 1 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 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: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 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: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 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: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 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: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -0,0 +1,50 @@
from module.campaign.campaign_base import CampaignBase as CampaignBase_
from module.logger import logger
class CampaignBase(CampaignBase_):
STAGE_INCREASE = [
"""
SP1 > SP2 > SP3 > SP4 > SP5
""",
"""
ISP1 > ISP2 > ISP3 > ISP4 > ISP5 > ISP6
""",
]
def campaign_set_chapter_event(self, chapter, mode='normal'):
self.ui_goto_event()
self.campaign_ensure_chapter(index=chapter)
return True
# μ
def _campaign_get_chapter_index(self, name):
"""
Args:
name (str, int):
Returns:
int
"""
if name == 'sp':
return 1
if name == 'isp':
return 2
if name == 'ex_sp':
return 3
if name == 'ex_ex':
return 4
return super(CampaignBase, CampaignBase)._campaign_get_chapter_index(name)
def is_event_animation(self):
# Blue banner
if self.image_color_count((1180, 285, 1280, 335), color=(140, 215, 255), count=1000):
logger.info('Live start!')
return True
# Red-black banner with white bottom border
if self.image_color_count((1193, 428, 1273, 436), color=(255, 255, 255), count=500):
logger.info('Live start!')
return True
return False

View File

@ -0,0 +1,87 @@
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('SP1')
MAP.shape = 'I8'
MAP.camera_data = ['C3', 'C6', 'E3', 'E6']
MAP.camera_data_spawn_point = ['E3']
MAP.camera_sight = (-2, -1, 3, 2)
MAP.map_data = """
-- -- -- -- -- -- -- -- --
-- -- ME ++ ++ ++ -- ++ --
++ ME -- ++ MB ++ ME -- ME
++ -- -- ++ -- ++ -- -- --
-- Me -- SP -- SP -- Me --
ME -- -- -- __ -- -- -- ME
-- ++ ME -- MS -- 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 = ['Laffey6']
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 - 33),
'width': (0.9, 10),
'prominence': 10,
'distance': 35,
}
MAP_SWIPE_MULTIPLY = (1.062, 1.082)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.027, 1.046)
MAP_SWIPE_MULTIPLY_MAATOUCH = (0.997, 1.015)
MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom'
MAP_WALK_USE_CURRENT_FLEET = True
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,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
from .sp1 import Config as ConfigBase
MAP = CampaignMap('SP2')
MAP.shape = 'I7'
MAP.camera_data = ['D2', 'D5', 'F5']
MAP.camera_data_spawn_point = ['F2']
MAP.camera_sight = (-2, -1, 3, 2)
MAP.map_data = """
-- -- ME -- -- MS -- -- SP
-- ++ ++ Me __ Me MS -- --
-- ++ ++ Me -- MS -- -- SP
-- -- 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
"""
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, \
= MAP.flatten()
class Config(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = ['TashkentIdol', 'DidoIdol2']
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 =====
HOMO_STORAGE = ((7, 4), [(179.668, 262.579), (1042.431, 262.579), (89.435, 660.188), (1122.585, 660.188)])
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,81 @@
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 .sp1 import Config as ConfigBase
MAP = CampaignMap('SP3')
MAP.shape = 'I8'
MAP.camera_data = ['C4', 'E4', 'E6']
MAP.camera_data_spawn_point = ['C6']
MAP.camera_sight = (-2, -1, 3, 2)
MAP.map_data = """
++ ++ ++ ++ -- ++ ++ ++ --
-- ++ MB ++ ME -- ME -- --
ME ++ -- ++ -- Me -- ME --
-- Me -- Me -- ++ -- ME ++
-- MS __ MS -- Me -- -- ++
-- -- MS -- -- -- -- 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
"""
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, \
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 = ['SheffieldIdol', 'RoonIdol2']
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.069, 1.089)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.034, 1.053)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.004, 1.022)
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()

View File

@ -0,0 +1,81 @@
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 .sp1 import Config as ConfigBase
MAP = CampaignMap('SP4')
MAP.shape = 'I8'
MAP.camera_data = ['C3', 'C6', 'F3', 'F6']
MAP.camera_data_spawn_point = ['D2']
MAP.camera_sight = (-2, -1, 3, 2)
MAP.map_data = """
++ ++ ++ SP -- SP ++ ++ ++
-- Me -- -- -- -- -- Me --
ME -- MS -- MS -- MS -- ME
-- ++ -- Me __ Me -- ++ --
-- Me -- ++ ++ ++ -- Me --
ME -- -- ++ MB ++ -- -- 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': 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, \
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 = ['Z23_5', 'Elizabeth3']
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.251, 1.275)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.210, 1.232)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.175, 1.196)
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()

View 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
from .sp1 import Config as ConfigBase
MAP = CampaignMap('SP5')
MAP.shape = 'I9'
MAP.camera_data = ['C4', 'C7', 'F4', 'F7']
MAP.camera_data_spawn_point = ['C7']
MAP.camera_sight = (-2, -1, 3, 2)
MAP.map_data = """
++ ++ -- ++ ++ ++ -- ++ ++
++ ++ ME -- Me -- ME -- ++
-- -- -- ME -- ME -- -- --
-- ME -- ++ ++ ++ -- ME --
ME ++ -- ++ MB ++ -- ++ ME
-- ++ -- ++ -- ++ -- ++ --
-- -- MS -- MS -- 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 50 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, \
A2, B2, C2, D2, E2, F2, G2, H2, I2, \
A3, B3, C3, D3, E3, F3, G3, H3, I3, \
A4, B4, C4, D4, E4, F4, G4, H4, I4, \
A5, B5, C5, D5, E5, F5, G5, H5, I5, \
A6, B6, C6, D6, E6, F6, G6, H6, I6, \
A7, B7, C7, D7, E7, F7, G7, H7, I7, \
A8, B8, C8, D8, E8, F8, G8, H8, I8, \
A9, B9, C9, D9, E9, F9, G9, H9, I9, \
= MAP.flatten()
class Config(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = ['GascogneIdol', 'TaihouIdol']
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.012, 1.031)
MAP_SWIPE_MULTIPLY_MINITOUCH = (0.979, 0.997)
MAP_SWIPE_MULTIPLY_MAATOUCH = (0.950, 0.968)
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()

View File

@ -86,13 +86,16 @@ TEMPLATE_SIREN_Dace = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_
TEMPLATE_SIREN_Deutschland = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Deutschland.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Deutschland.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Deutschland.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Deutschland.gif'})
TEMPLATE_SIREN_Dewey = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Dewey.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Dewey.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Dewey.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Dewey.gif'})
TEMPLATE_SIREN_DidoIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_DidoIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_DidoIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_DidoIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_DidoIdol.gif'})
TEMPLATE_SIREN_DidoIdol2 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_DidoIdol2.gif', 'en': './assets/en/template/TEMPLATE_SIREN_DidoIdol2.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_DidoIdol2.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_DidoIdol2.gif'})
TEMPLATE_SIREN_Dilloy = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Dilloy.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Dilloy.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Dilloy.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Dilloy.gif'})
TEMPLATE_SIREN_DogPink = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_DogPink.gif', 'en': './assets/en/template/TEMPLATE_SIREN_DogPink.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_DogPink.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_DogPink.gif'})
TEMPLATE_SIREN_Dorsetshire = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Dorsetshire.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Dorsetshire.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Dorsetshire.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Dorsetshire.gif'})
TEMPLATE_SIREN_DukeOfYork = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_DukeOfYork.gif', 'en': './assets/en/template/TEMPLATE_SIREN_DukeOfYork.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_DukeOfYork.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_DukeOfYork.gif'})
TEMPLATE_SIREN_ELpurple = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_ELpurple.gif', 'en': './assets/en/template/TEMPLATE_SIREN_ELpurple.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_ELpurple.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_ELpurple.gif'})
TEMPLATE_SIREN_Elizabeth3 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Elizabeth3.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Elizabeth3.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Elizabeth3.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Elizabeth3.gif'})
TEMPLATE_SIREN_Formidable = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Formidable.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Formidable.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Formidable.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Formidable.gif'})
TEMPLATE_SIREN_Gascogne = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Gascogne.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Gascogne.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Gascogne.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Gascogne.gif'})
TEMPLATE_SIREN_GascogneIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_GascogneIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_GascogneIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_GascogneIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_GascogneIdol.gif'})
TEMPLATE_SIREN_Gloucester = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Gloucester.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Gloucester.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Gloucester.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Gloucester.gif'})
TEMPLATE_SIREN_Gneisenau = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Gneisenau.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Gneisenau.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Gneisenau.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Gneisenau.gif'})
TEMPLATE_SIREN_GrafZeppelin = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_GrafZeppelin.gif', 'en': './assets/en/template/TEMPLATE_SIREN_GrafZeppelin.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_GrafZeppelin.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_GrafZeppelin.gif'})
@ -130,6 +133,7 @@ TEMPLATE_SIREN_Kinu = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_
TEMPLATE_SIREN_Kirishima = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Kirishima.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Kirishima.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Kirishima.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Kirishima.gif'})
TEMPLATE_SIREN_Kongo = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Kongo.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Kongo.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Kongo.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Kongo.gif'})
TEMPLATE_SIREN_LaGalissonniere = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_LaGalissonniere.gif', 'en': './assets/en/template/TEMPLATE_SIREN_LaGalissonniere.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_LaGalissonniere.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_LaGalissonniere.gif'})
TEMPLATE_SIREN_Laffey6 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Laffey6.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Laffey6.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Laffey6.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Laffey6.gif'})
TEMPLATE_SIREN_LeMalinIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_LeMalinIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_LeMalinIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_LeMalinIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_LeMalinIdol.gif'})
TEMPLATE_SIREN_LeMars = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_LeMars.gif', 'en': './assets/en/template/TEMPLATE_SIREN_LeMars.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_LeMars.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_LeMars.gif'})
TEMPLATE_SIREN_LeMars_ghost = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_LeMars_ghost.gif', 'en': './assets/en/template/TEMPLATE_SIREN_LeMars_ghost.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_LeMars_ghost.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_LeMars_ghost.gif'})
@ -162,6 +166,7 @@ TEMPLATE_SIREN_Revenge = Template(file={'cn': './assets/cn/template/TEMPLATE_SIR
TEMPLATE_SIREN_Rodney = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Rodney.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Rodney.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Rodney.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Rodney.gif'})
TEMPLATE_SIREN_Roon = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Roon.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Roon.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Roon.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Roon.gif'})
TEMPLATE_SIREN_RoonIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_RoonIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_RoonIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_RoonIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_RoonIdol.gif'})
TEMPLATE_SIREN_RoonIdol2 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_RoonIdol2.gif', 'en': './assets/en/template/TEMPLATE_SIREN_RoonIdol2.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_RoonIdol2.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_RoonIdol2.gif'})
TEMPLATE_SIREN_Ryuuhou = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Ryuuhou.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Ryuuhou.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Ryuuhou.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Ryuuhou.gif'})
TEMPLATE_SIREN_SK_BB = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SK_BB.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SK_BB.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SK_BB.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SK_BB.gif'})
TEMPLATE_SIREN_SK_CA = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SK_CA.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SK_CA.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SK_CA.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SK_CA.gif'})
@ -173,7 +178,8 @@ TEMPLATE_SIREN_Sakawa = Template(file={'cn': './assets/cn/template/TEMPLATE_SIRE
TEMPLATE_SIREN_SanDiego = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SanDiego.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SanDiego.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SanDiego.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SanDiego.gif'})
TEMPLATE_SIREN_Scharnhorst = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Scharnhorst.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Scharnhorst.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Scharnhorst.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Scharnhorst.gif'})
TEMPLATE_SIREN_Sheffield = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Sheffield.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Sheffield.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Sheffield.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Sheffield.gif'})
TEMPLATE_SIREN_SheffieldIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SheffieldIdol.png', 'en': './assets/en/template/TEMPLATE_SIREN_SheffieldIdol.png', 'jp': './assets/cn/template/TEMPLATE_SIREN_SheffieldIdol.png', 'tw': './assets/cn/template/TEMPLATE_SIREN_SheffieldIdol.png'})
TEMPLATE_SIREN_SheffieldIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SheffieldIdol.png', 'en': './assets/en/template/TEMPLATE_SIREN_SheffieldIdol.png', 'jp': './assets/jp/template/TEMPLATE_SIREN_SheffieldIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SheffieldIdol.gif'})
TEMPLATE_SIREN_SheffieldIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SheffieldIdol.png', 'en': './assets/en/template/TEMPLATE_SIREN_SheffieldIdol.png', 'jp': './assets/jp/template/TEMPLATE_SIREN_SheffieldIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SheffieldIdol.gif'})
TEMPLATE_SIREN_Shokaku = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Shokaku.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Shokaku.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Shokaku.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Shokaku.gif'})
TEMPLATE_SIREN_SirenBoss15 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SirenBoss15.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SirenBoss15.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SirenBoss15.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SirenBoss15.gif'})
TEMPLATE_SIREN_SirenBoss16 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SirenBoss16.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SirenBoss16.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SirenBoss16.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SirenBoss16.gif'})
@ -185,6 +191,8 @@ TEMPLATE_SIREN_Spee = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_
TEMPLATE_SIREN_SpeeIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SpeeIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SpeeIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SpeeIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SpeeIdol.gif'})
TEMPLATE_SIREN_Suzutsuki = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Suzutsuki.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Suzutsuki.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Suzutsuki.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Suzutsuki.gif'})
TEMPLATE_SIREN_Swordfish = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Swordfish.png', 'en': './assets/en/template/TEMPLATE_SIREN_Swordfish.png', 'jp': './assets/jp/template/TEMPLATE_SIREN_Swordfish.png', 'tw': './assets/tw/template/TEMPLATE_SIREN_Swordfish.png'})
TEMPLATE_SIREN_TaihouIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_TaihouIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_TaihouIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_TaihouIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_TaihouIdol.gif'})
TEMPLATE_SIREN_TashkentIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_TashkentIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_TashkentIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_TashkentIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_TashkentIdol.gif'})
TEMPLATE_SIREN_Tirpitz = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Tirpitz.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Tirpitz.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Tirpitz.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Tirpitz.gif'})
TEMPLATE_SIREN_Trento = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Trento.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Trento.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Trento.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Trento.gif'})
TEMPLATE_SIREN_U101 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_U101.gif', 'en': './assets/en/template/TEMPLATE_SIREN_U101.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_U101.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_U101.gif'})
@ -205,6 +213,7 @@ TEMPLATE_SIREN_Yuudachi = Template(file={'cn': './assets/cn/template/TEMPLATE_SI
TEMPLATE_SIREN_Z18 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Z18.png', 'en': './assets/en/template/TEMPLATE_SIREN_Z18.png', 'jp': './assets/jp/template/TEMPLATE_SIREN_Z18.png', 'tw': './assets/tw/template/TEMPLATE_SIREN_Z18.png'})
TEMPLATE_SIREN_Z19 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Z19.png', 'en': './assets/en/template/TEMPLATE_SIREN_Z19.png', 'jp': './assets/jp/template/TEMPLATE_SIREN_Z19.png', 'tw': './assets/tw/template/TEMPLATE_SIREN_Z19.png'})
TEMPLATE_SIREN_Z2 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Z2.png', 'en': './assets/en/template/TEMPLATE_SIREN_Z2.png', 'jp': './assets/jp/template/TEMPLATE_SIREN_Z2.png', 'tw': './assets/tw/template/TEMPLATE_SIREN_Z2.png'})
TEMPLATE_SIREN_Z23_5 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Z23_5.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Z23_5.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Z23_5.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Z23_5.gif'})
TEMPLATE_SIREN_Z24 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Z24.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Z24.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Z24.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Z24.gif'})
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'})