bcsfe 3.5.1__tar.gz → 3.5.2__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 (212) hide show
  1. {bcsfe-3.5.1/src/bcsfe.egg-info → bcsfe-3.5.2}/PKG-INFO +1 -1
  2. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/__init__.py +8 -3
  3. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/file_dialog.py +1 -1
  4. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/upgrade.py +8 -4
  5. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/story.py +43 -49
  6. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/io/path.py +8 -5
  7. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/core/save.properties +2 -0
  8. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/map.properties +1 -1
  9. {bcsfe-3.5.1 → bcsfe-3.5.2/src/bcsfe.egg-info}/PKG-INFO +1 -1
  10. {bcsfe-3.5.1 → bcsfe-3.5.2}/LICENSE +0 -0
  11. {bcsfe-3.5.1 → bcsfe-3.5.2}/MANIFEST.in +0 -0
  12. {bcsfe-3.5.1 → bcsfe-3.5.2}/README.md +0 -0
  13. {bcsfe-3.5.1 → bcsfe-3.5.2}/pyproject.toml +0 -0
  14. {bcsfe-3.5.1 → bcsfe-3.5.2}/setup.cfg +0 -0
  15. {bcsfe-3.5.1 → bcsfe-3.5.2}/setup.py +0 -0
  16. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/__main__.py +0 -0
  17. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/__init__.py +0 -0
  18. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/color.py +0 -0
  19. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/color_hex.py +0 -0
  20. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/dialog_creator.py +0 -0
  21. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/edits/__init__.py +0 -0
  22. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/edits/aku_realm.py +0 -0
  23. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/edits/basic_items.py +0 -0
  24. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/edits/cat_editor.py +0 -0
  25. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/edits/clear_tutorial.py +0 -0
  26. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/edits/enemy_editor.py +0 -0
  27. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/edits/event_tickets.py +0 -0
  28. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/edits/fixes.py +0 -0
  29. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/edits/map.py +0 -0
  30. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/edits/max_all.py +0 -0
  31. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/edits/rare_ticket_trade.py +0 -0
  32. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/edits/storage.py +0 -0
  33. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/feature_handler.py +0 -0
  34. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/main.py +0 -0
  35. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/recent_saves.py +0 -0
  36. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/save_management.py +0 -0
  37. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/cli/server_cli.py +0 -0
  38. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/__init__.py +0 -0
  39. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/country_code.py +0 -0
  40. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/crypto.py +0 -0
  41. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/__init__.py +0 -0
  42. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/battle/__init__.py +0 -0
  43. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/battle/battle_items.py +0 -0
  44. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/battle/cleared_slots.py +0 -0
  45. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/battle/enemy.py +0 -0
  46. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/battle/slots.py +0 -0
  47. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/__init__.py +0 -0
  48. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/beacon_base.py +0 -0
  49. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/cat.py +0 -0
  50. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/drop_chara.py +0 -0
  51. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/gambling.py +0 -0
  52. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/gatya.py +0 -0
  53. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/gatya_item.py +0 -0
  54. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/item_pack.py +0 -0
  55. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/login_bonuses.py +0 -0
  56. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/matatabi.py +0 -0
  57. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/medals.py +0 -0
  58. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/mission.py +0 -0
  59. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/my_sale.py +0 -0
  60. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/nyanko_club.py +0 -0
  61. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/officer_pass.py +0 -0
  62. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/playtime.py +0 -0
  63. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/powerup.py +0 -0
  64. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/scheme_items.py +0 -0
  65. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/special_skill.py +0 -0
  66. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/stamp.py +0 -0
  67. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/talent_orbs.py +0 -0
  68. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/unlock_popups.py +0 -0
  69. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/user_rank_rewards.py +0 -0
  70. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/gamoto/__init__.py +0 -0
  71. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/gamoto/base_materials.py +0 -0
  72. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/gamoto/cat_shrine.py +0 -0
  73. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/gamoto/catamins.py +0 -0
  74. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/gamoto/gamatoto.py +0 -0
  75. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/gamoto/ototo.py +0 -0
  76. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/localizable.py +0 -0
  77. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/__init__.py +0 -0
  78. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/aku.py +0 -0
  79. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/challenge.py +0 -0
  80. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/chapters.py +0 -0
  81. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/dojo.py +0 -0
  82. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/enigma.py +0 -0
  83. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/event.py +0 -0
  84. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/ex_stage.py +0 -0
  85. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/gauntlets.py +0 -0
  86. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/item_reward_stage.py +0 -0
  87. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/legend_quest.py +0 -0
  88. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/map_names.py +0 -0
  89. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/map_option.py +0 -0
  90. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/map_reset.py +0 -0
  91. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/outbreaks.py +0 -0
  92. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/timed_score.py +0 -0
  93. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/tower.py +0 -0
  94. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/uncanny.py +0 -0
  95. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game/map/zero_legends.py +0 -0
  96. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/game_version.py +0 -0
  97. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/io/__init__.py +0 -0
  98. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/io/adb_handler.py +0 -0
  99. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/io/bc_csv.py +0 -0
  100. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/io/command.py +0 -0
  101. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/io/config.py +0 -0
  102. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/io/data.py +0 -0
  103. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/io/git_handler.py +0 -0
  104. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/io/json_file.py +0 -0
  105. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/io/root_handler.py +0 -0
  106. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/io/save.py +0 -0
  107. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/io/thread_helper.py +0 -0
  108. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/io/waydroid.py +0 -0
  109. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/io/yaml.py +0 -0
  110. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/locale_handler.py +0 -0
  111. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/log.py +0 -0
  112. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/max_value_helper.py +0 -0
  113. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/server/__init__.py +0 -0
  114. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/server/client_info.py +0 -0
  115. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/server/event_data.py +0 -0
  116. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/server/game_data_getter.py +0 -0
  117. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/server/headers.py +0 -0
  118. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/server/managed_item.py +0 -0
  119. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/server/request.py +0 -0
  120. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/server/server_handler.py +0 -0
  121. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/server/updater.py +0 -0
  122. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/core/theme_handler.py +0 -0
  123. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/core/config.properties +0 -0
  124. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/core/files.properties +0 -0
  125. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/core/input.properties +0 -0
  126. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/core/locale.properties +0 -0
  127. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/core/main.properties +0 -0
  128. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/core/server.properties +0 -0
  129. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/core/theme.properties +0 -0
  130. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/core/updater.properties +0 -0
  131. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/bannable_items.properties +0 -0
  132. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/cats.properties +0 -0
  133. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/enemy.properties +0 -0
  134. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/fixes.properties +0 -0
  135. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/gambling.properties +0 -0
  136. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/gamototo.properties +0 -0
  137. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/gatya.properties +0 -0
  138. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/gold_pass.properties +0 -0
  139. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/items.properties +0 -0
  140. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/medals.properties +0 -0
  141. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/missions.properties +0 -0
  142. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/playtime.properties +0 -0
  143. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/scheme_items.properties +0 -0
  144. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/special_skills.properties +0 -0
  145. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/talent_orbs.properties +0 -0
  146. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/treasures.properties +0 -0
  147. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/user_rank.properties +0 -0
  148. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/core/config.properties +0 -0
  149. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/core/files.properties +0 -0
  150. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/core/input.properties +0 -0
  151. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/core/locale.properties +0 -0
  152. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/core/main.properties +0 -0
  153. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/core/save.properties +0 -0
  154. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/core/server.properties +0 -0
  155. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/core/theme.properties +0 -0
  156. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/core/updater.properties +0 -0
  157. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/bannable_items.properties +0 -0
  158. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/cats.properties +0 -0
  159. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/enemy.properties +0 -0
  160. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/fixes.properties +0 -0
  161. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/gambling.properties +0 -0
  162. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/gamototo.properties +0 -0
  163. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/gatya.properties +0 -0
  164. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/gold_pass.properties +0 -0
  165. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/items.properties +0 -0
  166. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/map.properties +0 -0
  167. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/medals.properties +0 -0
  168. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/missions.properties +0 -0
  169. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/playtime.properties +0 -0
  170. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/scheme_items.properties +0 -0
  171. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/special_skills.properties +0 -0
  172. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/talent_orbs.properties +0 -0
  173. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/treasures.properties +0 -0
  174. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/user_rank.properties +0 -0
  175. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/metadata.json +0 -0
  176. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/core/config.properties +0 -0
  177. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/core/files.properties +0 -0
  178. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/core/input.properties +0 -0
  179. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/core/locale.properties +0 -0
  180. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/core/main.properties +0 -0
  181. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/core/save.properties +0 -0
  182. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/core/server.properties +0 -0
  183. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/core/theme.properties +0 -0
  184. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/core/updater.properties +0 -0
  185. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/bannable_items.properties +0 -0
  186. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/cats.properties +0 -0
  187. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/enemy.properties +0 -0
  188. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/fixes.properties +0 -0
  189. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/gambling.properties +0 -0
  190. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/gamototo.properties +0 -0
  191. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/gatya.properties +0 -0
  192. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/gold_pass.properties +0 -0
  193. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/items.properties +0 -0
  194. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/map.properties +0 -0
  195. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/medals.properties +0 -0
  196. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/missions.properties +0 -0
  197. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/playtime.properties +0 -0
  198. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/scheme_items.properties +0 -0
  199. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/special_skills.properties +0 -0
  200. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/talent_orbs.properties +0 -0
  201. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/treasures.properties +0 -0
  202. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/user_rank.properties +0 -0
  203. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/metadata.json +0 -0
  204. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/themes/default.json +0 -0
  205. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/files/themes/discord.json +0 -0
  206. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe/py.typed +0 -0
  207. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe.egg-info/SOURCES.txt +0 -0
  208. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe.egg-info/dependency_links.txt +0 -0
  209. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe.egg-info/entry_points.txt +0 -0
  210. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe.egg-info/requires.txt +0 -0
  211. {bcsfe-3.5.1 → bcsfe-3.5.2}/src/bcsfe.egg-info/top_level.txt +0 -0
  212. {bcsfe-3.5.1 → bcsfe-3.5.2}/tests/test_parse.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bcsfe
