From 78a9191936cb93c6c3d94cad323e6b5d80d96527 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sat, 14 Sep 2024 15:07:04 +0800 Subject: [PATCH 1/6] Upd: Config update --- module/config/argument/args.json | 10 +--------- module/config/i18n/zh-TW.json | 2 +- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 9567105892..3794e24e60 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -1714,7 +1714,6 @@ "display": "hide", "option_bold": [ "event_20220324_cn", - "event_20240829_cn", "event_20240912_cn" ], "cn": "event_20240912_cn", @@ -2054,7 +2053,6 @@ ], "option_bold": [ "event_20220324_cn", - "event_20240829_cn", "event_20240912_cn" ], "cn": "event_20240912_cn", @@ -2509,12 +2507,11 @@ ], "option_bold": [ "event_20220324_cn", - "event_20240829_cn", "event_20240912_cn" ], "cn": "event_20240912_cn", "en": "event_20240912_cn", - "jp": "eevent_20240912_cn", + "jp": "event_20240912_cn", "tw": "event_20220324_cn" }, "Mode": { @@ -3922,7 +3919,6 @@ ], "option_bold": [ "event_20220324_cn", - "event_20240829_cn", "event_20240912_cn" ], "cn": "event_20240912_cn", @@ -4394,7 +4390,6 @@ ], "option_bold": [ "event_20220324_cn", - "event_20240829_cn", "event_20240912_cn" ], "cn": "event_20240912_cn", @@ -4866,7 +4861,6 @@ ], "option_bold": [ "event_20220324_cn", - "event_20240829_cn", "event_20240912_cn" ], "cn": "event_20240912_cn", @@ -5338,7 +5332,6 @@ ], "option_bold": [ "event_20220324_cn", - "event_20240829_cn", "event_20240912_cn" ], "cn": "event_20240912_cn", @@ -5800,7 +5793,6 @@ ], "option_bold": [ "event_20220324_cn", - "event_20240829_cn", "event_20240912_cn" ], "cn": "event_20240912_cn", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 4ae0ed48f1..b8c62ade8e 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -732,7 +732,7 @@ "event_20240725_cn": "Interlude of Illusions", "event_20240815_cn": "Windborne Steel Wings", "event_20240829_cn": "Whence Flowers Bear No Fruit", - "event_20240912_cn": "喚醒蒼紅之炎", + "event_20240912_cn": "Ode of Everblooming Crimson", "raid_20200624": "特別演習埃塞克斯級(復刻)", "raid_20210708": "復刻穿越彼方的水線", "raid_20220127": "演習神秘事件調查", From 67ae28ac612c9fd23d23a1df20f842585094625c Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sat, 14 Sep 2024 22:27:03 +0800 Subject: [PATCH 2/6] Fix: Get info after loading DLL, so DLL existence can act as a version check --- module/device/method/ldopengl.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/module/device/method/ldopengl.py b/module/device/method/ldopengl.py index b3f593ea45..038618bbf5 100644 --- a/module/device/method/ldopengl.py +++ b/module/device/method/ldopengl.py @@ -188,9 +188,6 @@ def __init__(self, ld_folder: str, instance_id: int): f'ldopengl_dll={ldopengl_dll}, ' f'instance_id={instance_id}' ) - self.console = LDConsole(ld_folder) - self.info = self.get_player_info_by_index(instance_id) - # Load dll try: self.lib = ctypes.WinDLL(ldopengl_dll) @@ -206,6 +203,10 @@ def __init__(self, ld_folder: str, instance_id: int): f'ldopengl_dll={ldopengl_dll} exist, ' f'but cannot be loaded' ) + # Get info after loading DLL, so DLL existence can act as a version check + self.console = LDConsole(ld_folder) + self.info = self.get_player_info_by_index(instance_id) + self.lib.CreateScreenShotInstance.restype = ctypes.c_void_p # Get screenshot instance From cccee9cc2c0fe247dbffb237ccb0cfec4bd0fda7 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sun, 15 Sep 2024 02:41:35 +0800 Subject: [PATCH 3/6] Fix: fix camera_data as buff bar covers upperleft (fixed #4188) --- campaign/event_20240912_cn/a1.py | 2 +- campaign/event_20240912_cn/b1.py | 2 +- campaign/event_20240912_cn/c1.py | 2 +- campaign/event_20240912_cn/d1.py | 2 +- campaign/event_20240912_cn/sp.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/campaign/event_20240912_cn/a1.py b/campaign/event_20240912_cn/a1.py index db081a3fb6..9e9cdd9e16 100644 --- a/campaign/event_20240912_cn/a1.py +++ b/campaign/event_20240912_cn/a1.py @@ -6,7 +6,7 @@ MAP = CampaignMap('A1') MAP.shape = 'I7' MAP.camera_data = ['D5', 'F2', 'F5'] -MAP.camera_data_spawn_point = ['D2'] +MAP.camera_data_spawn_point = ['D1'] MAP.map_data = """ SP -- SP ++ ++ -- ME -- -- -- -- -- ++ ++ ME -- MB -- diff --git a/campaign/event_20240912_cn/b1.py b/campaign/event_20240912_cn/b1.py index dc5c9a912d..bd4a4caa42 100644 --- a/campaign/event_20240912_cn/b1.py +++ b/campaign/event_20240912_cn/b1.py @@ -6,7 +6,7 @@ MAP = CampaignMap('B1') MAP.shape = 'K8' MAP.camera_data = ['D3', 'D6', 'G2', 'G6'] -MAP.camera_data_spawn_point = ['G2'] +MAP.camera_data_spawn_point = ['E2'] MAP.map_data = """ -- ++ ++ ++ SP -- SP ++ -- -- -- ME -- Me -- -- __ -- -- -- MB -- diff --git a/campaign/event_20240912_cn/c1.py b/campaign/event_20240912_cn/c1.py index 1738b0901e..4389218faf 100644 --- a/campaign/event_20240912_cn/c1.py +++ b/campaign/event_20240912_cn/c1.py @@ -6,7 +6,7 @@ MAP = CampaignMap('C1') MAP.shape = 'I7' MAP.camera_data = ['D5', 'F2', 'F5'] -MAP.camera_data_spawn_point = ['D2'] +MAP.camera_data_spawn_point = ['D1'] MAP.map_data = """ SP -- SP ++ ++ -- ME -- -- -- -- -- ++ ++ ME -- MB -- diff --git a/campaign/event_20240912_cn/d1.py b/campaign/event_20240912_cn/d1.py index 65bfb3ebe7..95cced7363 100644 --- a/campaign/event_20240912_cn/d1.py +++ b/campaign/event_20240912_cn/d1.py @@ -6,7 +6,7 @@ MAP = CampaignMap('D1') MAP.shape = 'K8' MAP.camera_data = ['D3', 'D6', 'G2', 'G6'] -MAP.camera_data_spawn_point = ['G2'] +MAP.camera_data_spawn_point = ['E2'] MAP.map_data = """ -- ++ ++ ++ SP -- SP ++ -- -- -- ME -- Me -- -- __ -- -- -- MB -- diff --git a/campaign/event_20240912_cn/sp.py b/campaign/event_20240912_cn/sp.py index 9fb4a44c05..3b7bf7286f 100644 --- a/campaign/event_20240912_cn/sp.py +++ b/campaign/event_20240912_cn/sp.py @@ -6,7 +6,7 @@ MAP = CampaignMap('SP') MAP.shape = 'K5' MAP.camera_data = ['D3', 'F3'] -MAP.camera_data_spawn_point = ['I3'] +MAP.camera_data_spawn_point = ['I2'] MAP.map_data = """ ++ -- ME -- ++ -- ME -- ++ ++ ++ -- -- -- ME ++ ME -- MS -- -- SP From afb6015286f47d05fa602cf97e267996005aef13 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sun, 15 Sep 2024 02:22:39 +0800 Subject: [PATCH 4/6] Opt: [ALAS] Skip trying nemu_ipc on MuMu Global --- module/device/method/nemu_ipc.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/module/device/method/nemu_ipc.py b/module/device/method/nemu_ipc.py index 0fde50d512..86948783ab 100644 --- a/module/device/method/nemu_ipc.py +++ b/module/device/method/nemu_ipc.py @@ -469,6 +469,9 @@ def nemu_ipc(self) -> NemuIpcImpl: """ # Try existing settings first if self.config.EmulatorInfo_path: + if 'MuMuPlayerGlobal' in self.config.EmulatorInfo_path: + logger.info(f'nemu_ipc is not available on MuMuPlayerGlobal, {self.config.EmulatorInfo_path}') + raise RequestHumanTakeover folder = os.path.abspath(os.path.join(self.config.EmulatorInfo_path, '../../')) index = NemuIpcImpl.serial_to_id(self.serial) if index is not None: @@ -488,6 +491,9 @@ def nemu_ipc(self) -> NemuIpcImpl: if self.emulator_instance is None: logger.error('Unable to use NemuIpc because emulator instance not found') raise RequestHumanTakeover + if 'MuMuPlayerGlobal' in self.emulator_instance.path: + logger.info(f'nemu_ipc is not available on MuMuPlayerGlobal, {self.emulator_instance.path}') + raise RequestHumanTakeover try: return NemuIpcImpl( nemu_folder=self.emulator_instance.emulator.abspath('../'), From 93a47bf08c52982996e139f978fd70ca9d642d3f Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sun, 15 Sep 2024 03:07:02 +0800 Subject: [PATCH 5/6] Fix: Re-fit MAP_SWIPE_MULTIPLY --- campaign/event_20240912_cn/a1.py | 7 ++++--- campaign/event_20240912_cn/b3.py | 7 ++++--- campaign/event_20240912_cn/c1.py | 11 +++++++---- campaign/event_20240912_cn/d3.py | 7 ++++--- campaign/event_20240912_cn/sp.py | 1 + 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/campaign/event_20240912_cn/a1.py b/campaign/event_20240912_cn/a1.py index 9e9cdd9e16..2b1071b956 100644 --- a/campaign/event_20240912_cn/a1.py +++ b/campaign/event_20240912_cn/a1.py @@ -65,10 +65,11 @@ class Config: 'distance': 50, 'wlen': 1000 } + HOMO_CANNY_THRESHOLD = (75, 100) STAGE_ENTRANCE = ['half', '20240725'] - MAP_SWIPE_MULTIPLY = (1.157, 1.179) - MAP_SWIPE_MULTIPLY_MINITOUCH = (1.119, 1.140) - MAP_SWIPE_MULTIPLY_MAATOUCH = (1.086, 1.106) + MAP_SWIPE_MULTIPLY = (1.234, 1.257) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.193, 1.215) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.158, 1.179) class Campaign(CampaignBase): diff --git a/campaign/event_20240912_cn/b3.py b/campaign/event_20240912_cn/b3.py index cb93467aa9..69990f65e0 100644 --- a/campaign/event_20240912_cn/b3.py +++ b/campaign/event_20240912_cn/b3.py @@ -61,9 +61,10 @@ class Config(ConfigBase): MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = False # ===== End of generated config ===== - MAP_SWIPE_MULTIPLY = (1.365, 1.391) - MAP_SWIPE_MULTIPLY_MINITOUCH = (1.320, 1.344) - MAP_SWIPE_MULTIPLY_MAATOUCH = (1.282, 1.305) + + MAP_SWIPE_MULTIPLY = (1.035, 1.055) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.001, 1.019) + MAP_SWIPE_MULTIPLY_MAATOUCH = (0.972, 0.989) class Campaign(CampaignBase): diff --git a/campaign/event_20240912_cn/c1.py b/campaign/event_20240912_cn/c1.py index 4389218faf..a913d5022c 100644 --- a/campaign/event_20240912_cn/c1.py +++ b/campaign/event_20240912_cn/c1.py @@ -53,7 +53,7 @@ class Config: MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = False # ===== End of generated config ===== - STAGE_ENTRANCE = ['half', '20240725'] + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { 'height': (120, 255 - 49), 'width': (1.5, 10), @@ -66,9 +66,12 @@ class Config: 'distance': 50, 'wlen': 1000 } - MAP_SWIPE_MULTIPLY = (1.149, 1.170) - MAP_SWIPE_MULTIPLY_MINITOUCH = (1.111, 1.132) - MAP_SWIPE_MULTIPLY_MAATOUCH = (1.079, 1.098) + HOMO_CANNY_THRESHOLD = (75, 100) + STAGE_ENTRANCE = ['half', '20240725'] + MAP_SWIPE_MULTIPLY = (1.234, 1.257) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.193, 1.215) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.158, 1.179) + class Campaign(CampaignBase): MAP = MAP diff --git a/campaign/event_20240912_cn/d3.py b/campaign/event_20240912_cn/d3.py index 88bb608e9f..9c5e0fab31 100644 --- a/campaign/event_20240912_cn/d3.py +++ b/campaign/event_20240912_cn/d3.py @@ -62,9 +62,10 @@ class Config(ConfigBase): MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = False # ===== End of generated config ===== - MAP_SWIPE_MULTIPLY = (1.365, 1.391) - MAP_SWIPE_MULTIPLY_MINITOUCH = (1.320, 1.344) - MAP_SWIPE_MULTIPLY_MAATOUCH = (1.282, 1.305) + + MAP_SWIPE_MULTIPLY = (1.035, 1.055) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.001, 1.019) + MAP_SWIPE_MULTIPLY_MAATOUCH = (0.972, 0.989) class Campaign(CampaignBase): diff --git a/campaign/event_20240912_cn/sp.py b/campaign/event_20240912_cn/sp.py index 3b7bf7286f..1ada0f37e4 100644 --- a/campaign/event_20240912_cn/sp.py +++ b/campaign/event_20240912_cn/sp.py @@ -68,6 +68,7 @@ class Config: 'distance': 50, 'wlen': 1000 } + HOMO_CANNY_THRESHOLD = (75, 100) MAP_SWIPE_MULTIPLY = (1.194, 1.217) MAP_SWIPE_MULTIPLY_MINITOUCH = (1.155, 1.176) MAP_SWIPE_MULTIPLY_MAATOUCH = (1.121, 1.142) From d1eeb02bd2822d194e2f9aab71d8b3fedcaff315 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sun, 15 Sep 2024 03:29:54 +0800 Subject: [PATCH 6/6] Add: Support Battle UI theme --- .../cn/{combat => combat_ui}/PAUSE.BUTTON.png | Bin assets/{tw/combat => cn/combat_ui}/PAUSE.png | Bin 5553 -> 6717 bytes .../PAUSE_DOUBLE_CHECK.png | Bin .../cn/combat_ui/PAUSE_Iridescent_Fantasy.png | Bin 0 -> 8774 bytes assets/cn/combat_ui/PAUSE_New.png | Bin 0 -> 5698 bytes .../QUIT_CONFIRM.png => combat_ui/QUIT.png} | Bin .../cn/combat_ui/QUIT_Iridescent_Fantasy.png | Bin 0 -> 7598 bytes assets/cn/combat_ui/QUIT_New.png | Bin 0 -> 7547 bytes .../en/{combat => combat_ui}/PAUSE.BUTTON.png | Bin assets/en/{combat => combat_ui}/PAUSE.png | Bin .../PAUSE_DOUBLE_CHECK.png | Bin .../en/combat_ui/PAUSE_Iridescent_Fantasy.png | Bin 0 -> 8774 bytes assets/en/combat_ui/PAUSE_New.png | Bin 0 -> 5698 bytes .../QUIT_CONFIRM.png => combat_ui/QUIT.png} | Bin .../jp/{combat => combat_ui}/PAUSE.BUTTON.png | Bin assets/jp/{combat => combat_ui}/PAUSE.png | Bin .../PAUSE_DOUBLE_CHECK.png | Bin .../jp/combat_ui/PAUSE_Iridescent_Fantasy.png | Bin 0 -> 8774 bytes assets/jp/combat_ui/PAUSE_New.png | Bin 0 -> 5698 bytes .../QUIT_CONFIRM.png => combat_ui/QUIT.png} | Bin .../tw/{combat => combat_ui}/PAUSE.BUTTON.png | Bin assets/{cn/combat => tw/combat_ui}/PAUSE.png | Bin .../PAUSE_DOUBLE_CHECK.png | Bin .../tw/combat_ui/PAUSE_Iridescent_Fantasy.png | Bin 0 -> 8774 bytes assets/tw/combat_ui/PAUSE_New.png | Bin 0 -> 5698 bytes .../QUIT_CONFIRM.png => combat_ui/QUIT.png} | Bin module/combat/assets.py | 2 -- module/combat/combat.py | 28 ++++++++++++++++-- module/combat_ui/assets.py | 13 ++++++++ module/exercise/assets.py | 1 - module/exercise/combat.py | 5 ++-- module/os/map.py | 6 ++-- 32 files changed, 45 insertions(+), 10 deletions(-) rename assets/cn/{combat => combat_ui}/PAUSE.BUTTON.png (100%) rename assets/{tw/combat => cn/combat_ui}/PAUSE.png (77%) rename assets/cn/{combat => combat_ui}/PAUSE_DOUBLE_CHECK.png (100%) create mode 100644 assets/cn/combat_ui/PAUSE_Iridescent_Fantasy.png create mode 100644 assets/cn/combat_ui/PAUSE_New.png rename assets/cn/{exercise/QUIT_CONFIRM.png => combat_ui/QUIT.png} (100%) create mode 100644 assets/cn/combat_ui/QUIT_Iridescent_Fantasy.png create mode 100644 assets/cn/combat_ui/QUIT_New.png rename assets/en/{combat => combat_ui}/PAUSE.BUTTON.png (100%) rename assets/en/{combat => combat_ui}/PAUSE.png (100%) rename assets/en/{combat => combat_ui}/PAUSE_DOUBLE_CHECK.png (100%) create mode 100644 assets/en/combat_ui/PAUSE_Iridescent_Fantasy.png create mode 100644 assets/en/combat_ui/PAUSE_New.png rename assets/en/{exercise/QUIT_CONFIRM.png => combat_ui/QUIT.png} (100%) rename assets/jp/{combat => combat_ui}/PAUSE.BUTTON.png (100%) rename assets/jp/{combat => combat_ui}/PAUSE.png (100%) rename assets/jp/{combat => combat_ui}/PAUSE_DOUBLE_CHECK.png (100%) create mode 100644 assets/jp/combat_ui/PAUSE_Iridescent_Fantasy.png create mode 100644 assets/jp/combat_ui/PAUSE_New.png rename assets/jp/{exercise/QUIT_CONFIRM.png => combat_ui/QUIT.png} (100%) rename assets/tw/{combat => combat_ui}/PAUSE.BUTTON.png (100%) rename assets/{cn/combat => tw/combat_ui}/PAUSE.png (100%) rename assets/tw/{combat => combat_ui}/PAUSE_DOUBLE_CHECK.png (100%) create mode 100644 assets/tw/combat_ui/PAUSE_Iridescent_Fantasy.png create mode 100644 assets/tw/combat_ui/PAUSE_New.png rename assets/tw/{exercise/QUIT_CONFIRM.png => combat_ui/QUIT.png} (100%) create mode 100644 module/combat_ui/assets.py diff --git a/assets/cn/combat/PAUSE.BUTTON.png b/assets/cn/combat_ui/PAUSE.BUTTON.png similarity index 100% rename from assets/cn/combat/PAUSE.BUTTON.png rename to assets/cn/combat_ui/PAUSE.BUTTON.png diff --git a/assets/tw/combat/PAUSE.png b/assets/cn/combat_ui/PAUSE.png similarity index 77% rename from assets/tw/combat/PAUSE.png rename to assets/cn/combat_ui/PAUSE.png index 75e27a4ea94223309eb33dcfaba4bef45058192f..4dd3fa9dc47d742441e8dec53bb6bb665e67344a 100644 GIT binary patch delta 1400 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 PN1Og-qe~?^4$=Pu1kcK% literal 0 HcmV?d00001 diff --git a/assets/cn/combat_ui/PAUSE_New.png b/assets/cn/combat_ui/PAUSE_New.png new file mode 100644 index 0000000000000000000000000000000000000000..d11e4a2ec534b85d13583a881c3357671af902c0 GIT binary patch literal 5698 zcmeH}c{mi_8pn@823fL=eT^1dL_aBeGBm>2vs3m#_K{^IQNqZUHCu^>C}qepS+a~J zie$-78XEg#?N0Zf`{(`dKKBpjdCqyi=XuY0-}m|a^?hJ`U5|x{p9uiKq7T1<1c06@ zA)lZSYS0uhprHmvKe%-O0L+|!Hx0wLaNHDim`6V)5`Zgkryt1cc7MvSwo+@+ji^aof0D+j^n|W>UJQqIw6MxA1>eP(bOpAB5wiE0O zyDQ_Icy4Bn1Sfov7SVSc0REkU4~Hrm*u{mp=>^wCZ}Mh)(V^F>ueiF{+T>xwBM2Q} zzur$Cb(o(YruFNfsS0ZLDzgEj7QlUS$L{^Z zOvKwe{YxNa+MX$PaEWzUf3Ay(wwk-xu})FNhx-p3^c2#fUz^Z=fdpyRy%6Dl_^}{h zAW(_T4wF&jHNamZtcH14R620&M^GS$c$nmZ8Bkz#ee})A_EDU!;{z*xsSX~Oc`Id$ zWMvm2tAB#I1qk_0Wavpq0)}%LYJZQt#rrN6t7nC<(s?1dEK$Qz54B{Bxu?)_N<8(2 zQH^96$4*MBm^mzc0vzNGyrR!)ah_(|5T$8*=2#3Zqb`po)X@G-b-iD`-Y zAiGB{LW+b%b$y?MzQ*80GgE4@Y*?emdtI$_wOp$0@iPdr3 zXBCv2^p@p+ftJUsKE0ujDhM`~H;pUfR0_(L?9JiPA(qG%4}Hq^aPy$J%P$4iGfu<^ z>t=q+9Q69Zu(Y@ovl()noZ0N9IonHni-_k}&EFW$mN9>klRQiw5c%hv67&L=&s#yoWwi(E^26(i2Yz7n-t>zTMEClX zHuvHI{o+%2sb6t!v&x|`byu9PpfgVC`>k=W%TCT7ien{hCGB%fXL{4TvR&&3YCZ?{ z^mNLM<3?~@%Sji9a=r4Mn!YuR?I*@Q)6H!+NVt&DkujPPPNdH;%%I?&Sg2c|Ew(Ja z;`E1YNirnVu%)-LfMw3{9Mv4+yB8HX6>Y&es7bCFuH-X=XSPgzMirL#mzkEcmyfMn z+;-ZQ+(vEp3-t(c2n}BfycF&q7}OK&?bkpmnO15oYb$GAvUC%0D-6inP=-Cfh9z=j z24})dQKb({eV&F9)93kr)epY?yj7g@K4-k*8|uqMk6L@g%RNK69Dy#oRyDHL<|@T% z=626)UTIEg%LaB)-agpg+J3K5*yv5JRQ~WeROeWm%~T`tj-#r&+O6HbC0g~5>X4^l zPve@NH;GTGHAzGcM`lGb?C0-Y+9e(&|8AZ}uk);3r+1|JKr>I%7|kF3hSrN#gf5Hj z8G|x?BK`Yg^2gP=wU0BhSc~|l`VwI40y{3}$K7PI2e`YTdE7SycF*-lA%urdB;D_a zPO?Y(KHots^}K_|Pw9Eb<3&99vS2$ATxZTImdpJ#sWA<_9Y~QG#?4vpxiu!OC6_&_ zyENwc&Og`<=jn~~c3IBBWANqp=+L;|x@(ynft)89S02o@jkKvfm<@m|dS{={oy#`M z2z05OA1|tdEiCmB^FuCMD_dj3RbroTWWLszj}g^2mghB^FZD4L;#|L%6KkZ~RFqg` zQeBHTxcqn_&mw(WW#UqV&aV4?qpLw5&ode!rO_#TkLx5h3@xq$%#~wMMSe(y1(S=mk`_Kx$k!WlmxzU}KEiI~FleT!XAMX5~T1zmN{K z;k60H!yDl@zMP+QJ^Z;N!F-n|yb)VvjIVk#f)BM`n-Xu7|&QC&DTBAD8zkvE?)P>+VD{zq3Gn^FrhVUN6L`JwN%*vpWpix@3}P zps)A%tLEm{j40%VL}9q9-+T_ncQj`uJLIk3jkByRTJs-HO+F95Gi&^#u&;HzwRbWr zs&)%Xf}^DeRhxrwvc;$ZwZca7k4MFMLiR#>O|^d_$qKVBK^@A;miYyFr`6VW=I*A> zmfkGQ&%3Un_9bf^O+oBudD)rRHM;5a=WD$iRfZ?C{Yn0_I~?ZT2nU+p)I9{gn3W&0Ubb69FZL?{_aSNKWI|G%f-oqnZ0ZMR{JBX%sUDF z&6Vh~4S({>vRA4d5*;E9eQ33{=ld0XV-aLLxqh;vQ6%g1zUHCv#=x#iN9iXciuz*s z;l4cO-o~Ef;M4O|w<+oZM;ZbUCJ6v027sME)VKsd&^Z8pIs%~j1OS-tV~6&uR5$9Y ze?`kIbaZ*N+MrcakT4x}vXx$N#zKpMA&!+bLh6)>txS_iIMCXI25l$^3iYz9#1&l~ zXqR$cq8QeV)3;1)#w1W%{?FEh8&1sBX1un2=m~q-V{*enrBt6yxNsWv*Jn%AImj%2 zEiJ=Il*hZjFa6eqtMm8{lMxZ_?_W4D+GaZyQkw{l0pR%NvfdYznQv?Tih6$tYAmA0 zgMY))Hu`VMY>2Ht$`H^3P{mD0MFt>Lvkv~PppI0j4_7!TgW< zFJD&44Od`i#4GZfZK|>jPn<~UHuzhKKu&*0Erm%zB$rxd!Vdl!^7+Yjib2nTXL)D~ zu3@UeM$I0}46v`YOo&bx;&!KAkJb@^BLYVRjtCqPI3jRF;E2HgB>_j&E9zW-{?LL# WIY}5Pz3A!RG4*w?U#Zk~y!$VL)3;9m literal 0 HcmV?d00001 diff --git a/assets/cn/exercise/QUIT_CONFIRM.png b/assets/cn/combat_ui/QUIT.png similarity index 100% rename from assets/cn/exercise/QUIT_CONFIRM.png rename to assets/cn/combat_ui/QUIT.png diff --git a/assets/cn/combat_ui/QUIT_Iridescent_Fantasy.png b/assets/cn/combat_ui/QUIT_Iridescent_Fantasy.png new file mode 100644 index 0000000000000000000000000000000000000000..fe22a8f416c20037fdde3ccbe8a1bb91d2179d24 GIT binary patch literal 7598 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 literal 0 HcmV?d00001 diff --git a/assets/en/combat/PAUSE.BUTTON.png b/assets/en/combat_ui/PAUSE.BUTTON.png similarity index 100% rename from assets/en/combat/PAUSE.BUTTON.png rename to assets/en/combat_ui/PAUSE.BUTTON.png diff --git a/assets/en/combat/PAUSE.png b/assets/en/combat_ui/PAUSE.png similarity index 100% rename from assets/en/combat/PAUSE.png rename to assets/en/combat_ui/PAUSE.png diff --git a/assets/en/combat/PAUSE_DOUBLE_CHECK.png b/assets/en/combat_ui/PAUSE_DOUBLE_CHECK.png similarity index 100% rename from assets/en/combat/PAUSE_DOUBLE_CHECK.png rename to assets/en/combat_ui/PAUSE_DOUBLE_CHECK.png diff --git a/assets/en/combat_ui/PAUSE_Iridescent_Fantasy.png b/assets/en/combat_ui/PAUSE_Iridescent_Fantasy.png new file mode 100644 index 0000000000000000000000000000000000000000..3b5b6145227eb3d87438da7f749f8f64abfec140 GIT binary patch literal 8774 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 PN1Og-qe~?^4$=Pu1kcK% literal 0 HcmV?d00001 diff --git a/assets/en/combat_ui/PAUSE_New.png b/assets/en/combat_ui/PAUSE_New.png new file mode 100644 index 0000000000000000000000000000000000000000..d11e4a2ec534b85d13583a881c3357671af902c0 GIT binary patch literal 5698 zcmeH}c{mi_8pn@823fL=eT^1dL_aBeGBm>2vs3m#_K{^IQNqZUHCu^>C}qepS+a~J zie$-78XEg#?N0Zf`{(`dKKBpjdCqyi=XuY0-}m|a^?hJ`U5|x{p9uiKq7T1<1c06@ zA)lZSYS0uhprHmvKe%-O0L+|!Hx0wLaNHDim`6V)5`Zgkryt1cc7MvSwo+@+ji^aof0D+j^n|W>UJQqIw6MxA1>eP(bOpAB5wiE0O zyDQ_Icy4Bn1Sfov7SVSc0REkU4~Hrm*u{mp=>^wCZ}Mh)(V^F>ueiF{+T>xwBM2Q} zzur$Cb(o(YruFNfsS0ZLDzgEj7QlUS$L{^Z zOvKwe{YxNa+MX$PaEWzUf3Ay(wwk-xu})FNhx-p3^c2#fUz^Z=fdpyRy%6Dl_^}{h zAW(_T4wF&jHNamZtcH14R620&M^GS$c$nmZ8Bkz#ee})A_EDU!;{z*xsSX~Oc`Id$ zWMvm2tAB#I1qk_0Wavpq0)}%LYJZQt#rrN6t7nC<(s?1dEK$Qz54B{Bxu?)_N<8(2 zQH^96$4*MBm^mzc0vzNGyrR!)ah_(|5T$8*=2#3Zqb`po)X@G-b-iD`-Y zAiGB{LW+b%b$y?MzQ*80GgE4@Y*?emdtI$_wOp$0@iPdr3 zXBCv2^p@p+ftJUsKE0ujDhM`~H;pUfR0_(L?9JiPA(qG%4}Hq^aPy$J%P$4iGfu<^ z>t=q+9Q69Zu(Y@ovl()noZ0N9IonHni-_k}&EFW$mN9>klRQiw5c%hv67&L=&s#yoWwi(E^26(i2Yz7n-t>zTMEClX zHuvHI{o+%2sb6t!v&x|`byu9PpfgVC`>k=W%TCT7ien{hCGB%fXL{4TvR&&3YCZ?{ z^mNLM<3?~@%Sji9a=r4Mn!YuR?I*@Q)6H!+NVt&DkujPPPNdH;%%I?&Sg2c|Ew(Ja z;`E1YNirnVu%)-LfMw3{9Mv4+yB8HX6>Y&es7bCFuH-X=XSPgzMirL#mzkEcmyfMn z+;-ZQ+(vEp3-t(c2n}BfycF&q7}OK&?bkpmnO15oYb$GAvUC%0D-6inP=-Cfh9z=j z24})dQKb({eV&F9)93kr)epY?yj7g@K4-k*8|uqMk6L@g%RNK69Dy#oRyDHL<|@T% z=626)UTIEg%LaB)-agpg+J3K5*yv5JRQ~WeROeWm%~T`tj-#r&+O6HbC0g~5>X4^l zPve@NH;GTGHAzGcM`lGb?C0-Y+9e(&|8AZ}uk);3r+1|JKr>I%7|kF3hSrN#gf5Hj z8G|x?BK`Yg^2gP=wU0BhSc~|l`VwI40y{3}$K7PI2e`YTdE7SycF*-lA%urdB;D_a zPO?Y(KHots^}K_|Pw9Eb<3&99vS2$ATxZTImdpJ#sWA<_9Y~QG#?4vpxiu!OC6_&_ zyENwc&Og`<=jn~~c3IBBWANqp=+L;|x@(ynft)89S02o@jkKvfm<@m|dS{={oy#`M z2z05OA1|tdEiCmB^FuCMD_dj3RbroTWWLszj}g^2mghB^FZD4L;#|L%6KkZ~RFqg` zQeBHTxcqn_&mw(WW#UqV&aV4?qpLw5&ode!rO_#TkLx5h3@xq$%#~wMMSe(y1(S=mk`_Kx$k!WlmxzU}KEiI~FleT!XAMX5~T1zmN{K z;k60H!yDl@zMP+QJ^Z;N!F-n|yb)VvjIVk#f)BM`n-Xu7|&QC&DTBAD8zkvE?)P>+VD{zq3Gn^FrhVUN6L`JwN%*vpWpix@3}P zps)A%tLEm{j40%VL}9q9-+T_ncQj`uJLIk3jkByRTJs-HO+F95Gi&^#u&;HzwRbWr zs&)%Xf}^DeRhxrwvc;$ZwZca7k4MFMLiR#>O|^d_$qKVBK^@A;miYyFr`6VW=I*A> zmfkGQ&%3Un_9bf^O+oBudD)rRHM;5a=WD$iRfZ?C{Yn0_I~?ZT2nU+p)I9{gn3W&0Ubb69FZL?{_aSNKWI|G%f-oqnZ0ZMR{JBX%sUDF z&6Vh~4S({>vRA4d5*;E9eQ33{=ld0XV-aLLxqh;vQ6%g1zUHCv#=x#iN9iXciuz*s z;l4cO-o~Ef;M4O|w<+oZM;ZbUCJ6v027sME)VKsd&^Z8pIs%~j1OS-tV~6&uR5$9Y ze?`kIbaZ*N+MrcakT4x}vXx$N#zKpMA&!+bLh6)>txS_iIMCXI25l$^3iYz9#1&l~ zXqR$cq8QeV)3;1)#w1W%{?FEh8&1sBX1un2=m~q-V{*enrBt6yxNsWv*Jn%AImj%2 zEiJ=Il*hZjFa6eqtMm8{lMxZ_?_W4D+GaZyQkw{l0pR%NvfdYznQv?Tih6$tYAmA0 zgMY))Hu`VMY>2Ht$`H^3P{mD0MFt>Lvkv~PppI0j4_7!TgW< zFJD&44Od`i#4GZfZK|>jPn<~UHuzhKKu&*0Erm%zB$rxd!Vdl!^7+Yjib2nTXL)D~ zu3@UeM$I0}46v`YOo&bx;&!KAkJb@^BLYVRjtCqPI3jRF;E2HgB>_j&E9zW-{?LL# WIY}5Pz3A!RG4*w?U#Zk~y!$VL)3;9m literal 0 HcmV?d00001 diff --git a/assets/en/exercise/QUIT_CONFIRM.png b/assets/en/combat_ui/QUIT.png similarity index 100% rename from assets/en/exercise/QUIT_CONFIRM.png rename to assets/en/combat_ui/QUIT.png diff --git a/assets/jp/combat/PAUSE.BUTTON.png b/assets/jp/combat_ui/PAUSE.BUTTON.png similarity index 100% rename from assets/jp/combat/PAUSE.BUTTON.png rename to assets/jp/combat_ui/PAUSE.BUTTON.png diff --git a/assets/jp/combat/PAUSE.png b/assets/jp/combat_ui/PAUSE.png similarity index 100% rename from assets/jp/combat/PAUSE.png rename to assets/jp/combat_ui/PAUSE.png diff --git a/assets/jp/combat/PAUSE_DOUBLE_CHECK.png b/assets/jp/combat_ui/PAUSE_DOUBLE_CHECK.png similarity index 100% rename from assets/jp/combat/PAUSE_DOUBLE_CHECK.png rename to assets/jp/combat_ui/PAUSE_DOUBLE_CHECK.png diff --git a/assets/jp/combat_ui/PAUSE_Iridescent_Fantasy.png b/assets/jp/combat_ui/PAUSE_Iridescent_Fantasy.png new file mode 100644 index 0000000000000000000000000000000000000000..3b5b6145227eb3d87438da7f749f8f64abfec140 GIT binary patch literal 8774 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 PN1Og-qe~?^4$=Pu1kcK% literal 0 HcmV?d00001 diff --git a/assets/jp/combat_ui/PAUSE_New.png b/assets/jp/combat_ui/PAUSE_New.png new file mode 100644 index 0000000000000000000000000000000000000000..d11e4a2ec534b85d13583a881c3357671af902c0 GIT binary patch literal 5698 zcmeH}c{mi_8pn@823fL=eT^1dL_aBeGBm>2vs3m#_K{^IQNqZUHCu^>C}qepS+a~J zie$-78XEg#?N0Zf`{(`dKKBpjdCqyi=XuY0-}m|a^?hJ`U5|x{p9uiKq7T1<1c06@ zA)lZSYS0uhprHmvKe%-O0L+|!Hx0wLaNHDim`6V)5`Zgkryt1cc7MvSwo+@+ji^aof0D+j^n|W>UJQqIw6MxA1>eP(bOpAB5wiE0O zyDQ_Icy4Bn1Sfov7SVSc0REkU4~Hrm*u{mp=>^wCZ}Mh)(V^F>ueiF{+T>xwBM2Q} zzur$Cb(o(YruFNfsS0ZLDzgEj7QlUS$L{^Z zOvKwe{YxNa+MX$PaEWzUf3Ay(wwk-xu})FNhx-p3^c2#fUz^Z=fdpyRy%6Dl_^}{h zAW(_T4wF&jHNamZtcH14R620&M^GS$c$nmZ8Bkz#ee})A_EDU!;{z*xsSX~Oc`Id$ zWMvm2tAB#I1qk_0Wavpq0)}%LYJZQt#rrN6t7nC<(s?1dEK$Qz54B{Bxu?)_N<8(2 zQH^96$4*MBm^mzc0vzNGyrR!)ah_(|5T$8*=2#3Zqb`po)X@G-b-iD`-Y zAiGB{LW+b%b$y?MzQ*80GgE4@Y*?emdtI$_wOp$0@iPdr3 zXBCv2^p@p+ftJUsKE0ujDhM`~H;pUfR0_(L?9JiPA(qG%4}Hq^aPy$J%P$4iGfu<^ z>t=q+9Q69Zu(Y@ovl()noZ0N9IonHni-_k}&EFW$mN9>klRQiw5c%hv67&L=&s#yoWwi(E^26(i2Yz7n-t>zTMEClX zHuvHI{o+%2sb6t!v&x|`byu9PpfgVC`>k=W%TCT7ien{hCGB%fXL{4TvR&&3YCZ?{ z^mNLM<3?~@%Sji9a=r4Mn!YuR?I*@Q)6H!+NVt&DkujPPPNdH;%%I?&Sg2c|Ew(Ja z;`E1YNirnVu%)-LfMw3{9Mv4+yB8HX6>Y&es7bCFuH-X=XSPgzMirL#mzkEcmyfMn z+;-ZQ+(vEp3-t(c2n}BfycF&q7}OK&?bkpmnO15oYb$GAvUC%0D-6inP=-Cfh9z=j z24})dQKb({eV&F9)93kr)epY?yj7g@K4-k*8|uqMk6L@g%RNK69Dy#oRyDHL<|@T% z=626)UTIEg%LaB)-agpg+J3K5*yv5JRQ~WeROeWm%~T`tj-#r&+O6HbC0g~5>X4^l zPve@NH;GTGHAzGcM`lGb?C0-Y+9e(&|8AZ}uk);3r+1|JKr>I%7|kF3hSrN#gf5Hj z8G|x?BK`Yg^2gP=wU0BhSc~|l`VwI40y{3}$K7PI2e`YTdE7SycF*-lA%urdB;D_a zPO?Y(KHots^}K_|Pw9Eb<3&99vS2$ATxZTImdpJ#sWA<_9Y~QG#?4vpxiu!OC6_&_ zyENwc&Og`<=jn~~c3IBBWANqp=+L;|x@(ynft)89S02o@jkKvfm<@m|dS{={oy#`M z2z05OA1|tdEiCmB^FuCMD_dj3RbroTWWLszj}g^2mghB^FZD4L;#|L%6KkZ~RFqg` zQeBHTxcqn_&mw(WW#UqV&aV4?qpLw5&ode!rO_#TkLx5h3@xq$%#~wMMSe(y1(S=mk`_Kx$k!WlmxzU}KEiI~FleT!XAMX5~T1zmN{K z;k60H!yDl@zMP+QJ^Z;N!F-n|yb)VvjIVk#f)BM`n-Xu7|&QC&DTBAD8zkvE?)P>+VD{zq3Gn^FrhVUN6L`JwN%*vpWpix@3}P zps)A%tLEm{j40%VL}9q9-+T_ncQj`uJLIk3jkByRTJs-HO+F95Gi&^#u&;HzwRbWr zs&)%Xf}^DeRhxrwvc;$ZwZca7k4MFMLiR#>O|^d_$qKVBK^@A;miYyFr`6VW=I*A> zmfkGQ&%3Un_9bf^O+oBudD)rRHM;5a=WD$iRfZ?C{Yn0_I~?ZT2nU+p)I9{gn3W&0Ubb69FZL?{_aSNKWI|G%f-oqnZ0ZMR{JBX%sUDF z&6Vh~4S({>vRA4d5*;E9eQ33{=ld0XV-aLLxqh;vQ6%g1zUHCv#=x#iN9iXciuz*s z;l4cO-o~Ef;M4O|w<+oZM;ZbUCJ6v027sME)VKsd&^Z8pIs%~j1OS-tV~6&uR5$9Y ze?`kIbaZ*N+MrcakT4x}vXx$N#zKpMA&!+bLh6)>txS_iIMCXI25l$^3iYz9#1&l~ zXqR$cq8QeV)3;1)#w1W%{?FEh8&1sBX1un2=m~q-V{*enrBt6yxNsWv*Jn%AImj%2 zEiJ=Il*hZjFa6eqtMm8{lMxZ_?_W4D+GaZyQkw{l0pR%NvfdYznQv?Tih6$tYAmA0 zgMY))Hu`VMY>2Ht$`H^3P{mD0MFt>Lvkv~PppI0j4_7!TgW< zFJD&44Od`i#4GZfZK|>jPn<~UHuzhKKu&*0Erm%zB$rxd!Vdl!^7+Yjib2nTXL)D~ zu3@UeM$I0}46v`YOo&bx;&!KAkJb@^BLYVRjtCqPI3jRF;E2HgB>_j&E9zW-{?LL# WIY}5Pz3A!RG4*w?U#Zk~y!$VL)3;9m literal 0 HcmV?d00001 diff --git a/assets/jp/exercise/QUIT_CONFIRM.png b/assets/jp/combat_ui/QUIT.png similarity index 100% rename from assets/jp/exercise/QUIT_CONFIRM.png rename to assets/jp/combat_ui/QUIT.png diff --git a/assets/tw/combat/PAUSE.BUTTON.png b/assets/tw/combat_ui/PAUSE.BUTTON.png similarity index 100% rename from assets/tw/combat/PAUSE.BUTTON.png rename to assets/tw/combat_ui/PAUSE.BUTTON.png diff --git a/assets/cn/combat/PAUSE.png b/assets/tw/combat_ui/PAUSE.png similarity index 100% rename from assets/cn/combat/PAUSE.png rename to assets/tw/combat_ui/PAUSE.png diff --git a/assets/tw/combat/PAUSE_DOUBLE_CHECK.png b/assets/tw/combat_ui/PAUSE_DOUBLE_CHECK.png similarity index 100% rename from assets/tw/combat/PAUSE_DOUBLE_CHECK.png rename to assets/tw/combat_ui/PAUSE_DOUBLE_CHECK.png diff --git a/assets/tw/combat_ui/PAUSE_Iridescent_Fantasy.png b/assets/tw/combat_ui/PAUSE_Iridescent_Fantasy.png new file mode 100644 index 0000000000000000000000000000000000000000..3b5b6145227eb3d87438da7f749f8f64abfec140 GIT binary patch literal 8774 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 PN1Og-qe~?^4$=Pu1kcK% literal 0 HcmV?d00001 diff --git a/assets/tw/combat_ui/PAUSE_New.png b/assets/tw/combat_ui/PAUSE_New.png new file mode 100644 index 0000000000000000000000000000000000000000..d11e4a2ec534b85d13583a881c3357671af902c0 GIT binary patch literal 5698 zcmeH}c{mi_8pn@823fL=eT^1dL_aBeGBm>2vs3m#_K{^IQNqZUHCu^>C}qepS+a~J zie$-78XEg#?N0Zf`{(`dKKBpjdCqyi=XuY0-}m|a^?hJ`U5|x{p9uiKq7T1<1c06@ zA)lZSYS0uhprHmvKe%-O0L+|!Hx0wLaNHDim`6V)5`Zgkryt1cc7MvSwo+@+ji^aof0D+j^n|W>UJQqIw6MxA1>eP(bOpAB5wiE0O zyDQ_Icy4Bn1Sfov7SVSc0REkU4~Hrm*u{mp=>^wCZ}Mh)(V^F>ueiF{+T>xwBM2Q} zzur$Cb(o(YruFNfsS0ZLDzgEj7QlUS$L{^Z zOvKwe{YxNa+MX$PaEWzUf3Ay(wwk-xu})FNhx-p3^c2#fUz^Z=fdpyRy%6Dl_^}{h zAW(_T4wF&jHNamZtcH14R620&M^GS$c$nmZ8Bkz#ee})A_EDU!;{z*xsSX~Oc`Id$ zWMvm2tAB#I1qk_0Wavpq0)}%LYJZQt#rrN6t7nC<(s?1dEK$Qz54B{Bxu?)_N<8(2 zQH^96$4*MBm^mzc0vzNGyrR!)ah_(|5T$8*=2#3Zqb`po)X@G-b-iD`-Y zAiGB{LW+b%b$y?MzQ*80GgE4@Y*?emdtI$_wOp$0@iPdr3 zXBCv2^p@p+ftJUsKE0ujDhM`~H;pUfR0_(L?9JiPA(qG%4}Hq^aPy$J%P$4iGfu<^ z>t=q+9Q69Zu(Y@ovl()noZ0N9IonHni-_k}&EFW$mN9>klRQiw5c%hv67&L=&s#yoWwi(E^26(i2Yz7n-t>zTMEClX zHuvHI{o+%2sb6t!v&x|`byu9PpfgVC`>k=W%TCT7ien{hCGB%fXL{4TvR&&3YCZ?{ z^mNLM<3?~@%Sji9a=r4Mn!YuR?I*@Q)6H!+NVt&DkujPPPNdH;%%I?&Sg2c|Ew(Ja z;`E1YNirnVu%)-LfMw3{9Mv4+yB8HX6>Y&es7bCFuH-X=XSPgzMirL#mzkEcmyfMn z+;-ZQ+(vEp3-t(c2n}BfycF&q7}OK&?bkpmnO15oYb$GAvUC%0D-6inP=-Cfh9z=j z24})dQKb({eV&F9)93kr)epY?yj7g@K4-k*8|uqMk6L@g%RNK69Dy#oRyDHL<|@T% z=626)UTIEg%LaB)-agpg+J3K5*yv5JRQ~WeROeWm%~T`tj-#r&+O6HbC0g~5>X4^l zPve@NH;GTGHAzGcM`lGb?C0-Y+9e(&|8AZ}uk);3r+1|JKr>I%7|kF3hSrN#gf5Hj z8G|x?BK`Yg^2gP=wU0BhSc~|l`VwI40y{3}$K7PI2e`YTdE7SycF*-lA%urdB;D_a zPO?Y(KHots^}K_|Pw9Eb<3&99vS2$ATxZTImdpJ#sWA<_9Y~QG#?4vpxiu!OC6_&_ zyENwc&Og`<=jn~~c3IBBWANqp=+L;|x@(ynft)89S02o@jkKvfm<@m|dS{={oy#`M z2z05OA1|tdEiCmB^FuCMD_dj3RbroTWWLszj}g^2mghB^FZD4L;#|L%6KkZ~RFqg` zQeBHTxcqn_&mw(WW#UqV&aV4?qpLw5&ode!rO_#TkLx5h3@xq$%#~wMMSe(y1(S=mk`_Kx$k!WlmxzU}KEiI~FleT!XAMX5~T1zmN{K z;k60H!yDl@zMP+QJ^Z;N!F-n|yb)VvjIVk#f)BM`n-Xu7|&QC&DTBAD8zkvE?)P>+VD{zq3Gn^FrhVUN6L`JwN%*vpWpix@3}P zps)A%tLEm{j40%VL}9q9-+T_ncQj`uJLIk3jkByRTJs-HO+F95Gi&^#u&;HzwRbWr zs&)%Xf}^DeRhxrwvc;$ZwZca7k4MFMLiR#>O|^d_$qKVBK^@A;miYyFr`6VW=I*A> zmfkGQ&%3Un_9bf^O+oBudD)rRHM;5a=WD$iRfZ?C{Yn0_I~?ZT2nU+p)I9{gn3W&0Ubb69FZL?{_aSNKWI|G%f-oqnZ0ZMR{JBX%sUDF z&6Vh~4S({>vRA4d5*;E9eQ33{=ld0XV-aLLxqh;vQ6%g1zUHCv#=x#iN9iXciuz*s z;l4cO-o~Ef;M4O|w<+oZM;ZbUCJ6v027sME)VKsd&^Z8pIs%~j1OS-tV~6&uR5$9Y ze?`kIbaZ*N+MrcakT4x}vXx$N#zKpMA&!+bLh6)>txS_iIMCXI25l$^3iYz9#1&l~ zXqR$cq8QeV)3;1)#w1W%{?FEh8&1sBX1un2=m~q-V{*enrBt6yxNsWv*Jn%AImj%2 zEiJ=Il*hZjFa6eqtMm8{lMxZ_?_W4D+GaZyQkw{l0pR%NvfdYznQv?Tih6$tYAmA0 zgMY))Hu`VMY>2Ht$`H^3P{mD0MFt>Lvkv~PppI0j4_7!TgW< zFJD&44Od`i#4GZfZK|>jPn<~UHuzhKKu&*0Erm%zB$rxd!Vdl!^7+Yjib2nTXL)D~ zu3@UeM$I0}46v`YOo&bx;&!KAkJb@^BLYVRjtCqPI3jRF;E2HgB>_j&E9zW-{?LL# WIY}5Pz3A!RG4*w?U#Zk~y!$VL)3;9m literal 0 HcmV?d00001 diff --git a/assets/tw/exercise/QUIT_CONFIRM.png b/assets/tw/combat_ui/QUIT.png similarity index 100% rename from assets/tw/exercise/QUIT_CONFIRM.png rename to assets/tw/combat_ui/QUIT.png diff --git a/module/combat/assets.py b/module/combat/assets.py index ce2e8e1dc6..9010ee6ee7 100644 --- a/module/combat/assets.py +++ b/module/combat/assets.py @@ -40,8 +40,6 @@ MOVE_LEFT_DOWN = Button(area={'cn': (67, 668, 112, 707), 'en': (67, 668, 112, 707), 'jp': (67, 668, 112, 707), 'tw': (67, 668, 112, 707)}, color={'cn': (65, 80, 100), 'en': (65, 80, 100), 'jp': (65, 80, 100), 'tw': (65, 80, 100)}, button={'cn': (67, 668, 112, 707), 'en': (67, 668, 112, 707), 'jp': (67, 668, 112, 707), 'tw': (67, 668, 112, 707)}, file={'cn': './assets/cn/combat/MOVE_LEFT_DOWN.png', 'en': './assets/en/combat/MOVE_LEFT_DOWN.png', 'jp': './assets/jp/combat/MOVE_LEFT_DOWN.png', 'tw': './assets/tw/combat/MOVE_LEFT_DOWN.png'}) NEW_SHIP = Button(area={'cn': (206, 87, 213, 93), 'en': (206, 87, 213, 93), 'jp': (206, 87, 213, 93), 'tw': (206, 87, 213, 93)}, color={'cn': (235, 171, 60), 'en': (235, 171, 60), 'jp': (235, 171, 60), 'tw': (235, 171, 60)}, button={'cn': (206, 87, 213, 93), 'en': (206, 87, 213, 93), 'jp': (206, 87, 213, 93), 'tw': (206, 87, 213, 93)}, file={'cn': './assets/cn/combat/NEW_SHIP.png', 'en': './assets/en/combat/NEW_SHIP.png', 'jp': './assets/jp/combat/NEW_SHIP.png', 'tw': './assets/tw/combat/NEW_SHIP.png'}) OPTS_INFO_D = Button(area={'cn': (602, 151, 703, 179), 'en': (565, 143, 692, 179), 'jp': (512, 154, 605, 176), 'tw': (602, 152, 702, 177)}, color={'cn': (157, 115, 123), 'en': (171, 116, 110), 'jp': (201, 187, 191), 'tw': (164, 130, 137)}, button={'cn': (583, 605, 677, 628), 'en': (590, 587, 627, 647), 'jp': (574, 596, 685, 635), 'tw': (583, 604, 676, 627)}, file={'cn': './assets/cn/combat/OPTS_INFO_D.png', 'en': './assets/en/combat/OPTS_INFO_D.png', 'jp': './assets/jp/combat/OPTS_INFO_D.png', 'tw': './assets/tw/combat/OPTS_INFO_D.png'}) -PAUSE = Button(area={'cn': (1217, 36, 1225, 59), 'en': (1155, 38, 1216, 51), 'jp': (1232, 36, 1240, 60), 'tw': (1217, 36, 1225, 59)}, color={'cn': (247, 243, 247), 'en': (164, 169, 181), 'jp': (244, 241, 246), 'tw': (247, 243, 247)}, button={'cn': (1157, 34, 1241, 61), 'en': (1136, 26, 1270, 63), 'jp': (1141, 38, 1220, 57), 'tw': (1157, 34, 1241, 61)}, file={'cn': './assets/cn/combat/PAUSE.png', 'en': './assets/en/combat/PAUSE.png', 'jp': './assets/jp/combat/PAUSE.png', 'tw': './assets/tw/combat/PAUSE.png'}) -PAUSE_DOUBLE_CHECK = Button(area={'cn': (1226, 35, 1231, 60), 'en': (1226, 35, 1231, 61), 'jp': (1226, 35, 1230, 60), 'tw': (1226, 35, 1231, 60)}, color={'cn': (96, 104, 136), 'en': (83, 98, 118), 'jp': (97, 102, 120), 'tw': (96, 104, 136)}, button={'cn': (1226, 35, 1231, 60), 'en': (1226, 35, 1231, 61), 'jp': (1226, 35, 1230, 60), 'tw': (1226, 35, 1231, 60)}, file={'cn': './assets/cn/combat/PAUSE_DOUBLE_CHECK.png', 'en': './assets/en/combat/PAUSE_DOUBLE_CHECK.png', 'jp': './assets/jp/combat/PAUSE_DOUBLE_CHECK.png', 'tw': './assets/tw/combat/PAUSE_DOUBLE_CHECK.png'}) READY_AIR_RAID = Button(area={'cn': (887, 618, 907, 628), 'en': (887, 618, 907, 628), 'jp': (887, 618, 907, 628), 'tw': (887, 618, 907, 628)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255), 'tw': (255, 255, 255)}, button={'cn': (887, 618, 907, 628), 'en': (887, 618, 907, 628), 'jp': (887, 618, 907, 628), 'tw': (887, 618, 907, 628)}, file={'cn': './assets/cn/combat/READY_AIR_RAID.png', 'en': './assets/en/combat/READY_AIR_RAID.png', 'jp': './assets/jp/combat/READY_AIR_RAID.png', 'tw': './assets/tw/combat/READY_AIR_RAID.png'}) READY_TORPEDO = Button(area={'cn': (1038, 611, 1046, 619), 'en': (1038, 611, 1046, 619), 'jp': (1038, 611, 1046, 619), 'tw': (1038, 611, 1046, 619)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255), 'tw': (255, 255, 255)}, button={'cn': (1038, 611, 1046, 619), 'en': (1038, 611, 1046, 619), 'jp': (1038, 611, 1046, 619), 'tw': (1038, 611, 1046, 619)}, file={'cn': './assets/cn/combat/READY_TORPEDO.png', 'en': './assets/en/combat/READY_TORPEDO.png', 'jp': './assets/jp/combat/READY_TORPEDO.png', 'tw': './assets/tw/combat/READY_TORPEDO.png'}) SUBMARINE_AVAILABLE_CHECK_1 = Button(area={'cn': (707, 660, 712, 665), 'en': (707, 660, 712, 665), 'jp': (707, 660, 712, 665), 'tw': (707, 660, 712, 665)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255), 'tw': (255, 255, 255)}, button={'cn': (707, 660, 712, 665), 'en': (707, 660, 712, 665), 'jp': (707, 660, 712, 665), 'tw': (707, 660, 712, 665)}, file={'cn': './assets/cn/combat/SUBMARINE_AVAILABLE_CHECK_1.png', 'en': './assets/en/combat/SUBMARINE_AVAILABLE_CHECK_1.png', 'jp': './assets/jp/combat/SUBMARINE_AVAILABLE_CHECK_1.png', 'tw': './assets/tw/combat/SUBMARINE_AVAILABLE_CHECK_1.png'}) diff --git a/module/combat/combat.py b/module/combat/combat.py index adacabf1e3..1efdc1a086 100644 --- a/module/combat/combat.py +++ b/module/combat/combat.py @@ -3,6 +3,7 @@ from module.base.timer import Timer from module.base.utils import get_color, color_similar from module.combat.assets import * +from module.combat_ui.assets import * from module.combat.combat_auto import CombatAuto from module.combat.combat_manual import CombatManual from module.combat.hp_balancer import HPBalancer @@ -81,13 +82,36 @@ def is_combat_executing(self): bool: """ self.device.stuck_record_add(PAUSE) - if self.config.SERVER in ['en']: - return PAUSE.match_luma(self.device.image, offset=(20, 20)) + if self.config.SERVER in ['cn', 'en']: + if PAUSE.match_luma(self.device.image, offset=(20, 20)): + return True else: color = get_color(self.device.image, PAUSE.area) if color_similar(color, PAUSE.color) or color_similar(color, (238, 244, 248)): if np.max(self.image_crop(PAUSE_DOUBLE_CHECK, copy=False)) < 153: return True + if PAUSE_New.match_luma(self.device.image, offset=(20, 20)): + return True + if PAUSE_Iridescent_Fantasy.match_luma(self.device.image, offset=(20, 20)): + return True + return False + + def handle_combat_quit(self, offset=(20, 20), interval=3): + timer = self.get_interval_timer(QUIT, interval=interval) + if not timer.reached(): + return False + if QUIT.match_luma(self.device.image, offset=offset): + self.device.click(QUIT) + timer.reset() + return True + if QUIT_New.match_luma(self.device.image, offset=offset): + self.device.click(QUIT_New) + timer.reset() + return True + if QUIT_Iridescent_Fantasy.match_luma(self.device.image, offset=offset): + self.device.click(QUIT_Iridescent_Fantasy) + timer.reset() + return True return False def ensure_combat_oil_loaded(self): diff --git a/module/combat_ui/assets.py b/module/combat_ui/assets.py new file mode 100644 index 0000000000..4e2ae99750 --- /dev/null +++ b/module/combat_ui/assets.py @@ -0,0 +1,13 @@ +from module.base.button import Button +from module.base.template import Template + +# This file was automatically generated by dev_tools/button_extract.py. +# Don't modify it manually. + +PAUSE = Button(area={'cn': (1158, 40, 1199, 58), 'en': (1155, 38, 1216, 51), 'jp': (1232, 36, 1240, 60), 'tw': (1217, 36, 1225, 59)}, color={'cn': (189, 190, 202), 'en': (164, 169, 181), 'jp': (244, 241, 246), 'tw': (247, 243, 247)}, button={'cn': (1157, 34, 1241, 61), 'en': (1136, 26, 1270, 63), 'jp': (1141, 38, 1220, 57), 'tw': (1157, 34, 1241, 61)}, file={'cn': './assets/cn/combat_ui/PAUSE.png', 'en': './assets/en/combat_ui/PAUSE.png', 'jp': './assets/jp/combat_ui/PAUSE.png', 'tw': './assets/tw/combat_ui/PAUSE.png'}) +PAUSE_DOUBLE_CHECK = Button(area={'cn': (1226, 35, 1231, 60), 'en': (1226, 35, 1231, 61), 'jp': (1226, 35, 1230, 60), 'tw': (1226, 35, 1231, 60)}, color={'cn': (96, 104, 136), 'en': (83, 98, 118), 'jp': (97, 102, 120), 'tw': (96, 104, 136)}, button={'cn': (1226, 35, 1231, 60), 'en': (1226, 35, 1231, 61), 'jp': (1226, 35, 1230, 60), 'tw': (1226, 35, 1231, 60)}, file={'cn': './assets/cn/combat_ui/PAUSE_DOUBLE_CHECK.png', 'en': './assets/en/combat_ui/PAUSE_DOUBLE_CHECK.png', 'jp': './assets/jp/combat_ui/PAUSE_DOUBLE_CHECK.png', 'tw': './assets/tw/combat_ui/PAUSE_DOUBLE_CHECK.png'}) +PAUSE_Iridescent_Fantasy = Button(area={'cn': (1232, 33, 1252, 57), 'en': (1232, 33, 1252, 57), 'jp': (1232, 33, 1252, 57), 'tw': (1232, 33, 1252, 57)}, color={'cn': (124, 139, 190), 'en': (124, 139, 190), 'jp': (124, 139, 190), 'tw': (124, 139, 190)}, button={'cn': (1232, 33, 1252, 57), 'en': (1232, 33, 1252, 57), 'jp': (1232, 33, 1252, 57), 'tw': (1232, 33, 1252, 57)}, file={'cn': './assets/cn/combat_ui/PAUSE_Iridescent_Fantasy.png', 'en': './assets/en/combat_ui/PAUSE_Iridescent_Fantasy.png', 'jp': './assets/jp/combat_ui/PAUSE_Iridescent_Fantasy.png', 'tw': './assets/tw/combat_ui/PAUSE_Iridescent_Fantasy.png'}) +PAUSE_New = Button(area={'cn': (1231, 29, 1253, 56), 'en': (1231, 29, 1253, 56), 'jp': (1231, 29, 1253, 56), 'tw': (1231, 29, 1253, 56)}, color={'cn': (156, 158, 166), 'en': (156, 158, 166), 'jp': (156, 158, 166), 'tw': (156, 158, 166)}, button={'cn': (1231, 29, 1253, 56), 'en': (1231, 29, 1253, 56), 'jp': (1231, 29, 1253, 56), 'tw': (1231, 29, 1253, 56)}, file={'cn': './assets/cn/combat_ui/PAUSE_New.png', 'en': './assets/en/combat_ui/PAUSE_New.png', 'jp': './assets/jp/combat_ui/PAUSE_New.png', 'tw': './assets/tw/combat_ui/PAUSE_New.png'}) +QUIT = Button(area={'cn': (420, 490, 593, 548), 'en': (459, 508, 582, 532), 'jp': (433, 490, 606, 547), 'tw': (433, 490, 606, 547)}, color={'cn': (199, 122, 114), 'en': (221, 177, 174), 'jp': (196, 120, 113), 'tw': (200, 126, 118)}, button={'cn': (420, 490, 593, 548), 'en': (459, 508, 582, 532), 'jp': (433, 490, 606, 547), 'tw': (433, 490, 606, 547)}, file={'cn': './assets/cn/combat_ui/QUIT.png', 'en': './assets/en/combat_ui/QUIT.png', 'jp': './assets/jp/combat_ui/QUIT.png', 'tw': './assets/tw/combat_ui/QUIT.png'}) +QUIT_Iridescent_Fantasy = Button(area={'cn': (391, 522, 464, 540), 'en': (391, 522, 464, 540), 'jp': (391, 522, 464, 540), 'tw': (391, 522, 464, 540)}, color={'cn': (121, 73, 79), 'en': (121, 73, 79), 'jp': (121, 73, 79), 'tw': (121, 73, 79)}, button={'cn': (391, 522, 464, 540), 'en': (391, 522, 464, 540), 'jp': (391, 522, 464, 540), 'tw': (391, 522, 464, 540)}, file={'cn': './assets/cn/combat_ui/QUIT_Iridescent_Fantasy.png', 'en': './assets/cn/combat_ui/QUIT_Iridescent_Fantasy.png', 'jp': './assets/cn/combat_ui/QUIT_Iridescent_Fantasy.png', 'tw': './assets/cn/combat_ui/QUIT_Iridescent_Fantasy.png'}) +QUIT_New = Button(area={'cn': (394, 506, 467, 524), 'en': (394, 506, 467, 524), 'jp': (394, 506, 467, 524), 'tw': (394, 506, 467, 524)}, color={'cn': (255, 180, 171), 'en': (255, 180, 171), 'jp': (255, 180, 171), 'tw': (255, 180, 171)}, button={'cn': (394, 506, 467, 524), 'en': (394, 506, 467, 524), 'jp': (394, 506, 467, 524), 'tw': (394, 506, 467, 524)}, file={'cn': './assets/cn/combat_ui/QUIT_New.png', 'en': './assets/cn/combat_ui/QUIT_New.png', 'jp': './assets/cn/combat_ui/QUIT_New.png', 'tw': './assets/cn/combat_ui/QUIT_New.png'}) diff --git a/module/exercise/assets.py b/module/exercise/assets.py index e14c1a0ada..b9e21bc9e8 100644 --- a/module/exercise/assets.py +++ b/module/exercise/assets.py @@ -18,5 +18,4 @@ OPPONENT_2 = Button(area={'cn': (348, 77, 560, 381), 'en': (348, 77, 562, 381), 'jp': (348, 77, 560, 381), 'tw': (348, 77, 560, 381)}, color={'cn': (105, 123, 149), 'en': (105, 122, 150), 'jp': (105, 123, 149), 'tw': (105, 123, 149)}, button={'cn': (348, 77, 560, 381), 'en': (348, 77, 562, 381), 'jp': (348, 77, 560, 381), 'tw': (348, 77, 560, 381)}, file={'cn': './assets/cn/exercise/OPPONENT_2.png', 'en': './assets/en/exercise/OPPONENT_2.png', 'jp': './assets/jp/exercise/OPPONENT_2.png', 'tw': './assets/tw/exercise/OPPONENT_2.png'}) OPPONENT_3 = Button(area={'cn': (592, 77, 804, 381), 'en': (592, 77, 806, 381), 'jp': (592, 77, 804, 381), 'tw': (592, 77, 804, 381)}, color={'cn': (106, 131, 158), 'en': (105, 129, 156), 'jp': (106, 131, 158), 'tw': (106, 131, 158)}, button={'cn': (592, 77, 804, 381), 'en': (592, 77, 806, 381), 'jp': (592, 77, 804, 381), 'tw': (592, 77, 804, 381)}, file={'cn': './assets/cn/exercise/OPPONENT_3.png', 'en': './assets/en/exercise/OPPONENT_3.png', 'jp': './assets/jp/exercise/OPPONENT_3.png', 'tw': './assets/tw/exercise/OPPONENT_3.png'}) OPPONENT_4 = Button(area={'cn': (836, 77, 1048, 381), 'en': (836, 77, 1050, 381), 'jp': (836, 77, 1048, 381), 'tw': (836, 77, 1048, 381)}, color={'cn': (103, 118, 141), 'en': (112, 127, 152), 'jp': (103, 118, 141), 'tw': (103, 118, 141)}, button={'cn': (836, 77, 1048, 381), 'en': (836, 77, 1050, 381), 'jp': (836, 77, 1048, 381), 'tw': (836, 77, 1048, 381)}, file={'cn': './assets/cn/exercise/OPPONENT_4.png', 'en': './assets/en/exercise/OPPONENT_4.png', 'jp': './assets/jp/exercise/OPPONENT_4.png', 'tw': './assets/tw/exercise/OPPONENT_4.png'}) -QUIT_CONFIRM = Button(area={'cn': (420, 490, 593, 548), 'en': (459, 508, 582, 532), 'jp': (433, 490, 606, 547), 'tw': (433, 490, 606, 547)}, color={'cn': (199, 122, 114), 'en': (221, 177, 174), 'jp': (196, 120, 113), 'tw': (200, 126, 118)}, button={'cn': (420, 490, 593, 548), 'en': (459, 508, 582, 532), 'jp': (433, 490, 606, 547), 'tw': (433, 490, 606, 547)}, file={'cn': './assets/cn/exercise/QUIT_CONFIRM.png', 'en': './assets/en/exercise/QUIT_CONFIRM.png', 'jp': './assets/jp/exercise/QUIT_CONFIRM.png', 'tw': './assets/tw/exercise/QUIT_CONFIRM.png'}) QUIT_RECONFIRM = Button(area={'cn': (703, 492, 877, 550), 'en': (731, 488, 846, 533), 'jp': (703, 482, 877, 539), 'tw': (754, 491, 825, 522)}, color={'cn': (195, 111, 102), 'en': (195, 112, 105), 'jp': (193, 112, 104), 'tw': (211, 158, 152)}, button={'cn': (703, 492, 877, 550), 'en': (731, 488, 846, 533), 'jp': (703, 482, 877, 539), 'tw': (703, 502, 876, 559)}, file={'cn': './assets/cn/exercise/QUIT_RECONFIRM.png', 'en': './assets/en/exercise/QUIT_RECONFIRM.png', 'jp': './assets/jp/exercise/QUIT_RECONFIRM.png', 'tw': './assets/tw/exercise/QUIT_RECONFIRM.png'}) diff --git a/module/exercise/combat.py b/module/exercise/combat.py index ca117bacc4..fb519e24db 100644 --- a/module/exercise/combat.py +++ b/module/exercise/combat.py @@ -1,4 +1,5 @@ from module.combat.combat import * +from module.combat.combat import PAUSE, QUIT from module.exercise.assets import * from module.exercise.equipment import ExerciseEquipment from module.exercise.hp_daemon import HpDaemon @@ -75,13 +76,13 @@ def _combat_execute(self): continue # Quit - if self.appear_then_click(QUIT_CONFIRM, offset=(20, 20), interval=5): + if self.handle_combat_quit(): pause_interval.reset() success = False end = True continue if self.appear_then_click(QUIT_RECONFIRM, offset=(20, 20), interval=5): - self.interval_reset(QUIT_CONFIRM) + self.interval_reset(QUIT) pause_interval.reset() continue if not end: diff --git a/module/os/map.py b/module/os/map.py index 9760ca54b9..310583f576 100644 --- a/module/os/map.py +++ b/module/os/map.py @@ -4,10 +4,10 @@ import inflection from module.base.timer import Timer -from module.combat.assets import PAUSE +from module.combat_ui.assets import PAUSE from module.config.utils import get_os_reset_remain from module.exception import CampaignEnd, GameTooManyClickError, MapWalkError, RequestHumanTakeover, ScriptError -from module.exercise.assets import QUIT_CONFIRM, QUIT_RECONFIRM +from module.exercise.assets import QUIT_RECONFIRM from module.handler.login import LoginHandler, MAINTENANCE_ANNOUNCE from module.logger import logger from module.map.map import Map @@ -558,7 +558,7 @@ def interrupt_auto_search(self, skip_first_screenshot=True): self.interval_reset(MAINTENANCE_ANNOUNCE) pause_interval.reset() continue - if self.appear_then_click(QUIT_CONFIRM, offset=(20, 20), interval=5): + if self.handle_combat_quit(): self.interval_reset(MAINTENANCE_ANNOUNCE) pause_interval.reset() continue