# Usage: port_7_to_8.py # You'll have to manually update the following: # with ba.Context(_ba.foreground_host_activity()): # To: # with _ba.foreground_host_activity().context: # # ba.time(timeformat=ba.TimeFormat.MILLISECONDS) # To: # ba.time() * 1000 # # ba.Timer((POWERUP_WEAR_OFF_TIME - 2000),ba.WeakCall(self._multi_bomb_wear_off_flash),timeformat=ba.TimeFormat.MILLISECONDS) # To: # ba.Timer((POWERUP_WEAR_OFF_TIME - 2000 / 1000),ba.WeakCall(self._multi_bomb_wear_off_flash)) import re import sys import codecs def detect_encoding(filename): encodings = ['utf-8', 'latin-1', 'ascii', 'cp1252'] for encoding in encodings: try: with open(filename, 'rb') as f: f.read().decode(encoding) return encoding except UnicodeDecodeError: pass return None filename = sys.argv[2] encoding = detect_encoding(filename) if encoding: with open(filename, 'r', encoding=encoding) as f: print("Porting "+ sys.argv[2]) content = f.read() else: print('Could not detect encoding') content = content.replace("# ba_meta require api 7", "# ba_meta require api 8") content = content.replace("# ba_meta export game", "# ba_meta export bascenev1.GameActivity") content = content.replace("user_agent_string", "legacy_user_agent_string") content = re.sub(r'^(import\s+[\w]+(\s*,\s*[\w]+)+)', lambda match: re.sub(r'\s*,\s*', '\nimport ', match.group()), content, flags=re.MULTILINE) content = content.replace("_ba.", "_babase.") content = content.replace("_ba.", "_babase.") content = content.replace("ba.", "babase.") content = content.replace("import _ba", "import _babase") content = content.replace("from ba import", "from babase import") content = content.replace("from _ba import", "from _babase import") content = re.sub(r'\bimport _ba\b', "import _babase", content) content = re.sub(r'\bimport ba(\b|\.(\w+))', "import babase\nimport bauiv1\nimport bascenev1", content) match = re.search(r'^(import\s+[\w]+(\s*,\s*[\w]+)*)', content, flags=re.MULTILINE) affected_methods = ["build_number", "device_name", "config_file_path", "version", "debug_build", "test_build", "data_directory", "python_directory_user", "python_directory_app", "python_directory_app_site", "api_version", "on_tv", "vr_mode","toolbar_test", "arcade_test", "headless_mode", "demo_mode", "protocol_version", "get_connection_to_host_info"] for word in affected_methods: if f".{word}" in content: first_import_index = match.start() content = content[:first_import_index] + 'from baenv import TARGET_BALLISTICA_BUILD as build_number\n' + content[first_import_index:] content = content.replace("babase.app.ui", "bauiv1.app.ui_v1") content = content.replace("babase.app.accounts_v1", "bauiv1.app.classic.accounts") ################################################################################### # Comment out one of these as per your requirements, depending whether to # stay local or if it'll also be needed to transmitted to the clients. ## For local: if sys.argv[1] == "client": content = content.replace("_babase.screenmessage", "bauiv1.screenmessage") content = content.replace("babase.screenmessage", "bauiv1.screenmessage") content = content.replace("babase.getsound", "bauiv1.getsound") content = content.replace("_babase.gettexture", "bauiv1.gettexture") content = content.replace("babase.gettexture", "bauiv1.gettexture") content = content.replace("babase.getmesh", "bauiv1.getmesh") content = content.replace("babase.getcollisionmesh", "bauiv1.getcollisionmesh") else: ## For transmission: content = content.replace("_babase.screenmessage", "bascenev1.broadcastmessage") content = content.replace("babase.screenmessage", "bascenev1.broadcastmessage") content = content.replace("babase.getsound", "bascenev1.getsound") content = content.replace("_babase.gettexture", "bascenev1.gettexture") content = content.replace("babase.gettexture", "bascenev1.gettexture") content = content.replace("babase.getmesh", "bascenev1.getmesh") content = content.replace("babase.getcollisionmesh", "bascenev1.getcollisionmesh") ################################################################################### content = content.replace("babase.getcollidemesh", "bascenev1.getcollisionmesh") content = content.replace("collide_mesh", "collision_mesh") content = content.replace("babase.open_url", "bauiv1.open_url") content = content.replace("babase.IntSetting", "bascenev1.IntSetting") content = content.replace("babase.IntChoiceSetting", "bascenev1.IntChoiceSetting") content = content.replace("babase.FloatChoiceSetting", "bascenev1.FloatChoiceSetting") content = content.replace("babase.BoolSetting", "bascenev1.BoolSetting") content = content.replace("babase.Actor", "bascenev1.Actor") content = content.replace("babase.Player", "bascenev1.Player") content = content.replace("babase.PlayerDiedMessage", "bascenev1.PlayerDiedMessage") content = content.replace("babase.time", "bascenev1.time") content = content.replace("babase.Timer", "bascenev1.Timer") content = content.replace("babase.newnode", "bascenev1.newnode") content = content.replace("babase.Node", "bascenev1.Node") content = content.replace("babase.emitfx", "bascenev1.emitfx") content = content.replace("babase.animate", "bascenev1.animate") content = content.replace("babase.FreeForAllSession", "bascenev1.FreeForAllSession") content = content.replace("babase.DualTeamSession", "bascenev1.DualTeamSession") content = content.replace("babase.MultiTeamSession", "bascenev1.MultiTeamSession") content = content.replace("babase.EndSession", "bascenev1.EndSession") content = content.replace("babase.CoopSession", "bascenev1.CoopSession") content = content.replace("babase.TeamGameActivity", "bascenev1.TeamGameActivity") content = content.replace("babase.Team", "bascenev1.Team") content = content.replace("babase.Session", "bascenev1.Session") content = content.replace("babase.getsession", "bascenev1.getsession") content = content.replace("babase.Material", "bascenev1.Material") content = content.replace("babase.WeakCall", "bascenev1.WeakCall") content = content.replace("babase.DieMessage", "bascenev1.DieMessage") content = content.replace("babase.OutOfBoundsMessage", "bascenev1.OutOfBoundsMessage") content = content.replace("babase.DroppedMessage", "bascenev1.DroppedMessage") content = content.replace("babase.HitMessage", "bascenev1.HitMessage") content = content.replace("babase.ThawMessage", "bascenev1.ThawMessage") content = content.replace("babase.NotFoundError", "bascenev1.NotFoundError") content = content.replace("babase.getcollision", "bascenev1.getcollision") content = content.replace("babase.app.lang", "bascenev1.app.lang") content = content.replace("babase.MusicType", "bascenev1.MusicType") content = content.replace("babase.getactivity", "bascenev1.getactivity") content = content.replace("babase.getactivity", "bascenev1.getactivity") content = content.replace("babase.CelebrateMessage", "bascenev1.CelebrateMessage") content = content.replace("babase.ScoreConfig", "bascenev1.ScoreConfig") content = content.replace("babase.ScoreType", "bascenev1.ScoreType") content = content.replace("babase.GameResults", "bascenev1.GameResults") content = content.replace("babase.getmaps", "bascenev1.app.classic.getmaps") content = content.replace("babase.cameraflash", "bascenev1.cameraflash") content = content.replace("babase.getmodel", "bascenev1.getmesh") content = content.replace("babase.Map", "bascenev1.Map") content = content.replace("babase.DeathType", "bascenev1.DeathType") content = content.replace("babase.GameActivity", "bascenev1.GameActivity") content = content.replace("_babase.app.stress_test_reset_timer", "_babase.app.classic.stress_test_reset_timer") content = content.replace("babase.app.stress_test_reset_timer", "_babase.app.classic.stress_test_reset_timer") content = content.replace("babase._map", "bascenev1._map") content = content.replace("babase._session.", "bascenev1._session.") content = content.replace("babase._activity", "bascenev1._activity") content = content.replace("_babase.get_client_public_device_uuid", "_bascenev1.get_client_public_device_uuid") content = content.replace("babase.PickedUpMessage", "bascenev1.PickedUpMessage") content = content.replace("babase.PowerupMessage", "bascenev1.PowerupMessage") content = content.replace("babase.FreezeMessage", "bascenev1.FreezeMessage") content = content.replace("with babase.ContextRef(activity):", "with activity.context:") content = content.replace("babase.Context", "babase.ContextRef") content = content.replace("babase._dualteamsession", "bascenev1._dualteamsession") content = content.replace("babase._freeforallsession", "bascenev1._freeforallsession") content = content.replace("babase._multiteamsession", "bascenev1._multiteamsession") content = content.replace("babase._gameactivity", "bascenev1._gameactivity") content = content.replace("babase._powerup", "bascenev1._powerup") content = content.replace("babase.Chooser", "bascenev1.Chooser") content = content.replace("babase._lobby", "bascenev1._lobby") content = content.replace("babase._stats", "bascenev1._stats") content = content.replace("babase._team", "bascenev1._team") content = content.replace("PlayerType", "PlayerT") content = content.replace("babase.app.spaz_appearances", "babase.app.classic.spaz_appearances") content = content.replace("babase._coopsession", "bascenev1._coopsession") content = content.replace("babase._servermode", "baclassic._servermode") content = content.replace("_babase.app.server", "babase.app.classic.server") content = content.replace("_babase.chatmessage", "bascenev1.chatmessage") content = content.replace("_babase.disconnect_client", "_bascenev1.disconnect_client") content = content.replace("_babase.get_game_roster", "bascenev1.get_game_roster") content = content.replace("_babase.get_public_party_max_size", "bascenev1.get_public_party_max_size") content = content.replace("_babase.new_host_session", "bascenev1.new_host_session") content = content.replace("babase._playlist", "bascenev1._playlist") content = content.replace("model", "mesh") content = content.replace("TimeType.REAL", "use `bascenev1.apptimer` in `activity.context` instead") content = content.replace("_babase.app.coop_session_args", "babase.app.classic.coop_session_args") content = content.replace("_babase.app.campaigns", "babase.app.classic.campaigns") content = content.replace("_babase.newactivity", "bascenev1.newactivity") content = content.replace("babase.Window", "bauiv1.Window") content = content.replace("babase.Widget", "bauiv1.Widget") content = content.replace("babase.widget", "bauiv1.widget") content = content.replace("babase.containerwidget", "bauiv1.containerwidget") content = content.replace("babase.scrollwidget", "bauiv1.scrollwidget") content = content.replace("babase.buttonwidget", "bauiv1.buttonwidget") content = content.replace("babase.textwidget", "bauiv1.textwidget") content = content.replace("babase.checkboxwidget", "bauiv1.checkboxwidget") content = content.replace("babase.imagewidget", "bauiv1.imagewidget") content = content.replace("babase.uicleanupcheck", "bauiv1.uicleanupcheck") content = content.replace("_babase.set_public_party_max_size", "bascenev1.set_public_party_max_size") content = content.replace("_bauiv1", "bauiv1") content = content.replace("babase.show_damage_count", "bascenev1.show_damage_count") content = content.replace("babase._gameutils", "bascenev1._gameutils") content = content.replace("babase.StandMessage", "bascenev1.StandMessage") content = content.replace("babase.PowerupAcceptMessage", "bascenev1.PowerupAcceptMessage") content = content.replace("babase._gameutils", "bascenev1._gameutils") content = content.replace("babase.camerashake", "bascenev1.camerashake") content = content.replace("babase.app.add_coop_practice_level", "babase.app.classic.add_coop_practice_level") content = content.replace("babase._campaign", "bascenev1._campaign") content = content.replace("babase.Level", "bascenev1._level.Level") content = content.replace("babase.app.cloud.send_message_cb", "bauiv1.app.plus.cloud.send_message_cb") content = content.replace("_babase.get_special_widget", "bauiv1.get_special_widget") content = content.replace(".app.platform", ".app.classic.platform") content = content.replace(".app.subplatform", ".app.classic.subplatform") content = content.replace(".getlog", ".get_v1_cloud_log") # Converting `ba.playsound(abc)` to `abc.play()` is tricky. # Do it manually in case regex substitution fails.# Do it manually in case regex substitution fails. Are you sure!! #! FIXME May cause syntax warning on 3.12 content = re.sub( r'babase\.playsound\(\s*([^,\n]+),\s*([^,\n]+)\)', r'\1.play(\2)', content, flags=re.MULTILINE ) content = re.sub( r'babase\.playsound\(\s*([^,\n]+),\s*([^,\n]+),\s*position=([^,\n]+)\)', r'\1.play(\2, position=\3)', content, flags=re.MULTILINE ) content = re.sub("babase\.playsound\((.+?), (.+?), (.+?)\)", "\\1.play(\\2, \\3)", content) content = re.sub( r'babase\.playsound\(([^,\n]+),\s*position=([^,\n]+)\)', r'\1.play(position=\2)', content ) content = re.sub("babase\.playsound\((.*)\)", "\\1.play()", content) content = content.replace("babase.internal.add_transaction", "bauiv1.app.plus.add_v1_account_transaction") content = content.replace("babase.internal.run_transaction", "bauiv1.app.plus.run_v1_account_transaction") content = content.replace("_babase.add_transaction", "bauiv1.app.plus.add_v1_account_transaction") content = content.replace("_babase.run_transactions", "bauiv1.app.plus.run_v1_account_transactions") content = content.replace("babase._store.get_store_layout", "bauiv1.app.classic.store.get_store_layout") content = content.replace("babase.internal.get_store_layout", "bauiv1.app.classic.store.get_store_layout") content = content.replace("babase.internal.connect_to_party", "bascenev1.connect_to_party") content = content.replace("babase.internal.get_default_powerup_distribution", "bascenev1._powerup.get_default_powerup_distribution") content = content.replace("babase.internal.DEFAULT_REQUEST_TIMEOUT_SECONDS", "babase.DEFAULT_REQUEST_TIMEOUT_SECONDS") content = content.replace("babase.internal.DEFAULT_TEAM_COLORS", "bascenev1.DEFAULT_TEAM_COLORS") content = content.replace("babase.internal.DEFAULT_TEAM_NAMES", "bascenev1.DEFAULT_TEAM_NAMES") content = content.replace("babase.internal.JoinActivity", "bascenev1.JoinActivity") content = content.replace("babase.internal.LoginAdapter", "babase._login.LoginAdapter") content = content.replace("babase.internal.PlayerProfilesChangedMessage", "bascenev1._messages.PlayerProfilesChangedMessage") content = content.replace("babase.internal.ScoreScreenActivity", "bascenev1.ScoreScreenActivity") content = content.replace("babase.internal.add_clean_frame_callback", "babase.add_clean_frame_callback") content = content.replace("babase.internal.android_get_external_files_dir", "babase.android_get_external_files_dir") content = content.replace("babase.internal.appname", "babase.appname") content = content.replace("babase.internal.appnameupper", "babase.appnameupper") content = content.replace("babase.internal.capture_gamepad_input", "bascenev1.capture_gamepad_input") content = content.replace("babase.internal.capture_keyboard_input", "bascenev1.capture_keyboard_input") content = content.replace("babase.internal.charstr", "babase.charstr") content = content.replace("babase.internal.chatmessage", "bascenev1.chatmessage") content = content.replace("babase.internal.commit_app_config", "bauiv1.commit_app_config") content = content.replace("babase.internal.disconnect_client", "bascenev1.disconnect_client") content = content.replace("babase.internal.disconnect_from_host", "bascenev1.disconnect_from_host") content = content.replace("babase.internal.do_play_music", "babase.app.classic.music.do_play_music") content = content.replace("babase.internal.end_host_scanning", "bascenev1.end_host_scanning") content = content.replace("babase.internal.fade_screen", "bauiv1.fade_screen") content = content.replace("babase.internal.filter_playlist", "bascenev1.filter_playlist") content = content.replace("babase.internal.game_service_has_leaderboard", "_baplus.game_service_has_leaderboard") content = content.replace("babase.internal.get_available_purchase_count", "bauiv1.app.classic.store.get_available_purchase_count") content = content.replace("babase.internal.get_available_sale_time", "bauiv1.app.classic.store.get_available_sale_time") content = content.replace("babase.internal.get_chat_messages", "bascenev1.get_chat_messages") content = content.replace("babase.internal.get_clean_price", "bauiv1.app.classic.store.get_clean_price") content = content.replace("babase.internal.get_connection_to_host_info", "bascenev1.get_connection_to_host_info_2") content = content.replace("babase.internal.get_default_free_for_all_playlist", "bascenev1._playlist.get_default_free_for_all_playlist") content = content.replace("babase.internal.get_default_teams_playlist", "bascenev1._playlist.get_default_teams_playlist") content = content.replace("babase.internal.get_display_resolution", "babase.get_display_resolution") content = content.replace("babase.internal.get_filtered_map_name", "bascenev1._map.get_filtered_map_name") content = content.replace("babase.internal.get_foreground_host_session", "bascenev1.get_foreground_host_session") content = content.replace("babase.internal.get_game_port", "bascenev1.get_game_port") content = content.replace("babase.internal.get_game_roster", "bascenev1.get_game_roster") content = content.replace("babase.internal.get_input_device_config", "bauiv1.app.classic.get_input_device_config") content = content.replace("babase.internal.get_ip_address_type", "babase.get_ip_address_type") content = content.replace("babase.internal.get_local_active_input_devices_count", "bascenev1.get_local_active_input_devices_count") content = content.replace("babase.internal.get_low_level_config_value", "bauiv1.get_low_level_config_value") content = content.replace("babase.internal.get_map_class", "bascenev1.get_map_class") content = content.replace("babase.internal.get_map_display_string", "bascenev1.get_map_display_string") content = content.replace("babase.internal.get_master_server_address", "bauiv1.app.plus.get_master_server_address") content = content.replace("babase.internal.get_max_graphics_quality", "babase.get_max_graphics_quality") content = content.replace("babase.internal.get_news_show", "_babase.app.plus.get_news_show") content = content.replace("babase.internal.get_next_tip", "bascenev1.app.classic.get_next_tip") content = content.replace("babase.internal.get_player_colors", "bascenev1.get_player_colors") content = content.replace("babase.internal.get_player_profile_colors", "bascenev1.get_player_profile_colors") content = content.replace("babase.internal.get_player_profile_icon", "bascenev1.get_player_profile_icon") content = content.replace("babase.internal.get_price", "bauiv1.app.plus.get_price") content = content.replace("babase.internal.get_public_party_enabled", "bascenev1.get_public_party_enabled") content = content.replace("babase.internal.get_public_party_max_size", "bascenev1.get_public_party_max_size") content = content.replace("babase.internal.get_purchased", "bauiv1.app.plus.get_purchased") content = content.replace("babase.internal.get_purchases_state", "_baplus.get_purchases_state") content = content.replace("babase.internal.get_qrcode_texture", "bauiv1.get_qrcode_texture") content = content.replace("babase.internal.get_random_names", "bascenev1.get_random_names") content = content.replace("babase.internal.get_remote_app_name", "bascenev1.get_remote_app_name") content = content.replace("babase.internal.get_replay_speed_exponent", "bascenev1.get_replay_speed_exponent") content = content.replace("babase.internal.get_replays_dir", "babase.get_replays_dir") content = content.replace("babase.internal.get_special_widget", "bauiv1.get_special_widget") content = content.replace("babase.internal.get_store_item", "babase.app.classic.store.get_store_item") content = content.replace("babase.internal.get_store_item_display_size", "babase.app.classic.store.get_store_item_display_size") content = content.replace("babase.internal.get_store_item_name_translated", "babase.app.classic.store.get_store_item_name_translated") content = content.replace("babase.internal.get_string_height", "babase.get_string_height") content = content.replace("babase.internal.get_string_width", "babase.get_string_width") content = content.replace("babase.internal.get_tournament_prize_strings", "bascenev1.app.classic.get_tournament_prize_strings") content = content.replace("babase.internal.get_trophy_string", "bascenev1.get_trophy_string") content = content.replace("babase.internal.get_type_name", "babase.get_type_name") content = content.replace("babase.internal.get_ui_input_device", "bascenev1.get_ui_input_device") content = content.replace("babase.internal.get_unowned_game_types", "babase.app.classic.store.get_unowned_game_types") content = content.replace("babase.internal.get_unowned_maps", "babase.app.classic.store.get_unowned_maps") content = content.replace("babase.internal.get_v1_account_display_string", "bauiv1.app.plus.get_v1_account_display_string") content = content.replace("babase.internal.get_v1_account_misc_read_val", "bauiv1.app.plus.get_v1_account_misc_read_val") content = content.replace("babase.internal.get_v1_account_misc_read_val_2", "bauiv1.app.plus.get_v1_account_misc_read_val_2") content = content.replace("babase.internal.get_v1_account_misc_val", "bauiv1.app.plus.get_v1_account_misc_val") content = content.replace("babase.internal.get_v1_account_name", "bauiv1.app.plus.get_v1_account_name") content = content.replace("babase.internal.get_v1_account_state", "bauiv1.app.plus.get_v1_account_state") content = content.replace("babase.internal.get_v1_account_state_num", "bauiv1.app.plus.get_v1_account_state_num") content = content.replace("babase.internal.get_v1_account_ticket_count", "bauiv1.app.plus.get_v1_account_ticket_count") content = content.replace("babase.internal.get_v1_account_type", "bauiv1.app.plus.get_v1_account_type") content = content.replace("babase.internal.get_v2_fleet", "_baplus.get_v2_fleet") content = content.replace("babase.internal.getcampaign", "bauiv1.app.classic.getcampaign") content = content.replace("babase.internal.getclass", "babase.getclass") content = content.replace("babase.internal.getinputdevice", "bascenev1.getinputdevice") content = content.replace("babase.internal.has_gamma_control", "babase.has_gamma_control") content = content.replace("babase.internal.has_video_ads", "bauiv1.has_video_ads") content = content.replace("babase.internal.have_incentivized_ad", "bauiv1.have_incentivized_ad") content = content.replace("babase.internal.have_permission", "babase.have_permission") content = content.replace("babase.internal.have_touchscreen_input", "bascenev1.have_touchscreen_input") content = content.replace("babase.internal.host_scan_cycle", "bascenev1.host_scan_cycle") content = content.replace("babase.internal.in_game_purchase", "bui.app.plus.in_game_purchase") content = content.replace("babase.internal.increment_analytics_count", "babase.increment_analytics_count") content = content.replace("babase.internal.is_blessed", "bui.app.plus.is_blessed") content = content.replace("babase.internal.is_browser_likely_available", "bauiv1.is_browser_likely_available") content = content.replace("babase.internal.is_in_replay", "bascenev1.is_in_replay") content = content.replace("babase.internal.is_party_icon_visible", "bauiv1.is_party_icon_visible") content = content.replace("babase.internal.is_running_on_fire_tv", "babase.is_running_on_fire_tv") content = content.replace("babase.internal.is_xcode_build", "babase.is_xcode_build") content = content.replace("babase.internal.json_prep", "babase.json_prep") content = content.replace("babase.internal.lock_all_input", "babase.lock_all_input") content = content.replace("babase.internal.mark_config_dirty", "_babase.app.plus.mark_config_dirty") content = content.replace("babase.internal.new_host_session", "bascenev1.new_host_session") content = content.replace("babase.internal.new_replay_session", "bascenev1.new_replay_session") content = content.replace("babase.internal.open_file_externally", "bauiv1.open_file_externally") content = content.replace("babase.internal.power_ranking_query", "_baplus.power_ranking_query") content = content.replace("babase.internal.preload_map_preview_media", "bauiv1.app.classic.preload_map_preview_media") content = content.replace("babase.internal.purchase", "_baplus.purchase") content = content.replace("babase.internal.register_map", "bascenev1.register_map") content = content.replace("babase.internal.release_gamepad_input", "bascenev1.release_gamepad_input") content = content.replace("babase.internal.release_keyboard_input", "bascenev1.release_keyboard_input") content = content.replace("babase.internal.report_achievement", "babase.app.plus.report_achievement") content = content.replace("babase.internal.request_permission", "babase.request_permission") content = content.replace("babase.internal.reset_achievements", "_baplus.reset_achievements") content = content.replace("babase.internal.reset_random_player_names", "bascenev1.reset_random_player_names") content = content.replace("babase.internal.restore_purchases", "_baplus.restore_purchases") content = content.replace("babase.internal.run_cpu_benchmark", "baclassic._benchmark.run_cpu_benchmark") content = content.replace("babase.internal.run_gpu_benchmark", "baclassic._benchmark.run_gpu_benchmark") content = content.replace("babase.internal.run_media_reload_benchmark", "baclassic._benchmark.run_media_reload_benchmark") content = content.replace("babase.internal.run_stress_test", "babase.app.classic.run_stress_test") content = content.replace("babase.internal.set_authenticate_clients", "bascenev1.set_authenticate_clients") content = content.replace("babase.internal.set_debug_speed_exponent", "bascenev1.set_debug_speed_exponent") content = content.replace("babase.internal.set_low_level_config_value", "babase.set_low_level_config_value") content = content.replace("babase.internal.set_party_icon_always_visible", "bauiv1.set_party_icon_always_visible") content = content.replace("babase.internal.set_party_window_open", "bauiv1.set_party_window_open") content = content.replace("babase.internal.set_public_party_enabled", "bascenev1.set_public_party_enabled") content = content.replace("babase.internal.set_public_party_max_size", "bascenev1.set_public_party_max_size") content = content.replace("babase.internal.set_public_party_name", "bascenev1.set_public_party_name") content = content.replace("babase.internal.set_public_party_queue_enabled", "bascenev1.set_public_party_queue_enabled") content = content.replace("babase.internal.set_replay_speed_exponent", "bascenev1.set_replay_speed_exponent") content = content.replace("babase.internal.set_touchscreen_editing", "bascenev1.set_touchscreen_editing") content = content.replace("babase.internal.set_ui_input_device", "babase.set_ui_input_device") content = content.replace("babase.internal.should_submit_debug_info", "babase._apputils.should_submit_debug_info") content = content.replace("babase.internal.show_online_score_ui", "bauiv1.show_online_score_ui") content = content.replace("babase.internal.sign_in_v1", "babase.app.plus.sign_in_v1") content = content.replace("babase.internal.sign_out_v1", "babase.app.plus.sign_out_v1") content = content.replace("babase.internal.submit_score", "bascenev1.app.plus.submit_score") content = content.replace("babase.internal.tournament_query", "_baplus.tournament_query") content = content.replace("babase.internal.unlock_all_input", "babase.unlock_all_input") content = content.replace("babase.internal.value_test", "bauiv1.app.classic.value_test") content = content.replace("babase.internal.workspaces_in_use", "babase.workspaces_in_use") content = content.replace("babase.internal.dump_tracebacks", "babase._apputils.dump_app_state") content = content.replace("babase.internal.show_app_invite", "_bauiv1.show_app_invite") content = content.replace("babase._generated", "babase._mgen") content = content.replace("_babase.disconnect_from_host", "bascenev1.disconnect_from_host") content = content.replace("babase.disconnect_from_host", "bascenev1.disconnect_from_host") content = content.replace("_babase.connect_to_party", "bascenev1.connect_to_party") content = content.replace("babase.connect_to_party", "bascenev1.connect_to_party") content = content.replace("babase.set_party_window_open", "bauiv1.set_party_window_open") content = content.replace("babase.set_party_window_open", "bauiv1.set_party_window_open") content = content.replace("babase.getcollidemesh", "bascenev1.getcollisionmesh") content = content.replace("collide_mesh", "collision_mesh") content = content.replace("babase.FloatSetting", "bascenev1.FloatSetting") # Removed in API 8: # content = content.replace("babase.internal.set_telnet_access_enabled", "") content = content.replace("babase.internal.master_server_get", "babase.app.classic.master_server_v1_get") content = content.replace("babase.internal.master_server_post", "babase.app.classic.master_server_v1_post") content = content.replace("babase.internal.log_dumped_tracebacks", "babase._apputils.log_dumped_app_state") content = content.replace("babase.internal.have_outstanding_transactions", "bauiv1.app.plus.have_outstanding_v1_account_transactions") content = content.replace("babase.internal.get_public_login_id", "bauiv1.app.plus.get_v1_account_public_login_id") content = content.replace("babase.internal.get_input_map_hash", "bauiv1.app.classic.get_input_device_map_hash") content = content.replace("babase.internal.get_device_value", "bauiv1.app.classic.get_input_device_mapped_value") # Depracations content = content.replace("babase.app.build_number", "babase.app.build_number if build_number < 21282 else babase.app.env.build_number") content = content.replace("babase.app.device_name", "babase.app.device_name if build_number < 21282 else babase.app.env.device_name") content = content.replace("babase.app.config_file_path", "babase.app.config_file_path if build_number < 21282 else babase.app.env.config_file_path") content = content.replace("babase.app.version", "babase.app.version if build_number < 21282 else babase.app.env") content = content.replace("babase.app.debug_build", "babase.app.debug_build if build_number < 21282 else babase.app.env.debug_build") content = content.replace("babase.app.test_build", "babase.app.test_build if build_number < 21282 else babase.app.env.test_build") content = content.replace("babase.app.data_directory", "babase.app.data_directory if build_number < 21282 else babase.app.env.data_directory") content = content.replace("babase.app.python_directory_user", "babase.app.python_directory_user if build_number < 21282 else babase.app.env.python_directory_user") content = content.replace("babase.app.python_directory_app", "babase.app.env") content = content.replace("babase.app.python_directory_app_site", "babase.app.python_directory_app_site if build_number < 21282 else babase.app.env.python_directory_app_site") content = content.replace("babase.app.api_version", "babase.app.api_version if build_number < 21282 else babase.app.env.api_version") content = content.replace("babase.app.on_tv", "babase.app.on_tv if build_number < 21282 else babase.app.env.on_tv") content = content.replace("babase.app.vr_mode", "babase.app.vr_mode if build_number < 21282 else babase.app.env.vr") content = content.replace("babase.app.toolbar_test", "babase.app.toolbar_test if build_number < 21282 else babase.app.env.toolbar_test") content = content.replace("babase.app.arcade_mode", "babase.app.arcade_mode if build_number < 21282 else babase.app.env.arcade_mode") content = content.replace("babase.app.headless_mode", "babase.app.headless_mode if build_number < 21282 else babase.app.env.headless_mode") content = content.replace("babase.app.demo_mode", "babase.app.demo_mode if build_number < 21282 else babase.app.env.demo_mode") content = content.replace("babase.app.protocol_version", "babase.app.protocol_version if build_number < 21282 else babase.app.env.protocol_version") content = content.replace("bascenev1.get_connection_to_host_info", "bascenev1.get_connection_to_host_info if build_number < 21697 else bascenev1.get_connection_to_host_info_2") content = content.replace("babase._store", "bauiv1.app.classic.store") # content = content.replace("babase.internal", "") content = content.replace("bastd.ui", "bauiv1lib") content = content.replace("bastd", "bascenev1lib") content = content.replace("timetype=","") content = content.replace("babase.columnwidget", "bauiv1.columnwidget") content = content.replace("_babase.get_game_port", "bascenev1.get_game_port") content = content.replace("_babase.get_chat_messages", "bascenev1.get_chat_messages") content = content.replace("_babase.get_foreground_host_session", "bascenev1.get_foreground_host_session") content = content.replace("_babase.get_foreground_host_activity", "bascenev1.get_foreground_host_activity") content = content.replace("bascenev1.SessionPlayerNotFoundError", "babase.SessionPlayerNotFoundError") content = content.replace("bascenev1", "bs") content = content.replace("bauiv1", "bui") content = content.replace("import bs", "import bascenev1 as bs") content = content.replace("import bui", "import bauiv1 as bui") content = content.replace("bslib", "bascenev1lib") content = content.replace("builib", "bauiv1lib") content = content.replace("from bs.", "from bascenev1.") content = content.replace("from bui.", "from bauiv1.") content = content.replace("import bascenev1 as bascenev1lib", "import bascenev1lib") content = content.replace("import bauiv1 as bauiv1lib", "import bauiv1lib") content = content.replace("# ba_meta export bs.GameActivity", "# ba_meta export bascenev1.GameActivity") content = content.replace("_bs", "bs") content = re.sub(r'bs\.Timer\(([^)]*)\bTimeType\.REAL\b([^)]*)\)', r'babase.AppTimer(\1\2)', content) trademark = "# Porting to api 8 made easier by baport.(https://github.com/bombsquad-community/baport)\n" with open(sys.argv[2], "w", encoding=encoding) as f: f.write(trademark + content)