3
- Version: 3.5.1
3
+ Version: 3.5.2
4
4
  Summary: A save file editor for The Battle Cats
5
5
  Author: fieryhenry
6
6
  License-Expression: GPL-3.0-or-later
@@ -1,15 +1,20 @@
1
- __version__ = "3.5.1"
1
+ from __future__ import annotations
2
+
3
+ __version__ = "3.5.2"
2
4
 
3
5
  __app_name__ = "bcsfe"
4
6
 
5
- from importlib.resources.abc import Traversable
7
+ try:
8
+ from importlib.resources.abc import Traversable
9
+ except ImportError:
10
+ pass
6
11
 
7
12
  from bcsfe import core, cli
8
13
 
9
14
  __all__ = ["core", "cli"]
10
15
 
11
16
 
12
- def copy_to_data_dir(base_path: Traversable, path: Traversable):
17
+ def copy_to_data_dir(base_path: "Traversable", path: "Traversable"):
13
18
  if path.is_dir():
14
19
  for item in path.iterdir():
15
20
  copy_to_data_dir(base_path, item)
@@ -49,7 +49,7 @@ class FileDialog:
49
49
 
50
50
  files_str_ls = [file.basename() for file in files]
51
51
 
52
- dialog_creator.single_select_key(
52
+ return dialog_creator.single_select_key(
53
53
  dialog_creator.Actions[Optional[str]]
54
54
  .new()
55
55
  .add_new_raw(files_str_ls, lambda index: files[index].to_str())
@@ -10,8 +10,8 @@ class Upgrade:
10
10
  self.plus = plus
11
11
  self.base = base
12
12
 
13
- self.base_range = None
14
- self.plus_range = None
13
+ self.base_range: tuple[int, int] | None = None
14
+ self.plus_range: tuple[int, int] | None = None
15
15
 
16
16
  def get_base(self) -> int:
17
17
  return self.base + 1
@@ -34,7 +34,9 @@ class Upgrade:
34
34
  def get_random_base(self, max_base: int | None = None) -> int:
35
35
  if self.base_range is None:
36
36
  return self.base
37
- base = random.randint(self.base_range[0], self.base_range[1])
37
+ min_b = min(self.base_range)
38
+ max_b = max(self.base_range)
39
+ base = random.randint(min_b, max_b)
38
40
  if max_base is not None:
39
41
  base = min(base, max_base)
40
42
  return base
@@ -42,7 +44,9 @@ class Upgrade:
42
44
  def get_random_plus(self, max_plus: int | None = None) -> int:
43
45
  if self.plus_range is None:
44
46
  return self.plus
45
- plus = random.randint(self.plus_range[0], self.plus_range[1])
47
+ min_p = min(self.plus_range)
48
+ max_p = max(self.plus_range)
49
+ plus = random.randint(min_p, max_p)
46
50
  if max_plus is not None:
47
51
  plus = min(plus, max_plus)
48
52
  return plus
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
  from typing import Any, Optional
3
3
  from bcsfe import core
4
4
  from bcsfe.cli import color, dialog_creator
5
+ import random
5
6
 
6
7
 
7
8
  class Stage:
@@ -962,6 +963,27 @@ class StoryChapters:
962
963
 
963
964
  color.color_print_key("itf_timed_scores_edited")
964
965
 
966
+ @staticmethod
967
+ def itf_timed_score_input() -> tuple[int, int] | None:
968
+ inp = dialog_creator.str_input_key("itf_timed_score_dialog")
969
+ if inp is None:
970
+ return None
971
+
972
+ parts = inp.split("-", maxsplit=1)
973
+
974
+ parts_i: list[int] = []
975
+ for part in parts:
976
+ if not part.isdigit():
977
+ return StoryChapters.itf_timed_score_input()
978
+ score = int(part)
979
+ mx = dialog_creator.MaxValue.i32(
980
+ core.core_data.max_value_manager.itf_timed_score
981
+ )
982
+ score = mx.clamp(score)
983
+ parts_i.append(score)
984
+
985
+ return min(parts_i), max(parts_i)
986
+
965
987
  @staticmethod
966
988
  def edit_itf_timed_scores_whole_chapters(
967
989
  save_file: core.SaveFile, chapters: list[int]
@@ -972,34 +994,21 @@ class StoryChapters:
972
994
 
973
995
  if is_per_chapter:
974
996
  for chapter_id in chapters:
975
- print(chapter_id)
976
997
  StoryChapters.print_current_chapter(save_file, chapter_id)
977
998
  chapter = save_file.story.get_real_chapters()[chapter_id]
978
- score = dialog_creator.int_input_key(
979
- "itf_timed_score",
980
- min=0,
981
- _max=dialog_creator.MaxValue.i32(
982
- core.core_data.max_value_manager.itf_timed_score
983
- ),
984
- )
999
+ score = StoryChapters.itf_timed_score_input()
985
1000
  if score is None:
986
1001
  return
987
1002
  for stage in chapter.get_valid_treasure_stages():
988
- stage.itf_timed_score = score
1003
+ stage.itf_timed_score = random.randrange(score[0], score[1])
989
1004
  else:
990
- score = dialog_creator.int_input_key(
991
- "itf_timed_score_dialog",
992
- min=0,
993
- _max=dialog_creator.MaxValue.i32(
994
- core.core_data.max_value_manager.itf_timed_score
995
- ),
996
- )
1005
+ score = StoryChapters.itf_timed_score_input()
997
1006
  if score is None:
998
1007
  return
999
1008
  for chapter_id in chapters:
1000
1009
  chapter = save_file.story.get_real_chapters()[chapter_id]
1001
1010
  for stage in chapter.get_valid_treasure_stages():
1002
- stage.itf_timed_score = score
1011
+ stage.itf_timed_score = random.randrange(score[0], score[1])
1003
1012
 
1004
1013
  @staticmethod
1005
1014
  def print_current_stage(save_file: core.SaveFile, chapter_id: int, stage_id: int):
@@ -1027,32 +1036,25 @@ class StoryChapters:
1027
1036
  for stage_id in stage_ids:
1028
1037
  StoryChapters.print_current_stage(save_file, chapter_id, stage_id)
1029
1038
 
1030
- score = dialog_creator.int_input_key(
1031
- "itf_timed_score_dialog",
1032
- min=0,
1033
- _max=dialog_creator.MaxValue.i32(
1034
- core.core_data.max_value_manager.itf_timed_score
1035
- ),
1036
- )
1039
+ score = StoryChapters.itf_timed_score_input()
1040
+
1037
1041
  if score is None:
1038
1042
  return
1039
- chapter.stages[stage_id].itf_timed_score = score
1043
+ chapter.stages[stage_id].itf_timed_score = random.randrange(
1044
+ score[0], score[1]
1045
+ )
1040
1046
 
1041
1047
  @staticmethod
1042
1048
  def edit_itf_timed_scores_ind_per_chapter_many(
1043
1049
  chapter: Chapter, stage_ids: list[int]
1044
1050
  ):
1045
- score = dialog_creator.int_input_key(
1046
- "itf_timed_score_dialog",
1047
- min=0,
1048
- _max=dialog_creator.MaxValue.i32(
1049
- core.core_data.max_value_manager.itf_timed_score
1050
- ),
1051
- )
1051
+ score = StoryChapters.itf_timed_score_input()
1052
1052
  if score is None:
1053
1053
  return
1054
1054
  for stage_id in stage_ids:
1055
- chapter.stages[stage_id].itf_timed_score = score
1055
+ chapter.stages[stage_id].itf_timed_score = random.randrange(
1056
+ score[0], score[1]
1057
+ )
1056
1058
 
1057
1059
  @staticmethod
1058
1060
  def edit_itf_timed_scores_ind_per_chapter(
@@ -1083,32 +1085,24 @@ class StoryChapters:
1083
1085
  if is_ind:
1084
1086
  for stage_id in stage_ids:
1085
1087
  StoryChapters.print_current_stage(save_file, 3, stage_id)
1086
- score = dialog_creator.int_input_key(
1087
- "itf_timed_score_dialog",
1088
- min=0,
1089
- _max=dialog_creator.MaxValue.i32(
1090
- core.core_data.max_value_manager.itf_timed_score
1091
- ),
1092
- )
1088
+ score = StoryChapters.itf_timed_score_input()
1093
1089
  if score is None:
1094
1090
  return
1095
1091
  for chapter_id in chapters:
1096
1092
  chapter = save_file.story.get_real_chapters()[chapter_id]
1097
- chapter.stages[stage_id].itf_timed_score = score
1093
+ chapter.stages[stage_id].itf_timed_score = random.randrange(
1094
+ score[0], score[1]
1095
+ )
1098
1096
  else:
1099
- score = dialog_creator.int_input_key(
1100
- "itf_timed_score",
1101
- min=0,
1102
- _max=dialog_creator.MaxValue.i32(
1103
- core.core_data.max_value_manager.itf_timed_score
1104
- ),
1105
- )
1097
+ score = StoryChapters.itf_timed_score_input()
1106
1098
  if score is None:
1107
1099
  return
1108
1100
  for chapter_id in chapters:
1109
1101
  chapter = save_file.story.get_real_chapters()[chapter_id]
1110
1102
  for stage_id in stage_ids:
1111
- chapter.stages[stage_id].itf_timed_score = score
1103
+ chapter.stages[stage_id].itf_timed_score = random.randrange(
1104
+ score[0], score[1]
1105
+ )
1112
1106
 
1113
1107
  @staticmethod
1114
1108
  def edit_itf_timed_scores_individual_stages(
@@ -59,11 +59,17 @@ class Path:
59
59
  def to_str_forwards(self) -> str:
60
60
  return self.path.replace("\\", "/")
61
61
 
62
+ @staticmethod
63
+ def is_ashell() -> bool:
64
+ return os.environ["HOME"].rstrip("/").endswith("Documents")
65
+
62
66
  @staticmethod
63
67
  def get_data_folder() -> Path:
64
68
  os_name = os.name
65
69
  if os_name == "nt":
66
70
  path = Path.join(os.environ["USERPROFILE"], "Documents", __app_name__)
71
+ elif os_name == "mac" or Path.is_ashell():
72
+ path = Path.join(os.environ["HOME"], "Documents", __app_name__)
67
73
  elif os_name == "posix":
68
74
  data_home = os.environ.get("XDG_DATA_HOME")
69
75
  if data_home is None:
@@ -75,9 +81,6 @@ class Path:
75
81
  if path.is_empty():
76
82
  orig = Path.join(os.environ["HOME"], "Documents", __app_name__)
77
83
  orig.copy(path)
78
-
79
- elif os_name == "mac":
80
- path = Path.join(os.environ["HOME"], "Documents", __app_name__)
81
84
  else:
82
85
  raise OSError("Unknown OS")
83
86
  path.generate_dirs()
@@ -86,7 +89,7 @@ class Path:
86
89
  @staticmethod
87
90
  def get_config_folder() -> Path:
88
91
  os_name = os.name
89
- if os_name != "posix":
92
+ if os_name != "posix" or Path.is_ashell():
90
93
  return Path.get_data_folder()
91
94
 
92
95
  data_home = os.environ.get("XDG_CONFIG_HOME")
@@ -108,7 +111,7 @@ class Path:
108
111
  @staticmethod
109
112
  def get_state_folder() -> Path:
110
113
  os_name = os.name
111
- if os_name != "posix":
114
+ if os_name != "posix" or Path.is_ashell():
112
115
  return Path.get_data_folder()
113
116
  data_home = os.environ.get("XDG_STATE_HOME")
114
117
  if data_home is None:
@@ -104,3 +104,5 @@ recent_save=<@s><@q>{inquiry_code}</> <@t>{cc}</>-<@t>{gv}</> @ <@t>{year}</>-<@
104
104
  load_recent_saves=Load from recent saves and backups
105
105
  no_recent_saves=<@w>No recent saves</>
106
106
  current_save=\nCurrent Save: <@t>{cc}</>-<@t>{gv}</> Inquiry: <@t>{inquiry_code}</>
107
+
108
+ root_storage_pull=Pull save file from root storage
@@ -50,7 +50,7 @@ aku_current_stage=Aku Realm Stage <@q>{name}</> (id: <@q>{id}</>)
50
50
  itf_timed_scores=Into the Future Timed Scores
51
51
  itf_timed_scores_dialog=Do you want to edit timed scores for <@t>whole chapters at once</> or <@t>individual stages</>?:
52
52
  itf_timed_scores_edited=<@su>Succesfully edited Into The Future timed scores</>
53
- itf_timed_score_dialog=Enter the timed score:
53
+ itf_timed_score_dialog=Enter the timed score (you can also specify a range such as <@t>6000</>-<@t>9000</> to assign a random score):
54
54
  current_stage={chapter_name} <@t>{stage_name}</>
55
55
  itf_timed_scores_individual_dialog=Do you want to edit the timed score of each selected stage <@t>individually</>? or set <@t>all</> selected stages to the same timed score?:
56
56
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bcsfe
3
- Version: 3.5.1
3
+ Version: 3.5.2
4
4
  Summary: A save file editor for The Battle Cats
5
5
  Author: fieryhenry
6
6
  License-Expression: GPL-3.0-or-later
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes