diff --git a/README.md b/README.md index 803fd8328..3fb3da653 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,14 @@ [English Readme](README_en.md) `Translation in progress` # AzurLaneAutoScript -Alas, an Azur Lane automation tool with GUI (Support CN and EN, can support other server). +Alas, an Azur Lane automation tool with GUI (Support CN, EN, JP, able to support other servers). -Alas, 一个带GUI的碧蓝航线脚本 (支持国服和国际服, 可以支持其他服务器). +Alas, 一个带GUI的碧蓝航线脚本 (支持国服, 国际服, 日服, 可以支持其他服务器). EN support, Thanks **[@whoamikyo](https://github.com/whoamikyo)** +JP support, Thanks **[@ferina8-14](https://github.com/ferina8-14)**, some features might not work + ![gui](doc/README.assets/gui.png) diff --git a/alas_jp.pyw b/alas_jp.pyw new file mode 100644 index 000000000..cfada79b8 --- /dev/null +++ b/alas_jp.pyw @@ -0,0 +1,8 @@ +import module.config.server as server + +server.server = 'jp' + +from module.config.argparser_jp import main + +if __name__ == '__main__': + main() diff --git a/assets/jp/campaign/CHAPTER_NEXT.png b/assets/jp/campaign/CHAPTER_NEXT.png new file mode 100644 index 000000000..0e6098bf1 Binary files /dev/null and b/assets/jp/campaign/CHAPTER_NEXT.png differ diff --git a/assets/jp/campaign/CHAPTER_PREV.png b/assets/jp/campaign/CHAPTER_PREV.png new file mode 100644 index 000000000..2939d8210 Binary files /dev/null and b/assets/jp/campaign/CHAPTER_PREV.png differ diff --git a/assets/jp/campaign/MODE_CHANGE.BUTTON.png b/assets/jp/campaign/MODE_CHANGE.BUTTON.png new file mode 100644 index 000000000..338355132 Binary files /dev/null and b/assets/jp/campaign/MODE_CHANGE.BUTTON.png differ diff --git a/assets/jp/campaign/MODE_CHANGE.png b/assets/jp/campaign/MODE_CHANGE.png new file mode 100644 index 000000000..6216b38de Binary files /dev/null and b/assets/jp/campaign/MODE_CHANGE.png differ diff --git a/assets/jp/campaign/OCR_OIL.png b/assets/jp/campaign/OCR_OIL.png new file mode 100644 index 000000000..eb88b90d9 Binary files /dev/null and b/assets/jp/campaign/OCR_OIL.png differ diff --git a/assets/jp/combat/AUTOMATION_CONFIRM.png b/assets/jp/combat/AUTOMATION_CONFIRM.png new file mode 100644 index 000000000..81c532d34 Binary files /dev/null and b/assets/jp/combat/AUTOMATION_CONFIRM.png differ diff --git a/assets/jp/combat/AUTOMATION_CONFIRM_CHECK.png b/assets/jp/combat/AUTOMATION_CONFIRM_CHECK.png new file mode 100644 index 000000000..a039d40a4 Binary files /dev/null and b/assets/jp/combat/AUTOMATION_CONFIRM_CHECK.png differ diff --git a/assets/jp/combat/AUTOMATION_OFF.png b/assets/jp/combat/AUTOMATION_OFF.png new file mode 100644 index 000000000..e79f6a018 Binary files /dev/null and b/assets/jp/combat/AUTOMATION_OFF.png differ diff --git a/assets/jp/combat/AUTOMATION_ON.png b/assets/jp/combat/AUTOMATION_ON.png new file mode 100644 index 000000000..4a254abb1 Binary files /dev/null and b/assets/jp/combat/AUTOMATION_ON.png differ diff --git a/assets/jp/combat/AUTOMATION_SWITCH.png b/assets/jp/combat/AUTOMATION_SWITCH.png new file mode 100644 index 000000000..d4228fa14 Binary files /dev/null and b/assets/jp/combat/AUTOMATION_SWITCH.png differ diff --git a/assets/jp/combat/BATTLE_PREPARATION.png b/assets/jp/combat/BATTLE_PREPARATION.png new file mode 100644 index 000000000..881530445 Binary files /dev/null and b/assets/jp/combat/BATTLE_PREPARATION.png differ diff --git a/assets/jp/combat/BATTLE_PREPARATION_WITH_OVERLAY.png b/assets/jp/combat/BATTLE_PREPARATION_WITH_OVERLAY.png new file mode 100644 index 000000000..fc7399d76 Binary files /dev/null and b/assets/jp/combat/BATTLE_PREPARATION_WITH_OVERLAY.png differ diff --git a/assets/jp/combat/BATTLE_STATUS_A.BUTTON.png b/assets/jp/combat/BATTLE_STATUS_A.BUTTON.png new file mode 100644 index 000000000..882e8a8f0 Binary files /dev/null and b/assets/jp/combat/BATTLE_STATUS_A.BUTTON.png differ diff --git a/assets/jp/combat/BATTLE_STATUS_A.png b/assets/jp/combat/BATTLE_STATUS_A.png new file mode 100644 index 000000000..89c0f737e Binary files /dev/null and b/assets/jp/combat/BATTLE_STATUS_A.png differ diff --git a/assets/jp/combat/BATTLE_STATUS_B.png b/assets/jp/combat/BATTLE_STATUS_B.png new file mode 100644 index 000000000..7c3903743 Binary files /dev/null and b/assets/jp/combat/BATTLE_STATUS_B.png differ diff --git a/assets/jp/combat/BATTLE_STATUS_C.png b/assets/jp/combat/BATTLE_STATUS_C.png new file mode 100644 index 000000000..3b0066efc Binary files /dev/null and b/assets/jp/combat/BATTLE_STATUS_C.png differ diff --git a/assets/jp/combat/BATTLE_STATUS_D.png b/assets/jp/combat/BATTLE_STATUS_D.png new file mode 100644 index 000000000..3b0066efc Binary files /dev/null and b/assets/jp/combat/BATTLE_STATUS_D.png differ diff --git a/assets/jp/combat/BATTLE_STATUS_S.BUTTON.png b/assets/jp/combat/BATTLE_STATUS_S.BUTTON.png new file mode 100644 index 000000000..882e8a8f0 Binary files /dev/null and b/assets/jp/combat/BATTLE_STATUS_S.BUTTON.png differ diff --git a/assets/jp/combat/BATTLE_STATUS_S.png b/assets/jp/combat/BATTLE_STATUS_S.png new file mode 100644 index 000000000..8e7c3b657 Binary files /dev/null and b/assets/jp/combat/BATTLE_STATUS_S.png differ diff --git a/assets/jp/combat/COMBAT_AUTO.png b/assets/jp/combat/COMBAT_AUTO.png new file mode 100644 index 000000000..80a7d2601 Binary files /dev/null and b/assets/jp/combat/COMBAT_AUTO.png differ diff --git a/assets/jp/combat/COMBAT_AUTO_SWITCH.png b/assets/jp/combat/COMBAT_AUTO_SWITCH.png new file mode 100644 index 000000000..f073f50c6 Binary files /dev/null and b/assets/jp/combat/COMBAT_AUTO_SWITCH.png differ diff --git a/assets/jp/combat/EMERGENCY_REPAIR_AVAILABLE.BUTTON.png b/assets/jp/combat/EMERGENCY_REPAIR_AVAILABLE.BUTTON.png new file mode 100644 index 000000000..92aef3a5a Binary files /dev/null and b/assets/jp/combat/EMERGENCY_REPAIR_AVAILABLE.BUTTON.png differ diff --git a/assets/jp/combat/EMERGENCY_REPAIR_AVAILABLE.png b/assets/jp/combat/EMERGENCY_REPAIR_AVAILABLE.png new file mode 100644 index 000000000..9ee30b209 Binary files /dev/null and b/assets/jp/combat/EMERGENCY_REPAIR_AVAILABLE.png differ diff --git a/assets/jp/combat/EMERGENCY_REPAIR_CONFIRM.png b/assets/jp/combat/EMERGENCY_REPAIR_CONFIRM.png new file mode 100644 index 000000000..47f7cc6f8 Binary files /dev/null and b/assets/jp/combat/EMERGENCY_REPAIR_CONFIRM.png differ diff --git a/assets/jp/combat/EXP_INFO_A.BUTTON.png b/assets/jp/combat/EXP_INFO_A.BUTTON.png new file mode 100644 index 000000000..882e8a8f0 Binary files /dev/null and b/assets/jp/combat/EXP_INFO_A.BUTTON.png differ diff --git a/assets/jp/combat/EXP_INFO_A.png b/assets/jp/combat/EXP_INFO_A.png new file mode 100644 index 000000000..d6a847475 Binary files /dev/null and b/assets/jp/combat/EXP_INFO_A.png differ diff --git a/assets/jp/combat/EXP_INFO_B.png b/assets/jp/combat/EXP_INFO_B.png new file mode 100644 index 000000000..65c5cae42 Binary files /dev/null and b/assets/jp/combat/EXP_INFO_B.png differ diff --git a/assets/jp/combat/EXP_INFO_D.png b/assets/jp/combat/EXP_INFO_D.png new file mode 100644 index 000000000..8ee6a25df Binary files /dev/null and b/assets/jp/combat/EXP_INFO_D.png differ diff --git a/assets/jp/combat/EXP_INFO_S.BUTTON.png b/assets/jp/combat/EXP_INFO_S.BUTTON.png new file mode 100644 index 000000000..882e8a8f0 Binary files /dev/null and b/assets/jp/combat/EXP_INFO_S.BUTTON.png differ diff --git a/assets/jp/combat/EXP_INFO_S.png b/assets/jp/combat/EXP_INFO_S.png new file mode 100644 index 000000000..f12e5027a Binary files /dev/null and b/assets/jp/combat/EXP_INFO_S.png differ diff --git a/assets/jp/combat/GET_ITEMS_1.BUTTON.png b/assets/jp/combat/GET_ITEMS_1.BUTTON.png new file mode 100644 index 000000000..882e8a8f0 Binary files /dev/null and b/assets/jp/combat/GET_ITEMS_1.BUTTON.png differ diff --git a/assets/jp/combat/GET_ITEMS_1.png b/assets/jp/combat/GET_ITEMS_1.png new file mode 100644 index 000000000..1c68ab63c Binary files /dev/null and b/assets/jp/combat/GET_ITEMS_1.png differ diff --git a/assets/jp/combat/GET_ITEMS_2.BUTTON.png b/assets/jp/combat/GET_ITEMS_2.BUTTON.png new file mode 100644 index 000000000..882e8a8f0 Binary files /dev/null and b/assets/jp/combat/GET_ITEMS_2.BUTTON.png differ diff --git a/assets/jp/combat/GET_ITEMS_2.png b/assets/jp/combat/GET_ITEMS_2.png new file mode 100644 index 000000000..91d02538b Binary files /dev/null and b/assets/jp/combat/GET_ITEMS_2.png differ diff --git a/assets/jp/combat/GET_SHIP.BUTTON.png b/assets/jp/combat/GET_SHIP.BUTTON.png new file mode 100644 index 000000000..882e8a8f0 Binary files /dev/null and b/assets/jp/combat/GET_SHIP.BUTTON.png differ diff --git a/assets/jp/combat/GET_SHIP.png b/assets/jp/combat/GET_SHIP.png new file mode 100644 index 000000000..84c6baa15 Binary files /dev/null and b/assets/jp/combat/GET_SHIP.png differ diff --git a/assets/jp/combat/LOADING_BAR.png b/assets/jp/combat/LOADING_BAR.png new file mode 100644 index 000000000..a06fdb614 Binary files /dev/null and b/assets/jp/combat/LOADING_BAR.png differ diff --git a/assets/jp/combat/MOVE_DOWN.png b/assets/jp/combat/MOVE_DOWN.png new file mode 100644 index 000000000..f93750dab Binary files /dev/null and b/assets/jp/combat/MOVE_DOWN.png differ diff --git a/assets/jp/combat/OPTS_INFO_D.png b/assets/jp/combat/OPTS_INFO_D.png new file mode 100644 index 000000000..8ac139ac3 Binary files /dev/null and b/assets/jp/combat/OPTS_INFO_D.png differ diff --git a/assets/jp/combat/PAUSE.BUTTON.png b/assets/jp/combat/PAUSE.BUTTON.png new file mode 100644 index 000000000..e2d47ec0a Binary files /dev/null and b/assets/jp/combat/PAUSE.BUTTON.png differ diff --git a/assets/jp/combat/PAUSE.png b/assets/jp/combat/PAUSE.png new file mode 100644 index 000000000..1cad0e513 Binary files /dev/null and b/assets/jp/combat/PAUSE.png differ diff --git a/assets/jp/combat/PAUSE_DOUBLE_CHECK.png b/assets/jp/combat/PAUSE_DOUBLE_CHECK.png new file mode 100644 index 000000000..c8f5a7a50 Binary files /dev/null and b/assets/jp/combat/PAUSE_DOUBLE_CHECK.png differ diff --git a/assets/jp/combat/READY_AIR_RAID.png b/assets/jp/combat/READY_AIR_RAID.png new file mode 100644 index 000000000..33c51121b Binary files /dev/null and b/assets/jp/combat/READY_AIR_RAID.png differ diff --git a/assets/jp/combat/READY_TORPEDO.png b/assets/jp/combat/READY_TORPEDO.png new file mode 100644 index 000000000..99d5f326c Binary files /dev/null and b/assets/jp/combat/READY_TORPEDO.png differ diff --git a/assets/jp/combat/SUBMARINE_AVAILABLE_CHECK_1.png b/assets/jp/combat/SUBMARINE_AVAILABLE_CHECK_1.png new file mode 100644 index 000000000..0d42098a9 Binary files /dev/null and b/assets/jp/combat/SUBMARINE_AVAILABLE_CHECK_1.png differ diff --git a/assets/jp/combat/SUBMARINE_AVAILABLE_CHECK_2.png b/assets/jp/combat/SUBMARINE_AVAILABLE_CHECK_2.png new file mode 100644 index 000000000..1eb0a4dca Binary files /dev/null and b/assets/jp/combat/SUBMARINE_AVAILABLE_CHECK_2.png differ diff --git a/assets/jp/combat/SUBMARINE_CALLED.png b/assets/jp/combat/SUBMARINE_CALLED.png new file mode 100644 index 000000000..a9e4626f1 Binary files /dev/null and b/assets/jp/combat/SUBMARINE_CALLED.png differ diff --git a/assets/jp/combat/SUBMARINE_READY.png b/assets/jp/combat/SUBMARINE_READY.png new file mode 100644 index 000000000..cc0cb870b Binary files /dev/null and b/assets/jp/combat/SUBMARINE_READY.png differ diff --git a/assets/jp/daemon/AMBUSH_AVOID.BUTTON.png b/assets/jp/daemon/AMBUSH_AVOID.BUTTON.png new file mode 100644 index 000000000..5f361911c Binary files /dev/null and b/assets/jp/daemon/AMBUSH_AVOID.BUTTON.png differ diff --git a/assets/jp/daemon/AMBUSH_AVOID.png b/assets/jp/daemon/AMBUSH_AVOID.png new file mode 100644 index 000000000..8971c282f Binary files /dev/null and b/assets/jp/daemon/AMBUSH_AVOID.png differ diff --git a/assets/jp/daemon/AT_SEA.png b/assets/jp/daemon/AT_SEA.png new file mode 100644 index 000000000..fde462084 Binary files /dev/null and b/assets/jp/daemon/AT_SEA.png differ diff --git a/assets/jp/daemon/FLEET_PREPARATION.png b/assets/jp/daemon/FLEET_PREPARATION.png new file mode 100644 index 000000000..a577b26e1 Binary files /dev/null and b/assets/jp/daemon/FLEET_PREPARATION.png differ diff --git a/assets/jp/daemon/GET_EMERGENCY_REPAIR.png b/assets/jp/daemon/GET_EMERGENCY_REPAIR.png new file mode 100644 index 000000000..edc09b080 Binary files /dev/null and b/assets/jp/daemon/GET_EMERGENCY_REPAIR.png differ diff --git a/assets/jp/daemon/GET_ITEMS.BUTTON.png b/assets/jp/daemon/GET_ITEMS.BUTTON.png new file mode 100644 index 000000000..9f7e28716 Binary files /dev/null and b/assets/jp/daemon/GET_ITEMS.BUTTON.png differ diff --git a/assets/jp/daemon/GET_ITEMS.png b/assets/jp/daemon/GET_ITEMS.png new file mode 100644 index 000000000..1c68ab63c Binary files /dev/null and b/assets/jp/daemon/GET_ITEMS.png differ diff --git a/assets/jp/daemon/MAP_PREPARATION.png b/assets/jp/daemon/MAP_PREPARATION.png new file mode 100644 index 000000000..60afecfdf Binary files /dev/null and b/assets/jp/daemon/MAP_PREPARATION.png differ diff --git a/assets/jp/daemon/STRATEGY_OPEN.BUTTON.png b/assets/jp/daemon/STRATEGY_OPEN.BUTTON.png new file mode 100644 index 000000000..5fc85421c Binary files /dev/null and b/assets/jp/daemon/STRATEGY_OPEN.BUTTON.png differ diff --git a/assets/jp/daemon/STRATEGY_OPEN.png b/assets/jp/daemon/STRATEGY_OPEN.png new file mode 100644 index 000000000..66a8bf721 Binary files /dev/null and b/assets/jp/daemon/STRATEGY_OPEN.png differ diff --git a/assets/jp/daily/DAILY_ACTIVE.png b/assets/jp/daily/DAILY_ACTIVE.png new file mode 100644 index 000000000..4a3c4977d Binary files /dev/null and b/assets/jp/daily/DAILY_ACTIVE.png differ diff --git a/assets/jp/daily/DAILY_ENTER.png b/assets/jp/daily/DAILY_ENTER.png new file mode 100644 index 000000000..3a03d0f52 Binary files /dev/null and b/assets/jp/daily/DAILY_ENTER.png differ diff --git a/assets/jp/daily/DAILY_ENTER_CHECK.png b/assets/jp/daily/DAILY_ENTER_CHECK.png new file mode 100644 index 000000000..b3092dc8a Binary files /dev/null and b/assets/jp/daily/DAILY_ENTER_CHECK.png differ diff --git a/assets/jp/daily/DAILY_FLEET_NEXT.png b/assets/jp/daily/DAILY_FLEET_NEXT.png new file mode 100644 index 000000000..e29006ed7 Binary files /dev/null and b/assets/jp/daily/DAILY_FLEET_NEXT.png differ diff --git a/assets/jp/daily/DAILY_FLEET_PREV.png b/assets/jp/daily/DAILY_FLEET_PREV.png new file mode 100644 index 000000000..7b82a1202 Binary files /dev/null and b/assets/jp/daily/DAILY_FLEET_PREV.png differ diff --git a/assets/jp/daily/DAILY_MISSION_1.png b/assets/jp/daily/DAILY_MISSION_1.png new file mode 100644 index 000000000..70e8da59c Binary files /dev/null and b/assets/jp/daily/DAILY_MISSION_1.png differ diff --git a/assets/jp/daily/DAILY_MISSION_2.png b/assets/jp/daily/DAILY_MISSION_2.png new file mode 100644 index 000000000..0a6c1ae45 Binary files /dev/null and b/assets/jp/daily/DAILY_MISSION_2.png differ diff --git a/assets/jp/daily/DAILY_MISSION_3.png b/assets/jp/daily/DAILY_MISSION_3.png new file mode 100644 index 000000000..d56755a77 Binary files /dev/null and b/assets/jp/daily/DAILY_MISSION_3.png differ diff --git a/assets/jp/daily/DAILY_NEXT.png b/assets/jp/daily/DAILY_NEXT.png new file mode 100644 index 000000000..93cc2a3f0 Binary files /dev/null and b/assets/jp/daily/DAILY_NEXT.png differ diff --git a/assets/jp/daily/DAILY_PREV.png b/assets/jp/daily/DAILY_PREV.png new file mode 100644 index 000000000..c43fadc88 Binary files /dev/null and b/assets/jp/daily/DAILY_PREV.png differ diff --git a/assets/jp/daily/OCR_DAILY_FLEET_INDEX.png b/assets/jp/daily/OCR_DAILY_FLEET_INDEX.png new file mode 100644 index 000000000..0831d8bf8 Binary files /dev/null and b/assets/jp/daily/OCR_DAILY_FLEET_INDEX.png differ diff --git a/assets/jp/daily/OCR_REMAIN.png b/assets/jp/daily/OCR_REMAIN.png new file mode 100644 index 000000000..7e602a20b Binary files /dev/null and b/assets/jp/daily/OCR_REMAIN.png differ diff --git a/assets/jp/equipment/EQUIPMENT_OPEN.png b/assets/jp/equipment/EQUIPMENT_OPEN.png new file mode 100644 index 000000000..37bc2f569 Binary files /dev/null and b/assets/jp/equipment/EQUIPMENT_OPEN.png differ diff --git a/assets/jp/equipment/EQUIP_1.png b/assets/jp/equipment/EQUIP_1.png new file mode 100644 index 000000000..eb33b6800 Binary files /dev/null and b/assets/jp/equipment/EQUIP_1.png differ diff --git a/assets/jp/equipment/EQUIP_2.png b/assets/jp/equipment/EQUIP_2.png new file mode 100644 index 000000000..6c98373db Binary files /dev/null and b/assets/jp/equipment/EQUIP_2.png differ diff --git a/assets/jp/equipment/EQUIP_3.png b/assets/jp/equipment/EQUIP_3.png new file mode 100644 index 000000000..c8fd42943 Binary files /dev/null and b/assets/jp/equipment/EQUIP_3.png differ diff --git a/assets/jp/equipment/EQUIP_OFF.png b/assets/jp/equipment/EQUIP_OFF.png new file mode 100644 index 000000000..b2c6017e4 Binary files /dev/null and b/assets/jp/equipment/EQUIP_OFF.png differ diff --git a/assets/jp/equipment/FLEET_ENTER.png b/assets/jp/equipment/FLEET_ENTER.png new file mode 100644 index 000000000..04eb03415 Binary files /dev/null and b/assets/jp/equipment/FLEET_ENTER.png differ diff --git a/assets/jp/equipment/FLEET_NEXT.png b/assets/jp/equipment/FLEET_NEXT.png new file mode 100644 index 000000000..19839f69f Binary files /dev/null and b/assets/jp/equipment/FLEET_NEXT.png differ diff --git a/assets/jp/equipment/FLEET_PREV.png b/assets/jp/equipment/FLEET_PREV.png new file mode 100644 index 000000000..7d05eb729 Binary files /dev/null and b/assets/jp/equipment/FLEET_PREV.png differ diff --git a/assets/jp/equipment/OCR_FLEET_INDEX.png b/assets/jp/equipment/OCR_FLEET_INDEX.png new file mode 100644 index 000000000..3ac28cfb2 Binary files /dev/null and b/assets/jp/equipment/OCR_FLEET_INDEX.png differ diff --git a/assets/jp/equipment/SWIPE_AREA.png b/assets/jp/equipment/SWIPE_AREA.png new file mode 100644 index 000000000..bd1a0ef0f Binary files /dev/null and b/assets/jp/equipment/SWIPE_AREA.png differ diff --git a/assets/jp/equipment/SWIPE_CHECK.png b/assets/jp/equipment/SWIPE_CHECK.png new file mode 100644 index 000000000..ba1d40dbd Binary files /dev/null and b/assets/jp/equipment/SWIPE_CHECK.png differ diff --git a/assets/jp/exercise/EQUIP_EDIT_ACTIVE.png b/assets/jp/exercise/EQUIP_EDIT_ACTIVE.png new file mode 100644 index 000000000..9d8b1e64e Binary files /dev/null and b/assets/jp/exercise/EQUIP_EDIT_ACTIVE.png differ diff --git a/assets/jp/exercise/EQUIP_EDIT_INACTIVE.png b/assets/jp/exercise/EQUIP_EDIT_INACTIVE.png new file mode 100644 index 000000000..278f6f4ba Binary files /dev/null and b/assets/jp/exercise/EQUIP_EDIT_INACTIVE.png differ diff --git a/assets/jp/exercise/EQUIP_ENTER.png b/assets/jp/exercise/EQUIP_ENTER.png new file mode 100644 index 000000000..e341ff5fa Binary files /dev/null and b/assets/jp/exercise/EQUIP_ENTER.png differ diff --git a/assets/jp/exercise/EXERCISE_PREPARATION.png b/assets/jp/exercise/EXERCISE_PREPARATION.png new file mode 100644 index 000000000..cfe1b3e41 Binary files /dev/null and b/assets/jp/exercise/EXERCISE_PREPARATION.png differ diff --git a/assets/jp/exercise/NEW_OPPONENT.png b/assets/jp/exercise/NEW_OPPONENT.png new file mode 100644 index 000000000..7e409e733 Binary files /dev/null and b/assets/jp/exercise/NEW_OPPONENT.png differ diff --git a/assets/jp/exercise/OCR_EXERCISE_REMAIN.png b/assets/jp/exercise/OCR_EXERCISE_REMAIN.png new file mode 100644 index 000000000..976c1502c Binary files /dev/null and b/assets/jp/exercise/OCR_EXERCISE_REMAIN.png differ diff --git a/assets/jp/exercise/OPPONENT_1.png b/assets/jp/exercise/OPPONENT_1.png new file mode 100644 index 000000000..c4d3792ed Binary files /dev/null and b/assets/jp/exercise/OPPONENT_1.png differ diff --git a/assets/jp/exercise/OPPONENT_2.png b/assets/jp/exercise/OPPONENT_2.png new file mode 100644 index 000000000..889e77ad7 Binary files /dev/null and b/assets/jp/exercise/OPPONENT_2.png differ diff --git a/assets/jp/exercise/OPPONENT_3.png b/assets/jp/exercise/OPPONENT_3.png new file mode 100644 index 000000000..f1c858a9a Binary files /dev/null and b/assets/jp/exercise/OPPONENT_3.png differ diff --git a/assets/jp/exercise/OPPONENT_4.png b/assets/jp/exercise/OPPONENT_4.png new file mode 100644 index 000000000..9fdb28edc Binary files /dev/null and b/assets/jp/exercise/OPPONENT_4.png differ diff --git a/assets/jp/exercise/QUIT_CONFIRM.png b/assets/jp/exercise/QUIT_CONFIRM.png new file mode 100644 index 000000000..b399038ad Binary files /dev/null and b/assets/jp/exercise/QUIT_CONFIRM.png differ diff --git a/assets/jp/exercise/QUIT_RECONFIRM.png b/assets/jp/exercise/QUIT_RECONFIRM.png new file mode 100644 index 000000000..fd34c5e40 Binary files /dev/null and b/assets/jp/exercise/QUIT_RECONFIRM.png differ diff --git a/assets/jp/handler/FAST_FORWARD_OFF.png b/assets/jp/handler/FAST_FORWARD_OFF.png new file mode 100644 index 000000000..14ef2f032 Binary files /dev/null and b/assets/jp/handler/FAST_FORWARD_OFF.png differ diff --git a/assets/jp/handler/FAST_FORWARD_ON.png b/assets/jp/handler/FAST_FORWARD_ON.png new file mode 100644 index 000000000..baf68c776 Binary files /dev/null and b/assets/jp/handler/FAST_FORWARD_ON.png differ diff --git a/assets/jp/handler/FLEET_LOCKED.png b/assets/jp/handler/FLEET_LOCKED.png new file mode 100644 index 000000000..b15e65421 Binary files /dev/null and b/assets/jp/handler/FLEET_LOCKED.png differ diff --git a/assets/jp/handler/FLEET_UNLOCKED.png b/assets/jp/handler/FLEET_UNLOCKED.png new file mode 100644 index 000000000..040ab2871 Binary files /dev/null and b/assets/jp/handler/FLEET_UNLOCKED.png differ diff --git a/assets/jp/handler/FORMATION_1.png b/assets/jp/handler/FORMATION_1.png new file mode 100644 index 000000000..621645902 Binary files /dev/null and b/assets/jp/handler/FORMATION_1.png differ diff --git a/assets/jp/handler/FORMATION_2.png b/assets/jp/handler/FORMATION_2.png new file mode 100644 index 000000000..bae9a30ca Binary files /dev/null and b/assets/jp/handler/FORMATION_2.png differ diff --git a/assets/jp/handler/FORMATION_3.png b/assets/jp/handler/FORMATION_3.png new file mode 100644 index 000000000..c43781a06 Binary files /dev/null and b/assets/jp/handler/FORMATION_3.png differ diff --git a/assets/jp/handler/FORMATION_LOCATION.png b/assets/jp/handler/FORMATION_LOCATION.png new file mode 100644 index 000000000..f91299cc0 Binary files /dev/null and b/assets/jp/handler/FORMATION_LOCATION.png differ diff --git a/assets/jp/handler/GET_AMMO.png b/assets/jp/handler/GET_AMMO.png new file mode 100644 index 000000000..4532cb32c Binary files /dev/null and b/assets/jp/handler/GET_AMMO.png differ diff --git a/assets/jp/handler/GET_ITEMS_1.BUTTON.png b/assets/jp/handler/GET_ITEMS_1.BUTTON.png new file mode 100644 index 000000000..78e26346d Binary files /dev/null and b/assets/jp/handler/GET_ITEMS_1.BUTTON.png differ diff --git a/assets/jp/handler/GET_ITEMS_1.png b/assets/jp/handler/GET_ITEMS_1.png new file mode 100644 index 000000000..1c68ab63c Binary files /dev/null and b/assets/jp/handler/GET_ITEMS_1.png differ diff --git a/assets/jp/handler/GET_MISSION.png b/assets/jp/handler/GET_MISSION.png new file mode 100644 index 000000000..0945c8e93 Binary files /dev/null and b/assets/jp/handler/GET_MISSION.png differ diff --git a/assets/jp/handler/INFO_BAR_1.png b/assets/jp/handler/INFO_BAR_1.png new file mode 100644 index 000000000..9f1884161 Binary files /dev/null and b/assets/jp/handler/INFO_BAR_1.png differ diff --git a/assets/jp/handler/INFO_BAR_2.png b/assets/jp/handler/INFO_BAR_2.png new file mode 100644 index 000000000..016291130 Binary files /dev/null and b/assets/jp/handler/INFO_BAR_2.png differ diff --git a/assets/jp/handler/INFO_BAR_3.png b/assets/jp/handler/INFO_BAR_3.png new file mode 100644 index 000000000..6bb78cec1 Binary files /dev/null and b/assets/jp/handler/INFO_BAR_3.png differ diff --git a/assets/jp/handler/IN_MAP.png b/assets/jp/handler/IN_MAP.png new file mode 100644 index 000000000..78d445f9a Binary files /dev/null and b/assets/jp/handler/IN_MAP.png differ diff --git a/assets/jp/handler/IN_STAGE.png b/assets/jp/handler/IN_STAGE.png new file mode 100644 index 000000000..d42c05cc3 Binary files /dev/null and b/assets/jp/handler/IN_STAGE.png differ diff --git a/assets/jp/handler/LOGIN_ANNOUNCE.png b/assets/jp/handler/LOGIN_ANNOUNCE.png new file mode 100644 index 000000000..7ded6d0fa Binary files /dev/null and b/assets/jp/handler/LOGIN_ANNOUNCE.png differ diff --git a/assets/jp/handler/LOGIN_CHECK.BUTTON.png b/assets/jp/handler/LOGIN_CHECK.BUTTON.png new file mode 100644 index 000000000..39af3c6f3 Binary files /dev/null and b/assets/jp/handler/LOGIN_CHECK.BUTTON.png differ diff --git a/assets/jp/handler/LOGIN_CHECK.png b/assets/jp/handler/LOGIN_CHECK.png new file mode 100644 index 000000000..e3e429cbf Binary files /dev/null and b/assets/jp/handler/LOGIN_CHECK.png differ diff --git a/assets/jp/handler/LOGIN_CONFIRM.png b/assets/jp/handler/LOGIN_CONFIRM.png new file mode 100644 index 000000000..bb6b94060 Binary files /dev/null and b/assets/jp/handler/LOGIN_CONFIRM.png differ diff --git a/assets/jp/handler/LOGIN_GAME_UPDATE.png b/assets/jp/handler/LOGIN_GAME_UPDATE.png new file mode 100644 index 000000000..3eaa5225b Binary files /dev/null and b/assets/jp/handler/LOGIN_GAME_UPDATE.png differ diff --git a/assets/jp/handler/LOGIN_RETURN_SIGN.png b/assets/jp/handler/LOGIN_RETURN_SIGN.png new file mode 100644 index 000000000..d05da4f7a Binary files /dev/null and b/assets/jp/handler/LOGIN_RETURN_SIGN.png differ diff --git a/assets/jp/handler/MAP_AIR_RAID.png b/assets/jp/handler/MAP_AIR_RAID.png new file mode 100644 index 000000000..a1ffb384a Binary files /dev/null and b/assets/jp/handler/MAP_AIR_RAID.png differ diff --git a/assets/jp/handler/MAP_AMBUSH.png b/assets/jp/handler/MAP_AMBUSH.png new file mode 100644 index 000000000..3f8ff115f Binary files /dev/null and b/assets/jp/handler/MAP_AMBUSH.png differ diff --git a/assets/jp/handler/MAP_AMBUSH_EVADE.BUTTON.png b/assets/jp/handler/MAP_AMBUSH_EVADE.BUTTON.png new file mode 100644 index 000000000..d247de207 Binary files /dev/null and b/assets/jp/handler/MAP_AMBUSH_EVADE.BUTTON.png differ diff --git a/assets/jp/handler/MAP_AMBUSH_EVADE.png b/assets/jp/handler/MAP_AMBUSH_EVADE.png new file mode 100644 index 000000000..25bda9864 Binary files /dev/null and b/assets/jp/handler/MAP_AMBUSH_EVADE.png differ diff --git a/assets/jp/handler/MAP_BUFF.png b/assets/jp/handler/MAP_BUFF.png new file mode 100644 index 000000000..f91299cc0 Binary files /dev/null and b/assets/jp/handler/MAP_BUFF.png differ diff --git a/assets/jp/handler/MAP_CLEAR_PERCENTAGE.png b/assets/jp/handler/MAP_CLEAR_PERCENTAGE.png new file mode 100644 index 000000000..600f6103c Binary files /dev/null and b/assets/jp/handler/MAP_CLEAR_PERCENTAGE.png differ diff --git a/assets/jp/handler/MAP_ENEMY_SEARCHING.png b/assets/jp/handler/MAP_ENEMY_SEARCHING.png new file mode 100644 index 000000000..56c0cd671 Binary files /dev/null and b/assets/jp/handler/MAP_ENEMY_SEARCHING.png differ diff --git a/assets/jp/handler/MAP_GREEN.png b/assets/jp/handler/MAP_GREEN.png new file mode 100644 index 000000000..dbc60020b Binary files /dev/null and b/assets/jp/handler/MAP_GREEN.png differ diff --git a/assets/jp/handler/MAP_STAR_1.png b/assets/jp/handler/MAP_STAR_1.png new file mode 100644 index 000000000..ea662454a Binary files /dev/null and b/assets/jp/handler/MAP_STAR_1.png differ diff --git a/assets/jp/handler/MAP_STAR_2.png b/assets/jp/handler/MAP_STAR_2.png new file mode 100644 index 000000000..58baa940a Binary files /dev/null and b/assets/jp/handler/MAP_STAR_2.png differ diff --git a/assets/jp/handler/MAP_STAR_3.png b/assets/jp/handler/MAP_STAR_3.png new file mode 100644 index 000000000..838ef450f Binary files /dev/null and b/assets/jp/handler/MAP_STAR_3.png differ diff --git a/assets/jp/handler/MAP_WALK_OUT_OF_STEP.png b/assets/jp/handler/MAP_WALK_OUT_OF_STEP.png new file mode 100644 index 000000000..ab449c491 Binary files /dev/null and b/assets/jp/handler/MAP_WALK_OUT_OF_STEP.png differ diff --git a/assets/jp/handler/MYSTERY_ITEM.png b/assets/jp/handler/MYSTERY_ITEM.png new file mode 100644 index 000000000..6b18de5f8 Binary files /dev/null and b/assets/jp/handler/MYSTERY_ITEM.png differ diff --git a/assets/jp/handler/POPUP_CANCEL.png b/assets/jp/handler/POPUP_CANCEL.png new file mode 100644 index 000000000..30ecdc2bc Binary files /dev/null and b/assets/jp/handler/POPUP_CANCEL.png differ diff --git a/assets/jp/handler/POPUP_CONFIRM.png b/assets/jp/handler/POPUP_CONFIRM.png new file mode 100644 index 000000000..48fc243ea Binary files /dev/null and b/assets/jp/handler/POPUP_CONFIRM.png differ diff --git a/assets/jp/handler/STORY_CHOOSE.png b/assets/jp/handler/STORY_CHOOSE.png new file mode 100644 index 000000000..2e652009c Binary files /dev/null and b/assets/jp/handler/STORY_CHOOSE.png differ diff --git a/assets/jp/handler/STORY_CHOOSE_2.png b/assets/jp/handler/STORY_CHOOSE_2.png new file mode 100644 index 000000000..f8c9b80c6 Binary files /dev/null and b/assets/jp/handler/STORY_CHOOSE_2.png differ diff --git a/assets/jp/handler/STORY_LETTERS_ONLY.png b/assets/jp/handler/STORY_LETTERS_ONLY.png new file mode 100644 index 000000000..f3e85da30 Binary files /dev/null and b/assets/jp/handler/STORY_LETTERS_ONLY.png differ diff --git a/assets/jp/handler/STORY_LETTER_BLACK.png b/assets/jp/handler/STORY_LETTER_BLACK.png new file mode 100644 index 000000000..96f18ad99 Binary files /dev/null and b/assets/jp/handler/STORY_LETTER_BLACK.png differ diff --git a/assets/jp/handler/STORY_SKIP.BUTTON.png b/assets/jp/handler/STORY_SKIP.BUTTON.png new file mode 100644 index 000000000..c363d638f Binary files /dev/null and b/assets/jp/handler/STORY_SKIP.BUTTON.png differ diff --git a/assets/jp/handler/STORY_SKIP.png b/assets/jp/handler/STORY_SKIP.png new file mode 100644 index 000000000..17559a8c2 Binary files /dev/null and b/assets/jp/handler/STORY_SKIP.png differ diff --git a/assets/jp/handler/STRATEGY_OPEN.png b/assets/jp/handler/STRATEGY_OPEN.png new file mode 100644 index 000000000..ccac15bd7 Binary files /dev/null and b/assets/jp/handler/STRATEGY_OPEN.png differ diff --git a/assets/jp/handler/STRATEGY_OPENED.BUTTON.png b/assets/jp/handler/STRATEGY_OPENED.BUTTON.png new file mode 100644 index 000000000..6ee139ff3 Binary files /dev/null and b/assets/jp/handler/STRATEGY_OPENED.BUTTON.png differ diff --git a/assets/jp/handler/STRATEGY_OPENED.png b/assets/jp/handler/STRATEGY_OPENED.png new file mode 100644 index 000000000..5fe28d72b Binary files /dev/null and b/assets/jp/handler/STRATEGY_OPENED.png differ diff --git a/assets/jp/handler/SUBMARINE_HUNT_OFF.png b/assets/jp/handler/SUBMARINE_HUNT_OFF.png new file mode 100644 index 000000000..4b8eaf597 Binary files /dev/null and b/assets/jp/handler/SUBMARINE_HUNT_OFF.png differ diff --git a/assets/jp/handler/SUBMARINE_HUNT_ON.png b/assets/jp/handler/SUBMARINE_HUNT_ON.png new file mode 100644 index 000000000..bb21337ab Binary files /dev/null and b/assets/jp/handler/SUBMARINE_HUNT_ON.png differ diff --git a/assets/jp/handler/SUBMARINE_VIEW_OFF.png b/assets/jp/handler/SUBMARINE_VIEW_OFF.png new file mode 100644 index 000000000..85e4af6b9 Binary files /dev/null and b/assets/jp/handler/SUBMARINE_VIEW_OFF.png differ diff --git a/assets/jp/handler/SUBMARINE_VIEW_ON.png b/assets/jp/handler/SUBMARINE_VIEW_ON.png new file mode 100644 index 000000000..72235a01b Binary files /dev/null and b/assets/jp/handler/SUBMARINE_VIEW_ON.png differ diff --git a/assets/jp/hard/EQUIP_ENTER_1.png b/assets/jp/hard/EQUIP_ENTER_1.png new file mode 100644 index 000000000..55acc14f3 Binary files /dev/null and b/assets/jp/hard/EQUIP_ENTER_1.png differ diff --git a/assets/jp/hard/EQUIP_ENTER_2.png b/assets/jp/hard/EQUIP_ENTER_2.png new file mode 100644 index 000000000..0c0959421 Binary files /dev/null and b/assets/jp/hard/EQUIP_ENTER_2.png differ diff --git a/assets/jp/hard/OCR_HARD_REMAIN.png b/assets/jp/hard/OCR_HARD_REMAIN.png new file mode 100644 index 000000000..6de7f7cb8 Binary files /dev/null and b/assets/jp/hard/OCR_HARD_REMAIN.png differ diff --git a/assets/jp/map/FLEET_1_BAR.png b/assets/jp/map/FLEET_1_BAR.png new file mode 100644 index 000000000..945b363d5 Binary files /dev/null and b/assets/jp/map/FLEET_1_BAR.png differ diff --git a/assets/jp/map/FLEET_1_CHOOSE.png b/assets/jp/map/FLEET_1_CHOOSE.png new file mode 100644 index 000000000..ad5c228e7 Binary files /dev/null and b/assets/jp/map/FLEET_1_CHOOSE.png differ diff --git a/assets/jp/map/FLEET_1_CLEAR.png b/assets/jp/map/FLEET_1_CLEAR.png new file mode 100644 index 000000000..62b46d1c2 Binary files /dev/null and b/assets/jp/map/FLEET_1_CLEAR.png differ diff --git a/assets/jp/map/FLEET_1_IN_USE.png b/assets/jp/map/FLEET_1_IN_USE.png new file mode 100644 index 000000000..145ac9e71 Binary files /dev/null and b/assets/jp/map/FLEET_1_IN_USE.png differ diff --git a/assets/jp/map/FLEET_2_BAR.png b/assets/jp/map/FLEET_2_BAR.png new file mode 100644 index 000000000..a7d4ba2da Binary files /dev/null and b/assets/jp/map/FLEET_2_BAR.png differ diff --git a/assets/jp/map/FLEET_2_CHOOSE.png b/assets/jp/map/FLEET_2_CHOOSE.png new file mode 100644 index 000000000..e2016e008 Binary files /dev/null and b/assets/jp/map/FLEET_2_CHOOSE.png differ diff --git a/assets/jp/map/FLEET_2_CLEAR.png b/assets/jp/map/FLEET_2_CLEAR.png new file mode 100644 index 000000000..82b40aaae Binary files /dev/null and b/assets/jp/map/FLEET_2_CLEAR.png differ diff --git a/assets/jp/map/FLEET_2_IN_USE.png b/assets/jp/map/FLEET_2_IN_USE.png new file mode 100644 index 000000000..f4f842610 Binary files /dev/null and b/assets/jp/map/FLEET_2_IN_USE.png differ diff --git a/assets/jp/map/FLEET_PREPARATION.png b/assets/jp/map/FLEET_PREPARATION.png new file mode 100644 index 000000000..36593bc86 Binary files /dev/null and b/assets/jp/map/FLEET_PREPARATION.png differ diff --git a/assets/jp/map/FLEET_PREPARATION_HARD_1.png b/assets/jp/map/FLEET_PREPARATION_HARD_1.png new file mode 100644 index 000000000..0c580f319 Binary files /dev/null and b/assets/jp/map/FLEET_PREPARATION_HARD_1.png differ diff --git a/assets/jp/map/FLEET_PREPARATION_HARD_2.png b/assets/jp/map/FLEET_PREPARATION_HARD_2.png new file mode 100644 index 000000000..324238232 Binary files /dev/null and b/assets/jp/map/FLEET_PREPARATION_HARD_2.png differ diff --git a/assets/jp/map/MAP_CAT_ATTACK.BUTTON.png b/assets/jp/map/MAP_CAT_ATTACK.BUTTON.png new file mode 100644 index 000000000..0c219de0e Binary files /dev/null and b/assets/jp/map/MAP_CAT_ATTACK.BUTTON.png differ diff --git a/assets/jp/map/MAP_CAT_ATTACK.png b/assets/jp/map/MAP_CAT_ATTACK.png new file mode 100644 index 000000000..bfdda8e59 Binary files /dev/null and b/assets/jp/map/MAP_CAT_ATTACK.png differ diff --git a/assets/jp/map/MAP_OFFENSIVE.png b/assets/jp/map/MAP_OFFENSIVE.png new file mode 100644 index 000000000..0c219de0e Binary files /dev/null and b/assets/jp/map/MAP_OFFENSIVE.png differ diff --git a/assets/jp/map/MAP_PREPARATION.png b/assets/jp/map/MAP_PREPARATION.png new file mode 100644 index 000000000..60afecfdf Binary files /dev/null and b/assets/jp/map/MAP_PREPARATION.png differ diff --git a/assets/jp/map/MAP_PREPARATION_CANCEL.png b/assets/jp/map/MAP_PREPARATION_CANCEL.png new file mode 100644 index 000000000..269bb33d1 Binary files /dev/null and b/assets/jp/map/MAP_PREPARATION_CANCEL.png differ diff --git a/assets/jp/map/SUBMARINE_BAR.png b/assets/jp/map/SUBMARINE_BAR.png new file mode 100644 index 000000000..54156f5d4 Binary files /dev/null and b/assets/jp/map/SUBMARINE_BAR.png differ diff --git a/assets/jp/map/SUBMARINE_CHOOSE.png b/assets/jp/map/SUBMARINE_CHOOSE.png new file mode 100644 index 000000000..31a087ff7 Binary files /dev/null and b/assets/jp/map/SUBMARINE_CHOOSE.png differ diff --git a/assets/jp/map/SUBMARINE_CLEAR.png b/assets/jp/map/SUBMARINE_CLEAR.png new file mode 100644 index 000000000..e26113594 Binary files /dev/null and b/assets/jp/map/SUBMARINE_CLEAR.png differ diff --git a/assets/jp/map/SUBMARINE_IN_USE.png b/assets/jp/map/SUBMARINE_IN_USE.png new file mode 100644 index 000000000..55da34170 Binary files /dev/null and b/assets/jp/map/SUBMARINE_IN_USE.png differ diff --git a/assets/jp/map/SWITCH_OVER.png b/assets/jp/map/SWITCH_OVER.png new file mode 100644 index 000000000..9a70bd512 Binary files /dev/null and b/assets/jp/map/SWITCH_OVER.png differ diff --git a/assets/jp/map/WITHDRAW.png b/assets/jp/map/WITHDRAW.png new file mode 100644 index 000000000..78d445f9a Binary files /dev/null and b/assets/jp/map/WITHDRAW.png differ diff --git a/assets/jp/retire/COMMON_SHIP_FILTER_DISABLE.png b/assets/jp/retire/COMMON_SHIP_FILTER_DISABLE.png new file mode 100644 index 000000000..0c9112ef9 Binary files /dev/null and b/assets/jp/retire/COMMON_SHIP_FILTER_DISABLE.png differ diff --git a/assets/jp/retire/COMMON_SHIP_FILTER_ENABLE.png b/assets/jp/retire/COMMON_SHIP_FILTER_ENABLE.png new file mode 100644 index 000000000..f9d68570b Binary files /dev/null and b/assets/jp/retire/COMMON_SHIP_FILTER_ENABLE.png differ diff --git a/assets/jp/retire/DOCK_CHECK.png b/assets/jp/retire/DOCK_CHECK.png new file mode 100644 index 000000000..9c0fce8b5 Binary files /dev/null and b/assets/jp/retire/DOCK_CHECK.png differ diff --git a/assets/jp/retire/DOCK_FILTER.png b/assets/jp/retire/DOCK_FILTER.png new file mode 100644 index 000000000..0aafc9a0f Binary files /dev/null and b/assets/jp/retire/DOCK_FILTER.png differ diff --git a/assets/jp/retire/DOCK_FILTER_CONFIRM.png b/assets/jp/retire/DOCK_FILTER_CONFIRM.png new file mode 100644 index 000000000..e85c84285 Binary files /dev/null and b/assets/jp/retire/DOCK_FILTER_CONFIRM.png differ diff --git a/assets/jp/retire/ENHANCE_CONFIRM.png b/assets/jp/retire/ENHANCE_CONFIRM.png new file mode 100644 index 000000000..d48871184 Binary files /dev/null and b/assets/jp/retire/ENHANCE_CONFIRM.png differ diff --git a/assets/jp/retire/ENHANCE_FILLED.png b/assets/jp/retire/ENHANCE_FILLED.png new file mode 100644 index 000000000..c81e22398 Binary files /dev/null and b/assets/jp/retire/ENHANCE_FILLED.png differ diff --git a/assets/jp/retire/ENHANCE_RECOMMEND.png b/assets/jp/retire/ENHANCE_RECOMMEND.png new file mode 100644 index 000000000..2177ed059 Binary files /dev/null and b/assets/jp/retire/ENHANCE_RECOMMEND.png differ diff --git a/assets/jp/retire/ENHANCE_RELOAD.png b/assets/jp/retire/ENHANCE_RELOAD.png new file mode 100644 index 000000000..14b59b771 Binary files /dev/null and b/assets/jp/retire/ENHANCE_RELOAD.png differ diff --git a/assets/jp/retire/EQUIP_CONFIRM.png b/assets/jp/retire/EQUIP_CONFIRM.png new file mode 100644 index 000000000..ad5f4a78e Binary files /dev/null and b/assets/jp/retire/EQUIP_CONFIRM.png differ diff --git a/assets/jp/retire/EQUIP_CONFIRM_2.png b/assets/jp/retire/EQUIP_CONFIRM_2.png new file mode 100644 index 000000000..bc8bd2434 Binary files /dev/null and b/assets/jp/retire/EQUIP_CONFIRM_2.png differ diff --git a/assets/jp/retire/FILTER_INDEX_ALL_OFF.png b/assets/jp/retire/FILTER_INDEX_ALL_OFF.png new file mode 100644 index 000000000..6d908269c Binary files /dev/null and b/assets/jp/retire/FILTER_INDEX_ALL_OFF.png differ diff --git a/assets/jp/retire/FILTER_INDEX_ALL_ON.png b/assets/jp/retire/FILTER_INDEX_ALL_ON.png new file mode 100644 index 000000000..1a542b29e Binary files /dev/null and b/assets/jp/retire/FILTER_INDEX_ALL_ON.png differ diff --git a/assets/jp/retire/FILTER_INDEX_ENHANCEMENT_OFF.png b/assets/jp/retire/FILTER_INDEX_ENHANCEMENT_OFF.png new file mode 100644 index 000000000..9f4b68eaa Binary files /dev/null and b/assets/jp/retire/FILTER_INDEX_ENHANCEMENT_OFF.png differ diff --git a/assets/jp/retire/FILTER_INDEX_ENHANCEMENT_ON.png b/assets/jp/retire/FILTER_INDEX_ENHANCEMENT_ON.png new file mode 100644 index 000000000..813bc9c7e Binary files /dev/null and b/assets/jp/retire/FILTER_INDEX_ENHANCEMENT_ON.png differ diff --git a/assets/jp/retire/GET_ITEMS_1_RETIREMENT_SAVE.png b/assets/jp/retire/GET_ITEMS_1_RETIREMENT_SAVE.png new file mode 100644 index 000000000..4e6ae919f Binary files /dev/null and b/assets/jp/retire/GET_ITEMS_1_RETIREMENT_SAVE.png differ diff --git a/assets/jp/retire/IN_RETIREMENT_CHECK.png b/assets/jp/retire/IN_RETIREMENT_CHECK.png new file mode 100644 index 000000000..b8dd18ece Binary files /dev/null and b/assets/jp/retire/IN_RETIREMENT_CHECK.png differ diff --git a/assets/jp/retire/ONE_CLICK_RETIREMENT.png b/assets/jp/retire/ONE_CLICK_RETIREMENT.png new file mode 100644 index 000000000..6b0664370 Binary files /dev/null and b/assets/jp/retire/ONE_CLICK_RETIREMENT.png differ diff --git a/assets/jp/retire/RETIRE_APPEAR_1.png b/assets/jp/retire/RETIRE_APPEAR_1.png new file mode 100644 index 000000000..bb337f6c3 Binary files /dev/null and b/assets/jp/retire/RETIRE_APPEAR_1.png differ diff --git a/assets/jp/retire/RETIRE_APPEAR_2.png b/assets/jp/retire/RETIRE_APPEAR_2.png new file mode 100644 index 000000000..8d715fbed Binary files /dev/null and b/assets/jp/retire/RETIRE_APPEAR_2.png differ diff --git a/assets/jp/retire/RETIRE_APPEAR_3.png b/assets/jp/retire/RETIRE_APPEAR_3.png new file mode 100644 index 000000000..e66bd4319 Binary files /dev/null and b/assets/jp/retire/RETIRE_APPEAR_3.png differ diff --git a/assets/jp/retire/SHIP_CONFIRM.png b/assets/jp/retire/SHIP_CONFIRM.png new file mode 100644 index 000000000..ed025745b Binary files /dev/null and b/assets/jp/retire/SHIP_CONFIRM.png differ diff --git a/assets/jp/retire/SHIP_CONFIRM_2.png b/assets/jp/retire/SHIP_CONFIRM_2.png new file mode 100644 index 000000000..219992077 Binary files /dev/null and b/assets/jp/retire/SHIP_CONFIRM_2.png differ diff --git a/assets/jp/retire/SHIP_DETAIL_CHECK.png b/assets/jp/retire/SHIP_DETAIL_CHECK.png new file mode 100644 index 000000000..ff594d6c6 Binary files /dev/null and b/assets/jp/retire/SHIP_DETAIL_CHECK.png differ diff --git a/assets/jp/retire/SORTING_CLICK.png b/assets/jp/retire/SORTING_CLICK.png new file mode 100644 index 000000000..9d22a3f6e Binary files /dev/null and b/assets/jp/retire/SORTING_CLICK.png differ diff --git a/assets/jp/retire/SORT_ASC.png b/assets/jp/retire/SORT_ASC.png new file mode 100644 index 000000000..d4c8ba994 Binary files /dev/null and b/assets/jp/retire/SORT_ASC.png differ diff --git a/assets/jp/retire/SORT_DESC.png b/assets/jp/retire/SORT_DESC.png new file mode 100644 index 000000000..c7e1e3473 Binary files /dev/null and b/assets/jp/retire/SORT_DESC.png differ diff --git a/assets/jp/reward/COIN.png b/assets/jp/reward/COIN.png new file mode 100644 index 000000000..a7af11215 Binary files /dev/null and b/assets/jp/reward/COIN.png differ diff --git a/assets/jp/reward/COMMISSION_ADVICE.png b/assets/jp/reward/COMMISSION_ADVICE.png new file mode 100644 index 000000000..97441b090 Binary files /dev/null and b/assets/jp/reward/COMMISSION_ADVICE.png differ diff --git a/assets/jp/reward/COMMISSION_DAILY.png b/assets/jp/reward/COMMISSION_DAILY.png new file mode 100644 index 000000000..373581ec9 Binary files /dev/null and b/assets/jp/reward/COMMISSION_DAILY.png differ diff --git a/assets/jp/reward/COMMISSION_HAS_PENDING.png b/assets/jp/reward/COMMISSION_HAS_PENDING.png new file mode 100644 index 000000000..6132f09e0 Binary files /dev/null and b/assets/jp/reward/COMMISSION_HAS_PENDING.png differ diff --git a/assets/jp/reward/COMMISSION_NOTICE_AT_CAMPAIGN.png b/assets/jp/reward/COMMISSION_NOTICE_AT_CAMPAIGN.png new file mode 100644 index 000000000..8b97a85de Binary files /dev/null and b/assets/jp/reward/COMMISSION_NOTICE_AT_CAMPAIGN.png differ diff --git a/assets/jp/reward/COMMISSION_SCROLL.png b/assets/jp/reward/COMMISSION_SCROLL.png new file mode 100644 index 000000000..27d5d9294 Binary files /dev/null and b/assets/jp/reward/COMMISSION_SCROLL.png differ diff --git a/assets/jp/reward/COMMISSION_SCROLL_TOP.png b/assets/jp/reward/COMMISSION_SCROLL_TOP.png new file mode 100644 index 000000000..f31cb4b8a Binary files /dev/null and b/assets/jp/reward/COMMISSION_SCROLL_TOP.png differ diff --git a/assets/jp/reward/COMMISSION_START.png b/assets/jp/reward/COMMISSION_START.png new file mode 100644 index 000000000..86e6ccb8a Binary files /dev/null and b/assets/jp/reward/COMMISSION_START.png differ diff --git a/assets/jp/reward/COMMISSION_STOP_SCROLLING.png b/assets/jp/reward/COMMISSION_STOP_SCROLLING.png new file mode 100644 index 000000000..8be7ef16b Binary files /dev/null and b/assets/jp/reward/COMMISSION_STOP_SCROLLING.png differ diff --git a/assets/jp/reward/COMMISSION_URGENT.png b/assets/jp/reward/COMMISSION_URGENT.png new file mode 100644 index 000000000..b3d0fa909 Binary files /dev/null and b/assets/jp/reward/COMMISSION_URGENT.png differ diff --git a/assets/jp/reward/EXP_INFO_S_REWARD.png b/assets/jp/reward/EXP_INFO_S_REWARD.png new file mode 100644 index 000000000..c38ea6304 Binary files /dev/null and b/assets/jp/reward/EXP_INFO_S_REWARD.png differ diff --git a/assets/jp/reward/MISSION_MULTI.png b/assets/jp/reward/MISSION_MULTI.png new file mode 100644 index 000000000..b9b5c9c89 Binary files /dev/null and b/assets/jp/reward/MISSION_MULTI.png differ diff --git a/assets/jp/reward/MISSION_NOTICE.png b/assets/jp/reward/MISSION_NOTICE.png new file mode 100644 index 000000000..c1b624f94 Binary files /dev/null and b/assets/jp/reward/MISSION_NOTICE.png differ diff --git a/assets/jp/reward/MISSION_SINGLE.png b/assets/jp/reward/MISSION_SINGLE.png new file mode 100644 index 000000000..70cc4dc8c Binary files /dev/null and b/assets/jp/reward/MISSION_SINGLE.png differ diff --git a/assets/jp/reward/OIL.png b/assets/jp/reward/OIL.png new file mode 100644 index 000000000..62bed7db3 Binary files /dev/null and b/assets/jp/reward/OIL.png differ diff --git a/assets/jp/reward/REWARD_1.png b/assets/jp/reward/REWARD_1.png new file mode 100644 index 000000000..c83dc4087 Binary files /dev/null and b/assets/jp/reward/REWARD_1.png differ diff --git a/assets/jp/reward/REWARD_2.png b/assets/jp/reward/REWARD_2.png new file mode 100644 index 000000000..f5692906b Binary files /dev/null and b/assets/jp/reward/REWARD_2.png differ diff --git a/assets/jp/reward/REWARD_3.png b/assets/jp/reward/REWARD_3.png new file mode 100644 index 000000000..1af4ed144 Binary files /dev/null and b/assets/jp/reward/REWARD_3.png differ diff --git a/assets/jp/reward/REWARD_SAVE_CLICK.png b/assets/jp/reward/REWARD_SAVE_CLICK.png new file mode 100644 index 000000000..fd55823ab Binary files /dev/null and b/assets/jp/reward/REWARD_SAVE_CLICK.png differ diff --git a/assets/jp/reward/TACTICAL_CLASS_CANCEL.png b/assets/jp/reward/TACTICAL_CLASS_CANCEL.png new file mode 100644 index 000000000..b952107ee Binary files /dev/null and b/assets/jp/reward/TACTICAL_CLASS_CANCEL.png differ diff --git a/assets/jp/reward/TACTICAL_CLASS_START.png b/assets/jp/reward/TACTICAL_CLASS_START.png new file mode 100644 index 000000000..447cdb819 Binary files /dev/null and b/assets/jp/reward/TACTICAL_CLASS_START.png differ diff --git a/assets/jp/template/TEMPLATE_AMBUSH_EVADE_FAILED.png b/assets/jp/template/TEMPLATE_AMBUSH_EVADE_FAILED.png new file mode 100644 index 000000000..4a44f6bba Binary files /dev/null and b/assets/jp/template/TEMPLATE_AMBUSH_EVADE_FAILED.png differ diff --git a/assets/jp/template/TEMPLATE_AMBUSH_EVADE_SUCCESS.png b/assets/jp/template/TEMPLATE_AMBUSH_EVADE_SUCCESS.png new file mode 100644 index 000000000..0f1fb69bd Binary files /dev/null and b/assets/jp/template/TEMPLATE_AMBUSH_EVADE_SUCCESS.png differ diff --git a/assets/jp/template/TEMPLATE_CAUGHT_BY_SIREN.png b/assets/jp/template/TEMPLATE_CAUGHT_BY_SIREN.png new file mode 100644 index 000000000..39678cae9 Binary files /dev/null and b/assets/jp/template/TEMPLATE_CAUGHT_BY_SIREN.png differ diff --git a/assets/jp/template/TEMPLATE_ENEMY_BOSS.png b/assets/jp/template/TEMPLATE_ENEMY_BOSS.png new file mode 100644 index 000000000..0b498c815 Binary files /dev/null and b/assets/jp/template/TEMPLATE_ENEMY_BOSS.png differ diff --git a/assets/jp/template/TEMPLATE_ENEMY_CARRIER.png b/assets/jp/template/TEMPLATE_ENEMY_CARRIER.png new file mode 100644 index 000000000..126c7ab11 Binary files /dev/null and b/assets/jp/template/TEMPLATE_ENEMY_CARRIER.png differ diff --git a/assets/jp/template/TEMPLATE_ENEMY_L.png b/assets/jp/template/TEMPLATE_ENEMY_L.png new file mode 100644 index 000000000..05dd28e80 Binary files /dev/null and b/assets/jp/template/TEMPLATE_ENEMY_L.png differ diff --git a/assets/jp/template/TEMPLATE_ENEMY_LIGHT.png b/assets/jp/template/TEMPLATE_ENEMY_LIGHT.png new file mode 100644 index 000000000..92d98f961 Binary files /dev/null and b/assets/jp/template/TEMPLATE_ENEMY_LIGHT.png differ diff --git a/assets/jp/template/TEMPLATE_ENEMY_M.png b/assets/jp/template/TEMPLATE_ENEMY_M.png new file mode 100644 index 000000000..229929833 Binary files /dev/null and b/assets/jp/template/TEMPLATE_ENEMY_M.png differ diff --git a/assets/jp/template/TEMPLATE_ENEMY_MAIN.png b/assets/jp/template/TEMPLATE_ENEMY_MAIN.png new file mode 100644 index 000000000..2f169a782 Binary files /dev/null and b/assets/jp/template/TEMPLATE_ENEMY_MAIN.png differ diff --git a/assets/jp/template/TEMPLATE_ENEMY_S.png b/assets/jp/template/TEMPLATE_ENEMY_S.png new file mode 100644 index 000000000..e0c6cff39 Binary files /dev/null and b/assets/jp/template/TEMPLATE_ENEMY_S.png differ diff --git a/assets/jp/template/TEMPLATE_ENEMY_TREASURE.png b/assets/jp/template/TEMPLATE_ENEMY_TREASURE.png new file mode 100644 index 000000000..b8bf91b08 Binary files /dev/null and b/assets/jp/template/TEMPLATE_ENEMY_TREASURE.png differ diff --git a/assets/jp/template/TEMPLATE_FLEET_AMMO.png b/assets/jp/template/TEMPLATE_FLEET_AMMO.png new file mode 100644 index 000000000..3bd7f6405 Binary files /dev/null and b/assets/jp/template/TEMPLATE_FLEET_AMMO.png differ diff --git a/assets/jp/template/TEMPLATE_FORMATION_1.png b/assets/jp/template/TEMPLATE_FORMATION_1.png new file mode 100644 index 000000000..643c7aaa2 Binary files /dev/null and b/assets/jp/template/TEMPLATE_FORMATION_1.png differ diff --git a/assets/jp/template/TEMPLATE_FORMATION_2.png b/assets/jp/template/TEMPLATE_FORMATION_2.png new file mode 100644 index 000000000..db237eb05 Binary files /dev/null and b/assets/jp/template/TEMPLATE_FORMATION_2.png differ diff --git a/assets/jp/template/TEMPLATE_FORMATION_3.png b/assets/jp/template/TEMPLATE_FORMATION_3.png new file mode 100644 index 000000000..f21cf865e Binary files /dev/null and b/assets/jp/template/TEMPLATE_FORMATION_3.png differ diff --git a/assets/jp/template/TEMPLATE_MAP_WALK_OUT_OF_STEP.png b/assets/jp/template/TEMPLATE_MAP_WALK_OUT_OF_STEP.png new file mode 100644 index 000000000..a25078fb9 Binary files /dev/null and b/assets/jp/template/TEMPLATE_MAP_WALK_OUT_OF_STEP.png differ diff --git a/assets/jp/template/TEMPLATE_SIREN_1.png b/assets/jp/template/TEMPLATE_SIREN_1.png new file mode 100644 index 000000000..63c1ebbba Binary files /dev/null and b/assets/jp/template/TEMPLATE_SIREN_1.png differ diff --git a/assets/jp/template/TEMPLATE_SIREN_2.png b/assets/jp/template/TEMPLATE_SIREN_2.png new file mode 100644 index 000000000..c5ac71a31 Binary files /dev/null and b/assets/jp/template/TEMPLATE_SIREN_2.png differ diff --git a/assets/jp/template/TEMPLATE_SIREN_3.png b/assets/jp/template/TEMPLATE_SIREN_3.png new file mode 100644 index 000000000..b1169b640 Binary files /dev/null and b/assets/jp/template/TEMPLATE_SIREN_3.png differ diff --git a/assets/jp/template/TEMPLATE_SIREN_Algerie.png b/assets/jp/template/TEMPLATE_SIREN_Algerie.png new file mode 100644 index 000000000..761b9e089 Binary files /dev/null and b/assets/jp/template/TEMPLATE_SIREN_Algerie.png differ diff --git a/assets/jp/template/TEMPLATE_SIREN_DD.png b/assets/jp/template/TEMPLATE_SIREN_DD.png new file mode 100644 index 000000000..dc1fb8deb Binary files /dev/null and b/assets/jp/template/TEMPLATE_SIREN_DD.png differ diff --git a/assets/jp/template/TEMPLATE_SIREN_LaGalissonniere.png b/assets/jp/template/TEMPLATE_SIREN_LaGalissonniere.png new file mode 100644 index 000000000..e57eaebeb Binary files /dev/null and b/assets/jp/template/TEMPLATE_SIREN_LaGalissonniere.png differ diff --git a/assets/jp/template/TEMPLATE_SIREN_Vauquelin.png b/assets/jp/template/TEMPLATE_SIREN_Vauquelin.png new file mode 100644 index 000000000..454bc978b Binary files /dev/null and b/assets/jp/template/TEMPLATE_SIREN_Vauquelin.png differ diff --git a/assets/jp/template/TEMPLATE_SIREN_Z18.png b/assets/jp/template/TEMPLATE_SIREN_Z18.png new file mode 100644 index 000000000..4035a0d03 Binary files /dev/null and b/assets/jp/template/TEMPLATE_SIREN_Z18.png differ diff --git a/assets/jp/template/TEMPLATE_SIREN_Z19.png b/assets/jp/template/TEMPLATE_SIREN_Z19.png new file mode 100644 index 000000000..cb58a4430 Binary files /dev/null and b/assets/jp/template/TEMPLATE_SIREN_Z19.png differ diff --git a/assets/jp/template/TEMPLATE_SIREN_Z2.png b/assets/jp/template/TEMPLATE_SIREN_Z2.png new file mode 100644 index 000000000..c518d611d Binary files /dev/null and b/assets/jp/template/TEMPLATE_SIREN_Z2.png differ diff --git a/assets/jp/template/TEMPLATE_STAGE_CLEAR.png b/assets/jp/template/TEMPLATE_STAGE_CLEAR.png new file mode 100644 index 000000000..9d4d0d5ce Binary files /dev/null and b/assets/jp/template/TEMPLATE_STAGE_CLEAR.png differ diff --git a/assets/jp/template/TEMPLATE_STAGE_PERCENT.png b/assets/jp/template/TEMPLATE_STAGE_PERCENT.png new file mode 100644 index 000000000..58e99f97f Binary files /dev/null and b/assets/jp/template/TEMPLATE_STAGE_PERCENT.png differ diff --git a/assets/jp/ui/BACK_ARROW.BUTTON.png b/assets/jp/ui/BACK_ARROW.BUTTON.png new file mode 100644 index 000000000..33878384b Binary files /dev/null and b/assets/jp/ui/BACK_ARROW.BUTTON.png differ diff --git a/assets/jp/ui/BACK_ARROW.png b/assets/jp/ui/BACK_ARROW.png new file mode 100644 index 000000000..843cce04f Binary files /dev/null and b/assets/jp/ui/BACK_ARROW.png differ diff --git a/assets/jp/ui/CAMPAIGN_CHECK.png b/assets/jp/ui/CAMPAIGN_CHECK.png new file mode 100644 index 000000000..6b58f6a6b Binary files /dev/null and b/assets/jp/ui/CAMPAIGN_CHECK.png differ diff --git a/assets/jp/ui/CAMPAIGN_GOTO_DAILY.png b/assets/jp/ui/CAMPAIGN_GOTO_DAILY.png new file mode 100644 index 000000000..6a0057636 Binary files /dev/null and b/assets/jp/ui/CAMPAIGN_GOTO_DAILY.png differ diff --git a/assets/jp/ui/CAMPAIGN_GOTO_EVENT.BUTTON.png b/assets/jp/ui/CAMPAIGN_GOTO_EVENT.BUTTON.png new file mode 100644 index 000000000..6b5d93174 Binary files /dev/null and b/assets/jp/ui/CAMPAIGN_GOTO_EVENT.BUTTON.png differ diff --git a/assets/jp/ui/CAMPAIGN_GOTO_EVENT.png b/assets/jp/ui/CAMPAIGN_GOTO_EVENT.png new file mode 100644 index 000000000..6b5d93174 Binary files /dev/null and b/assets/jp/ui/CAMPAIGN_GOTO_EVENT.png differ diff --git a/assets/jp/ui/CAMPAIGN_GOTO_EXERCISE.png b/assets/jp/ui/CAMPAIGN_GOTO_EXERCISE.png new file mode 100644 index 000000000..02dd7a98b Binary files /dev/null and b/assets/jp/ui/CAMPAIGN_GOTO_EXERCISE.png differ diff --git a/assets/jp/ui/COMMISSION_CHECK.png b/assets/jp/ui/COMMISSION_CHECK.png new file mode 100644 index 000000000..971c98697 Binary files /dev/null and b/assets/jp/ui/COMMISSION_CHECK.png differ diff --git a/assets/jp/ui/DAILY_CHECK.png b/assets/jp/ui/DAILY_CHECK.png new file mode 100644 index 000000000..4fd00a83e Binary files /dev/null and b/assets/jp/ui/DAILY_CHECK.png differ diff --git a/assets/jp/ui/EVENT_CHECK.png b/assets/jp/ui/EVENT_CHECK.png new file mode 100644 index 000000000..14e3808a4 Binary files /dev/null and b/assets/jp/ui/EVENT_CHECK.png differ diff --git a/assets/jp/ui/EVENT_LIST_CHECK.png b/assets/jp/ui/EVENT_LIST_CHECK.png new file mode 100644 index 000000000..da3df3bbb Binary files /dev/null and b/assets/jp/ui/EVENT_LIST_CHECK.png differ diff --git a/assets/jp/ui/EXERCISE_CHECK.png b/assets/jp/ui/EXERCISE_CHECK.png new file mode 100644 index 000000000..45ce1fac3 Binary files /dev/null and b/assets/jp/ui/EXERCISE_CHECK.png differ diff --git a/assets/jp/ui/FLEET_CHECK.png b/assets/jp/ui/FLEET_CHECK.png new file mode 100644 index 000000000..14fa3836a Binary files /dev/null and b/assets/jp/ui/FLEET_CHECK.png differ diff --git a/assets/jp/ui/GOTO_MAIN.BUTTON.png b/assets/jp/ui/GOTO_MAIN.BUTTON.png new file mode 100644 index 000000000..42cde372d Binary files /dev/null and b/assets/jp/ui/GOTO_MAIN.BUTTON.png differ diff --git a/assets/jp/ui/GOTO_MAIN.png b/assets/jp/ui/GOTO_MAIN.png new file mode 100644 index 000000000..fd8340e57 Binary files /dev/null and b/assets/jp/ui/GOTO_MAIN.png differ diff --git a/assets/jp/ui/MAIN_GOTO_CAMPAIGN.png b/assets/jp/ui/MAIN_GOTO_CAMPAIGN.png new file mode 100644 index 000000000..7f9f578c0 Binary files /dev/null and b/assets/jp/ui/MAIN_GOTO_CAMPAIGN.png differ diff --git a/assets/jp/ui/MAIN_GOTO_EVENT_LIST.png b/assets/jp/ui/MAIN_GOTO_EVENT_LIST.png new file mode 100644 index 000000000..b9b56d1fd Binary files /dev/null and b/assets/jp/ui/MAIN_GOTO_EVENT_LIST.png differ diff --git a/assets/jp/ui/MAIN_GOTO_FLEET.png b/assets/jp/ui/MAIN_GOTO_FLEET.png new file mode 100644 index 000000000..84c6a2d3d Binary files /dev/null and b/assets/jp/ui/MAIN_GOTO_FLEET.png differ diff --git a/assets/jp/ui/MAIN_GOTO_MISSION.png b/assets/jp/ui/MAIN_GOTO_MISSION.png new file mode 100644 index 000000000..5017873f5 Binary files /dev/null and b/assets/jp/ui/MAIN_GOTO_MISSION.png differ diff --git a/assets/jp/ui/MAIN_GOTO_REWARD.png b/assets/jp/ui/MAIN_GOTO_REWARD.png new file mode 100644 index 000000000..bb66709b1 Binary files /dev/null and b/assets/jp/ui/MAIN_GOTO_REWARD.png differ diff --git a/assets/jp/ui/MISSION_CHECK.png b/assets/jp/ui/MISSION_CHECK.png new file mode 100644 index 000000000..fb394db2f Binary files /dev/null and b/assets/jp/ui/MISSION_CHECK.png differ diff --git a/assets/jp/ui/REWARD_CHECK.png b/assets/jp/ui/REWARD_CHECK.png new file mode 100644 index 000000000..56691c636 Binary files /dev/null and b/assets/jp/ui/REWARD_CHECK.png differ diff --git a/assets/jp/ui/REWARD_GOTO_COMMISSION.png b/assets/jp/ui/REWARD_GOTO_COMMISSION.png new file mode 100644 index 000000000..ac542c498 Binary files /dev/null and b/assets/jp/ui/REWARD_GOTO_COMMISSION.png differ diff --git a/assets/jp/ui/REWARD_GOTO_MAIN.png b/assets/jp/ui/REWARD_GOTO_MAIN.png new file mode 100644 index 000000000..1afb4308f Binary files /dev/null and b/assets/jp/ui/REWARD_GOTO_MAIN.png differ diff --git a/assets/jp/ui/REWARD_GOTO_TACTICAL.png b/assets/jp/ui/REWARD_GOTO_TACTICAL.png new file mode 100644 index 000000000..95e74853b Binary files /dev/null and b/assets/jp/ui/REWARD_GOTO_TACTICAL.png differ diff --git a/assets/jp/ui/SP_CHECK.png b/assets/jp/ui/SP_CHECK.png new file mode 100644 index 000000000..3cac2d932 Binary files /dev/null and b/assets/jp/ui/SP_CHECK.png differ diff --git a/assets/jp/ui/TACTICAL_CHECK.png b/assets/jp/ui/TACTICAL_CHECK.png new file mode 100644 index 000000000..ff28f4022 Binary files /dev/null and b/assets/jp/ui/TACTICAL_CHECK.png differ diff --git a/campaign/campaign_main/campaign_6_4.py b/campaign/campaign_main/campaign_6_4.py index fc99d9c1c..acb8855f5 100644 --- a/campaign/campaign_main/campaign_6_4.py +++ b/campaign/campaign_main/campaign_6_4.py @@ -46,7 +46,7 @@ road_boss = RoadGrids([ [A5, B6], [A4, B5, B6], C4, C5, [C3, D4], D3, # A6 - D3 [C5, D3], # D5 - D3 [B1, B2], [B1, C2], [C1, C2], [C2, D1], [C2, D2], # A2 - D3 - [H3, G2], [G3, G4], [F3, G4], [F3, F4], [F2, F3, E4], [E2, F3, E4], E3 # H4 - D3 + [H3, G4], [G3, G4], [F3, G4], [F3, F4], [F2, F3, E4], [E2, F3, E4], E3 # H4 - D3 ]) diff --git a/campaign/event_20200603_jp/sp1.py b/campaign/event_20200603_jp/sp1.py new file mode 100644 index 000000000..0b7949989 --- /dev/null +++ b/campaign/event_20200603_jp/sp1.py @@ -0,0 +1,73 @@ +from module.campaign.campaign_base import CampaignBase +from module.map.map_base import CampaignMap + +MAP = CampaignMap() +MAP.map_data = ''' + ++ ++ ++ -- ME -- -- -- -- ++ -- + -- ME -- ++ -- ++ ++ ME -- ++ ME + ME -- -- ME -- ME ++ -- ME ++ -- + -- -- -- -- -- ++ ME -- -- -- SP + ME -- -- ME -- -- -- __ -- -- SP + -- -- ME ++ -- MS -- ME -- -- -- + -- -- -- ++ MB -- MB ++ ++ ++ ++ +''' +MAP.camera_data = ['D3', 'D5', 'H3', 'H5'] +MAP.weight_data = ''' + 10 10 10 10 40 10 10 10 10 10 50 + 10 30 10 10 10 10 10 20 10 10 50 + 30 10 10 10 10 20 10 10 10 10 50 + 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 + 30 10 20 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 +''' +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 1}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'boss': 1}, +] + + +class Config: + SUBMARINE = 0 + + 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 = False + MAP_HAS_MAP_STORY = True + MAP_SIREN_TEMPLATE = ['Z18'] + MAP_SIREN_COUNT = 1 + + TRUST_EDGE_LINES = False + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (100, 255 - 24), + 'width': 1, + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 24, 255), + 'prominence': 2, + 'distance': 50, + 'wlen': 1000 + } + + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + if self.fleet_2_break_siren_caught(): + return True + + return self.battle_default() + + def battle_4(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/event_20200603_jp/sp2.py b/campaign/event_20200603_jp/sp2.py new file mode 100644 index 000000000..71e984d15 --- /dev/null +++ b/campaign/event_20200603_jp/sp2.py @@ -0,0 +1,55 @@ +from module.campaign.campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from campaign.event_20200603_cn.sp1 import Config as ConfigBase + +MAP = CampaignMap() +MAP.map_data = ''' + -- -- ++ ++ SP -- SP ++ ++ ++ ++ + -- ME ++ ++ -- -- -- -- -- ME ME + ME -- -- MS -- -- -- ME -- -- MB + ++ -- -- -- ME -- ME ++ __ -- MB + -- -- ++ ++ ++ MS -- ++ -- -- ME + -- ME -- ME ++ -- -- -- -- ME ++ + -- -- -- -- -- ME ME ME ME -- ++ +''' +MAP.camera_data = ['D3', 'D5', 'H3', 'H5'] +MAP.weight_data = ''' + 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 +''' +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}, +] + + +class Config(ConfigBase): + FLEET_BOSS = 2 + + # POOR_MAP_DATA = True + MAP_SIREN_TEMPLATE = ['Z2'] + MAP_SIREN_COUNT = 2 + + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + if self.fleet_2_break_siren_caught(): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_2.clear_boss() diff --git a/campaign/event_20200603_jp/sp3.py b/campaign/event_20200603_jp/sp3.py new file mode 100644 index 000000000..ef8fb67ba --- /dev/null +++ b/campaign/event_20200603_jp/sp3.py @@ -0,0 +1,55 @@ +from module.campaign.campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from campaign.event_20200603_cn.sp1 import Config as ConfigBase + +MAP = CampaignMap() +MAP.map_data = ''' + ++ ++ ++ MS ++ ME -- ME ++ ++ ++ + SP -- -- -- -- -- MS -- ME ME -- + SP -- -- -- -- ME -- __ -- -- ME + ++ ++ ++ MS -- ++ ++ -- ME ++ -- + MB MB ++ -- ME ++ ++ -- -- ++ ++ + -- -- -- -- -- -- -- -- -- ME -- + ME ME -- ME -- ME ++ ME -- ME -- +''' +MAP.camera_data = ['D3', 'D5', 'G3', 'G5'] +MAP.weight_data = ''' + 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 +''' +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, 'boss': 1}, +] + + +class Config(ConfigBase): + FLEET_BOSS = 2 + + # POOR_MAP_DATA = True + MAP_SIREN_TEMPLATE = ['Z19'] + MAP_SIREN_COUNT = 2 + + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + if self.fleet_2_break_siren_caught(): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_2.clear_boss() diff --git a/campaign/event_20200611_en/a1.py b/campaign/event_20200611_en/a1.py index fc539bb77..79deaaf16 100644 --- a/campaign/event_20200611_en/a1.py +++ b/campaign/event_20200611_en/a1.py @@ -26,7 +26,7 @@ class Config: MAP_HAS_SIREN = True MAP_HAS_DYNAMIC_RED_BORDER = False MAP_HAS_MAP_STORY = True - MAP_SIREN_COUNT = 2 + MAP_SIREN_COUNT = 1 TRUST_EDGE_LINES = False COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.5 diff --git a/campaign/event_20200611_en/a2.py b/campaign/event_20200611_en/a2.py index aeaf899cd..19f9c31a6 100644 --- a/campaign/event_20200611_en/a2.py +++ b/campaign/event_20200611_en/a2.py @@ -2,7 +2,7 @@ from module.campaign.campaign_base import CampaignBase from module.map.map_base import CampaignMap from module.map.map_grids import SelectedGrids, RoadGrids from module.logger import logger -from campaign.event_20200521_cn.a1 import Config +from campaign.event_20200611_en.a1 import Config MAP = CampaignMap() diff --git a/campaign/event_20200611_en/a3.py b/campaign/event_20200611_en/a3.py index cf091669a..91b1bd4f0 100644 --- a/campaign/event_20200611_en/a3.py +++ b/campaign/event_20200611_en/a3.py @@ -2,24 +2,45 @@ from module.campaign.campaign_base import CampaignBase from module.map.map_base import CampaignMap from module.map.map_grids import SelectedGrids, RoadGrids from module.logger import logger -from campaign.event_20200521_cn.a1 import Config as ConfigBase +from campaign.event_20200611_en.a1 import Config as ConfigBase MAP = CampaignMap() +MAP.shape = 'H7' MAP.map_data = ''' - -- -- -- ++ ++ -- -- -- - -- -- -- -- -- -- -- -- - ++ ++ -- -- -- -- ++ ++ - -- -- -- ++ -- -- ++ ++ - -- -- -- ++ -- -- -- -- - -- -- -- -- -- -- -- ++ - -- -- -- ++ -- -- -- -- + -- ME ME ++ ++ ME ME ME + ME -- -- MS -- -- MB -- + ++ ++ -- ME __ ME ++ ++ + ME ME -- ++ -- ME ++ ++ + ME -- -- ++ -- MS MB ME + SP SP -- -- __ -- ME ++ + -- SP ME ++ ME MS -- ME ''' +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 1}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1, 'boss': 1}, +] - -class Config(ConfigBase): - MAP_HAS_DYNAMIC_RED_BORDER = False - +class Config: + POOR_MAP_DATA = False class Campaign(CampaignBase): MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_enemy(scale=(1,)): + return True + if self.clear_enemy(scale=(2,), genre=['light', 'main', 'enemy', 'carrier']): + return True + if self.clear_enemy(genre=['light', 'main', 'enemy']): + return True + + return self.battle_default() + + def battle_4(self): + return self.fleet_2.clear_potential_boss() diff --git a/campaign/event_20200611_en/b1.py b/campaign/event_20200611_en/b1.py index c336e5ba1..cb6ef8b51 100644 --- a/campaign/event_20200611_en/b1.py +++ b/campaign/event_20200611_en/b1.py @@ -31,7 +31,7 @@ class Config: MAP_HAS_DYNAMIC_RED_BORDER = False MAP_HAS_MAP_STORY = True MAP_SIREN_TEMPLATE = ['Algerie', 'LaGalissonniere'] - MAP_SIREN_COUNT = 2 + MAP_SIREN_COUNT = 1 TRUST_EDGE_LINES = False COINCIDENT_POINT_ENCOURAGE_DISTANCE = 1.5 diff --git a/campaign/event_20200611_en/b2.py b/campaign/event_20200611_en/b2.py index 7dbf318a4..f0a6d41f3 100644 --- a/campaign/event_20200611_en/b2.py +++ b/campaign/event_20200611_en/b2.py @@ -2,18 +2,19 @@ from module.campaign.campaign_base import CampaignBase from module.map.map_base import CampaignMap from module.map.map_grids import SelectedGrids, RoadGrids from module.logger import logger -from campaign.event_20200521_cn.b1 import Config as ConfigBase +from campaign.event_20200611_en.b1 import Config as ConfigBase MAP = CampaignMap() +MAP.shape = 'K7' MAP.map_data = """ - -- -- -- -- ++ -- -- -- -- ++ ++ - -- -- -- -- -- -- ++ ++ -- -- -- - ++ -- -- -- -- -- ++ ++ -- -- -- - -- -- -- -- -- -- -- -- -- -- -- - -- -- -- -- -- -- -- -- -- -- -- - ++ ++ -- -- -- -- ++ ++ -- -- -- - ++ -- -- -- -- -- -- -- -- -- -- + -- ME ME ME ++ ME -- -- ME ++ ++ + ME -- -- -- -- -- ++ ++ -- -- ME + ++ -- ME ME __ ME ++ ++ ME __ -- + ME -- -- MS -- MS MB MB MS -- MS + -- ME -- -- -- -- MB MB -- -- -- + ++ ++ ME -- SP -- ++ ++ -- SP -- + ++ -- -- -- -- -- ME ME -- -- -- """ MAP.wall_data = """ · · | · · · · · · · · · , @@ -30,14 +31,34 @@ MAP.wall_data = """ , · · · · · · · · · · · , """ - +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 1}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1}, + {'battle': 5, 'enemy': 1, 'boss': 1}, +] class Config(ConfigBase): - FLEET_BOSS = 2 - MAP_HAS_WALL = True MAP_SIREN_TEMPLATE = ['Algerie', 'Vauquelin'] class Campaign(CampaignBase): MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_enemy(scale=(1,)): + return True + if self.clear_enemy(scale=(2,), genre=['light', 'main', 'enemy', 'carrier']): + return True + if self.clear_enemy(genre=['light', 'main', 'enemy']): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_2.brute_clear_boss() diff --git a/campaign/event_20200611_en/b3.py b/campaign/event_20200611_en/b3.py index f3c68b194..d5e02c4ce 100644 --- a/campaign/event_20200611_en/b3.py +++ b/campaign/event_20200611_en/b3.py @@ -2,21 +2,22 @@ from module.campaign.campaign_base import CampaignBase from module.map.map_base import CampaignMap from module.map.map_grids import SelectedGrids, RoadGrids from module.logger import logger -from campaign.event_20200521_cn.b1 import Config as ConfigBase +from campaign.event_20200611_en.b1 import Config as ConfigBase MAP = CampaignMap() +MAP.shape = 'N10' MAP.map_data = """ - -- -- -- -- -- -- -- -- -- -- -- -- -- ++ - -- -- -- -- -- -- -- -- -- -- -- -- -- -- - ++ -- -- -- -- -- -- -- -- -- -- -- -- -- - ++ -- -- -- -- -- -- -- -- -- -- -- -- -- - -- -- -- -- -- -- -- -- -- -- -- -- ++ ++ - -- ++ -- -- ++ ++ -- -- ++ ++ -- -- -- -- - -- ++ -- -- ++ ++ -- -- ++ ++ -- -- -- -- - -- -- -- -- -- -- -- -- -- -- -- -- ++ ++ + -- -- -- -- -- ME -- -- ME -- -- -- -- ++ + -- -- -- ME -- -- MB MB -- -- ME -- -- -- + ++ -- ME -- ME ME -- -- ME ME -- ME -- -- + ++ -- -- ME -- -- __ __ -- -- ME -- -- -- + -- -- -- -- ME MS -- -- MS ME -- -- ++ ++ + -- ++ -- ME ++ ++ -- -- ++ ++ ME -- -- -- + -- ++ -- ME ++ ++ -- -- ++ ++ ME -- -- -- + -- -- -- -- ME MS -- -- MS ME -- -- ++ ++ ++ -- -- -- -- -- -- -- -- -- -- -- ++ ++ - -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- -- -- -- -- -- SP SP -- -- -- -- -- -- """ MAP.camera_data = ['G8', 'G6', 'F3', 'H4'] MAP.wall_data = """ @@ -40,14 +41,35 @@ MAP.wall_data = """ +-----------+ +-----------+ , · · · · · · | · · | · · · · · · , """ - +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 2}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1}, + {'battle': 5, 'enemy': 1, 'boss': 1}, +] class Config(ConfigBase): - FLEET_BOSS = 2 - + MAP_SIREN_COUNT = 2 MAP_HAS_WALL = True MAP_SIREN_TEMPLATE = ['LaGalissonniere', 'Vauquelin'] class Campaign(CampaignBase): MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_enemy(scale=(1,)): + return True + if self.clear_enemy(scale=(2,), genre=['light', 'main', 'enemy', 'carrier']): + return True + if self.clear_enemy(genre=['light', 'main', 'enemy']): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_2.brute_clear_boss() diff --git a/campaign/event_20200611_en/c2.py b/campaign/event_20200611_en/c2.py index 69d4ef8f0..a3e93cff4 100644 --- a/campaign/event_20200611_en/c2.py +++ b/campaign/event_20200611_en/c2.py @@ -2,7 +2,7 @@ from module.campaign.campaign_base import CampaignBase from module.map.map_base import CampaignMap from module.map.map_grids import SelectedGrids, RoadGrids from module.logger import logger -from campaign.event_20200521_cn.c1 import Config +from campaign.event_20200611_en.c1 import Config MAP = CampaignMap() diff --git a/campaign/event_20200611_en/c3.py b/campaign/event_20200611_en/c3.py index 3cb4f9d14..3ba9c6d32 100644 --- a/campaign/event_20200611_en/c3.py +++ b/campaign/event_20200611_en/c3.py @@ -2,20 +2,28 @@ from module.campaign.campaign_base import CampaignBase from module.map.map_base import CampaignMap from module.map.map_grids import SelectedGrids, RoadGrids from module.logger import logger -from campaign.event_20200521_cn.c1 import Config as ConfigBase +from campaign.event_20200611_en.c1 import Config as ConfigBase MAP = CampaignMap() +MAP.shape = 'H7' MAP.map_data = ''' - -- -- -- ++ ++ -- -- -- - -- -- -- -- -- -- -- -- - ++ ++ -- -- -- -- ++ ++ - -- -- -- ++ -- -- ++ ++ - -- -- -- ++ -- -- -- -- - -- -- -- -- -- -- -- ++ - -- -- -- ++ -- -- -- -- + -- ME ME ++ ++ ME ME ME + ME -- -- MS -- -- MB -- + ++ ++ -- ME __ ME ++ ++ + ME ME -- ++ -- ME ++ ++ + ME -- -- ++ -- MS MB ME + SP SP -- -- __ -- ME ++ + -- SP ME ++ ME MS -- ME ''' - +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 2}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1}, + {'battle': 5, 'boss': 1}, +] class Config(ConfigBase): FLEET_BOSS = 2 @@ -23,3 +31,18 @@ class Config(ConfigBase): class Campaign(CampaignBase): MAP = MAP + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_enemy(scale=(1,)): + return True + if self.clear_enemy(scale=(2,), genre=['light', 'main', 'enemy', 'carrier']): + return True + if self.clear_enemy(genre=['light', 'main', 'enemy']): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_2.brute_clear_boss() diff --git a/campaign/event_20200611_en/d1.py b/campaign/event_20200611_en/d1.py index 9a2fb331c..9c64c89e1 100644 --- a/campaign/event_20200611_en/d1.py +++ b/campaign/event_20200611_en/d1.py @@ -75,7 +75,7 @@ class Campaign(CampaignBase): return True if self.clear_enemy(scale=(2,), genre=['light', 'main', 'enemy', 'carrier']): return True - if self.clear_enemy(genre=['light', 'main']): + if self.clear_enemy(genre=['light', 'main', 'enemy']): return True return self.battle_default() diff --git a/campaign/event_20200611_en/d2.py b/campaign/event_20200611_en/d2.py index 85547dd7b..0b84c0894 100644 --- a/campaign/event_20200611_en/d2.py +++ b/campaign/event_20200611_en/d2.py @@ -2,7 +2,7 @@ from module.campaign.campaign_base import CampaignBase from module.map.map_base import CampaignMap from module.map.map_grids import SelectedGrids, RoadGrids from module.logger import logger -from campaign.event_20200521_cn.d1 import Config as ConfigBase +from campaign.event_20200611_en.d1 import Config as ConfigBase MAP = CampaignMap() diff --git a/campaign/event_20200611_en/d3.py b/campaign/event_20200611_en/d3.py index bc7b333bd..a6ece1f48 100644 --- a/campaign/event_20200611_en/d3.py +++ b/campaign/event_20200611_en/d3.py @@ -2,7 +2,7 @@ from module.campaign.campaign_base import CampaignBase from module.map.map_base import CampaignMap from module.map.map_grids import SelectedGrids, RoadGrids from module.logger import logger -from campaign.event_20200521_cn.d1 import Config as ConfigBase +from campaign.event_20200611_en.d1 import Config as ConfigBase MAP = CampaignMap() @@ -65,6 +65,7 @@ MAP.spawn_data = [ class Config(ConfigBase): MAP_HAS_WALL = True + MAP_SIREN_COUNT = 3 MAP_SIREN_TEMPLATE = ['LaGalissonniere', 'Vauquelin'] diff --git a/dev_tools/button_extract.py b/dev_tools/button_extract.py index 8a2af3c92..7bbc4593c 100644 --- a/dev_tools/button_extract.py +++ b/dev_tools/button_extract.py @@ -17,7 +17,7 @@ from module.base.template import Template # Don't modified it manually. """ IMPORT_EXP = IMPORT_EXP.strip().split('\n') + [''] -VALID_SERVER = ['cn', 'en'] +VALID_SERVER = ['cn', 'en', 'jp'] class ImageExtractor: diff --git a/dev_tools/relative_crop.py b/dev_tools/relative_crop.py new file mode 100644 index 000000000..02fee4e92 --- /dev/null +++ b/dev_tools/relative_crop.py @@ -0,0 +1,40 @@ +import os +from PIL import Image +import time +# os.chdir('../') +print(os.getcwd()) +import module.config.server as server + +server.server = 'cn' # Don't need to edit, it's used to avoid error. + +from module.map.grids import Grids +from module.config.config import AzurLaneConfig + + +class Config: + """ + Paste the config of map file here + """ + pass + + +cfg = AzurLaneConfig().merge(Config()) + +# Folder to save temp images +folder = '' +# Put Screenshot here +file = '' + +i = Image.open(file).convert('RGB') +grids = Grids(i, cfg) +grids.predict() +grids.show() + +for grid in grids: + # Find more relative_crop area in module/map/grid_predictor.py + # This one is for `predict_enemy_genre` + piece = grid.get_relative_image((-1, -1, 1, 0), output_shape=(120, 60)) + + file = '%s_%s_%s.png' % (int(time.time()), grid.location[0], grid.location[1]) + file = os.path.join(folder, file) + piece.save(file) diff --git a/doc/development.md b/doc/development.md index 86a3bc822..d14c52e51 100644 --- a/doc/development.md +++ b/doc/development.md @@ -1,7 +1,8 @@ # 参与开发 Development -- [如何添加一个按钮 How to add a button](#如何添加一个按钮 How to add a button) -- [如何适配一张新的地图 How to adapt to a new map](#如何适配一张新的地图 How to adapt to a new map) +- 如何添加一个按钮 How to add a button +- 如何适配一张新的地图 How to adapt to a new map +- 如何支持其他服务器/语言 How to support other server/language ## 如何添加一个按钮 How to add a button @@ -108,6 +109,20 @@ BATTLE_PREPARATION = Button(area=(1043, 607, 1241, 667), color=(234, 179, 97), b +## 如何制作用于敌人识别的模板图片 How to make a template image for enemy detection + +首先, 我们不能直接裁切截图来制作模板图片, 因为地图中的物体是有透视的. 我们需要使用 `dev_tools/relative_crop.py` 来获取图片. `get_relative_image` 可以根据透视裁剪出相对位置的图片, 并放大到固定的大小. + +下图展示了`self.get_relative_image((-1, -1, 1, 0), output_shape=(120, 60))`的裁切区域 + +![relative_crop](development.assets/relative_crop.png) + +运行 `dev_tools/relative_crop.py` 后, 会得到大量的临时图片, 找到对应格子的图片, 在图片中裁切出需要的模板. + +将模板图片放置于 `assets//template` 目录下, 文件名需以 `TEMPLATE_` 开头, 最后运行 button_extract. + + + ## 如何适配一张新的地图 How to adapt to a new map 下面举例适配 7-2 的简单版, 完整逻辑在 campaign.campaign_main.campaign_7_2 @@ -430,7 +445,7 @@ class AnotherModule(ModuleBase): ### Other -There area also some modules diffcult to change: the commission module. +There area also some modules difficult to change: the commission module. In `./module/reward/commission.py`, I use [cnocr](https://github.com/breezedeus/cnocr) to recognize commission name in chinese, it may not works well in other languages. diff --git a/doc/development_en.md b/doc/development_en.md index 2f57a129a..7e6282fbb 100644 --- a/doc/development_en.md +++ b/doc/development_en.md @@ -2,8 +2,9 @@ # Participate in development -- [How to add a button] (#How to add a button) -- [How to adapt to a new map] (#How to adapt to a new map) +- How to add a button +- How to adapt to a new map +- How to support other server/language ## How to add a asset @@ -114,6 +115,20 @@ This is a very useful feature, because the script usually needs to analyze the e +## How to make a template image for enemy detection + +First of all, we can't simply crop the screenshot to make a template image, because things on the map have perspective. We should use `dev_tools/relative_crop.py` to get the image. `get_relative_image` can do a relative crop according to perspective and rescale to an output_size. + +This image shows the cropping area of `self.get_relative_image((-1, -1, 1, 0), output_shape=(120, 60))` + +![relative_crop](development_en.assets/relative_crop.png) + +After running `dev_tools/relative_crop.py` , you will get a lot of temp images. Find the image of target grid, crop the template. + +Paste the image under `dev_tools/relative_crop.py` , filename should start with `TEMPLATE_` , and run button_extract at last. + + + ## How to adapt to a new map The following example is adapted to the simple version of 7-2. The complete logic is in `campaign/campaign_main/7_2.py` @@ -126,7 +141,7 @@ The following example is adapted to the simple version of 7-2. The complete logi Create a new .py file, the file name is the map name, lowercase, starting with a letter, such as sp3, d3. -2. **Import入** +2. **Import** ``` from module.campaign.campaign_base import CampaignBase @@ -437,7 +452,7 @@ class AnotherModule(ModuleBase): ### Other -There area also some modules diffcult to change: the commission module. +There area also some modules difficult to change: the commission module. In `./module/reward/commission.py`, I use [cnocr](https://github.com/breezedeus/cnocr) to recognize commission name in chinese, it may not works well in other languages. diff --git a/module/campaign/assets.py b/module/campaign/assets.py index 445b0f625..adf37d288 100644 --- a/module/campaign/assets.py +++ b/module/campaign/assets.py @@ -4,7 +4,7 @@ from module.base.template import Template # This file is generated by module.dev_tools.asset_extract. # Don't modified it manually. -CHAPTER_NEXT = Button(area={'cn': (1216, 362, 1232, 388), 'en': (1216, 362, 1232, 388)}, color={'cn': (121, 150, 198), 'en': (121, 150, 198)}, button={'cn': (1216, 362, 1232, 388), 'en': (1216, 362, 1232, 388)}, file={'cn': './assets/cn/campaign/CHAPTER_NEXT.png', 'en': './assets/en/campaign/CHAPTER_NEXT.png'}) -CHAPTER_PREV = Button(area={'cn': (42, 360, 58, 387), 'en': (42, 360, 58, 387)}, color={'cn': (105, 133, 169), 'en': (105, 133, 169)}, button={'cn': (42, 360, 58, 387), 'en': (42, 360, 58, 387)}, file={'cn': './assets/cn/campaign/CHAPTER_PREV.png', 'en': './assets/en/campaign/CHAPTER_PREV.png'}) -MODE_CHANGE = Button(area={'cn': (69, 644, 131, 653), 'en': (75, 647, 134, 658)}, color={'cn': (216, 114, 114), 'en': (215, 114, 114)}, button={'cn': (28, 647, 143, 699), 'en': (22, 646, 148, 699)}, file={'cn': './assets/cn/campaign/MODE_CHANGE.png', 'en': './assets/en/campaign/MODE_CHANGE.png'}) -OCR_OIL = Button(area={'cn': (635, 28, 715, 48), 'en': (635, 28, 715, 48)}, color={'cn': (74, 75, 84), 'en': (74, 75, 84)}, button={'cn': (635, 28, 715, 48), 'en': (635, 28, 715, 48)}, file={'cn': './assets/cn/campaign/OCR_OIL.png', 'en': './assets/en/campaign/OCR_OIL.png'}) +CHAPTER_NEXT = Button(area={'cn': (1216, 362, 1232, 388), 'en': (1216, 362, 1232, 388), 'jp': (1216, 362, 1232, 388)}, color={'cn': (121, 150, 198), 'en': (121, 150, 198), 'jp': (121, 150, 198)}, button={'cn': (1216, 362, 1232, 388), 'en': (1216, 362, 1232, 388), 'jp': (1216, 362, 1232, 388)}, file={'cn': './assets/cn/campaign/CHAPTER_NEXT.png', 'en': './assets/en/campaign/CHAPTER_NEXT.png', 'jp': './assets/jp/campaign/CHAPTER_NEXT.png'}) +CHAPTER_PREV = Button(area={'cn': (42, 360, 58, 387), 'en': (42, 360, 58, 387), 'jp': (42, 360, 58, 387)}, color={'cn': (105, 133, 169), 'en': (105, 133, 169), 'jp': (105, 133, 169)}, button={'cn': (42, 360, 58, 387), 'en': (42, 360, 58, 387), 'jp': (42, 360, 58, 387)}, file={'cn': './assets/cn/campaign/CHAPTER_PREV.png', 'en': './assets/en/campaign/CHAPTER_PREV.png', 'jp': './assets/jp/campaign/CHAPTER_PREV.png'}) +MODE_CHANGE = Button(area={'cn': (69, 644, 131, 653), 'en': (75, 647, 134, 658), 'jp': (70, 684, 145, 697)}, color={'cn': (216, 114, 114), 'en': (215, 114, 114), 'jp': (220, 133, 133)}, button={'cn': (28, 647, 143, 699), 'en': (22, 646, 148, 699), 'jp': (20, 641, 148, 702)}, file={'cn': './assets/cn/campaign/MODE_CHANGE.png', 'en': './assets/en/campaign/MODE_CHANGE.png', 'jp': './assets/jp/campaign/MODE_CHANGE.png'}) +OCR_OIL = Button(area={'cn': (635, 28, 715, 48), 'en': (635, 28, 715, 48), 'jp': (635, 28, 715, 48)}, color={'cn': (74, 75, 84), 'en': (74, 75, 84), 'jp': (74, 75, 84)}, button={'cn': (635, 28, 715, 48), 'en': (635, 28, 715, 48), 'jp': (635, 28, 715, 48)}, file={'cn': './assets/cn/campaign/OCR_OIL.png', 'en': './assets/en/campaign/OCR_OIL.png', 'jp': './assets/jp/campaign/OCR_OIL.png'}) diff --git a/module/combat/assets.py b/module/combat/assets.py index 931e45be4..982e6ff78 100644 --- a/module/combat/assets.py +++ b/module/combat/assets.py @@ -4,37 +4,37 @@ from module.base.template import Template # This file is generated by module.dev_tools.asset_extract. # Don't modified it manually. -AUTOMATION_CONFIRM = Button(area={'cn': (553, 526, 727, 584), 'en': (553, 515, 727, 574)}, color={'cn': (98, 146, 206), 'en': (96, 145, 205)}, button={'cn': (553, 526, 727, 584), 'en': (553, 515, 727, 574)}, file={'cn': './assets/cn/combat/AUTOMATION_CONFIRM.png', 'en': './assets/en/combat/AUTOMATION_CONFIRM.png'}) -AUTOMATION_CONFIRM_CHECK = Button(area={'cn': (745, 423, 764, 439), 'en': (745, 423, 764, 439)}, color={'cn': (181, 85, 82), 'en': (181, 85, 82)}, button={'cn': (745, 423, 764, 439), 'en': (745, 423, 764, 439)}, file={'cn': './assets/cn/combat/AUTOMATION_CONFIRM_CHECK.png', 'en': './assets/en/combat/AUTOMATION_CONFIRM_CHECK.png'}) -AUTOMATION_OFF = Button(area={'cn': (754, 113, 794, 129), 'en': (754, 113, 794, 129)}, color={'cn': (119, 71, 70), 'en': (119, 71, 70)}, button={'cn': (754, 113, 794, 129), 'en': (754, 113, 794, 129)}, file={'cn': './assets/cn/combat/AUTOMATION_OFF.png', 'en': './assets/en/combat/AUTOMATION_OFF.png'}) -AUTOMATION_ON = Button(area={'cn': (759, 113, 790, 129), 'en': (759, 113, 790, 129)}, color={'cn': (22, 112, 81), 'en': (22, 112, 81)}, button={'cn': (759, 113, 790, 129), 'en': (759, 113, 790, 129)}, file={'cn': './assets/cn/combat/AUTOMATION_ON.png', 'en': './assets/en/combat/AUTOMATION_ON.png'}) -AUTOMATION_SWITCH = Button(area={'cn': (821, 106, 907, 136), 'en': (823, 109, 907, 130)}, color={'cn': (95, 109, 147), 'en': (83, 98, 135)}, button={'cn': (821, 106, 907, 136), 'en': (823, 109, 907, 130)}, file={'cn': './assets/cn/combat/AUTOMATION_SWITCH.png', 'en': './assets/en/combat/AUTOMATION_SWITCH.png'}) -BATTLE_PREPARATION = Button(area={'cn': (1043, 607, 1241, 667), 'en': (1045, 607, 1241, 667)}, color={'cn': (234, 179, 97), 'en': (235, 182, 102)}, button={'cn': (1043, 607, 1241, 667), 'en': (1045, 607, 1241, 667)}, file={'cn': './assets/cn/combat/BATTLE_PREPARATION.png', 'en': './assets/en/combat/BATTLE_PREPARATION.png'}) -BATTLE_PREPARATION_WITH_OVERLAY = Button(area={'cn': (1058, 622, 1226, 652), 'en': (1058, 622, 1226, 652)}, color={'cn': (96, 74, 39), 'en': (96, 74, 39)}, button={'cn': (1058, 622, 1226, 652), 'en': (1058, 622, 1226, 652)}, file={'cn': './assets/cn/combat/BATTLE_PREPARATION_WITH_OVERLAY.png', 'en': './assets/en/combat/BATTLE_PREPARATION_WITH_OVERLAY.png'}) -BATTLE_STATUS_A = Button(area={'cn': (622, 266, 732, 288), 'en': (622, 266, 732, 288)}, color={'cn': (235, 227, 111), 'en': (235, 227, 111)}, button={'cn': (1000, 631, 1055, 689), 'en': (999, 630, 1047, 691)}, file={'cn': './assets/cn/combat/BATTLE_STATUS_A.png', 'en': './assets/en/combat/BATTLE_STATUS_A.png'}) -BATTLE_STATUS_B = Button(area={'cn': (663, 297, 709, 320), 'en': (663, 297, 709, 320)}, color={'cn': (193, 237, 255), 'en': (193, 237, 255)}, button={'cn': (999, 630, 1047, 691), 'en': (999, 630, 1047, 691)}, file={'cn': './assets/cn/combat/BATTLE_STATUS_B.png', 'en': './assets/en/combat/BATTLE_STATUS_B.png'}) -BATTLE_STATUS_C = Button(area={'cn': (431, 257, 514, 329), 'en': (431, 257, 514, 329)}, color={'cn': (169, 161, 164), 'en': (169, 161, 164)}, button={'cn': (431, 257, 514, 329), 'en': (431, 257, 514, 329)}, file={'cn': './assets/cn/combat/BATTLE_STATUS_C.png', 'en': './assets/en/combat/BATTLE_STATUS_C.png'}) -BATTLE_STATUS_D = Button(area={'cn': (431, 257, 514, 329), 'en': (603, 178, 631, 321)}, color={'cn': (169, 161, 164), 'en': (201, 207, 201)}, button={'cn': (431, 257, 514, 329), 'en': (603, 178, 631, 321)}, file={'cn': './assets/cn/combat/BATTLE_STATUS_D.png', 'en': './assets/en/combat/BATTLE_STATUS_D.png'}) -BATTLE_STATUS_S = Button(area={'cn': (633, 297, 722, 320), 'en': (629, 297, 722, 318)}, 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/BATTLE_STATUS_S.png', 'en': './assets/en/combat/BATTLE_STATUS_S.png'}) -COMBAT_AUTO = Button(area={'cn': (136, 573, 167, 604), 'en': (136, 573, 167, 604)}, color={'cn': (229, 242, 255), 'en': (229, 242, 255)}, button={'cn': (136, 573, 167, 604), 'en': (136, 573, 167, 604)}, file={'cn': './assets/cn/combat/COMBAT_AUTO.png', 'en': './assets/en/combat/COMBAT_AUTO.png'}) -COMBAT_AUTO_SWITCH = Button(area={'cn': (18, 38, 36, 56), 'en': (16, 31, 140, 62)}, color={'cn': (179, 198, 235), 'en': (105, 137, 189)}, button={'cn': (18, 38, 36, 56), 'en': (16, 31, 140, 62)}, file={'cn': './assets/cn/combat/COMBAT_AUTO_SWITCH.png', 'en': './assets/en/combat/COMBAT_AUTO_SWITCH.png'}) -EMERGENCY_REPAIR_AVAILABLE = Button(area={'cn': (106, 533, 119, 540), 'en': (106, 533, 119, 540)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255)}, button={'cn': (97, 512, 141, 557), 'en': (97, 512, 141, 557)}, file={'cn': './assets/cn/combat/EMERGENCY_REPAIR_AVAILABLE.png', 'en': './assets/en/combat/EMERGENCY_REPAIR_AVAILABLE.png'}) -EMERGENCY_REPAIR_CONFIRM = Button(area={'cn': (669, 418, 842, 475), 'en': (669, 418, 842, 475)}, color={'cn': (94, 143, 204), 'en': (94, 143, 204)}, button={'cn': (669, 418, 842, 475), 'en': (669, 418, 842, 475)}, file={'cn': './assets/cn/combat/EMERGENCY_REPAIR_CONFIRM.png', 'en': './assets/en/combat/EMERGENCY_REPAIR_CONFIRM.png'}) -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_B = Button(area={'cn': (400, 122, 447, 137), 'en': (400, 122, 447, 137)}, color={'cn': (194, 237, 255), 'en': (194, 237, 255)}, button={'cn': (999, 630, 1047, 691), 'en': (999, 630, 1047, 691)}, file={'cn': './assets/cn/combat/EXP_INFO_B.png', 'en': './assets/en/combat/EXP_INFO_B.png'}) -EXP_INFO_D = Button(area={'cn': (377, 42, 393, 137), 'en': (377, 42, 393, 137)}, color={'cn': (198, 206, 198), 'en': (198, 206, 198)}, button={'cn': (1000, 631, 1055, 689), 'en': (1000, 631, 1055, 689)}, file={'cn': './assets/cn/combat/EXP_INFO_D.png', 'en': './assets/en/combat/EXP_INFO_D.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': (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'}) -OPTS_INFO_D = Button(area={'cn': (565, 143, 692, 179), 'en': (565, 143, 692, 179)}, color={'cn': (171, 116, 110), 'en': (171, 116, 110)}, button={'cn': (590, 587, 627, 647), 'en': (590, 587, 627, 647)}, file={'cn': './assets/cn/combat/OPTS_INFO_D.png', 'en': './assets/en/combat/OPTS_INFO_D.png'}) -PAUSE = Button(area={'cn': (1236, 37, 1244, 59), 'en': (1236, 37, 1244, 59)}, color={'cn': (247, 243, 247), 'en': (247, 243, 247)}, button={'cn': (1162, 34, 1246, 61), 'en': (1151, 34, 1247, 61)}, file={'cn': './assets/cn/combat/PAUSE.png', 'en': './assets/en/combat/PAUSE.png'}) -PAUSE_DOUBLE_CHECK = Button(area={'cn': (1231, 35, 1236, 60), 'en': (1231, 35, 1236, 60)}, color={'cn': (96, 104, 136), 'en': (96, 104, 136)}, button={'cn': (1231, 35, 1236, 60), 'en': (1231, 35, 1236, 60)}, file={'cn': './assets/cn/combat/PAUSE_DOUBLE_CHECK.png', 'en': './assets/en/combat/PAUSE_DOUBLE_CHECK.png'}) -READY_AIR_RAID = Button(area={'cn': (887, 618, 907, 628), 'en': (887, 618, 907, 628)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255)}, button={'cn': (887, 618, 907, 628), 'en': (887, 618, 907, 628)}, file={'cn': './assets/cn/combat/READY_AIR_RAID.png', 'en': './assets/en/combat/READY_AIR_RAID.png'}) -READY_TORPEDO = Button(area={'cn': (1038, 611, 1046, 619), 'en': (1038, 611, 1046, 619)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255)}, button={'cn': (1038, 611, 1046, 619), 'en': (1038, 611, 1046, 619)}, file={'cn': './assets/cn/combat/READY_TORPEDO.png', 'en': './assets/en/combat/READY_TORPEDO.png'}) -SUBMARINE_AVAILABLE_CHECK_1 = Button(area={'cn': (707, 660, 712, 665), 'en': (707, 660, 712, 665)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255)}, button={'cn': (707, 660, 712, 665), 'en': (707, 660, 712, 665)}, file={'cn': './assets/cn/combat/SUBMARINE_AVAILABLE_CHECK_1.png', 'en': './assets/en/combat/SUBMARINE_AVAILABLE_CHECK_1.png'}) -SUBMARINE_AVAILABLE_CHECK_2 = Button(area={'cn': (790, 631, 795, 641), 'en': (790, 631, 795, 641)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255)}, button={'cn': (790, 631, 795, 641), 'en': (790, 631, 795, 641)}, file={'cn': './assets/cn/combat/SUBMARINE_AVAILABLE_CHECK_2.png', 'en': './assets/en/combat/SUBMARINE_AVAILABLE_CHECK_2.png'}) -SUBMARINE_CALLED = Button(area={'cn': (737, 608, 750, 626), 'en': (737, 608, 750, 626)}, color={'cn': (132, 134, 132), 'en': (132, 134, 132)}, button={'cn': (737, 608, 750, 626), 'en': (737, 608, 750, 626)}, file={'cn': './assets/cn/combat/SUBMARINE_CALLED.png', 'en': './assets/en/combat/SUBMARINE_CALLED.png'}) -SUBMARINE_READY = Button(area={'cn': (737, 608, 752, 625), 'en': (737, 608, 752, 625)}, color={'cn': (255, 251, 255), 'en': (255, 251, 255)}, button={'cn': (737, 608, 752, 625), 'en': (737, 608, 752, 625)}, file={'cn': './assets/cn/combat/SUBMARINE_READY.png', 'en': './assets/en/combat/SUBMARINE_READY.png'}) +AUTOMATION_CONFIRM = Button(area={'cn': (553, 526, 727, 584), 'en': (553, 515, 727, 574), 'jp': (556, 515, 723, 573)}, color={'cn': (98, 146, 206), 'en': (96, 145, 205), 'jp': (97, 146, 206)}, button={'cn': (553, 526, 727, 584), 'en': (553, 515, 727, 574), 'jp': (556, 515, 723, 573)}, file={'cn': './assets/cn/combat/AUTOMATION_CONFIRM.png', 'en': './assets/en/combat/AUTOMATION_CONFIRM.png', 'jp': './assets/jp/combat/AUTOMATION_CONFIRM.png'}) +AUTOMATION_CONFIRM_CHECK = Button(area={'cn': (745, 423, 764, 439), 'en': (745, 423, 764, 439), 'jp': (745, 423, 764, 439)}, color={'cn': (181, 85, 82), 'en': (181, 85, 82), 'jp': (181, 85, 82)}, button={'cn': (745, 423, 764, 439), 'en': (745, 423, 764, 439), 'jp': (745, 423, 764, 439)}, file={'cn': './assets/cn/combat/AUTOMATION_CONFIRM_CHECK.png', 'en': './assets/en/combat/AUTOMATION_CONFIRM_CHECK.png', 'jp': './assets/jp/combat/AUTOMATION_CONFIRM_CHECK.png'}) +AUTOMATION_OFF = Button(area={'cn': (754, 113, 794, 129), 'en': (754, 113, 794, 129), 'jp': (754, 113, 794, 129)}, color={'cn': (119, 71, 70), 'en': (119, 71, 70), 'jp': (119, 71, 70)}, button={'cn': (754, 113, 794, 129), 'en': (754, 113, 794, 129), 'jp': (754, 113, 794, 129)}, file={'cn': './assets/cn/combat/AUTOMATION_OFF.png', 'en': './assets/en/combat/AUTOMATION_OFF.png', 'jp': './assets/jp/combat/AUTOMATION_OFF.png'}) +AUTOMATION_ON = Button(area={'cn': (759, 113, 790, 129), 'en': (759, 113, 790, 129), 'jp': (759, 113, 790, 129)}, color={'cn': (22, 112, 81), 'en': (22, 112, 81), 'jp': (22, 112, 81)}, button={'cn': (759, 113, 790, 129), 'en': (759, 113, 790, 129), 'jp': (759, 113, 790, 129)}, file={'cn': './assets/cn/combat/AUTOMATION_ON.png', 'en': './assets/en/combat/AUTOMATION_ON.png', 'jp': './assets/jp/combat/AUTOMATION_ON.png'}) +AUTOMATION_SWITCH = Button(area={'cn': (821, 106, 907, 136), 'en': (823, 109, 907, 130), 'jp': (822, 105, 905, 133)}, color={'cn': (95, 109, 147), 'en': (83, 98, 135), 'jp': (103, 118, 157)}, button={'cn': (821, 106, 907, 136), 'en': (823, 109, 907, 130), 'jp': (822, 105, 905, 133)}, file={'cn': './assets/cn/combat/AUTOMATION_SWITCH.png', 'en': './assets/en/combat/AUTOMATION_SWITCH.png', 'jp': './assets/jp/combat/AUTOMATION_SWITCH.png'}) +BATTLE_PREPARATION = Button(area={'cn': (1043, 607, 1241, 667), 'en': (1045, 607, 1241, 667), 'jp': (1042, 605, 1241, 669)}, color={'cn': (234, 179, 97), 'en': (235, 182, 102), 'jp': (235, 180, 99)}, button={'cn': (1043, 607, 1241, 667), 'en': (1045, 607, 1241, 667), 'jp': (1042, 605, 1241, 669)}, file={'cn': './assets/cn/combat/BATTLE_PREPARATION.png', 'en': './assets/en/combat/BATTLE_PREPARATION.png', 'jp': './assets/jp/combat/BATTLE_PREPARATION.png'}) +BATTLE_PREPARATION_WITH_OVERLAY = Button(area={'cn': (1058, 622, 1226, 652), 'en': (1058, 622, 1226, 652), 'jp': (1058, 622, 1226, 652)}, color={'cn': (96, 74, 39), 'en': (96, 74, 39), 'jp': (96, 74, 39)}, button={'cn': (1058, 622, 1226, 652), 'en': (1058, 622, 1226, 652), 'jp': (1058, 622, 1226, 652)}, file={'cn': './assets/cn/combat/BATTLE_PREPARATION_WITH_OVERLAY.png', 'en': './assets/en/combat/BATTLE_PREPARATION_WITH_OVERLAY.png', 'jp': './assets/jp/combat/BATTLE_PREPARATION_WITH_OVERLAY.png'}) +BATTLE_STATUS_A = Button(area={'cn': (622, 266, 732, 288), 'en': (622, 266, 732, 288), 'jp': (624, 265, 732, 289)}, color={'cn': (235, 227, 111), 'en': (235, 227, 111), 'jp': (235, 227, 114)}, button={'cn': (1000, 631, 1055, 689), 'en': (999, 630, 1047, 691), 'jp': (1000, 631, 1055, 689)}, file={'cn': './assets/cn/combat/BATTLE_STATUS_A.png', 'en': './assets/en/combat/BATTLE_STATUS_A.png', 'jp': './assets/jp/combat/BATTLE_STATUS_A.png'}) +BATTLE_STATUS_B = Button(area={'cn': (663, 297, 709, 320), 'en': (663, 297, 709, 320), 'jp': (663, 297, 709, 320)}, color={'cn': (193, 237, 255), 'en': (193, 237, 255), 'jp': (193, 237, 255)}, button={'cn': (999, 630, 1047, 691), 'en': (999, 630, 1047, 691), 'jp': (663, 297, 709, 320)}, file={'cn': './assets/cn/combat/BATTLE_STATUS_B.png', 'en': './assets/en/combat/BATTLE_STATUS_B.png', 'jp': './assets/jp/combat/BATTLE_STATUS_B.png'}) +BATTLE_STATUS_C = Button(area={'cn': (431, 257, 514, 329), 'en': (431, 257, 514, 329), 'jp': (431, 257, 514, 329)}, color={'cn': (169, 161, 164), 'en': (169, 161, 164), 'jp': (169, 161, 164)}, button={'cn': (431, 257, 514, 329), 'en': (431, 257, 514, 329), 'jp': (431, 257, 514, 329)}, file={'cn': './assets/cn/combat/BATTLE_STATUS_C.png', 'en': './assets/en/combat/BATTLE_STATUS_C.png', 'jp': './assets/jp/combat/BATTLE_STATUS_C.png'}) +BATTLE_STATUS_D = Button(area={'cn': (431, 257, 514, 329), 'en': (603, 178, 631, 321), 'jp': (431, 257, 514, 329)}, color={'cn': (169, 161, 164), 'en': (201, 207, 201), 'jp': (169, 161, 164)}, button={'cn': (431, 257, 514, 329), 'en': (603, 178, 631, 321), 'jp': (431, 257, 514, 329)}, file={'cn': './assets/cn/combat/BATTLE_STATUS_D.png', 'en': './assets/en/combat/BATTLE_STATUS_D.png', 'jp': './assets/jp/combat/BATTLE_STATUS_D.png'}) +BATTLE_STATUS_S = Button(area={'cn': (633, 297, 722, 320), 'en': (629, 297, 722, 318), 'jp': (638, 235, 722, 261)}, color={'cn': (233, 241, 127), 'en': (233, 241, 127), 'jp': (231, 204, 109)}, button={'cn': (1000, 631, 1055, 689), 'en': (999, 630, 1047, 691), 'jp': (1000, 631, 1055, 689)}, file={'cn': './assets/cn/combat/BATTLE_STATUS_S.png', 'en': './assets/en/combat/BATTLE_STATUS_S.png', 'jp': './assets/jp/combat/BATTLE_STATUS_S.png'}) +COMBAT_AUTO = Button(area={'cn': (136, 573, 167, 604), 'en': (136, 573, 167, 604), 'jp': (136, 573, 167, 604)}, color={'cn': (229, 242, 255), 'en': (229, 242, 255), 'jp': (229, 242, 255)}, button={'cn': (136, 573, 167, 604), 'en': (136, 573, 167, 604), 'jp': (136, 573, 167, 604)}, file={'cn': './assets/cn/combat/COMBAT_AUTO.png', 'en': './assets/en/combat/COMBAT_AUTO.png', 'jp': './assets/jp/combat/COMBAT_AUTO.png'}) +COMBAT_AUTO_SWITCH = Button(area={'cn': (18, 38, 36, 56), 'en': (16, 31, 140, 62), 'jp': (18, 36, 54, 57)}, color={'cn': (179, 198, 235), 'en': (105, 137, 189), 'jp': (160, 177, 220)}, button={'cn': (18, 38, 36, 56), 'en': (16, 31, 140, 62), 'jp': (18, 36, 54, 57)}, file={'cn': './assets/cn/combat/COMBAT_AUTO_SWITCH.png', 'en': './assets/en/combat/COMBAT_AUTO_SWITCH.png', 'jp': './assets/jp/combat/COMBAT_AUTO_SWITCH.png'}) +EMERGENCY_REPAIR_AVAILABLE = Button(area={'cn': (106, 533, 119, 540), 'en': (106, 533, 119, 540), 'jp': (106, 533, 119, 540)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255)}, button={'cn': (97, 512, 141, 557), 'en': (97, 512, 141, 557), 'jp': (97, 512, 141, 557)}, file={'cn': './assets/cn/combat/EMERGENCY_REPAIR_AVAILABLE.png', 'en': './assets/en/combat/EMERGENCY_REPAIR_AVAILABLE.png', 'jp': './assets/jp/combat/EMERGENCY_REPAIR_AVAILABLE.png'}) +EMERGENCY_REPAIR_CONFIRM = Button(area={'cn': (669, 418, 842, 475), 'en': (669, 418, 842, 475), 'jp': (669, 418, 842, 475)}, color={'cn': (94, 143, 204), 'en': (94, 143, 204), 'jp': (94, 143, 204)}, button={'cn': (669, 418, 842, 475), 'en': (669, 418, 842, 475), 'jp': (669, 418, 842, 475)}, file={'cn': './assets/cn/combat/EMERGENCY_REPAIR_CONFIRM.png', 'en': './assets/en/combat/EMERGENCY_REPAIR_CONFIRM.png', 'jp': './assets/jp/combat/EMERGENCY_REPAIR_CONFIRM.png'}) +EXP_INFO_A = Button(area={'cn': (389, 100, 444, 116), 'en': (389, 100, 444, 116), 'jp': (389, 100, 444, 116)}, color={'cn': (236, 231, 116), 'en': (236, 231, 116), 'jp': (236, 231, 116)}, button={'cn': (1000, 631, 1055, 689), 'en': (999, 630, 1047, 691), 'jp': (1000, 631, 1055, 689)}, file={'cn': './assets/cn/combat/EXP_INFO_A.png', 'en': './assets/en/combat/EXP_INFO_A.png', 'jp': './assets/jp/combat/EXP_INFO_A.png'}) +EXP_INFO_B = Button(area={'cn': (400, 122, 447, 137), 'en': (400, 122, 447, 137), 'jp': (400, 122, 447, 137)}, color={'cn': (194, 237, 255), 'en': (194, 237, 255), 'jp': (194, 237, 255)}, button={'cn': (999, 630, 1047, 691), 'en': (999, 630, 1047, 691), 'jp': (400, 122, 447, 137)}, file={'cn': './assets/cn/combat/EXP_INFO_B.png', 'en': './assets/en/combat/EXP_INFO_B.png', 'jp': './assets/jp/combat/EXP_INFO_B.png'}) +EXP_INFO_D = Button(area={'cn': (377, 42, 393, 137), 'en': (377, 42, 393, 137), 'jp': (377, 42, 393, 137)}, color={'cn': (198, 206, 198), 'en': (198, 206, 198), 'jp': (198, 206, 198)}, button={'cn': (1000, 631, 1055, 689), 'en': (1000, 631, 1055, 689), 'jp': (377, 42, 393, 137)}, file={'cn': './assets/cn/combat/EXP_INFO_D.png', 'en': './assets/en/combat/EXP_INFO_D.png', 'jp': './assets/jp/combat/EXP_INFO_D.png'}) +EXP_INFO_S = Button(area={'cn': (396, 122, 457, 137), 'en': (396, 122, 457, 137), 'jp': (396, 122, 457, 137)}, color={'cn': (233, 241, 127), 'en': (233, 241, 127), 'jp': (233, 241, 127)}, button={'cn': (1000, 631, 1055, 689), 'en': (999, 630, 1047, 691), 'jp': (1000, 631, 1055, 689)}, file={'cn': './assets/cn/combat/EXP_INFO_S.png', 'en': './assets/en/combat/EXP_INFO_S.png', 'jp': './assets/jp/combat/EXP_INFO_S.png'}) +GET_ITEMS_1 = Button(area={'cn': (538, 217, 741, 253), 'en': (550, 215, 739, 246), 'jp': (539, 220, 741, 252)}, color={'cn': (160, 192, 248), 'en': (157, 187, 233), 'jp': (146, 184, 249)}, button={'cn': (1000, 631, 1055, 689), 'en': (999, 630, 1047, 691), 'jp': (1000, 631, 1055, 689)}, file={'cn': './assets/cn/combat/GET_ITEMS_1.png', 'en': './assets/en/combat/GET_ITEMS_1.png', 'jp': './assets/jp/combat/GET_ITEMS_1.png'}) +GET_ITEMS_2 = Button(area={'cn': (538, 146, 742, 182), 'en': (549, 140, 740, 176), 'jp': (536, 146, 741, 182)}, color={'cn': (160, 192, 248), 'en': (152, 185, 236), 'jp': (145, 182, 249)}, button={'cn': (1000, 631, 1055, 689), 'en': (999, 630, 1047, 691), 'jp': (1000, 631, 1055, 689)}, file={'cn': './assets/cn/combat/GET_ITEMS_2.png', 'en': './assets/en/combat/GET_ITEMS_2.png', 'jp': './assets/jp/combat/GET_ITEMS_2.png'}) +GET_SHIP = Button(area={'cn': (1104, 610, 1110, 630), 'en': (1104, 610, 1110, 630), 'jp': (1104, 610, 1110, 630)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255)}, button={'cn': (1000, 631, 1055, 689), 'en': (999, 630, 1047, 691), 'jp': (1000, 631, 1055, 689)}, file={'cn': './assets/cn/combat/GET_SHIP.png', 'en': './assets/en/combat/GET_SHIP.png', 'jp': './assets/jp/combat/GET_SHIP.png'}) +LOADING_BAR = Button(area={'cn': (33, 676, 1247, 680), 'en': (33, 676, 1247, 680), 'jp': (33, 676, 1247, 680)}, color={'cn': (172, 205, 232), 'en': (172, 205, 232), 'jp': (172, 205, 232)}, button={'cn': (33, 676, 1247, 680), 'en': (33, 676, 1247, 680), 'jp': (33, 676, 1247, 680)}, file={'cn': './assets/cn/combat/LOADING_BAR.png', 'en': './assets/en/combat/LOADING_BAR.png', 'jp': './assets/jp/combat/LOADING_BAR.png'}) +MOVE_DOWN = Button(area={'cn': (148, 647, 155, 669), 'en': (148, 647, 155, 669), 'jp': (148, 647, 155, 669)}, color={'cn': (21, 28, 57), 'en': (21, 28, 57), 'jp': (21, 28, 57)}, button={'cn': (148, 647, 155, 669), 'en': (148, 647, 155, 669), 'jp': (148, 647, 155, 669)}, file={'cn': './assets/cn/combat/MOVE_DOWN.png', 'en': './assets/en/combat/MOVE_DOWN.png', 'jp': './assets/jp/combat/MOVE_DOWN.png'}) +OPTS_INFO_D = Button(area={'cn': (565, 143, 692, 179), 'en': (565, 143, 692, 179), 'jp': (565, 143, 692, 179)}, color={'cn': (171, 116, 110), 'en': (171, 116, 110), 'jp': (171, 116, 110)}, button={'cn': (590, 587, 627, 647), 'en': (590, 587, 627, 647), 'jp': (565, 143, 692, 179)}, 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'}) +PAUSE = Button(area={'cn': (1236, 37, 1244, 59), 'en': (1236, 37, 1244, 59), 'jp': (1236, 37, 1244, 59)}, color={'cn': (247, 243, 247), 'en': (247, 243, 247), 'jp': (247, 243, 247)}, button={'cn': (1162, 34, 1246, 61), 'en': (1151, 34, 1247, 61), 'jp': (1146, 38, 1225, 57)}, file={'cn': './assets/cn/combat/PAUSE.png', 'en': './assets/en/combat/PAUSE.png', 'jp': './assets/jp/combat/PAUSE.png'}) +PAUSE_DOUBLE_CHECK = Button(area={'cn': (1231, 35, 1236, 60), 'en': (1231, 35, 1236, 60), 'jp': (1231, 35, 1235, 60)}, color={'cn': (96, 104, 136), 'en': (96, 104, 136), 'jp': (97, 102, 120)}, button={'cn': (1231, 35, 1236, 60), 'en': (1231, 35, 1236, 60), 'jp': (1231, 35, 1235, 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'}) +READY_AIR_RAID = Button(area={'cn': (887, 618, 907, 628), 'en': (887, 618, 907, 628), 'jp': (887, 618, 907, 628)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255)}, button={'cn': (887, 618, 907, 628), 'en': (887, 618, 907, 628), 'jp': (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'}) +READY_TORPEDO = Button(area={'cn': (1038, 611, 1046, 619), 'en': (1038, 611, 1046, 619), 'jp': (1038, 611, 1046, 619)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255)}, button={'cn': (1038, 611, 1046, 619), 'en': (1038, 611, 1046, 619), 'jp': (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'}) +SUBMARINE_AVAILABLE_CHECK_1 = Button(area={'cn': (707, 660, 712, 665), 'en': (707, 660, 712, 665), 'jp': (707, 660, 712, 665)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255)}, button={'cn': (707, 660, 712, 665), 'en': (707, 660, 712, 665), 'jp': (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'}) +SUBMARINE_AVAILABLE_CHECK_2 = Button(area={'cn': (790, 631, 795, 641), 'en': (790, 631, 795, 641), 'jp': (790, 631, 795, 641)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255)}, button={'cn': (790, 631, 795, 641), 'en': (790, 631, 795, 641), 'jp': (790, 631, 795, 641)}, file={'cn': './assets/cn/combat/SUBMARINE_AVAILABLE_CHECK_2.png', 'en': './assets/en/combat/SUBMARINE_AVAILABLE_CHECK_2.png', 'jp': './assets/jp/combat/SUBMARINE_AVAILABLE_CHECK_2.png'}) +SUBMARINE_CALLED = Button(area={'cn': (737, 608, 750, 626), 'en': (737, 608, 750, 626), 'jp': (737, 608, 750, 626)}, color={'cn': (132, 134, 132), 'en': (132, 134, 132), 'jp': (132, 134, 132)}, button={'cn': (737, 608, 750, 626), 'en': (737, 608, 750, 626), 'jp': (737, 608, 750, 626)}, file={'cn': './assets/cn/combat/SUBMARINE_CALLED.png', 'en': './assets/en/combat/SUBMARINE_CALLED.png', 'jp': './assets/jp/combat/SUBMARINE_CALLED.png'}) +SUBMARINE_READY = Button(area={'cn': (737, 608, 752, 625), 'en': (737, 608, 752, 625), 'jp': (737, 608, 752, 625)}, color={'cn': (255, 251, 255), 'en': (255, 251, 255), 'jp': (255, 251, 255)}, button={'cn': (737, 608, 752, 625), 'en': (737, 608, 752, 625), 'jp': (737, 608, 752, 625)}, file={'cn': './assets/cn/combat/SUBMARINE_READY.png', 'en': './assets/en/combat/SUBMARINE_READY.png', 'jp': './assets/jp/combat/SUBMARINE_READY.png'}) diff --git a/module/config/argparser_jp.py b/module/config/argparser_jp.py new file mode 100644 index 000000000..f495f06e0 --- /dev/null +++ b/module/config/argparser_jp.py @@ -0,0 +1,382 @@ +import codecs +import configparser +import os +import shutil + +from gooey import Gooey, GooeyParser + +from alas import AzurLaneAutoScript +from module.config.dictionary import dic_true_eng_to_eng, dic_eng_to_true_eng +from module.logger import logger, pyw_name + + +def update_config_from_template(config, file): + """ + Args: + config (configparser.ConfigParser): + + Returns: + configparser.ConfigParser: + """ + template = configparser.ConfigParser(interpolation=None) + template.read_file(codecs.open(f'./config/template.ini', "r", "utf8")) + changed = False + # Update section. + for section in template.sections(): + if not config.has_section(section): + config.add_section(section) + changed = True + for section in config.sections(): + if not template.has_section(section): + config.remove_section(section) + changed = True + # Update option + for section in template.sections(): + for option in template.options(section): + if not config.has_option(section, option): + config.set(section, option, value=template.get(section, option)) + changed = True + for section in config.sections(): + for option in config.options(section): + if not template.has_option(section, option): + config.remove_option(section, option) + changed = True + # Save + if changed: + config.write(codecs.open(file, "w+", "utf8")) + return config + + +@Gooey( + optional_cols=2, + program_name=pyw_name.capitalize(), + sidebar_title='Function', + terminal_font_family='Consolas', + language='english', + default_size=(1000, 720), + navigation='SIDEBAR', + tabbed_groups=True, + show_success_modal=False, + show_failure_modal=False, + # show_stop_warning=False, + # load_build_config='gooey_config.json', + # dump_build_config='gooey_config.json', +) +def main(ini_name=''): + if not ini_name: + ini_name = pyw_name + ini_name = ini_name.lower() + + # Load default value from .ini file. + config_file = f'./config/{ini_name}.ini' + config = configparser.ConfigParser(interpolation=None) + try: + config.read_file(codecs.open(config_file, "r", "utf8")) + except FileNotFoundError: + logger.info('Config file not exists, copy from ./config/template.ini') + shutil.copy('./config/template.ini', config_file) + config.read_file(codecs.open(config_file, "r", "utf8")) + + config = update_config_from_template(config, file=config_file) + + event_folder = [dic_eng_to_true_eng.get(f, f) for f in os.listdir('./campaign') if f.startswith('event_')][::-1] + + saved_config = {} + for opt, option in config.items(): + for key, value in option.items(): + key = dic_eng_to_true_eng.get(key, key) + if value in dic_eng_to_true_eng: + value = dic_eng_to_true_eng.get(value, value) + if value == 'None': + value = '' + + saved_config[key] = value + + def default(name): + """Get default value in .ini file. + Args: + name (str): option, in chinese. + + Returns: + str: Default value, in chinese. + """ + name = name.strip('-') + return saved_config.get(name, '') + + def choice_list(total): + return [str(index) for index in range(1, total + 1)] + + # Don't use checkbox in gooey, use drop box instead. + # https://github.com/chriskiehl/Gooey/issues/148 + # https://github.com/chriskiehl/Gooey/issues/485 + + parser = GooeyParser(description=f'AzurLaneAutoScript, An Azur Lane automation tool. Config: {config_file}') + subs = parser.add_subparsers(help='commands', dest='command') + + # ==========setting========== + setting_parser = subs.add_parser('setting') + + # 选择关卡 + stage = setting_parser.add_argument_group('Level settings', 'Need to run once to save options') + stage.add_argument('--enable_stop_condition', default=default('--enable_stop_condition'), choices=['yes', 'no']) + stage.add_argument('--enable_fast_forward', default=default('--enable_fast_forward'), choices=['yes', 'no']) + + stop = stage.add_argument_group('Stop condition', 'After triggering, it will not stop immediately. It will complete the current attack first, and fill in 0 if it is not needed.') + stop.add_argument('--if_count_greater_than', default=default('--if_count_greater_than'), help='The previous setting will be used, and the number\n of deductions will be deducted after completion of the attack until it is cleared.') + stop.add_argument('--if_time_reach', default=default('--if_time_reach'), help='Use the time within the next 24 hours, the previous setting will be used, and it will be cleared\n after the trigger. It is recommended to advance about\n 10 minutes to complete the current attack. Format 14:59') + stop.add_argument('--if_oil_lower_than', default=default('--if_oil_lower_than')) + stop.add_argument('--if_trigger_emotion_control', default=default('--if_trigger_emotion_control'), choices=['yes', 'no'], help='If yes, wait for reply, complete this time, stop \nIf no, wait for reply, complete this time, continue') + stop.add_argument('--if_dock_full', default=default('--if_dock_full'), choices=['yes', 'no']) + + # 出击舰队 + fleet = setting_parser.add_argument_group('Attack fleet', 'No support for alternate lane squadrons, inactive map or weekly mode will ignore the step setting') + fleet.add_argument('--enable_fleet_control', default=default('--enable_fleet_control'), choices=['yes', 'no']) + fleet.add_argument('--enable_map_fleet_lock', default=default('--enable_map_fleet_lock'), choices=['yes', 'no']) + + f1 = fleet.add_argument_group('Road Fleet', 'Players can choose a formation before battle. Though it has no effect appearance-wise, the formations applies buffs to certain stats.\nLine Ahead: Increases Firepower and Torpedo by 15%, but reduces Evasion by 10% (Applies only to Vanguard fleet)\nDouble Line: Increases Evasion by 30%, but decreases Firepower and Torpedo by 5% (Applies only to Vanguard fleet)\nDiamond: Increases Anti-Air by 20% (no penalties, applies to entire fleet)') + f1.add_argument('--fleet_index_1', default=default('--fleet_index_1'), choices=['1', '2', '3', '4', '5', '6']) + f1.add_argument('--fleet_formation_1', default=default('--fleet_formation_1'), choices=['Line Ahead', 'Double Line', 'Diamond']) + f1.add_argument('--fleet_step_1', default=default('--fleet_step_1'), choices=['1', '2', '3', '4', '5', '6'], help='In event map, fleet has limit on moving, so fleet_step is how far can a fleet goes in one operation, if map cleared, it will be ignored') + + f2 = fleet.add_argument_group('Boss Fleet') + f2.add_argument('--fleet_index_2', default=default('--fleet_index_2'), choices=['do_not_use', '1', '2', '3', '4', '5', '6']) + f2.add_argument('--fleet_formation_2', default=default('--fleet_formation_2'), choices=['Line Ahead', 'Double Line', 'Diamond']) + f2.add_argument('--fleet_step_2', default=default('--fleet_step_2'), choices=['1', '2', '3', '4', '5', '6'], help='In event map, fleet has limit on moving, so fleet_step is how far can a fleet goes in one operation, if map cleared, it will be ignored') + + f3 = fleet.add_argument_group('Alternate Road Fleet') + f3.add_argument('--fleet_index_3', default=default('--fleet_index_3'), choices=['do_not_use', '1', '2', '3', '4', '5', '6']) + f3.add_argument('--fleet_formation_3', default=default('--fleet_formation_3'), choices=['Line Ahead', 'Double Line', 'Diamond']) + f3.add_argument('--fleet_step_3', default=default('--fleet_step_3'), choices=['1', '2', '3', '4', '5', '6'], help='In event map, fleet has limit on moving, so fleet_step is how far can a fleet goes in one operation, if map cleared, it will be ignored') + + f4 = fleet.add_argument_group('Auto-mode') + f4.add_argument('--combat_auto_mode', default=default('--combat_auto_mode'), choices=['combat_auto', 'combat_manual', 'stand_still_in_the_middle']) + + # 潜艇设置 + submarine = setting_parser.add_argument_group('Submarine settings', 'Only supported: hunt_only, do_not_use every_combat') + submarine.add_argument('--fleet_index_4', default=default('--fleet_index_4'), choices=['do_not_use', '1', '2']) + submarine.add_argument('--submarine_mode', default=default('--submarine_mode'), choices=['do_not_use', 'hunt_only', 'every_combat', 'when_no_ammo', 'when_boss_combat', 'when_boss_combat_boss_appear']) + + # 心情控制 + emotion = setting_parser.add_argument_group('Mood control') + emotion.add_argument('--enable_emotion_reduce', default=default('--enable_emotion_reduce'), choices=['yes', 'no']) + emotion.add_argument('--ignore_low_emotion_warn', default=default('--ignore_low_emotion_warn'), choices=['yes', 'no']) + + e1 = emotion.add_argument_group('Road Fleet') + e1.add_argument('--emotion_recover_1', default=default('--emotion_recover_1'), choices=['not_in_dormitory', 'dormitory_floor_1', 'dormitory_floor_2']) + e1.add_argument('--emotion_control_1', default=default('--emotion_control_1'), choices=['keep_high_emotion', 'avoid_green_face', 'avoid_yellow_face', 'avoid_red_face']) + e1.add_argument('--hole_fleet_married_1', default=default('--hole_fleet_married_1'), choices=['yes', 'no']) + + e2 = emotion.add_argument_group('BOSS Fleet') + e2.add_argument('--emotion_recover_2', default=default('--emotion_recover_2'), choices=['not_in_dormitory', 'dormitory_floor_1', 'dormitory_floor_2']) + e2.add_argument('--emotion_control_2', default=default('--emotion_control_2'), choices=['keep_high_emotion', 'avoid_green_face', 'avoid_yellow_face', 'avoid_red_face']) + e2.add_argument('--hole_fleet_married_2', default=default('--hole_fleet_married_2'), choices=['yes', 'no']) + + e3 = emotion.add_argument_group('Alternate Road Fleet', 'Will be used when the home team triggers mood control') + e3.add_argument('--emotion_recover_3', default=default('--emotion_recover_3'), choices=['not_in_dormitory', 'dormitory_floor_1', 'dormitory_floor_2']) + e3.add_argument('--emotion_control_3', default=default('--emotion_control_3'), choices=['keep_high_emotion', 'avoid_green_face', 'avoid_yellow_face', 'avoid_red_face']) + e3.add_argument('--hole_fleet_married_3', default=default('--hole_fleet_married_3'), choices=['yes', 'no']) + + # 血量平衡 + hp = setting_parser.add_argument_group('HP control', 'Fleet lock must be turned off to take effect') + hp.add_argument('--enable_hp_balance', default=default('--enable_hp_balance'), choices=['yes', 'no']) + hp.add_argument('--enable_low_hp_withdraw', default=default('--enable_low_hp_withdraw'), choices=['yes', 'no']) + hp_balance = hp.add_argument_group('HP Balance', '') + hp_balance.add_argument('--scout_hp_difference_threshold', default=default('--scout_hp_difference_threshold'), help='When the difference in HP volume is greater than the threshold, transpose') + hp_balance.add_argument('--scout_hp_weights', default=default('--scout_hp_weights'), help='Pioneer flesh should be modified when there is a difference, the format 1000,1000,1000') + hp_add = hp.add_argument_group('Emergency repair', '') + hp_add.add_argument('--emergency_repair_single_threshold', default=default('--emergency_repair_single_threshold'), help='Used when single shipgirl is below the threshold') + hp_add.add_argument('--emergency_repair_hole_threshold', default=default('--emergency_repair_hole_threshold'), help='Used when all front rows or all back rows are below the threshold') + hp_withdraw = hp.add_argument_group('Low HP volume withdrawal', '') + hp_withdraw.add_argument('--low_hp_withdraw_threshold', default=default('--low_hp_withdraw_threshold'), help='When HP is below the threshold, retreat') + + # 退役选项 + retire = setting_parser.add_argument_group('Retirement settings', '') + retire.add_argument('--enable_retirement', default=default('--enable_retirement'), choices=['yes', 'no']) + retire.add_argument('--use_one_click_retirement', default=default('--use_one_click_retirement'), choices=['yes', 'no']) + retire.add_argument('--retire_mode', default=default('--retire_mode'), choices=['retire_all', 'retire_10']) + + rarity = retire.add_argument_group('Retirement rarity', 'The ship type selection is not supported yet. Ignore the following options when using one-key retirement') + rarity.add_argument('--retire_n', default=default('--retire_n'), choices=['yes', 'no'], help='N') + rarity.add_argument('--retire_r', default=default('--retire_r'), choices=['yes', 'no'], help='R') + rarity.add_argument('--retire_sr', default=default('--retire_sr'), choices=['yes', 'no'], help='SR') + rarity.add_argument('--retire_ssr', default=default('--retire_ssr'), choices=['yes', 'no'], help='SSR') + + # 掉落记录 + drop = setting_parser.add_argument_group('Drop record', 'Save screenshots of dropped items, which will slow down the click speed when settlement is enabled') + drop.add_argument('--enable_drop_screenshot', default=default('--enable_drop_screenshot'), choices=['yes', 'no']) + drop.add_argument('--drop_screenshot_folder', default=default('--drop_screenshot_folder')) + + clear = setting_parser.add_argument_group('Wasteland mode', 'Unopened maps will stop after completion. Opened maps will ignore options, and its done if you do not open up') + clear.add_argument('--enable_map_clear_mode', default=default('--enable_map_clear_mode'), choices=['yes', 'no']) + clear.add_argument('--clear_mode_stop_condition', default=default('--clear_mode_stop_condition'), choices=['map_100', 'map_3_star', 'map_green']) + clear.add_argument('--map_star_clear_all', default=default('--map_star_clear_all'), choices=['index_1', 'index_2', 'index_3', 'do_not_use'], help='The first few stars are to destroy all enemy ships') + + # ==========reward========== + reward_parser = subs.add_parser('reward') + reward_condition = reward_parser.add_argument_group('Triggering conditions', 'Need to run once to save the options, after running it will enter the on-hook vegetable collection mode') + reward_condition.add_argument('--enable_reward', default=default('--enable_reward'), choices=['yes', 'no']) + reward_condition.add_argument('--reward_interval', default=default('--reward_interval'), choices=['20', '30', '60'], help='How many minutes to trigger collection') + + reward_oil = reward_parser.add_argument_group('Oil supplies', '') + reward_oil.add_argument('--enable_oil_reward', default=default('--enable_oil_reward'), choices=['yes', 'no']) + reward_oil.add_argument('--enable_coin_reward', default=default('--enable_coin_reward'), choices=['yes', 'no']) + + reward_mission = reward_parser.add_argument_group('mission rewards', '') + reward_mission.add_argument('--enable_mission_reward', default=default('--enable_mission_reward'), choices=['yes', 'no']) + + reward_commission = reward_parser.add_argument_group('Commission settings', '') + reward_commission.add_argument('--enable_commission_reward', default=default('--enable_commission_reward'), choices=['yes', 'no']) + reward_commission.add_argument('--commission_time_limit', default=default('--commission_time_limit'), help='Ignore orders whose completion time exceeds the limit, Format: 23:30') + + priority1 = reward_commission.add_argument_group('Time-consuming priority of delegation', '') + priority1.add_argument('--duration_shorter_than_2', default=default('--duration_shorter_than_2'), help='') + priority1.add_argument('--duration_longer_than_6', default=default('--duration_longer_than_6'), help='') + priority1.add_argument('--expire_shorter_than_2', default=default('--expire_shorter_than_2'), help='') + priority1.add_argument('--expire_longer_than_6', default=default('--expire_longer_than_6'), help='') + + priority2 = reward_commission.add_argument_group('Daily delegation priority', '') + priority2.add_argument('--daily_comm', default=default('--daily_comm'), help='Daily resource development, high-level tactical research and development') + priority2.add_argument('--major_comm', default=default('--major_comm'), help='1200 oil / 1000 oil commission') + + priority3 = reward_commission.add_argument_group('Additional delegation priority', '') + priority3.add_argument('--extra_drill', default=default('--extra_drill'), help='Short-range Sailing Training, Coastal Defense Patrol') + priority3.add_argument('--extra_part', default=default('--extra_part'), help='Small Merchant Escort, Forest Protection Commission') + priority3.add_argument('--extra_cube', default=default('--extra_cube'), help='Fleet Exercise Ⅲ, Fleet Escort ExerciseFleet Exercise Ⅲ') + priority3.add_argument('--extra_oil', default=default('--extra_oil'), help='Small-scale Oil Extraction, Large-scale Oil Extraction') + priority3.add_argument('--extra_book', default=default('--extra_book'), help='Small Merchant Escort, Large Merchant Escort') + + priority4 = reward_commission.add_argument_group('Emergency delegation priority', '') + priority4.add_argument('--urgent_drill', default=default('--urgent_drill'), help='Defend the transport troops, annihilate the enemy elite troops') + priority4.add_argument('--urgent_part', default=default('--urgent_part'), help='Support Vila Vela Island, support terror Banner') + priority4.add_argument('--urgent_cube', default=default('--urgent_cube'), help='Rescue merchant ship, enemy attack') + priority4.add_argument('--urgent_book', default=default('--urgent_book'), help='Support Tuhaoer Island, support Moe Island') + priority4.add_argument('--urgent_box', default=default('--urgent_box'), help='BIW equipment transportation, NYB equipment research and development') + priority4.add_argument('--urgent_gem', default=default('--urgent_gem'), help='BIW VIP guard, NYB patrol guard') + priority4.add_argument('--urgent_ship', default=default('--urgent_ship'), help='Small ship watching ceremony, alliance ship watching ceremony') + + reward_tactical = reward_parser.add_argument_group('Classroom', 'Only support continuation of skill books, not new skills') + reward_tactical.add_argument('--enable_tactical_reward', default=default('--enable_tactical_reward'), choices=['yes', 'no']) + reward_tactical.add_argument('--tactical_night_range', default=default('--tactical_night_range'), help='Format 23:30-06:30') + reward_tactical.add_argument('--tactical_book_tier', default=default('--tactical_book_tier'), choices=['3', '2', '1'], help='Skill book that uses at most T a few \nT3 is a gold book, T2 is a purple book, T1 is a blue book') + reward_tactical.add_argument('--tactical_exp_first', default=default('--tactical_exp_first'), choices=['yes', 'no'], help='Choose Yes, give priority to the 150% bonus \nSelect No, give priority to the skills book with the same rarity') + reward_tactical.add_argument('--tactical_book_tier_night', default=default('--tactical_book_tier_night'), choices=['3', '2', '1']) + reward_tactical.add_argument('--tactical_exp_first_night', default=default('--tactical_exp_first_night'), choices=['yes', 'no']) + + # ==========emulator========== + emulator_parser = subs.add_parser('emulator') + emulator = emulator_parser.add_argument_group('Emulator', 'Need to run once to save the options, it will check whether the game is started \nIf the game is started, trigger a collection') + emulator.add_argument('--serial', default=default('--serial'), help='Bluestacks 127.0.0.1:5555 \nNox 127.0.0.1:62001') + emulator.add_argument('--package_name', default=default('--package_name'), help='') + + debug = emulator_parser.add_argument_group('Debug settings', '') + debug.add_argument('--enable_error_log_and_screenshot_save', default=default('--enable_error_log_and_screenshot_save'), choices=['yes', 'no']) + debug.add_argument('--enable_perspective_error_image_save', default=default('--enable_perspective_error_image_save'), choices=['yes', 'no']) + + adb = emulator_parser.add_argument_group('ADB settings', '') + adb.add_argument('--use_adb_screenshot', default=default('--use_adb_screenshot'), choices=['yes', 'no'], help='It is recommended to enable it to reduce CPU usage') + adb.add_argument('--use_adb_control', default=default('--use_adb_control'), choices=['yes', 'no'], help='Suggest to close, can speed up the click speed') + adb.add_argument('--combat_screenshot_interval', default=default('--combat_screenshot_interval'), help='Slow down the screenshot speed during battle and reduce CPU') + + # ==========每日任务========== + daily_parser = subs.add_parser('daily') + + # 选择每日 + daily = daily_parser.add_argument_group('Choose daily', 'Daily tasks, exercises, difficulty charts') + daily.add_argument('--enable_daily_mission', default=default('--enable_daily_mission'), help='If there are records on the day, skip', choices=['yes', 'no']) + daily.add_argument('--enable_hard_campaign', default=default('--enable_hard_campaign'), help='If there are records on the day, skip', choices=['yes', 'no']) + daily.add_argument('--enable_exercise', default=default('--enable_exercise'), help='If there is a record after refreshing, skip', choices=['yes', 'no']) + + # 每日设置 + daily_task = daily_parser.add_argument_group('Daily settings', 'Does not support submarine daily') + daily_task.add_argument('--tactical_training', default=default('--tactical_training'), choices=['daily_air', 'daily_gun', 'daily_torpedo']) + daily_task.add_argument('--fierce_assault', default=default('--fierce_assault'), choices=['index_1', 'index_2', 'index_3']) + daily_task.add_argument('--escort_mission', default=default('--escort_mission'), choices=['index_1', 'index_2', 'index_3']) + daily_task.add_argument('--advance_mission', default=default('--advance_mission'), choices=['index_1', 'index_2', 'index_3']) + daily_task.add_argument('--daily_fleet', default=default('--daily_fleet'), choices=['1', '2', '3', '4', '5', '6']) + daily_task.add_argument('--daily_equipment', default=default('--daily_equipment'), help='Change equipment before playing, unload equipment after playing, do not need to fill in 0 \ncomma, such as 3, 1, 0, 1, 1, 0') + + # 困难设置 + hard = daily_parser.add_argument_group('Difficult setting', 'Need to turn on weekly mode, only support 10-4 temporarily') + hard.add_argument('--hard_campaign', default=default('--hard_campaign'), help='For example 10-4') + hard.add_argument('--hard_fleet', default=default('--hard_fleet'), choices=['1', '2']) + hard.add_argument('--hard_equipment', default=default('--hard_equipment'), help='Change equipment before playing, unload equipment after playing, do not need to fill in 0 \ncomma, such as 3, 1, 0, 1, 1, 0') + + # 演习设置 + exercise = daily_parser.add_argument_group('Exercise settings', 'Only support the most experience for the time being') + exercise.add_argument('--exercise_choose_mode', default=default('--exercise_choose_mode'), choices=['max_exp', 'max_ranking', 'good_opponent'], help='Only support the most experience for the time being') + exercise.add_argument('--exercise_preserve', default=default('--exercise_preserve'), help='Only 0 are temporarily reserved') + exercise.add_argument('--exercise_try', default=default('--exercise_try'), help='The number of attempts by each opponent') + exercise.add_argument('--exercise_hp_threshold', default=default('--exercise_hp_threshold'), help='HHP