bcsfe 3.3.0__tar.gz → 3.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. bcsfe-3.5.0/MANIFEST.in +1 -0
  2. {bcsfe-3.3.0/src/bcsfe.egg-info → bcsfe-3.5.0}/PKG-INFO +8 -7
  3. {bcsfe-3.3.0 → bcsfe-3.5.0}/README.md +7 -3
  4. {bcsfe-3.3.0 → bcsfe-3.5.0}/pyproject.toml +1 -9
  5. bcsfe-3.5.0/src/bcsfe/__init__.py +35 -0
  6. bcsfe-3.5.0/src/bcsfe/__main__.py +102 -0
  7. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/cli/__init__.py +2 -0
  8. bcsfe-3.5.0/src/bcsfe/cli/color.py +178 -0
  9. bcsfe-3.5.0/src/bcsfe/cli/color_hex.py +301 -0
  10. bcsfe-3.5.0/src/bcsfe/cli/dialog_creator.py +724 -0
  11. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/cli/edits/aku_realm.py +1 -1
  12. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/cli/edits/basic_items.py +86 -109
  13. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/cli/edits/cat_editor.py +352 -302
  14. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/cli/edits/clear_tutorial.py +1 -1
  15. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/cli/edits/enemy_editor.py +39 -43
  16. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/cli/edits/event_tickets.py +7 -8
  17. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/cli/edits/fixes.py +3 -3
  18. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/cli/edits/map.py +262 -187
  19. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/cli/edits/max_all.py +17 -37
  20. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/cli/edits/rare_ticket_trade.py +8 -7
  21. bcsfe-3.5.0/src/bcsfe/cli/edits/storage.py +250 -0
  22. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/cli/feature_handler.py +47 -49
  23. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/cli/file_dialog.py +33 -36
  24. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/cli/main.py +20 -26
  25. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/cli/recent_saves.py +8 -7
  26. bcsfe-3.5.0/src/bcsfe/cli/save_management.py +526 -0
  27. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/cli/server_cli.py +24 -22
  28. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/__init__.py +63 -8
  29. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/country_code.py +6 -8
  30. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/battle/battle_items.py +24 -17
  31. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/battle/slots.py +2 -4
  32. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/cat.py +2 -1
  33. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/gambling.py +2 -2
  34. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/gatya.py +12 -24
  35. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/medals.py +7 -8
  36. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/mission.py +6 -10
  37. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/nyanko_club.py +6 -9
  38. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/officer_pass.py +1 -1
  39. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/playtime.py +10 -10
  40. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/scheme_items.py +19 -19
  41. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/special_skill.py +83 -80
  42. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/talent_orbs.py +55 -53
  43. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/upgrade.py +6 -6
  44. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/user_rank_rewards.py +9 -16
  45. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/gamoto/base_materials.py +5 -10
  46. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/gamoto/cat_shrine.py +43 -54
  47. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/gamoto/gamatoto.py +45 -42
  48. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/gamoto/ototo.py +56 -74
  49. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/aku.py +2 -2
  50. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/challenge.py +5 -3
  51. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/dojo.py +3 -4
  52. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/enigma.py +6 -9
  53. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/event.py +32 -37
  54. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/outbreaks.py +10 -10
  55. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/story.py +311 -239
  56. bcsfe-3.5.0/src/bcsfe/core/game/map/uncanny.py +130 -0
  57. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/zero_legends.py +1 -1
  58. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/io/adb_handler.py +5 -7
  59. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/io/config.py +212 -186
  60. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/io/git_handler.py +4 -6
  61. bcsfe-3.5.0/src/bcsfe/core/io/json_file.py +30 -0
  62. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/io/path.py +54 -26
  63. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/io/root_handler.py +1 -1
  64. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/io/save.py +20 -9
  65. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/io/waydroid.py +26 -1
  66. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/io/yaml.py +1 -1
  67. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/locale_handler.py +10 -10
  68. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/log.py +11 -18
  69. bcsfe-3.5.0/src/bcsfe/core/max_value_helper.py +136 -0
  70. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/server/game_data_getter.py +11 -13
  71. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/server/request.py +4 -1
  72. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/server/server_handler.py +12 -10
  73. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/server/updater.py +6 -7
  74. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/theme_handler.py +14 -21
  75. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/core/config.properties +1 -4
  76. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/core/input.properties +5 -0
  77. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/core/locale.properties +7 -0
  78. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/core/save.properties +6 -16
  79. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/core/server.properties +3 -0
  80. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/edits/cats.properties +2 -0
  81. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/edits/items.properties +1 -0
  82. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/edits/map.properties +3 -3
  83. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/edits/missions.properties +2 -2
  84. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/edits/special_skills.properties +1 -1
  85. bcsfe-3.5.0/src/bcsfe/files/locales/tw/core/config.properties +92 -0
  86. bcsfe-3.5.0/src/bcsfe/files/locales/tw/core/files.properties +9 -0
  87. bcsfe-3.5.0/src/bcsfe/files/locales/tw/core/input.properties +31 -0
  88. bcsfe-3.5.0/src/bcsfe/files/locales/tw/core/locale.properties +33 -0
  89. bcsfe-3.5.0/src/bcsfe/files/locales/tw/core/main.properties +111 -0
  90. bcsfe-3.5.0/src/bcsfe/files/locales/tw/core/save.properties +106 -0
  91. bcsfe-3.5.0/src/bcsfe/files/locales/tw/core/server.properties +58 -0
  92. bcsfe-3.5.0/src/bcsfe/files/locales/tw/core/theme.properties +24 -0
  93. bcsfe-3.5.0/src/bcsfe/files/locales/tw/core/updater.properties +19 -0
  94. bcsfe-3.5.0/src/bcsfe/files/locales/tw/edits/bannable_items.properties +30 -0
  95. bcsfe-3.5.0/src/bcsfe/files/locales/tw/edits/cats.properties +160 -0
  96. bcsfe-3.5.0/src/bcsfe/files/locales/tw/edits/enemy.properties +17 -0
  97. bcsfe-3.5.0/src/bcsfe/files/locales/tw/edits/fixes.properties +13 -0
  98. bcsfe-3.5.0/src/bcsfe/files/locales/tw/edits/gambling.properties +3 -0
  99. bcsfe-3.5.0/src/bcsfe/files/locales/tw/edits/gamototo.properties +56 -0
  100. bcsfe-3.5.0/src/bcsfe/files/locales/tw/edits/gatya.properties +8 -0
  101. bcsfe-3.5.0/src/bcsfe/files/locales/tw/edits/gold_pass.properties +6 -0
  102. bcsfe-3.5.0/src/bcsfe/files/locales/tw/edits/items.properties +64 -0
  103. bcsfe-3.5.0/src/bcsfe/files/locales/tw/edits/map.properties +178 -0
  104. bcsfe-3.5.0/src/bcsfe/files/locales/tw/edits/medals.properties +8 -0
  105. bcsfe-3.5.0/src/bcsfe/files/locales/tw/edits/missions.properties +7 -0
  106. bcsfe-3.5.0/src/bcsfe/files/locales/tw/edits/playtime.properties +7 -0
  107. bcsfe-3.5.0/src/bcsfe/files/locales/tw/edits/scheme_items.properties +6 -0
  108. bcsfe-3.5.0/src/bcsfe/files/locales/tw/edits/special_skills.properties +10 -0
  109. bcsfe-3.5.0/src/bcsfe/files/locales/tw/edits/talent_orbs.properties +26 -0
  110. bcsfe-3.5.0/src/bcsfe/files/locales/tw/edits/treasures.properties +24 -0
  111. bcsfe-3.5.0/src/bcsfe/files/locales/tw/edits/user_rank.properties +9 -0
  112. bcsfe-3.5.0/src/bcsfe/files/locales/tw/metadata.json +4 -0
  113. bcsfe-3.5.0/src/bcsfe/files/locales/vi/core/config.properties +92 -0
  114. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/vi/core/files.properties +1 -1
  115. bcsfe-3.5.0/src/bcsfe/files/locales/vi/core/input.properties +33 -0
  116. bcsfe-3.5.0/src/bcsfe/files/locales/vi/core/locale.properties +118 -0
  117. bcsfe-3.5.0/src/bcsfe/files/locales/vi/core/main.properties +75 -0
  118. bcsfe-3.5.0/src/bcsfe/files/locales/vi/core/save.properties +73 -0
  119. bcsfe-3.5.0/src/bcsfe/files/locales/vi/core/server.properties +31 -0
  120. bcsfe-3.5.0/src/bcsfe/files/locales/vi/core/theme.properties +24 -0
  121. bcsfe-3.5.0/src/bcsfe/files/locales/vi/core/updater.properties +20 -0
  122. bcsfe-3.5.0/src/bcsfe/files/locales/vi/edits/bannable_items.properties +31 -0
  123. bcsfe-3.5.0/src/bcsfe/files/locales/vi/edits/cats.properties +154 -0
  124. bcsfe-3.5.0/src/bcsfe/files/locales/vi/edits/enemy.properties +18 -0
  125. bcsfe-3.5.0/src/bcsfe/files/locales/vi/edits/fixes.properties +13 -0
  126. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/vi/edits/gambling.properties +4 -3
  127. bcsfe-3.5.0/src/bcsfe/files/locales/vi/edits/gamototo.properties +56 -0
  128. bcsfe-3.5.0/src/bcsfe/files/locales/vi/edits/gatya.properties +9 -0
  129. bcsfe-3.5.0/src/bcsfe/files/locales/vi/edits/gold_pass.properties +7 -0
  130. bcsfe-3.5.0/src/bcsfe/files/locales/vi/edits/items.properties +65 -0
  131. bcsfe-3.5.0/src/bcsfe/files/locales/vi/edits/map.properties +177 -0
  132. bcsfe-3.5.0/src/bcsfe/files/locales/vi/edits/medals.properties +9 -0
  133. bcsfe-3.5.0/src/bcsfe/files/locales/vi/edits/missions.properties +8 -0
  134. bcsfe-3.5.0/src/bcsfe/files/locales/vi/edits/playtime.properties +8 -0
  135. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/vi/edits/scheme_items.properties +1 -1
  136. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/vi/edits/special_skills.properties +3 -3
  137. bcsfe-3.5.0/src/bcsfe/files/locales/vi/edits/talent_orbs.properties +24 -0
  138. bcsfe-3.5.0/src/bcsfe/files/locales/vi/edits/treasures.properties +25 -0
  139. bcsfe-3.5.0/src/bcsfe/files/locales/vi/edits/user_rank.properties +10 -0
  140. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/vi/metadata.json +0 -0
  141. {bcsfe-3.3.0 → bcsfe-3.5.0/src/bcsfe.egg-info}/PKG-INFO +8 -7
  142. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe.egg-info/SOURCES.txt +29 -1
  143. bcsfe-3.5.0/src/bcsfe.egg-info/requires.txt +4 -0
  144. {bcsfe-3.3.0 → bcsfe-3.5.0}/tests/test_parse.py +0 -3
  145. bcsfe-3.3.0/MANIFEST.in +0 -3
  146. bcsfe-3.3.0/src/bcsfe/__init__.py +0 -12
  147. bcsfe-3.3.0/src/bcsfe/__main__.py +0 -66
  148. bcsfe-3.3.0/src/bcsfe/cli/color.py +0 -179
  149. bcsfe-3.3.0/src/bcsfe/cli/dialog_creator.py +0 -721
  150. bcsfe-3.3.0/src/bcsfe/cli/edits/storage.py +0 -214
  151. bcsfe-3.3.0/src/bcsfe/cli/save_management.py +0 -639
  152. bcsfe-3.3.0/src/bcsfe/core/game/map/uncanny.py +0 -104
  153. bcsfe-3.3.0/src/bcsfe/core/io/json_file.py +0 -45
  154. bcsfe-3.3.0/src/bcsfe/core/max_value_helper.py +0 -70
  155. bcsfe-3.3.0/src/bcsfe/files/locales/vi/core/config.properties +0 -97
  156. bcsfe-3.3.0/src/bcsfe/files/locales/vi/core/input.properties +0 -32
  157. bcsfe-3.3.0/src/bcsfe/files/locales/vi/core/locale.properties +0 -33
  158. bcsfe-3.3.0/src/bcsfe/files/locales/vi/core/main.properties +0 -113
  159. bcsfe-3.3.0/src/bcsfe/files/locales/vi/core/save.properties +0 -107
  160. bcsfe-3.3.0/src/bcsfe/files/locales/vi/core/server.properties +0 -51
  161. bcsfe-3.3.0/src/bcsfe/files/locales/vi/core/theme.properties +0 -25
  162. bcsfe-3.3.0/src/bcsfe/files/locales/vi/core/updater.properties +0 -20
  163. bcsfe-3.3.0/src/bcsfe/files/locales/vi/edits/bannable_items.properties +0 -31
  164. bcsfe-3.3.0/src/bcsfe/files/locales/vi/edits/cats.properties +0 -166
  165. bcsfe-3.3.0/src/bcsfe/files/locales/vi/edits/enemy.properties +0 -18
  166. bcsfe-3.3.0/src/bcsfe/files/locales/vi/edits/fixes.properties +0 -14
  167. bcsfe-3.3.0/src/bcsfe/files/locales/vi/edits/gamototo.properties +0 -55
  168. bcsfe-3.3.0/src/bcsfe/files/locales/vi/edits/gatya.properties +0 -9
  169. bcsfe-3.3.0/src/bcsfe/files/locales/vi/edits/gold_pass.properties +0 -7
  170. bcsfe-3.3.0/src/bcsfe/files/locales/vi/edits/items.properties +0 -56
  171. bcsfe-3.3.0/src/bcsfe/files/locales/vi/edits/map.properties +0 -158
  172. bcsfe-3.3.0/src/bcsfe/files/locales/vi/edits/medals.properties +0 -9
  173. bcsfe-3.3.0/src/bcsfe/files/locales/vi/edits/missions.properties +0 -8
  174. bcsfe-3.3.0/src/bcsfe/files/locales/vi/edits/playtime.properties +0 -8
  175. bcsfe-3.3.0/src/bcsfe/files/locales/vi/edits/talent_orbs.properties +0 -25
  176. bcsfe-3.3.0/src/bcsfe/files/locales/vi/edits/treasures.properties +0 -25
  177. bcsfe-3.3.0/src/bcsfe/files/locales/vi/edits/user_rank.properties +0 -10
  178. bcsfe-3.3.0/src/bcsfe/files/max_values.json +0 -26
  179. bcsfe-3.3.0/src/bcsfe.egg-info/requires.txt +0 -7
  180. {bcsfe-3.3.0 → bcsfe-3.5.0}/LICENSE +0 -0
  181. {bcsfe-3.3.0 → bcsfe-3.5.0}/setup.cfg +0 -0
  182. {bcsfe-3.3.0 → bcsfe-3.5.0}/setup.py +0 -0
  183. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/cli/edits/__init__.py +0 -0
  184. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/crypto.py +0 -0
  185. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/__init__.py +0 -0
  186. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/battle/__init__.py +0 -0
  187. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/battle/cleared_slots.py +0 -0
  188. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/battle/enemy.py +0 -0
  189. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/__init__.py +0 -0
  190. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/beacon_base.py +0 -0
  191. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/drop_chara.py +0 -0
  192. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/gatya_item.py +0 -0
  193. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/item_pack.py +0 -0
  194. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/login_bonuses.py +0 -0
  195. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/matatabi.py +0 -0
  196. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/my_sale.py +0 -0
  197. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/powerup.py +0 -0
  198. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/stamp.py +0 -0
  199. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/catbase/unlock_popups.py +0 -0
  200. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/gamoto/__init__.py +0 -0
  201. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/gamoto/catamins.py +0 -0
  202. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/localizable.py +0 -0
  203. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/__init__.py +0 -0
  204. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/chapters.py +0 -0
  205. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/ex_stage.py +0 -0
  206. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/gauntlets.py +0 -0
  207. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/item_reward_stage.py +0 -0
  208. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/legend_quest.py +0 -0
  209. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/map_names.py +0 -0
  210. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/map_option.py +0 -0
  211. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/map_reset.py +0 -0
  212. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/timed_score.py +0 -0
  213. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game/map/tower.py +0 -0
  214. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/game_version.py +0 -0
  215. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/io/__init__.py +0 -0
  216. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/io/bc_csv.py +0 -0
  217. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/io/command.py +0 -0
  218. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/io/data.py +0 -0
  219. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/io/thread_helper.py +0 -0
  220. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/server/__init__.py +0 -0
  221. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/server/client_info.py +0 -0
  222. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/server/event_data.py +0 -0
  223. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/server/headers.py +0 -0
  224. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/core/server/managed_item.py +0 -0
  225. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/core/files.properties +0 -0
  226. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/core/main.properties +0 -0
  227. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/core/theme.properties +0 -0
  228. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/core/updater.properties +0 -0
  229. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/edits/bannable_items.properties +0 -0
  230. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/edits/enemy.properties +0 -0
  231. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/edits/fixes.properties +0 -0
  232. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/edits/gambling.properties +0 -0
  233. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/edits/gamototo.properties +0 -0
  234. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/edits/gatya.properties +0 -0
  235. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/edits/gold_pass.properties +0 -0
  236. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/edits/medals.properties +0 -0
  237. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/edits/playtime.properties +0 -0
  238. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/edits/scheme_items.properties +0 -0
  239. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/edits/talent_orbs.properties +0 -0
  240. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/edits/treasures.properties +0 -0
  241. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/locales/en/edits/user_rank.properties +0 -0
  242. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/themes/default.json +0 -0
  243. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/files/themes/discord.json +0 -0
  244. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe/py.typed +0 -0
  245. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe.egg-info/dependency_links.txt +0 -0
  246. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe.egg-info/entry_points.txt +0 -0
  247. {bcsfe-3.3.0 → bcsfe-3.5.0}/src/bcsfe.egg-info/top_level.txt +0 -0
