From ba9ae67d6383fd6b4dd75e8ca374eff3a31d8c5e Mon Sep 17 00:00:00 2001 From: kyO The NinjA Date: Wed, 27 May 2020 18:51:05 -0300 Subject: [PATCH] New EN assets and new maps support - Added new EN assets - Added support to maps A1, A2, A3, B1, B2, B3, C1, C2, C3, D1 and D3 --- assets/en/map/SUBMARINE_BAR.png | Bin 14219 -> 15040 bytes assets/en/map/SUBMARINE_CHOOSE.png | Bin 9518 -> 11558 bytes assets/en/map/SUBMARINE_CLEAR.png | Bin 8871 -> 10894 bytes campaign/event_20200521_en/a1.py | 48 ++++++++++++++++++++++++++ campaign/event_20200521_en/a2.py | 49 +++++++++++++++++++++++++++ campaign/event_20200521_en/a3.py | 30 +++++++++++++++++ campaign/event_20200521_en/b1.py | 49 +++++++++++++++++++++++++++ campaign/event_20200521_en/b2.py | 50 +++++++++++++++++++++++++++ campaign/event_20200521_en/b3.py | 52 +++++++++++++++++++++++++++++ campaign/event_20200521_en/c1.py | 48 ++++++++++++++++++++++++++ campaign/event_20200521_en/c2.py | 49 +++++++++++++++++++++++++++ campaign/event_20200521_en/c3.py | 50 +++++++++++++++++++++++++++ campaign/event_20200521_en/d1.py | 49 +++++++++++++++++++++++++++ campaign/event_20200521_en/d2.py | 20 +++++++---- campaign/event_20200521_en/d3.py | 52 +++++++++++++++++++++++++++++ module/combat/assets.py | 2 +- module/config/argparser_en.py | 8 ++--- module/config/dictionary.py | 6 ++-- module/map/assets.py | 6 ++-- 19 files changed, 551 insertions(+), 17 deletions(-) create mode 100644 campaign/event_20200521_en/a1.py create mode 100644 campaign/event_20200521_en/a2.py create mode 100644 campaign/event_20200521_en/a3.py create mode 100644 campaign/event_20200521_en/b1.py create mode 100644 campaign/event_20200521_en/b2.py create mode 100644 campaign/event_20200521_en/b3.py create mode 100644 campaign/event_20200521_en/c1.py create mode 100644 campaign/event_20200521_en/c2.py create mode 100644 campaign/event_20200521_en/c3.py create mode 100644 campaign/event_20200521_en/d1.py create mode 100644 campaign/event_20200521_en/d3.py diff --git a/assets/en/map/SUBMARINE_BAR.png b/assets/en/map/SUBMARINE_BAR.png index 23c52bcda24d3d5219debe41cd981383f862abf1..5ec9bee469e9f789857f1600d8d65c718ae03aa1 100644 GIT binary patch literal 15040 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 Hp1%A)TJ2d_ literal 14219 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 ADgXcg literal 9518 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 diff --git a/campaign/event_20200521_en/a1.py b/campaign/event_20200521_en/a1.py new file mode 100644 index 000000000..a145bf2ce --- /dev/null +++ b/campaign/event_20200521_en/a1.py @@ -0,0 +1,48 @@ +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 + + +MAP = CampaignMap('a1') +MAP.shape = 'I5' +MAP.map_data = ''' + SP -- ++ ME -- ME ++ ++ -- + -- ME -- -- ME -- ME ++ ME + -- -- MS -- -- -- __ -- -- + -- ME -- -- ++ ME -- ME -- + SP -- -- ME ++ -- ME -- MB +''' + + +class Config: + SUBMARINE = 1 + FLEET_BOSS = 1 + + POOR_MAP_DATA = True + MAP_HAS_AMBUSH = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_SIREN = True + MAP_HAS_DYNAMIC_RED_BORDER = True + MAP_SIREN_COUNT = 1 + + TRUST_EDGE_LINES = True + + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 40), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 40, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + + +class Campaign(CampaignBase): + MAP = MAP + diff --git a/campaign/event_20200521_en/a2.py b/campaign/event_20200521_en/a2.py new file mode 100644 index 000000000..1c74dab66 --- /dev/null +++ b/campaign/event_20200521_en/a2.py @@ -0,0 +1,49 @@ +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 + + +MAP = CampaignMap('a2') +MAP.shape = 'J6' +MAP.map_data = ''' + SP -- ME -- ME -- -- -- ME MB + -- -- -- -- -- -- ++ -- - -- + ++ ++ ++ ME MS -- ++ __ ME ++ + SP -- -- -- ME -- ME -- -- ME + -- -- ME -- -- -- -- ME -- -- + ++ ME ME -- ++ ME MM -- -- MB +''' + + +class Config: + SUBMARINE = 1 + FLEET_BOSS = 1 + + POOR_MAP_DATA = True + MAP_HAS_AMBUSH = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_SIREN = True + MAP_HAS_DYNAMIC_RED_BORDER = True + MAP_SIREN_COUNT = 1 + + TRUST_EDGE_LINES = True + + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 40), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 40, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + + +class Campaign(CampaignBase): + MAP = MAP + diff --git a/campaign/event_20200521_en/a3.py b/campaign/event_20200521_en/a3.py new file mode 100644 index 000000000..0b2c7cb0f --- /dev/null +++ b/campaign/event_20200521_en/a3.py @@ -0,0 +1,30 @@ +from module.campaign.campaign_base import CampaignBase +from module.map.map_base import CampaignMap + +MAP = CampaignMap('a3') +MAP.shape = 'K7' +MAP.map_data = ''' + SP ++ ++ ++ ME -- -- -- ME -- MM + -- -- -- -- -- -- ME -- -- -- -- + ME -- ++ ME -- -- -- -- ++ ++ -- + ME -- -- -- MS ++ __ -- MB ++ -- + -- -- ME -- -- -- -- -- -- -- -- + -- -- ++ ++ ME ME -- ME ++ ++ ++ + SP -- ++ ++ ME -- -- -- -- ME MM +''' + +class Config: + SUBMARINE = 1 + FLEET_BOSS = 1 + POOR_MAP_DATA = True + MAP_HAS_AMBUSH = False + MAP_HAS_FLEET_STEP = False + MAP_HAS_MOVABLE_ENEMY = False + MAP_HAS_SIREN = True + MAP_HAS_DYNAMIC_RED_BORDER = False + MAP_HAS_MAP_STORY = False + MAP_SIREN_COUNT = 1 + +class Campaign(CampaignBase): + MAP = MAP + diff --git a/campaign/event_20200521_en/b1.py b/campaign/event_20200521_en/b1.py new file mode 100644 index 000000000..21d3eb101 --- /dev/null +++ b/campaign/event_20200521_en/b1.py @@ -0,0 +1,49 @@ +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 + + +MAP = CampaignMap('b1') +MAP.shape = 'H6' +MAP.map_data = ''' + ++ ++ ++ -- -- -- -- MB + -- -- -- -- __ ME ME -- + ME -- ME ++ ++ ME -- -- + SP -- ME ++ ++ MS ME -- + ME -- -- -- -- -- -- -- + SP -- -- ME -- ME -- MB +''' + + +class Config: + SUBMARINE = 1 + FLEET_BOSS = 1 + + POOR_MAP_DATA = True + MAP_HAS_AMBUSH = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_SIREN = True + MAP_HAS_DYNAMIC_RED_BORDER = True + MAP_SIREN_COUNT = 1 + + TRUST_EDGE_LINES = True + + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 40), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 40, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + + +class Campaign(CampaignBase): + MAP = MAP + diff --git a/campaign/event_20200521_en/b2.py b/campaign/event_20200521_en/b2.py new file mode 100644 index 000000000..0ddf501c3 --- /dev/null +++ b/campaign/event_20200521_en/b2.py @@ -0,0 +1,50 @@ +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 + + +MAP = CampaignMap('b2') +MAP.shape = 'I7' +MAP.map_data = ''' + SP -- -- -- -- -- ME ++ MB + -- ME -- -- ME -- -- ++ -- + -- -- ME ++ ++ ++ -- -- -- + ME __ -- ME ME ME -- MS -- + ME MS -- ++ ++ ++ -- -- -- + -- ME -- ME -- -- -- ++ -- + SP -- -- -- -- ME -- ++ MB +''' + + +class Config: + SUBMARINE = 1 + FLEET_BOSS = 1 + + POOR_MAP_DATA = True + MAP_HAS_AMBUSH = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_SIREN = True + MAP_HAS_DYNAMIC_RED_BORDER = True + MAP_SIREN_COUNT = 2 + + TRUST_EDGE_LINES = True + + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 40), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 40, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + + +class Campaign(CampaignBase): + MAP = MAP + diff --git a/campaign/event_20200521_en/b3.py b/campaign/event_20200521_en/b3.py new file mode 100644 index 000000000..7f45daac3 --- /dev/null +++ b/campaign/event_20200521_en/b3.py @@ -0,0 +1,52 @@ +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 + + +MAP = CampaignMap('b3') +MAP.shape = 'I9' +MAP.map_data = ''' + SP -- ++ ++ -- -- -- ME -- + -- ME ++ ++ -- ME -- -- -- + -- -- -- -- -- -- ME ME -- + ME -- ME ME -- ME ++ ++ ++ + -- -- ++ __ -- -- -- MB ++ + -- ME ++ -- -- ME ++ ++ ++ + -- -- MS -- ++ ME -- ME -- + SP -- -- -- ++ -- -- ME -- + SP -- MS -- -- ME -- -- -- +''' + + +class Config: + SUBMARINE = 1 + FLEET_BOSS = 1 + + POOR_MAP_DATA = True + MAP_HAS_AMBUSH = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_SIREN = True + MAP_HAS_DYNAMIC_RED_BORDER = True + MAP_SIREN_COUNT = 2 + + TRUST_EDGE_LINES = True + + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 40), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 40, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + + +class Campaign(CampaignBase): + MAP = MAP + diff --git a/campaign/event_20200521_en/c1.py b/campaign/event_20200521_en/c1.py new file mode 100644 index 000000000..1c0c3dc95 --- /dev/null +++ b/campaign/event_20200521_en/c1.py @@ -0,0 +1,48 @@ +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 + + +MAP = CampaignMap('c1') +MAP.shape = 'I5' +MAP.map_data = ''' + SP -- ++ ME -- ME ++ -- -- + -- ME -- -- ME -- ME ++ ME + -- -- MS -- -- MS __ -- -- + -- ME -- -- ++ ME -- ME -- + SP -- -- ME ++ -- ME -- MB +''' + + +class Config: + SUBMARINE = 1 + FLEET_BOSS = 1 + + POOR_MAP_DATA = True + MAP_HAS_AMBUSH = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_SIREN = True + MAP_HAS_DYNAMIC_RED_BORDER = True + MAP_SIREN_COUNT = 2 + + TRUST_EDGE_LINES = True + + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 40), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 40, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + + +class Campaign(CampaignBase): + MAP = MAP + diff --git a/campaign/event_20200521_en/c2.py b/campaign/event_20200521_en/c2.py new file mode 100644 index 000000000..9f83a23a3 --- /dev/null +++ b/campaign/event_20200521_en/c2.py @@ -0,0 +1,49 @@ +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 + + +MAP = CampaignMap('c2') +MAP.shape = 'J6' +MAP.map_data = ''' + SP -- ME MS ME -- -- -- ME MB + -- -- -- -- -- -- ++ -- - -- + ++ ++ ++ ME MS -- ++ __ ME ++ + SP -- -- -- ME -- ME -- -- ME + -- -- ME -- -- -- -- ME -- -- + ++ ME ME -- ++ ME MM -- -- MB +''' + + +class Config: + SUBMARINE = 1 + FLEET_BOSS = 1 + + POOR_MAP_DATA = True + MAP_HAS_AMBUSH = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_SIREN = True + MAP_HAS_DYNAMIC_RED_BORDER = True + MAP_SIREN_COUNT = 2 + + TRUST_EDGE_LINES = True + + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 40), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 40, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + + +class Campaign(CampaignBase): + MAP = MAP + diff --git a/campaign/event_20200521_en/c3.py b/campaign/event_20200521_en/c3.py new file mode 100644 index 000000000..20d3fc719 --- /dev/null +++ b/campaign/event_20200521_en/c3.py @@ -0,0 +1,50 @@ +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 + + +MAP = CampaignMap('c3') +MAP.shape = 'K7' +MAP.map_data = ''' + SP ++ ++ ++ ME -- -- MS ME -- MM + -- -- -- -- -- -- ME -- -- -- -- + ME -- ++ ME -- -- -- -- ++ ++ -- + ME -- -- -- MS ++ __ -- MB ++ -- + -- -- ME -- -- -- -- -- -- -- -- + -- -- ++ ++ ME ME -- ME ++ ++ ++ + SP -- ++ ++ ME -- -- -- -- ME MM +''' + + +class Config: + SUBMARINE = 1 + FLEET_BOSS = 1 + + POOR_MAP_DATA = True + MAP_HAS_AMBUSH = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_SIREN = True + MAP_HAS_DYNAMIC_RED_BORDER = True + MAP_SIREN_COUNT = 2 + + TRUST_EDGE_LINES = True + + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 40), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 40, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + + +class Campaign(CampaignBase): + MAP = MAP + diff --git a/campaign/event_20200521_en/d1.py b/campaign/event_20200521_en/d1.py new file mode 100644 index 000000000..dcb6d71a3 --- /dev/null +++ b/campaign/event_20200521_en/d1.py @@ -0,0 +1,49 @@ +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 + + +MAP = CampaignMap('d1') +MAP.shape = 'H6' +MAP.map_data = ''' + ++ ++ ++ -- -- -- -- MB + MS -- -- -- __ ME ME -- + ME -- ME ++ ++ MS -- -- + SP -- ME ++ ++ MS ME -- + ME -- -- -- -- -- -- -- + SP -- -- ME MS ME -- MB +''' + + +class Config: + SUBMARINE = 1 + FLEET_BOSS = 2 + + POOR_MAP_DATA = True + MAP_HAS_AMBUSH = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_SIREN = True + MAP_HAS_DYNAMIC_RED_BORDER = True + MAP_SIREN_COUNT = 4 + + TRUST_EDGE_LINES = True + + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 40), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 40, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + + +class Campaign(CampaignBase): + MAP = MAP + diff --git a/campaign/event_20200521_en/d2.py b/campaign/event_20200521_en/d2.py index ea207bc8e..6e180f7be 100644 --- a/campaign/event_20200521_en/d2.py +++ b/campaign/event_20200521_en/d2.py @@ -23,18 +23,26 @@ MAP.weight_data = """ 40 30 40 30 40 40 40 40 40 40 40 40 40 40 30 40 40 20 """ +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 3}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2, 'siren': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2, 'siren': 1}, + {'battle': 5, 'enemy': 1}, + {'battle': 6, 'boss': 1}, +] class Config: - CAMPAIGN_MODE = 'hard' SUBMARINE = 1 FLEET_BOSS = 2 - POOR_MAP_DATA = False + + POOR_MAP_DATA = True MAP_HAS_AMBUSH = False - MAP_HAS_FLEET_STEP = False - MAP_HAS_MOVABLE_ENEMY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_MOVABLE_ENEMY = True MAP_HAS_SIREN = True - MAP_HAS_DYNAMIC_RED_BORDER = False - MAP_HAS_MAP_STORY = False + MAP_HAS_DYNAMIC_RED_BORDER = True MAP_SIREN_COUNT = 3 class Campaign(CampaignBase): diff --git a/campaign/event_20200521_en/d3.py b/campaign/event_20200521_en/d3.py new file mode 100644 index 000000000..271cd03ab --- /dev/null +++ b/campaign/event_20200521_en/d3.py @@ -0,0 +1,52 @@ +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 + + +MAP = CampaignMap('d3') +MAP.shape = 'I9' +MAP.map_data = ''' + SP -- ++ ++ -- MS -- ME -- + -- ME ++ ++ -- ME -- -- -- + -- -- -- -- -- -- ME ME -- + ME -- ME ME -- ME ++ ++ ++ + -- -- ++ __ -- -- -- MB ++ + -- ME ++ -- -- ME ++ ++ ++ + -- -- MS -- ++ ME -- ME -- + SP -- -- -- ++ -- -- ME -- + SP -- MS -- -- ME -- -- -- +''' + + +class Config: + SUBMARINE = 1 + FLEET_BOSS = 2 + + POOR_MAP_DATA = True + MAP_HAS_AMBUSH = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_SIREN = True + MAP_HAS_DYNAMIC_RED_BORDER = True + MAP_SIREN_COUNT = 3 + + TRUST_EDGE_LINES = True + + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 40), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 40, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + + +class Campaign(CampaignBase): + MAP = MAP + diff --git a/module/combat/assets.py b/module/combat/assets.py index b3732ae21..4b2f40aa2 100644 --- a/module/combat/assets.py +++ b/module/combat/assets.py @@ -20,7 +20,7 @@ EMERGENCY_REPAIR_CONFIRM = Button(area={'cn': (669, 418, 842, 475), 'en': (669, EXP_INFO_A = Button(area={'cn': (389, 100, 444, 116), 'en': (389, 100, 444, 116)}, color={'cn': (236, 231, 116), 'en': (236, 231, 116)}, button={'cn': (1000, 631, 1055, 689), 'en': (999, 630, 1047, 691)}, file={'cn': './assets/cn/combat/EXP_INFO_A.png', 'en': './assets/en/combat/EXP_INFO_A.png'}) EXP_INFO_S = Button(area={'cn': (396, 122, 457, 137), 'en': (396, 122, 457, 137)}, color={'cn': (233, 241, 127), 'en': (233, 241, 127)}, button={'cn': (1000, 631, 1055, 689), 'en': (999, 630, 1047, 691)}, file={'cn': './assets/cn/combat/EXP_INFO_S.png', 'en': './assets/en/combat/EXP_INFO_S.png'}) GET_ITEMS_1 = Button(area={'cn': (538, 217, 741, 253), 'en': (550, 215, 739, 246)}, color={'cn': (160, 192, 248), 'en': (157, 187, 233)}, button={'cn': (1000, 631, 1055, 689), 'en': (999, 630, 1047, 691)}, file={'cn': './assets/cn/combat/GET_ITEMS_1.png', 'en': './assets/en/combat/GET_ITEMS_1.png'}) -GET_ITEMS_2 = Button(area={'cn': (538, 146, 742, 182), 'en': (538, 146, 742, 182)}, color={'cn': (160, 192, 248), 'en': (160, 192, 248)}, button={'cn': (1000, 631, 1055, 689), 'en': (999, 630, 1047, 691)}, file={'cn': './assets/cn/combat/GET_ITEMS_2.png', 'en': './assets/en/combat/GET_ITEMS_2.png'}) +GET_ITEMS_2 = Button(area={'cn': (538, 146, 742, 182), 'en': (549, 140, 740, 176)}, color={'cn': (160, 192, 248), 'en': (152, 185, 236)}, button={'cn': (1000, 631, 1055, 689), 'en': (999, 630, 1047, 691)}, file={'cn': './assets/cn/combat/GET_ITEMS_2.png', 'en': './assets/en/combat/GET_ITEMS_2.png'}) GET_SHIP = Button(area={'cn': (1104, 610, 1110, 630), 'en': (1104, 610, 1110, 630)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255)}, button={'cn': (1000, 631, 1055, 689), 'en': (999, 630, 1047, 691)}, file={'cn': './assets/cn/combat/GET_SHIP.png', 'en': './assets/en/combat/GET_SHIP.png'}) LOADING_BAR = Button(area={'cn': (33, 676, 1247, 680), 'en': (33, 676, 1247, 680)}, color={'cn': (172, 205, 232), 'en': (172, 205, 232)}, button={'cn': (33, 676, 1247, 680), 'en': (33, 676, 1247, 680)}, file={'cn': './assets/cn/combat/LOADING_BAR.png', 'en': './assets/en/combat/LOADING_BAR.png'}) MOVE_DOWN = Button(area={'cn': (148, 647, 155, 669), 'en': (148, 647, 155, 669)}, color={'cn': (21, 28, 57), 'en': (21, 28, 57)}, button={'cn': (148, 647, 155, 669), 'en': (148, 647, 155, 669)}, file={'cn': './assets/cn/combat/MOVE_DOWN.png', 'en': './assets/en/combat/MOVE_DOWN.png'}) diff --git a/module/config/argparser_en.py b/module/config/argparser_en.py index 84cc6bf44..7e33bd24d 100644 --- a/module/config/argparser_en.py +++ b/module/config/argparser_en.py @@ -331,7 +331,7 @@ def main(ini_name=''): """ event = event_parser.add_argument_group( 'Choose a level', '\n'.join([line.strip() for line in description.strip().split('\n')])) - event.add_argument('--event_stagesp_stage', default=default('--event_stagesp_stage'), + event.add_argument('--event_stage', default=default('--event_stage'), choices=['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3', 'd1', 'd2', 'd3'], help='E.g d3') event.add_argument('--sp_stage', default=default('--sp_stage'), @@ -346,17 +346,17 @@ def main(ini_name=''): semi.add_argument('--enable_semi_story_skip', default=default('--enable_semi_story_skip'), help='Note that this will automatically confirm all the prompt boxes, including the red face attack', choices=['yes', 'no']) # ==========c72_mystery_farming========== - c_7_2_parser = subs.add_parser('c72_mystery_farming') + c_7_2_parser = subs.add_parser('c7-2_mystery_farming') c_7_2 = c_7_2_parser.add_argument_group('c72_mystery_farming', '') c_7_2.add_argument('--boss_fleet_step_on_a3', default=default('--boss_fleet_step_on_a3'), choices=['yes', 'no'], help='A3 has enemies, G3, C3, E3') # ==========c122_leveling========== - c_12_2_parser = subs.add_parser('c122_leveling') + c_12_2_parser = subs.add_parser('c12-2_leveling') c_12_2 = c_12_2_parser.add_argument_group('12-2 enemy search settings', '') c_12_2.add_argument('--s3_enemy_tolerance', default=default('--s3_enemy_tolerance'), choices=['0', '1', '2', '10'], help='The maximum number of battles to fight against large enemies') # ==========c124_leveling========== - c_12_4_parser = subs.add_parser('c124_leveling') + c_12_4_parser = subs.add_parser('c12-4_leveling') c_12_4 = c_12_4_parser.add_argument_group('12-4 Search enemy settings', 'Need to ensure that the team has a certain strength') c_12_4.add_argument('--non_s3_enemy_enter_tolerance', default=default('--non_s3_enemy_enter_tolerance'), choices=['0', '1', '2'], help='Endure how many battles to enter without big') c_12_4.add_argument('--non_s3_enemy_withdraw_tolerance', default=default('--non_s3_enemy_withdraw_tolerance'), choices=['0', '1', '2', '10'], help='How many battles will be fought after there is no large scale') diff --git a/module/config/dictionary.py b/module/config/dictionary.py index f4fc92b52..a8dfb1cb2 100644 --- a/module/config/dictionary.py +++ b/module/config/dictionary.py @@ -32,9 +32,9 @@ dic_true_eng_to_eng = { 'main': 'main', 'event': 'event', 'semi_auto': 'semi_auto', - 'c72_mystery_farming': 'c72_mystery_farming', - 'c122_leveling': 'c122_leveling', - 'c124_leveling': 'c124_leveling', + 'c7-2_mystery_farming': 'c72_mystery_farming', + 'c12-2_leveling': 'c122_leveling', + 'c12-4_leveling': 'c124_leveling', # Argument 'enable_stop_condition': 'enable_stop_condition', diff --git a/module/map/assets.py b/module/map/assets.py index 6f0edbbec..105f29cd0 100644 --- a/module/map/assets.py +++ b/module/map/assets.py @@ -19,9 +19,9 @@ MAP_CAT_ATTACK = Button(area={'cn': (1237, 103, 1252, 153), 'en': (1237, 103, 12 MAP_OFFENSIVE = Button(area={'cn': (1148, 653, 1262, 705), 'en': (1147, 652, 1263, 701)}, color={'cn': (234, 180, 108), 'en': (234, 183, 108)}, button={'cn': (1148, 653, 1262, 705), 'en': (1147, 652, 1263, 701)}, file={'cn': './assets/cn/map/MAP_OFFENSIVE.png', 'en': './assets/en/map/MAP_OFFENSIVE.png'}) MAP_PREPARATION = Button(area={'cn': (854, 488, 1052, 548), 'en': (852, 489, 1054, 553)}, color={'cn': (236, 186, 115), 'en': (234, 179, 93)}, button={'cn': (854, 488, 1052, 548), 'en': (852, 489, 1054, 553)}, file={'cn': './assets/cn/map/MAP_PREPARATION.png', 'en': './assets/en/map/MAP_PREPARATION.png'}) MAP_PREPARATION_CANCEL = Button(area={'cn': (234, 12, 278, 47), 'en': (234, 12, 278, 47)}, color={'cn': (45, 46, 69), 'en': (45, 46, 69)}, button={'cn': (234, 12, 278, 47), 'en': (234, 12, 278, 47)}, file={'cn': './assets/cn/map/MAP_PREPARATION_CANCEL.png', 'en': './assets/en/map/MAP_PREPARATION_CANCEL.png'}) -SUBMARINE_BAR = Button(area={'cn': (1015, 525, 1186, 602), 'en': (1015, 525, 1186, 602)}, color={'cn': (193, 177, 144), 'en': (193, 177, 144)}, button={'cn': (1015, 525, 1186, 602), 'en': (1015, 525, 1186, 602)}, file={'cn': './assets/cn/map/SUBMARINE_BAR.png', 'en': './assets/en/map/SUBMARINE_BAR.png'}) -SUBMARINE_CHOOSE = Button(area={'cn': (1026, 447, 1090, 505), 'en': (1026, 447, 1090, 505)}, color={'cn': (208, 164, 103), 'en': (208, 164, 103)}, button={'cn': (1026, 447, 1090, 505), 'en': (1026, 447, 1090, 505)}, file={'cn': './assets/cn/map/SUBMARINE_CHOOSE.png', 'en': './assets/en/map/SUBMARINE_CHOOSE.png'}) -SUBMARINE_CLEAR = Button(area={'cn': (1108, 447, 1172, 505), 'en': (1108, 447, 1172, 505)}, color={'cn': (152, 153, 154), 'en': (152, 153, 154)}, button={'cn': (1108, 447, 1172, 505), 'en': (1108, 447, 1172, 505)}, file={'cn': './assets/cn/map/SUBMARINE_CLEAR.png', 'en': './assets/en/map/SUBMARINE_CLEAR.png'}) +SUBMARINE_BAR = Button(area={'cn': (1015, 525, 1186, 602), 'en': (1013, 521, 1184, 599)}, color={'cn': (193, 177, 144), 'en': (196, 180, 148)}, button={'cn': (1015, 525, 1186, 602), 'en': (1013, 521, 1184, 599)}, file={'cn': './assets/cn/map/SUBMARINE_BAR.png', 'en': './assets/en/map/SUBMARINE_BAR.png'}) +SUBMARINE_CHOOSE = Button(area={'cn': (1026, 447, 1090, 505), 'en': (1021, 443, 1086, 502)}, color={'cn': (208, 164, 103), 'en': (199, 149, 84)}, button={'cn': (1026, 447, 1090, 505), 'en': (1021, 443, 1086, 502)}, file={'cn': './assets/cn/map/SUBMARINE_CHOOSE.png', 'en': './assets/en/map/SUBMARINE_CHOOSE.png'}) +SUBMARINE_CLEAR = Button(area={'cn': (1108, 447, 1172, 505), 'en': (1107, 443, 1172, 502)}, color={'cn': (152, 153, 154), 'en': (141, 141, 142)}, button={'cn': (1108, 447, 1172, 505), 'en': (1107, 443, 1172, 502)}, file={'cn': './assets/cn/map/SUBMARINE_CLEAR.png', 'en': './assets/en/map/SUBMARINE_CLEAR.png'}) SUBMARINE_IN_USE = Button(area={'cn': (454, 439, 537, 521), 'en': (454, 439, 537, 521)}, color={'cn': (42, 54, 76), 'en': (42, 54, 76)}, button={'cn': (454, 439, 537, 521), 'en': (454, 439, 537, 521)}, file={'cn': './assets/cn/map/SUBMARINE_IN_USE.png', 'en': './assets/en/map/SUBMARINE_IN_USE.png'}) SWITCH_OVER = Button(area={'cn': (947, 654, 1118, 706), 'en': (945, 647, 1119, 702)}, color={'cn': (144, 158, 198), 'en': (139, 154, 194)}, button={'cn': (947, 654, 1118, 706), 'en': (945, 647, 1119, 702)}, file={'cn': './assets/cn/map/SWITCH_OVER.png', 'en': './assets/en/map/SWITCH_OVER.png'}) WITHDRAW = Button(area={'cn': (749, 654, 921, 707), 'en': (748, 652, 922, 702)}, color={'cn': (213, 124, 124), 'en': (211, 124, 124)}, button={'cn': (749, 654, 921, 707), 'en': (748, 652, 922, 702)}, file={'cn': './assets/cn/map/WITHDRAW.png', 'en': './assets/en/map/WITHDRAW.png'})