@@ -0,0 +1 @@
1
+ recursive-include src/bcsfe/files *
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bcsfe
3
- Version: 3.3.0
3
+ Version: 3.5.0
4
4
  Summary: A save file editor for The Battle Cats
5
5
  Author: fieryhenry
6
6
  License-Expression: GPL-3.0-or-later
@@ -18,12 +18,9 @@ Classifier: Operating System :: OS Independent
18
18
  Requires-Python: >=3.9
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE
21
- Requires-Dist: aenum
22
- Requires-Dist: colored==1.4.4
23
21
  Requires-Dist: pyjwt
24
22
  Requires-Dist: requests
25
23
  Requires-Dist: pyyaml
26
- Requires-Dist: beautifulsoup4
27
24
  Requires-Dist: argparse
28
25
  Dynamic: license-file
29
26
 
@@ -35,6 +32,8 @@ Dynamic: license-file
35
32
 
36
33
  BCSFE is a python command line save editor for The Battle Cats.
37
34
 
35
+ Please submit issues and pull requests on [codeberg](https://codeberg.org/fieryhenry/BCSFE-Python)
36
+
38
37
  Join the [discord server](https://discord.gg/DvmMgvn5ZB) if you want to suggest
39
38
  new features, report bugs or get help on how to use the editor (please read the
40
39
  below tutorials first before asking for help).
@@ -56,6 +55,8 @@ test/develop new features
56
55
 
57
56
  - HungJoesifer for Vietnamese localization
58
57
 
58
+ - LinYuAn for Traditional Chinese localization
59
+
59
60
  ### Themes
60
61
 
61
62
  - HungJoesifer for the `discord` inspired theme
@@ -330,7 +331,7 @@ Once you have installed and ran the editor, you can now begin to edit your save
330
331
 
331
332
  1. In `The Battle Cats` enter the `Change Account / Device` menu in the `Settings` on the main menu.
332
333
 
333
- 2. Then enter the `Begin Data Transfer` menu.
334
+ 2. Then enter the `Change Device` -> `Retrieve Data from Old Device` menu.
334
335
 
335
336
  3. Then click / tap `Save Data to Server`, this should give you a transfer code and a confirmation
336
337
  code.
@@ -359,8 +360,8 @@ may also fail, if it does then try again.
359
360
  11. Back in-game, tap the `Close Game` button, then tap `Cancel Data Transfer` (and also possibly
360
361
  `Start Game From Beginning`)
361
362
 
362
- 12. Go back into the `Change Account / Device` menu and then go into the `Resume Data Transfer`
363
- menu
363
+ 12. Go back into the `Change Account / Device` menu and then go into the `Resume Data Transfer` ->
364
+ `Transfer Data to New Device` menu
364
365
 
365
366
  13. Enter the new codes, and tap `Resume Transfer`
366
367
 
@@ -6,6 +6,8 @@
6
6
 
7
7
  BCSFE is a python command line save editor for The Battle Cats.
8
8
 
9
+ Please submit issues and pull requests on [codeberg](https://codeberg.org/fieryhenry/BCSFE-Python)
10
+
9
11
  Join the [discord server](https://discord.gg/DvmMgvn5ZB) if you want to suggest
10
12
  new features, report bugs or get help on how to use the editor (please read the
11
13
  below tutorials first before asking for help).
@@ -27,6 +29,8 @@ test/develop new features
27
29
 
28
30
  - HungJoesifer for Vietnamese localization
29
31
 
32
+ - LinYuAn for Traditional Chinese localization
33
+
30
34
  ### Themes
31
35
 
32
36
  - HungJoesifer for the `discord` inspired theme
@@ -301,7 +305,7 @@ Once you have installed and ran the editor, you can now begin to edit your save
301
305
 
302
306
  1. In `The Battle Cats` enter the `Change Account / Device` menu in the `Settings` on the main menu.
303
307
 
304
- 2. Then enter the `Begin Data Transfer` menu.
308
+ 2. Then enter the `Change Device` -> `Retrieve Data from Old Device` menu.
305
309
 
306
310
  3. Then click / tap `Save Data to Server`, this should give you a transfer code and a confirmation
307
311
  code.
@@ -330,8 +334,8 @@ may also fail, if it does then try again.
330
334
  11. Back in-game, tap the `Close Game` button, then tap `Cancel Data Transfer` (and also possibly
331
335
  `Start Game From Beginning`)
332
336
 
333
- 12. Go back into the `Change Account / Device` menu and then go into the `Resume Data Transfer`
334
- menu
337
+ 12. Go back into the `Change Account / Device` menu and then go into the `Resume Data Transfer` ->
338
+ `Transfer Data to New Device` menu
335
339
 
336
340
  13. Enter the new codes, and tap `Resume Transfer`
337
341
 
@@ -17,15 +17,7 @@ classifiers = [
17
17
  "Programming Language :: Python :: 3.9",
18
18
  "Operating System :: OS Independent",
19
19
  ]
20
- dependencies = [
21
- "aenum",
22
- "colored==1.4.4",
23
- "pyjwt",
24
- "requests",
25
- "pyyaml",
26
- "beautifulsoup4",
27
- "argparse",
28
- ]
20
+ dependencies = ["pyjwt", "requests", "pyyaml", "argparse"]
29
21
  dynamic = ["version"]
30
22
  keywords = ["battle cats", "save editor", "hacking"]
31
23
 
@@ -0,0 +1,35 @@
1
+ __version__ = "3.5.0"
2
+
3
+ __app_name__ = "bcsfe"
4
+
5
+ from importlib.resources.abc import Traversable
6
+
7
+ from bcsfe import core, cli
8
+
9
+ __all__ = ["core", "cli"]
10
+
11
+
12
+ def copy_to_data_dir(base_path: Traversable, path: Traversable):
13
+ if path.is_dir():
14
+ for item in path.iterdir():
15
+ copy_to_data_dir(base_path, item)
16
+ else:
17
+ to_add = str(path)
18
+ base_s = str(base_path)
19
+ if to_add.startswith(base_s):
20
+ to_add = to_add[len(base_s) :]
21
+ if to_add.startswith("/") or to_add.startswith("\\"):
22
+ to_add = to_add[1:]
23
+
24
+ new_path = core.Path.get_data_folder().add(to_add)
25
+ data = path.read_bytes()
26
+
27
+ new_path.parent().generate_dirs()
28
+
29
+ new_path.write(core.Data(data))
30
+
31
+
32
+ def run():
33
+ from bcsfe import __main__
34
+
35
+ __main__.main()
@@ -0,0 +1,102 @@
1
+ from __future__ import annotations
2
+ import traceback
3
+
4
+ from bcsfe import cli, copy_to_data_dir
5
+
6
+ from bcsfe import core, __app_name__, __version__
7
+
8
+ import bcsfe
9
+ import argparse
10
+
11
+ from importlib import resources
12
+
13
+
14
+ def migrate(force: bool):
15
+ v_path = core.Path.get_data_folder().add("version.txt")
16
+ if not v_path.exists():
17
+ v_path.write(core.Data(__version__))
18
+ vers = None
19
+ else:
20
+ vers = v_path.read().to_str().strip()
21
+ if vers != __version__ or force:
22
+ p = resources.files(__app_name__).joinpath("files")
23
+ copy_to_data_dir(p, p)
24
+ v_path.write(core.Data(__version__))
25
+
26
+
27
+ def main():
28
+ parser = argparse.ArgumentParser(bcsfe.__app_name__)
29
+
30
+ parser.add_argument(
31
+ "--version", "-v", action="store_true", help="display the version and exit"
32
+ )
33
+ parser.add_argument(
34
+ "--input-path", "-i", type=str, help="input path to save file to edit"
35
+ )
36
+ parser.add_argument(
37
+ "--game-data-dir", "-g", type=str, help="path to store the game data to"
38
+ )
39
+ parser.add_argument(
40
+ "--transfer-backup-path",
41
+ type=str,
42
+ help="path to save the backup SAVE_DATA after transfering to",
43
+ )
44
+ parser.add_argument(
45
+ "--config-path",
46
+ "-c",
47
+ type=str,
48
+ default=None,
49
+ help=f"path to the config file. If unspecified defaults to {core.Config.get_config_path()}",
50
+ )
51
+ parser.add_argument(
52
+ "--log-path",
53
+ "-l",
54
+ type=str,
55
+ default=None,
56
+ help=f"path to the log file. If unspecified defaults to {core.Logger.get_log_path()}",
57
+ )
58
+ parser.add_argument(
59
+ "--force-migrate",
60
+ action="store_true",
61
+ help=f"copy all data from bcsfe/src/files to {core.Path.get_data_folder()}",
62
+ )
63
+
64
+ args = parser.parse_args()
65
+ if args.version:
66
+ print(bcsfe.__version__)
67
+ exit()
68
+
69
+ if args.config_path is not None:
70
+ core.set_config_path(core.Path(args.config_path))
71
+
72
+ if args.log_path is not None:
73
+ core.set_log_path(core.Path(args.log_path))
74
+
75
+ if args.transfer_backup_path is not None:
76
+ core.set_transfer_backup_path(core.Path(args.transfer_backup_path))
77
+
78
+ if args.game_data_dir is not None:
79
+ core.set_game_data_path(core.Path(args.game_data_dir))
80
+
81
+ migrate(args.force_migrate)
82
+
83
+ core.core_data.init_data()
84
+
85
+ try:
86
+ cli.main.Main().main(args.input_path)
87
+ except KeyboardInterrupt:
88
+ cli.main.Main.leave()
89
+ except Exception as e:
90
+ tb = traceback.format_exc()
91
+ cli.color.color_print_key(
92
+ "error", error=e, version=bcsfe.__version__, traceback=tb
93
+ )
94
+ try:
95
+ cli.main.Main.exit_editor()
96
+ except Exception:
97
+ pass
98
+ except KeyboardInterrupt:
99
+ pass
100
+
101
+
102
+ main()
@@ -8,6 +8,7 @@ from bcsfe.cli import (
8
8
  server_cli,
9
9
  edits,
10
10
  recent_saves,
11
+ color_hex,
11
12
  )
12
13
 
13
14
  __all__ = [
@@ -18,6 +19,7 @@ __all__ = [
18
19
  "feature_handler",
19
20
  "save_management",
20
21
  "server_cli",
22
+ "color_hex",
21
23
  "edits",
22
24
  "recent_saves",
23
25
  ]
@@ -0,0 +1,178 @@
1
+ from __future__ import annotations
2
+ from typing import Any
3
+ from bcsfe import core
4
+ from bcsfe.cli import color_hex
5
+ import enum
6
+
7
+
8
+ class ColorHex(enum.Enum):
9
+ GREEN = "#008000"
10
+ G = GREEN
11
+ RED = "#FF0000"
12
+ R = RED
13
+ DARK_YELLOW = "#D7C32A"
14
+ DY = DARK_YELLOW
15
+ BLACK = "#000000"
16
+ BL = BLACK
17
+ WHITE = "#FFFFFF"
18
+ W = WHITE
19
+ CYAN = "#00FFFF"
20
+ C = CYAN
21
+ DARK_GREY = "#A9A9A9"
22
+ DG = DARK_GREY
23
+ BLUE = "#0000FF"
24
+ B = BLUE
25
+ YELLOW = "#FFFF00"
26
+ Y = YELLOW
27
+ MAGENTA = "#FF00FF"
28
+ M = MAGENTA
29
+ DARK_BLUE = "#00008B"
30
+ DB = DARK_BLUE
31
+ DARK_CYAN = "#008B8B"
32
+ DC = DARK_CYAN
33
+ DARK_MAGENTA = "#8B008B"
34
+ DM = DARK_MAGENTA
35
+ DARK_RED = "#8B0000"
36
+ DR = DARK_RED
37
+ DARK_GREEN = "#006400"
38
+ DGN = DARK_GREEN
39
+ LIGHT_GREY = "#D3D3D3"
40
+ LG = LIGHT_GREY
41
+ ORANGE = "#FFA500"
42
+ O = ORANGE
43
+
44
+ @staticmethod
45
+ def from_name(name: str) -> str:
46
+ if not name:
47
+ return ""
48
+ try:
49
+ return getattr(ColorHex, name.upper()).value
50
+ except AttributeError:
51
+ return ""
52
+
53
+
54
+ def __parse_color(color_name: str) -> str:
55
+ if not color_name:
56
+ return ""
57
+ first_char = color_name[0]
58
+ if first_char == "#":
59
+ return color_name
60
+ if first_char != "@":
61
+ return ColorHex.from_name(color_name)
62
+
63
+ if len(color_name) < 2:
64
+ return ""
65
+ second_char = color_name[1]
66
+ if len(color_name) >= 3:
67
+ third_char = color_name[2]
68
+ else:
69
+ third_char = ""
70
+ theme_handler = core.core_data.theme_manager
71
+ if second_char == "p":
72
+ return theme_handler.get_primary_color()
73
+ if second_char == "s" and third_char != "u":
74
+ return theme_handler.get_secondary_color()
75
+ if second_char == "t":
76
+ return theme_handler.get_tertiary_color()
77
+ if second_char == "q":
78
+ return theme_handler.get_quaternary_color()
79
+ if second_char == "e":
80
+ return theme_handler.get_error_color()
81
+ if second_char == "w":
82
+ return theme_handler.get_warning_color()
83
+ if second_char == "s" and third_char == "u":
84
+ return theme_handler.get_success_color()
85
+ return theme_handler.get_theme_color(color_name[1:])
86
+
87
+
88
+ def __parse(text: str) -> list[tuple[str, str]]:
89
+ txt = "<@p>" + text + "</>"
90
+ output: list[tuple[str, str]] = []
91
+ i = 0
92
+ tags: list[str] = []
93
+ inside_tag = False
94
+ in_closing_tag = False
95
+ tag_text = ""
96
+ text = ""
97
+ special_chars = core.LocalManager.get_special_chars()
98
+ while i < len(txt):
99
+ char = txt[i]
100
+ if char == "\\" and i + 1 < len(txt) and txt[i + 1] in special_chars:
101
+ i += 1
102
+ char = txt[i]
103
+ text += char
104
+ i += 1
105
+ continue
106
+ if tags:
107
+ tag = tags[-1]
108
+ else:
109
+ tag = ""
110
+ if char == ">" and inside_tag:
111
+ inside_tag = False
112
+ if not in_closing_tag:
113
+ tags.append(tag_text)
114
+ if in_closing_tag:
115
+ in_closing_tag = False
116
+ tag_text = ""
117
+ if char == "<" and not inside_tag:
118
+ inside_tag = True
119
+ if text:
120
+ color = __parse_color(tag)
121
+ output.append((text, color))
122
+ text = ""
123
+ tag_text = ""
124
+ if char == "/" and inside_tag:
125
+ in_closing_tag = True
126
+ if tags:
127
+ tags.pop()
128
+ if not inside_tag and char != ">" and char != "<":
129
+ text += char
130
+ if inside_tag and char != "<" and char != ">":
131
+ tag_text += char
132
+ i += 1
133
+ return output
134
+
135
+
136
+ def color_print(text: str, end: str = "\n"):
137
+ print(colorize(text), end=end)
138
+
139
+
140
+ def color_print_key(key: str, end: str = "\n", escape: bool = True, **kwargs: Any):
141
+ color_print(core.localize(key, escape=escape, **kwargs), end)
142
+
143
+
144
+ def __fg(color: str):
145
+ color = color_hex.hex_to_ansi(color)
146
+ esc = "\x1b["
147
+ code = esc + "38;5;"
148
+ end = "m"
149
+ return code + color.lower() + end
150
+
151
+
152
+ def __stylize(text: str, style: str):
153
+ esc = "\x1b["
154
+ end = "m"
155
+ terminator = esc + "0" + end
156
+ return style + f"{text}{terminator}"
157
+
158
+
159
+ def colorize(text: str) -> str:
160
+ text_data = __parse(text)
161
+ out: str = ""
162
+
163
+ for txt, color in text_data:
164
+ if not color:
165
+ out += txt
166
+ continue
167
+
168
+ out += __stylize(txt, __fg(color))
169
+
170
+ return out
171
+
172
+
173
+ def color_input(text: str) -> str:
174
+ return input(colorize(text))
175
+
176
+
177
+ def color_input_key(key: str, escape: bool = True, **kwargs: Any) -> str:
178
+ return color_input(core.localize(key, escape, **kwargs))