From d1defe0558f3d48e00a50493077e2f86d4534be0 Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Fri, 5 Jan 2024 21:53:29 -0600 Subject: [PATCH 01/30] ctf fix implementation --- .../bascenev1lib/game/capturetheflag.py | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py b/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py index 4e5da2d6..4e615e23 100644 --- a/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py +++ b/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py @@ -519,6 +519,26 @@ class CaptureTheFlagGame(bs.TeamGameActivity[Player, Team]): if team.flag_return_touches < 0: logging.exception('CTF flag_return_touches < 0') + def _handle_death_flag_capture(self, player: Player) -> None: + """Handles flag values when a player dies or leaves the game.""" + # Don't do anything if the player hasn't touched the flag at all. + if not player.touching_own_flag: return + + team = player.team + # For each "point" our player has touched the flag (Could be multiple), + # deduct one from both our player and the flag's return touches variable. + for _ in range(player.touching_own_flag): + # Deduct + player.touching_own_flag -= 1 + team.flag_return_touches -= 1 + # Update our flag's timer accordingly (Prevents immediate resets in case there might be more people touching it). + if team.flag_return_touches == 0: + team.touch_return_timer = None + team.touch_return_timer_ticking = None + # Safety check, just to be sure! + if team.flag_return_touches < 0: + logging.exception('CTF flag_return_touches < 0') + def _flash_base(self, team: Team, length: float = 2.0) -> None: light = bs.newnode( 'light', @@ -579,6 +599,7 @@ class CaptureTheFlagGame(bs.TeamGameActivity[Player, Team]): def handlemessage(self, msg: Any) -> Any: if isinstance(msg, bs.PlayerDiedMessage): super().handlemessage(msg) # Augment standard behavior. + self._handle_death_flag_capture(msg.getplayer(Player)) self.respawn_player(msg.getplayer(Player)) elif isinstance(msg, FlagDiedMessage): @@ -605,3 +626,7 @@ class CaptureTheFlagGame(bs.TeamGameActivity[Player, Team]): else: super().handlemessage(msg) + + def on_player_leave(self, player: Player) -> None: + """Prevents leaving players from capturing their flag.""" + self._handle_death_flag_capture(player) From 33849603144f3bdd72771c018add1714bde09376 Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Fri, 5 Jan 2024 22:05:36 -0600 Subject: [PATCH 02/30] preflight doing preflight things --- .../ba_data/python/bascenev1lib/game/capturetheflag.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py b/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py index 4e615e23..be8a5b44 100644 --- a/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py +++ b/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py @@ -522,12 +522,13 @@ class CaptureTheFlagGame(bs.TeamGameActivity[Player, Team]): def _handle_death_flag_capture(self, player: Player) -> None: """Handles flag values when a player dies or leaves the game.""" # Don't do anything if the player hasn't touched the flag at all. - if not player.touching_own_flag: return - + if not player.touching_own_flag: + return + team = player.team # For each "point" our player has touched the flag (Could be multiple), # deduct one from both our player and the flag's return touches variable. - for _ in range(player.touching_own_flag): + for _ in range(player.touching_own_flag): # Deduct player.touching_own_flag -= 1 team.flag_return_touches -= 1 From 71334c91e4eceb95d6ca52a9a33aa7cf1dd0c416 Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Fri, 5 Jan 2024 22:08:24 -0600 Subject: [PATCH 03/30] Update CONTRIBUTORS.md --- CONTRIBUTORS.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 8fccc544..534df263 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -50,3 +50,7 @@ ### Rikko - Created the original "reject_recently_left_players" plugin + +### Temp (3alTemp [TrialTemp]) +- Bug Fixer +- Cool QA fella from Discord \ No newline at end of file From 5d5b05a7d9e73e0bdf8315309570d6005ec7d786 Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Fri, 5 Jan 2024 22:15:25 -0600 Subject: [PATCH 04/30] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c92ee54..9401f5e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ - Players now get points for killing bots with their own bombs by catching it and throwing it back at them. This is actually old logic but was disabled due to a logic flaw, but should be fixed now. (Thanks VinniTR!) +- Leaving the game or dying while touching your team's flag will no longer recover + & return it indefinitely in a teams game of Capture the Flag. (Thanks Temp!) ### 1.7.32 (build 21741, api 8, 2023-12-20) - Fixed a screen message that no one will ever see (Thanks vishal332008?...) From eb412ec8e1ef0c8a0357d73acf7f83cdc28792b6 Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Sat, 6 Jan 2024 02:10:11 -0600 Subject: [PATCH 05/30] Long comments are now ILLEGAL --- .../ba_data/python/bascenev1lib/game/capturetheflag.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py b/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py index be8a5b44..edb6f898 100644 --- a/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py +++ b/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py @@ -526,13 +526,16 @@ class CaptureTheFlagGame(bs.TeamGameActivity[Player, Team]): return team = player.team - # For each "point" our player has touched the flag (Could be multiple), - # deduct one from both our player and the flag's return touches variable. + # For each "point" our player has touched theflag (Could be multiple), + # deduct one from both our player and + # the flag's return touches variable. for _ in range(player.touching_own_flag): # Deduct player.touching_own_flag -= 1 team.flag_return_touches -= 1 - # Update our flag's timer accordingly (Prevents immediate resets in case there might be more people touching it). + # Update our flag's timer accordingly + # (Prevents immediate resets in case + # there might be more people touching it). if team.flag_return_touches == 0: team.touch_return_timer = None team.touch_return_timer_ticking = None From 78ddc0b376faba79f48fa390031af89a64804cdd Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Wed, 10 Jan 2024 14:40:15 -0600 Subject: [PATCH 06/30] made contributors desc consistent --- CONTRIBUTORS.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 534df263..626648a1 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -51,6 +51,5 @@ ### Rikko - Created the original "reject_recently_left_players" plugin -### Temp (3alTemp [TrialTemp]) -- Bug Fixer -- Cool QA fella from Discord \ No newline at end of file +### Temp (3alTemp) +- Modder & Bug Fixer \ No newline at end of file From 203f659aacad8774715021e991899bb4663dabb4 Mon Sep 17 00:00:00 2001 From: Vishal Date: Thu, 11 Jan 2024 22:21:00 +0530 Subject: [PATCH 07/30] Edit browser.py --- .../ba_data/python/bauiv1lib/coop/browser.py | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/assets/ba_data/python/bauiv1lib/coop/browser.py b/src/assets/ba_data/python/bauiv1lib/coop/browser.py index e9f9b4af..c5efa88c 100644 --- a/src/assets/ba_data/python/bauiv1lib/coop/browser.py +++ b/src/assets/ba_data/python/bauiv1lib/coop/browser.py @@ -290,6 +290,7 @@ class CoopBrowserWindow(bui.Window): self._refresh() self._restore_state() + self._set_campaign_difficulty(self._campaign_difficulty, False) # Even though we might display cached tournament data immediately, we # don't consider it valid until we've pinged. @@ -497,7 +498,11 @@ class CoopBrowserWindow(bui.Window): self._doing_tournament_query = False self._update_for_data(tournament_data) - def _set_campaign_difficulty(self, difficulty: str) -> None: + def _set_campaign_difficulty( + self, + difficulty: str, + check: bool | True + ) -> None: # pylint: disable=cyclic-import from bauiv1lib.purchase import PurchaseWindow @@ -505,13 +510,17 @@ class CoopBrowserWindow(bui.Window): assert plus is not None assert bui.app.classic is not None - if difficulty != self._campaign_difficulty: + #if difficulty != self._campaign_difficulty + if True: if ( difficulty == 'hard' and not bui.app.classic.accounts.have_pro_options() ): - PurchaseWindow(items=['pro']) - return + if check: + PurchaseWindow(items=['pro']) + return + else: + difficulty = 'easy' bui.getsound('gunCocking').play() if difficulty not in ('easy', 'hard'): print('ERROR: invalid campaign difficulty:', difficulty) @@ -557,7 +566,9 @@ class CoopBrowserWindow(bui.Window): button_type='square', autoselect=True, enable_sound=False, - on_activate_call=bui.Call(self._set_campaign_difficulty, 'easy'), + on_activate_call=bui.Call( + self._set_campaign_difficulty, 'easy', True + ), on_select_call=bui.Call(self.sel_change, 'campaign', 'easyButton'), color=sel_color if self._campaign_difficulty == 'easy' @@ -583,7 +594,9 @@ class CoopBrowserWindow(bui.Window): button_type='square', autoselect=True, enable_sound=False, - on_activate_call=bui.Call(self._set_campaign_difficulty, 'hard'), + on_activate_call=bui.Call( + self._set_campaign_difficulty, 'hard', True + ), on_select_call=bui.Call(self.sel_change, 'campaign', 'hardButton'), color=sel_color_hard if self._campaign_difficulty == 'hard' From 7b2879275e46cce7655b0b92ef58d8ce2d688342 Mon Sep 17 00:00:00 2001 From: Vishal Date: Thu, 11 Jan 2024 22:33:03 +0530 Subject: [PATCH 08/30] Update browser.py --- src/assets/ba_data/python/bauiv1lib/coop/browser.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/assets/ba_data/python/bauiv1lib/coop/browser.py b/src/assets/ba_data/python/bauiv1lib/coop/browser.py index c5efa88c..2898a707 100644 --- a/src/assets/ba_data/python/bauiv1lib/coop/browser.py +++ b/src/assets/ba_data/python/bauiv1lib/coop/browser.py @@ -501,7 +501,7 @@ class CoopBrowserWindow(bui.Window): def _set_campaign_difficulty( self, difficulty: str, - check: bool | True + check: bool ) -> None: # pylint: disable=cyclic-import from bauiv1lib.purchase import PurchaseWindow @@ -519,8 +519,7 @@ class CoopBrowserWindow(bui.Window): if check: PurchaseWindow(items=['pro']) return - else: - difficulty = 'easy' + difficulty = 'easy' bui.getsound('gunCocking').play() if difficulty not in ('easy', 'hard'): print('ERROR: invalid campaign difficulty:', difficulty) From bd6e8f9822aef3bff5fbabeb026ac7d797415ed2 Mon Sep 17 00:00:00 2001 From: Vishal Date: Thu, 11 Jan 2024 22:36:47 +0530 Subject: [PATCH 09/30] Update browser.py --- src/assets/ba_data/python/bauiv1lib/coop/browser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/ba_data/python/bauiv1lib/coop/browser.py b/src/assets/ba_data/python/bauiv1lib/coop/browser.py index 2898a707..28281160 100644 --- a/src/assets/ba_data/python/bauiv1lib/coop/browser.py +++ b/src/assets/ba_data/python/bauiv1lib/coop/browser.py @@ -510,7 +510,7 @@ class CoopBrowserWindow(bui.Window): assert plus is not None assert bui.app.classic is not None - #if difficulty != self._campaign_difficulty + #if difficulty != self._campaign_difficulty if True: if ( difficulty == 'hard' From cae2ee76422e8b34e0ac9cdea0ca5c0686032922 Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Thu, 11 Jan 2024 23:56:50 -0600 Subject: [PATCH 10/30] meteor showered :) --- src/assets/ba_data/python/bascenev1lib/game/meteorshower.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/assets/ba_data/python/bascenev1lib/game/meteorshower.py b/src/assets/ba_data/python/bascenev1lib/game/meteorshower.py index 35e0566d..964b6452 100644 --- a/src/assets/ba_data/python/bascenev1lib/game/meteorshower.py +++ b/src/assets/ba_data/python/bascenev1lib/game/meteorshower.py @@ -69,6 +69,7 @@ class MeteorShowerGame(bs.TeamGameActivity[Player, Team]): self._last_player_death_time: float | None = None self._meteor_time = 2.0 self._timer: OnScreenTimer | None = None + self._ended: bool = False # Some base class overrides: self.default_music = ( @@ -153,6 +154,9 @@ class MeteorShowerGame(bs.TeamGameActivity[Player, Team]): return None def _check_end_game(self) -> None: + # We don't want to end this activity more than once. + if self._ended: return + living_team_count = 0 for team in self.teams: for player in team.players: @@ -261,4 +265,5 @@ class MeteorShowerGame(bs.TeamGameActivity[Player, Team]): # Submit the score value in milliseconds. results.set_team_score(team, int(1000.0 * longest_life)) + self._ended = True self.end(results=results) From bd47a61f2f5063ec40d6de12d1b194b0bfc984bd Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Thu, 11 Jan 2024 23:57:23 -0600 Subject: [PATCH 11/30] look --- CONTRIBUTORS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 8fccc544..626648a1 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -50,3 +50,6 @@ ### Rikko - Created the original "reject_recently_left_players" plugin + +### Temp (3alTemp) +- Modder & Bug Fixer \ No newline at end of file From d79b5773f2fcc9492896f68e50503730dd2e016a Mon Sep 17 00:00:00 2001 From: Vishal Date: Fri, 12 Jan 2024 13:14:00 +0530 Subject: [PATCH 12/30] Update browser.py --- .../ba_data/python/bauiv1lib/coop/browser.py | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/src/assets/ba_data/python/bauiv1lib/coop/browser.py b/src/assets/ba_data/python/bauiv1lib/coop/browser.py index 28281160..df606c8e 100644 --- a/src/assets/ba_data/python/bauiv1lib/coop/browser.py +++ b/src/assets/ba_data/python/bauiv1lib/coop/browser.py @@ -104,6 +104,19 @@ class CoopBrowserWindow(bui.Window): 'campaignDifficulty', 'easy' ) + if ( + self._campaign_difficulty == 'hard' + and not app.classic.accounts.have_pro_options() + ): + plus.add_v1_account_transaction( + { + 'type': 'SET_MISC_VAL', + 'name': 'campaignDifficulty', + 'value': 'easy', + } + ) + self._campaign_difficulty = 'easy' + super().__init__( root_widget=bui.containerwidget( size=(self._width, self._height + top_extra), @@ -290,7 +303,6 @@ class CoopBrowserWindow(bui.Window): self._refresh() self._restore_state() - self._set_campaign_difficulty(self._campaign_difficulty, False) # Even though we might display cached tournament data immediately, we # don't consider it valid until we've pinged. @@ -498,11 +510,7 @@ class CoopBrowserWindow(bui.Window): self._doing_tournament_query = False self._update_for_data(tournament_data) - def _set_campaign_difficulty( - self, - difficulty: str, - check: bool - ) -> None: + def _set_campaign_difficulty(self, difficulty: str) -> None: # pylint: disable=cyclic-import from bauiv1lib.purchase import PurchaseWindow @@ -510,16 +518,13 @@ class CoopBrowserWindow(bui.Window): assert plus is not None assert bui.app.classic is not None - #if difficulty != self._campaign_difficulty - if True: + if difficulty != self._campaign_difficulty: if ( difficulty == 'hard' and not bui.app.classic.accounts.have_pro_options() ): - if check: - PurchaseWindow(items=['pro']) - return - difficulty = 'easy' + PurchaseWindow(items=['pro']) + return bui.getsound('gunCocking').play() if difficulty not in ('easy', 'hard'): print('ERROR: invalid campaign difficulty:', difficulty) @@ -565,9 +570,7 @@ class CoopBrowserWindow(bui.Window): button_type='square', autoselect=True, enable_sound=False, - on_activate_call=bui.Call( - self._set_campaign_difficulty, 'easy', True - ), + on_activate_call=bui.Call(self._set_campaign_difficulty, 'easy'), on_select_call=bui.Call(self.sel_change, 'campaign', 'easyButton'), color=sel_color if self._campaign_difficulty == 'easy' @@ -593,9 +596,7 @@ class CoopBrowserWindow(bui.Window): button_type='square', autoselect=True, enable_sound=False, - on_activate_call=bui.Call( - self._set_campaign_difficulty, 'hard', True - ), + on_activate_call=bui.Call(self._set_campaign_difficulty, 'hard'), on_select_call=bui.Call(self.sel_change, 'campaign', 'hardButton'), color=sel_color_hard if self._campaign_difficulty == 'hard' From f9b9623423b74cec9fe1b68880f52d74a9aae616 Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Sat, 20 Jan 2024 19:24:50 -0600 Subject: [PATCH 13/30] world changing commit --- CHANGELOG.md | 1 + CONTRIBUTORS.md | 3 +++ src/assets/ba_data/python/bascenev1lib/actor/spaz.py | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d1480580..651f2cc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - Players now get points for killing bots with their own bombs by catching it and throwing it back at them. This is actually old logic but was disabled due to a logic flaw, but should be fixed now. (Thanks VinniTR!) +- Custom spaz "curse_time" values now work properly. (Thanks Temp!) ### 1.7.32 (build 21741, api 8, 2023-12-20) - Fixed a screen message that no one will ever see (Thanks vishal332008?...) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 8fccc544..626648a1 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -50,3 +50,6 @@ ### Rikko - Created the original "reject_recently_left_players" plugin + +### Temp (3alTemp) +- Modder & Bug Fixer \ No newline at end of file diff --git a/src/assets/ba_data/python/bascenev1lib/actor/spaz.py b/src/assets/ba_data/python/bascenev1lib/actor/spaz.py index 71a31a4c..481058ab 100644 --- a/src/assets/ba_data/python/bascenev1lib/actor/spaz.py +++ b/src/assets/ba_data/python/bascenev1lib/actor/spaz.py @@ -624,7 +624,7 @@ class Spaz(bs.Actor): 1000.0 * (tval + self.curse_time) ) self._curse_timer = bs.Timer( - 5.0, bs.WeakCall(self.handlemessage, CurseExplodeMessage()) + self.curse_time, bs.WeakCall(self.handlemessage, CurseExplodeMessage()) ) def equip_boxing_gloves(self) -> None: From 0d39e7f770fbf15f6b34892e9361e24aa4c4cc6e Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Sat, 20 Jan 2024 19:27:50 -0600 Subject: [PATCH 14/30] preflighto --- src/assets/ba_data/python/bascenev1lib/actor/spaz.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/assets/ba_data/python/bascenev1lib/actor/spaz.py b/src/assets/ba_data/python/bascenev1lib/actor/spaz.py index 481058ab..e3b78c16 100644 --- a/src/assets/ba_data/python/bascenev1lib/actor/spaz.py +++ b/src/assets/ba_data/python/bascenev1lib/actor/spaz.py @@ -624,7 +624,8 @@ class Spaz(bs.Actor): 1000.0 * (tval + self.curse_time) ) self._curse_timer = bs.Timer( - self.curse_time, bs.WeakCall(self.handlemessage, CurseExplodeMessage()) + self.curse_time, + bs.WeakCall(self.handlemessage, CurseExplodeMessage()), ) def equip_boxing_gloves(self) -> None: From 6910e303870244741b434b41bff80961d4dcca3d Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Thu, 25 Jan 2024 16:02:00 -0600 Subject: [PATCH 15/30] pylinted --- src/assets/ba_data/python/bascenev1lib/game/meteorshower.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/assets/ba_data/python/bascenev1lib/game/meteorshower.py b/src/assets/ba_data/python/bascenev1lib/game/meteorshower.py index 964b6452..80e2cd40 100644 --- a/src/assets/ba_data/python/bascenev1lib/game/meteorshower.py +++ b/src/assets/ba_data/python/bascenev1lib/game/meteorshower.py @@ -155,8 +155,9 @@ class MeteorShowerGame(bs.TeamGameActivity[Player, Team]): def _check_end_game(self) -> None: # We don't want to end this activity more than once. - if self._ended: return - + if self._ended: + return + living_team_count = 0 for team in self.teams: for player in team.players: From b057a371baf335a483f76880b1d4b6c4218456b6 Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Thu, 25 Jan 2024 16:31:12 -0600 Subject: [PATCH 16/30] hrm --- src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py b/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py index 267d8dd3..0e67426f 100644 --- a/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py +++ b/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py @@ -24,7 +24,7 @@ from bascenev1lib.actor.flag import ( ) if TYPE_CHECKING: - from typing import Any, Sequence + from typing import Any, Sequence, override class CTFFlag(Flag): @@ -643,6 +643,7 @@ class CaptureTheFlagGame(bs.TeamGameActivity[Player, Team]): else: super().handlemessage(msg) + @override def on_player_leave(self, player: Player) -> None: """Prevents leaving players from capturing their flag.""" self._handle_death_flag_capture(player) From 24270c1a2cbf464c9f34e71b62e37dab4eee677e Mon Sep 17 00:00:00 2001 From: VinniTR <71152012+VinniTR@users.noreply.github.com> Date: Thu, 25 Jan 2024 23:53:54 -0500 Subject: [PATCH 17/30] Power-ups no longer affect melee combat. --- src/assets/ba_data/python/bascenev1lib/actor/spaz.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/assets/ba_data/python/bascenev1lib/actor/spaz.py b/src/assets/ba_data/python/bascenev1lib/actor/spaz.py index ad914b8c..3f1562a6 100644 --- a/src/assets/ba_data/python/bascenev1lib/actor/spaz.py +++ b/src/assets/ba_data/python/bascenev1lib/actor/spaz.py @@ -13,7 +13,7 @@ from typing_extensions import override import bascenev1 as bs from bascenev1lib.actor.bomb import Bomb, Blast -from bascenev1lib.actor.powerupbox import PowerupBoxFactory +from bascenev1lib.actor.powerupbox import PowerupBoxFactory, PowerupBox from bascenev1lib.actor.spazfactory import SpazFactory from bascenev1lib.gameutils import SharedObjects @@ -1226,6 +1226,8 @@ class Spaz(bs.Actor): if not self.node: return None node = bs.getcollision().opposingnode + if node.getdelegate(PowerupBox): + return # Only allow one hit per node per punch. if node and (node not in self._punched_nodes): From b7a7278139b5dcf54aa9039c124f327ead0dac28 Mon Sep 17 00:00:00 2001 From: VinniTR <71152012+VinniTR@users.noreply.github.com> Date: Fri, 26 Jan 2024 00:29:54 -0500 Subject: [PATCH 18/30] dale bobo --- src/assets/ba_data/python/bascenev1lib/actor/spaz.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/ba_data/python/bascenev1lib/actor/spaz.py b/src/assets/ba_data/python/bascenev1lib/actor/spaz.py index 3f1562a6..f5b017bb 100644 --- a/src/assets/ba_data/python/bascenev1lib/actor/spaz.py +++ b/src/assets/ba_data/python/bascenev1lib/actor/spaz.py @@ -1227,7 +1227,7 @@ class Spaz(bs.Actor): return None node = bs.getcollision().opposingnode if node.getdelegate(PowerupBox): - return + return None # Only allow one hit per node per punch. if node and (node not in self._punched_nodes): From 4fefd20688051f253fbca1b87d13aa12e8e74fa9 Mon Sep 17 00:00:00 2001 From: Vishal Date: Fri, 1 Mar 2024 10:16:31 +0530 Subject: [PATCH 19/30] Fixing CI --- src/assets/ba_data/python/bascenev1/_map.py | 3 +-- .../python/bauiv1lib/playlist/customizebrowser.py | 10 ++++------ .../ba_data/python/bauiv1lib/soundtrack/browser.py | 6 ++++-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/assets/ba_data/python/bascenev1/_map.py b/src/assets/ba_data/python/bascenev1/_map.py index 832632fc..42b22445 100644 --- a/src/assets/ba_data/python/bascenev1/_map.py +++ b/src/assets/ba_data/python/bascenev1/_map.py @@ -334,8 +334,7 @@ class Map(Actor): closest_player_dist = 9999.0 for ppt in player_pts: dist = (ppt - testpt).length() - if dist < closest_player_dist: - closest_player_dist = dist + closest_player_dist = min(closest_player_dist, dist) if closest_player_dist > farthestpt_dist: farthestpt_dist = closest_player_dist farthestpt = testpt diff --git a/src/assets/ba_data/python/bauiv1lib/playlist/customizebrowser.py b/src/assets/ba_data/python/bauiv1lib/playlist/customizebrowser.py index c5bd8428..145a96eb 100644 --- a/src/assets/ba_data/python/bauiv1lib/playlist/customizebrowser.py +++ b/src/assets/ba_data/python/bauiv1lib/playlist/customizebrowser.py @@ -536,12 +536,10 @@ class PlaylistCustomizeBrowserWindow(bui.Window): # (we don't use len()-1 here because the default list adds one) assert self._selected_playlist_index is not None - if self._selected_playlist_index > len( - bui.app.config[self._pvars.config_name + ' Playlists'] - ): - self._selected_playlist_index = len( - bui.app.config[self._pvars.config_name + ' Playlists'] - ) + self._selected_playlist_index = min( + self._selected_playlist_index, + len(bui.app.config[self._pvars.config_name + ' Playlists']) + ) self._refresh() def _import_playlist(self) -> None: diff --git a/src/assets/ba_data/python/bauiv1lib/soundtrack/browser.py b/src/assets/ba_data/python/bauiv1lib/soundtrack/browser.py index a3b561b4..04b57441 100644 --- a/src/assets/ba_data/python/bauiv1lib/soundtrack/browser.py +++ b/src/assets/ba_data/python/bauiv1lib/soundtrack/browser.py @@ -286,8 +286,10 @@ class SoundtrackBrowserWindow(bui.Window): bui.getsound('shieldDown').play() assert self._selected_soundtrack_index is not None assert self._soundtracks is not None - if self._selected_soundtrack_index >= len(self._soundtracks): - self._selected_soundtrack_index = len(self._soundtracks) + self._selected_soundtrack_index = min( + self._selected_soundtrack_index, + len(self._soundtracks) + ) self._refresh() def _delete_soundtrack(self) -> None: From a7166b2d7196da0351068f16316a12323e4a0e8e Mon Sep 17 00:00:00 2001 From: brostos <67740566+brostosjoined@users.noreply.github.com> Date: Sat, 2 Mar 2024 03:27:29 +0300 Subject: [PATCH 20/30] Update manualtab.py --- src/assets/ba_data/python/bauiv1lib/gather/manualtab.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/ba_data/python/bauiv1lib/gather/manualtab.py b/src/assets/ba_data/python/bauiv1lib/gather/manualtab.py index d7f3205e..f45bb081 100644 --- a/src/assets/ba_data/python/bauiv1lib/gather/manualtab.py +++ b/src/assets/ba_data/python/bauiv1lib/gather/manualtab.py @@ -48,7 +48,7 @@ class _HostLookupThread(Thread): try: import socket - result = socket.gethostbyname(self._name) + result = [item[-1][0] for item in socket.getaddrinfo(self.name, self._port)][0] except Exception: result = None bui.pushcall( From 15bf8f4c126957ea82da372f0d73dc4b13e16db4 Mon Sep 17 00:00:00 2001 From: Eric Date: Fri, 1 Mar 2024 16:20:36 -0800 Subject: [PATCH 21/30] getting this ball rolling again after lots of server work --- .efrocachemap | 84 +++++++++---------- CHANGELOG.md | 2 +- src/assets/ba_data/python/baenv.py | 2 +- src/assets/ba_data/python/bascenev1/_map.py | 7 +- .../bauiv1lib/playlist/customizebrowser.py | 62 +++++++------- .../python/bauiv1lib/soundtrack/browser.py | 31 ++++--- src/ballistica/shared/ballistica.cc | 2 +- tools/efro/cloudshell.py | 1 + tools/efro/util.py | 18 +++- tools/efrotools/code.py | 20 ++--- tools/efrotools/pybuild.py | 4 +- 11 files changed, 117 insertions(+), 116 deletions(-) diff --git a/.efrocachemap b/.efrocachemap index 9f55a5f5..55096fc2 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -421,39 +421,39 @@ "build/assets/ba_data/audio/zoeOw.ogg": "74befe45a8417e95b6a2233c51992a26", "build/assets/ba_data/audio/zoePickup01.ogg": "48ab8cddfcde36a750856f3f81dd20c8", "build/assets/ba_data/audio/zoeScream01.ogg": "2b468aedfa8741090247f04eb9e6df55", - "build/assets/ba_data/data/langdata.json": "831b83240126d0a851104f4148712ed1", + "build/assets/ba_data/data/langdata.json": "5273cf3bfe2d25d70395690bf3c21825", "build/assets/ba_data/data/languages/arabic.json": "0db32e21b6d5337ccca478381744aa88", - "build/assets/ba_data/data/languages/belarussian.json": "a112dfca3e188387516788bd8229c5b0", + "build/assets/ba_data/data/languages/belarussian.json": "09954e550d13d3d9cb5a635a1d32a151", "build/assets/ba_data/data/languages/chinese.json": "1360ffde06828b63ce4fe956c3c3cd1d", "build/assets/ba_data/data/languages/chinesetraditional.json": "319565f8a15667488f48dbce59278e39", - "build/assets/ba_data/data/languages/croatian.json": "766532c67af5bd0144c2d63cab0516fa", + "build/assets/ba_data/data/languages/croatian.json": "e671b9d0c012be1a30f9c15eb1b81860", "build/assets/ba_data/data/languages/czech.json": "7171420af6d662e3a47b64576850a384", - "build/assets/ba_data/data/languages/danish.json": "3fd69080783d5c9dcc0af737f02b6f1e", + "build/assets/ba_data/data/languages/danish.json": "8e57db30c5250df2abff14a822f83ea7", "build/assets/ba_data/data/languages/dutch.json": "b0900d572c9141897d53d6574c471343", - "build/assets/ba_data/data/languages/english.json": "1c4037fea1066d39d6eced419f314f35", + "build/assets/ba_data/data/languages/english.json": "28a1c17925aba4f4f908732e5e5cb266", "build/assets/ba_data/data/languages/esperanto.json": "0e397cfa5f3fb8cef5f4a64f21cda880", - "build/assets/ba_data/data/languages/filipino.json": "43e838754fe013b8bac75f75aef78cb3", + "build/assets/ba_data/data/languages/filipino.json": "fe3f1efcb47efaa23524300d21728933", "build/assets/ba_data/data/languages/french.json": "cc8ac601f5443dd539893728db983f5c", "build/assets/ba_data/data/languages/german.json": "450fa41ae264f29a5d1af22143d0d0ad", - "build/assets/ba_data/data/languages/gibberish.json": "b461539243e8efe3137137b886256ba7", + "build/assets/ba_data/data/languages/gibberish.json": "ab9571486f703b8d57eab61dbf1d54d8", "build/assets/ba_data/data/languages/greek.json": "287c0ec437b38772284ef9d3e4fb2fc3", - "build/assets/ba_data/data/languages/hindi.json": "5b6c8e988ffa84a7e26d120b6cd8e1a4", + "build/assets/ba_data/data/languages/hindi.json": "90f54663e15d85a163f1848a8e9d8d07", "build/assets/ba_data/data/languages/hungarian.json": "796a290a8c44a1e7635208c2ff5fdc6e", "build/assets/ba_data/data/languages/indonesian.json": "9103845242b572aa8ba48e24f81ddb68", "build/assets/ba_data/data/languages/italian.json": "f550810b6866ea9bcf1985b7228f8cff", "build/assets/ba_data/data/languages/korean.json": "4e3524327a0174250aff5e1ef4c0c597", "build/assets/ba_data/data/languages/malay.json": "832562ce997fc70704b9234c95fb2e38", - "build/assets/ba_data/data/languages/persian.json": "9728d631cf7d9ad3b209ae1244bb59c0", - "build/assets/ba_data/data/languages/polish.json": "3a90b2d9e2c59305580c96f8098fc839", + "build/assets/ba_data/data/languages/persian.json": "1a4c74ad9089cd746ad6fda4186c2220", + "build/assets/ba_data/data/languages/polish.json": "9d22c6643c097c4cb268d0d6b6319cd4", "build/assets/ba_data/data/languages/portuguese.json": "b52164747c6308fc9d054eb6c0ff3c54", - "build/assets/ba_data/data/languages/romanian.json": "aeebdd54f65939c2facc6ac50c117826", + "build/assets/ba_data/data/languages/romanian.json": "b3e46efd6f869dbd78014570e037c290", "build/assets/ba_data/data/languages/russian.json": "30d5f3d2415088e1fb6558fcd6ccfa98", "build/assets/ba_data/data/languages/serbian.json": "d7452dd72ac0e51680cb39b5ebaa1c69", - "build/assets/ba_data/data/languages/slovak.json": "27962d53dc3f7dd4e877cd40faafeeef", + "build/assets/ba_data/data/languages/slovak.json": "c00fb27cf982ffad5a4370ad3b16bd21", "build/assets/ba_data/data/languages/spanish.json": "e3e9ac8f96f52302a480c7e955aed71f", "build/assets/ba_data/data/languages/swedish.json": "5142a96597d17d8344be96a603da64ac", - "build/assets/ba_data/data/languages/tamil.json": "b4de1a2851afe4869c82e9acd94cd89c", - "build/assets/ba_data/data/languages/thai.json": "9c425b420f0488a7f883da98947657ad", + "build/assets/ba_data/data/languages/tamil.json": "b9fcc523639f55e05c7f4e7914f3321a", + "build/assets/ba_data/data/languages/thai.json": "1d665629361f302693dead39de8fa945", "build/assets/ba_data/data/languages/turkish.json": "2be25c89ca754341f27750e0d595f31e", "build/assets/ba_data/data/languages/ukrainian.json": "b54a38e93deebafa5706ba2d1f626892", "build/assets/ba_data/data/languages/venetian.json": "f896fc3df13a42f1bef8813ca80b1a09", @@ -4060,26 +4060,26 @@ "build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1", "build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae", "build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599", - "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "d5a8312cd9cf65f32ca2a7c4a2063c03", - "build/prefab/full/linux_arm64_gui/release/ballisticakit": "aecb00e9044fa677583e1036fa7875d8", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "eca7f9ab892edfa7423a9d4a6f89e571", - "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "99647f48362f84112d23a9bc89eaa983", - "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "31e21a64d77fc0834832b633a26d986b", - "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "7c12b4078c3af6e627a4051b1c1d8370", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "f7a66c48321efa4462e8eae6b72db2b2", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "08cdbeb2ca4fa8c996f3369680c4e5cd", - "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "f92679bab5a0d057427962869e19f057", - "build/prefab/full/mac_arm64_gui/release/ballisticakit": "d5bcd695f84dab1ab32655989d399c9e", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "c766f437ece15dae0ee971e4c2e10a2d", - "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "cbecc4c11b9aa4621abfdc996fecfd74", - "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "7af782c9d9bcf1396a15dea6f2493d70", - "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "2c04f3f68db3e73e4aad4c656d956c00", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "132c83ee8811828739601ac3d0599fe9", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "8de942a2e1ff96c147a9500a56ca4f64", - "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "6bf51ccbd01937bf1b28cfffe029d857", - "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "c5f0d834a47852f1c240e17a6c933e0a", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "4f74b71dabd207bee732dc91c9a28dc4", - "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "f48ab8e4c4d05f4b2231bebf33c965f1", + "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "1cf452ed4653e93921de7a2b6bb19669", + "build/prefab/full/linux_arm64_gui/release/ballisticakit": "2635ca7a0e0d9ca9291b0611a6e3a4a9", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "ae3efe5eaf140d58ad2404119f41f832", + "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "1f942a62356c44611567f92b8eeac697", + "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "dbc6bf037fe98ab85df435f0f5dcd64b", + "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "70a6974c4b620e124f05b40dcd6813db", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "5d01f7bc6644d3a67ca463af36bd5535", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "52471d786b3ee3fc810129b33d18f6a9", + "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "efd3526235cbaf84c126ece8260d39d2", + "build/prefab/full/mac_arm64_gui/release/ballisticakit": "a1c07fde2b8ab53fb9cf11d7f86a39d8", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "2361961394bf06d914077f41969e7013", + "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "ec9d52d27119a55d8a86e40b04785cfc", + "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "0a10c3f196f48cd338b66240755d25ed", + "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "6af21795e58dfe4790686ae21886bfcd", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "ddb898d18b9f1a59e4fa9d57a6f7a7d8", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "10852d507a445bcadb19dd1468aff190", + "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "ad4c7c93ab7a7c31cf30719a05fcb412", + "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "ac24b39b493dc7ed6243e7d297b03992", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "12be5e9f91892836b5a0e1ef6280a71a", + "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "ebf1b09620266808688f72bf99785657", "build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "ee36a39fd0f524989cb68930c89c8868", "build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "dbed9145e5db116d92aa47cb9e98da39", "build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "ee36a39fd0f524989cb68930c89c8868", @@ -4096,14 +4096,14 @@ "build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "0896e849885cef50bcf33ce863efa7d2", "build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "e53c808357cc0a2f0da7b870be147083", "build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "0896e849885cef50bcf33ce863efa7d2", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "e34cc55fd284e31d9ed1151c5a51bf34", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "36cb65be158a0103d81c82d8a51dc8b6", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "21f8a61745c2fec88749299f5aeeeaf9", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "d61272f101f87b140b84895e482b07f4", - "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "36c30bcd93d38569b9515ed17896d8de", - "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "841c7cd3cc96c91ecd11335a91c0c465", - "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "305aab4423bf510f6bf95fe0c996128f", - "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "f1066b8591d7859df76c8e976ceee2d5", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "f53601899c23c90c2b7e65836c805d8e", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "f31b348a7612e5fa3a968f3cc81cefcd", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "b8339779a2571b169f9d63c11aa7dfa3", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "511bc23565e830778d5ff183a201579d", + "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "b02faf2aa2df1de233a0549295e6b0ed", + "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "2e07aaa6d445caf3b33d79dc40bd2475", + "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "00f50fb4a3a9bbecd1b1188b78abae4b", + "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "88fb67cb3f3752f0b0db1d583f90490d", "src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c", "src/assets/ba_data/python/babase/_mgen/enums.py": "b611c090513a21e2fe90e56582724e9d", "src/ballistica/base/mgen/pyembed/binding_base.inc": "72bfed2cce8ff19741989dec28302f3f", diff --git a/CHANGELOG.md b/CHANGELOG.md index 471b12c4..5067fee9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -### 1.7.33 (build 21766, api 8, 2024-02-01) +### 1.7.33 (build 21767, api 8, 2024-03-01) - Stress test input-devices are now a bit smarter; they won't press any buttons while UIs are up (this could cause lots of chaos if it happened). - Added a 'Show Demos When Idle' option in advanced settings. If enabled, the diff --git a/src/assets/ba_data/python/baenv.py b/src/assets/ba_data/python/baenv.py index cdcf043b..23385c82 100644 --- a/src/assets/ba_data/python/baenv.py +++ b/src/assets/ba_data/python/baenv.py @@ -52,7 +52,7 @@ if TYPE_CHECKING: # Build number and version of the ballistica binary we expect to be # using. -TARGET_BALLISTICA_BUILD = 21766 +TARGET_BALLISTICA_BUILD = 21767 TARGET_BALLISTICA_VERSION = '1.7.33' diff --git a/src/assets/ba_data/python/bascenev1/_map.py b/src/assets/ba_data/python/bascenev1/_map.py index 832632fc..02f64909 100644 --- a/src/assets/ba_data/python/bascenev1/_map.py +++ b/src/assets/ba_data/python/bascenev1/_map.py @@ -256,9 +256,7 @@ class Map(Actor): return ( None if val is None - else babase.vec3validate(val) - if __debug__ - else val + else babase.vec3validate(val) if __debug__ else val ) def get_def_points(self, name: str) -> list[Sequence[float]]: @@ -334,8 +332,7 @@ class Map(Actor): closest_player_dist = 9999.0 for ppt in player_pts: dist = (ppt - testpt).length() - if dist < closest_player_dist: - closest_player_dist = dist + closest_player_dist = min(dist, closest_player_dist) if closest_player_dist > farthestpt_dist: farthestpt_dist = closest_player_dist farthestpt = testpt diff --git a/src/assets/ba_data/python/bauiv1lib/playlist/customizebrowser.py b/src/assets/ba_data/python/bauiv1lib/playlist/customizebrowser.py index c5bd8428..9880c4d5 100644 --- a/src/assets/ba_data/python/bauiv1lib/playlist/customizebrowser.py +++ b/src/assets/ba_data/python/bauiv1lib/playlist/customizebrowser.py @@ -52,9 +52,7 @@ class PlaylistCustomizeBrowserWindow(bui.Window): self._height = ( 380.0 if uiscale is bui.UIScale.SMALL - else 420.0 - if uiscale is bui.UIScale.MEDIUM - else 500.0 + else 420.0 if uiscale is bui.UIScale.MEDIUM else 500.0 ) top_extra = 20.0 if uiscale is bui.UIScale.SMALL else 0.0 @@ -66,13 +64,11 @@ class PlaylistCustomizeBrowserWindow(bui.Window): scale=( 2.05 if uiscale is bui.UIScale.SMALL - else 1.5 - if uiscale is bui.UIScale.MEDIUM - else 1.0 + else 1.5 if uiscale is bui.UIScale.MEDIUM else 1.0 + ), + stack_offset=( + (0, -10) if uiscale is bui.UIScale.SMALL else (0, 0) ), - stack_offset=(0, -10) - if uiscale is bui.UIScale.SMALL - else (0, 0), ) ) @@ -118,9 +114,7 @@ class PlaylistCustomizeBrowserWindow(bui.Window): scl = ( 1.1 if uiscale is bui.UIScale.SMALL - else 1.27 - if uiscale is bui.UIScale.MEDIUM - else 1.57 + else 1.27 if uiscale is bui.UIScale.MEDIUM else 1.57 ) scl *= 0.63 v -= 65.0 * scl @@ -285,9 +279,11 @@ class PlaylistCustomizeBrowserWindow(bui.Window): bui.widget( edit=scrollwidget, left_widget=new_button, - right_widget=bui.get_special_widget('party_button') - if bui.app.ui_v1.use_toolbars - else None, + right_widget=( + bui.get_special_widget('party_button') + if bui.app.ui_v1.use_toolbars + else None + ), ) # make sure config exists @@ -329,9 +325,9 @@ class PlaylistCustomizeBrowserWindow(bui.Window): if self._selected_playlist_name is not None: cfg = bui.app.config - cfg[ - self._pvars.config_name + ' Playlist Selection' - ] = self._selected_playlist_name + cfg[self._pvars.config_name + ' Playlist Selection'] = ( + self._selected_playlist_name + ) cfg.commit() bui.containerwidget( @@ -408,9 +404,11 @@ class PlaylistCustomizeBrowserWindow(bui.Window): text=self._get_playlist_display_name(pname), h_align='left', v_align='center', - color=(0.6, 0.6, 0.7, 1.0) - if pname == '__default__' - else (0.85, 0.85, 0.85, 1), + color=( + (0.6, 0.6, 0.7, 1.0) + if pname == '__default__' + else (0.85, 0.85, 0.85, 1) + ), always_highlight=True, on_select_call=bui.Call(self._select, pname, index), on_activate_call=bui.Call(self._edit_button.activate), @@ -458,12 +456,12 @@ class PlaylistCustomizeBrowserWindow(bui.Window): # if we want and also lets us pass it to the game (since we reset # the whole python environment that's not actually easy). cfg = bui.app.config - cfg[ - self._pvars.config_name + ' Playlist Selection' - ] = self._selected_playlist_name - cfg[ - self._pvars.config_name + ' Playlist Randomize' - ] = self._do_randomize_val + cfg[self._pvars.config_name + ' Playlist Selection'] = ( + self._selected_playlist_name + ) + cfg[self._pvars.config_name + ' Playlist Randomize'] = ( + self._do_randomize_val + ) cfg.commit() def _new_playlist(self) -> None: @@ -536,12 +534,10 @@ class PlaylistCustomizeBrowserWindow(bui.Window): # (we don't use len()-1 here because the default list adds one) assert self._selected_playlist_index is not None - if self._selected_playlist_index > len( - bui.app.config[self._pvars.config_name + ' Playlists'] - ): - self._selected_playlist_index = len( - bui.app.config[self._pvars.config_name + ' Playlists'] - ) + self._selected_playlist_index = min( + self._selected_playlist_index, + len(bui.app.config[self._pvars.config_name + ' Playlists']), + ) self._refresh() def _import_playlist(self) -> None: diff --git a/src/assets/ba_data/python/bauiv1lib/soundtrack/browser.py b/src/assets/ba_data/python/bauiv1lib/soundtrack/browser.py index a3b561b4..1899e854 100644 --- a/src/assets/ba_data/python/bauiv1lib/soundtrack/browser.py +++ b/src/assets/ba_data/python/bauiv1lib/soundtrack/browser.py @@ -43,9 +43,7 @@ class SoundtrackBrowserWindow(bui.Window): self._height = ( 340 if uiscale is bui.UIScale.SMALL - else 370 - if uiscale is bui.UIScale.MEDIUM - else 440 + else 370 if uiscale is bui.UIScale.MEDIUM else 440 ) spacing = 40.0 v = self._height - 40.0 @@ -60,13 +58,11 @@ class SoundtrackBrowserWindow(bui.Window): scale=( 2.3 if uiscale is bui.UIScale.SMALL - else 1.6 - if uiscale is bui.UIScale.MEDIUM - else 1.0 + else 1.6 if uiscale is bui.UIScale.MEDIUM else 1.0 + ), + stack_offset=( + (0, -18) if uiscale is bui.UIScale.SMALL else (0, 0) ), - stack_offset=(0, -18) - if uiscale is bui.UIScale.SMALL - else (0, 0), ) ) @@ -110,9 +106,7 @@ class SoundtrackBrowserWindow(bui.Window): scl = ( 1.0 if uiscale is bui.UIScale.SMALL - else 1.13 - if uiscale is bui.UIScale.MEDIUM - else 1.4 + else 1.13 if uiscale is bui.UIScale.MEDIUM else 1.4 ) v -= 60.0 * scl self._new_button = btn = bui.buttonwidget( @@ -245,9 +239,11 @@ class SoundtrackBrowserWindow(bui.Window): bui.widget( edit=self._scrollwidget, left_widget=self._new_button, - right_widget=bui.get_special_widget('party_button') - if bui.app.ui_v1.use_toolbars - else self._scrollwidget, + right_widget=( + bui.get_special_widget('party_button') + if bui.app.ui_v1.use_toolbars + else self._scrollwidget + ), ) self._col = bui.columnwidget(parent=scrollwidget, border=2, margin=0) @@ -286,8 +282,9 @@ class SoundtrackBrowserWindow(bui.Window): bui.getsound('shieldDown').play() assert self._selected_soundtrack_index is not None assert self._soundtracks is not None - if self._selected_soundtrack_index >= len(self._soundtracks): - self._selected_soundtrack_index = len(self._soundtracks) + self._selected_soundtrack_index = min( + self._selected_soundtrack_index, len(self._soundtracks) + ) self._refresh() def _delete_soundtrack(self) -> None: diff --git a/src/ballistica/shared/ballistica.cc b/src/ballistica/shared/ballistica.cc index 4e3a9e8d..89e120d2 100644 --- a/src/ballistica/shared/ballistica.cc +++ b/src/ballistica/shared/ballistica.cc @@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int { namespace ballistica { // These are set automatically via script; don't modify them here. -const int kEngineBuildNumber = 21766; +const int kEngineBuildNumber = 21767; const char* kEngineVersion = "1.7.33"; const int kEngineApiVersion = 8; diff --git a/tools/efro/cloudshell.py b/tools/efro/cloudshell.py index 3965d072..2d6b63e7 100644 --- a/tools/efro/cloudshell.py +++ b/tools/efro/cloudshell.py @@ -32,6 +32,7 @@ class HostConfig: user: str = 'ubuntu' port: int = 22 mosh_port: int | None = None + mosh_port_2: int | None = None mosh_server_path: str | None = None mosh_shell: str = 'sh' workspaces_root: str = '/home/${USER}/cloudshell_workspaces' diff --git a/tools/efro/util.py b/tools/efro/util.py index 5fc5b3ec..5d1b2f7d 100644 --- a/tools/efro/util.py +++ b/tools/efro/util.py @@ -236,7 +236,7 @@ class DirtyBit: auto_dirty_seconds: float | None = None, min_update_interval: float | None = None, ): - curtime = time.time() + curtime = time.monotonic() self._retry_interval = retry_interval self._auto_dirty_seconds = auto_dirty_seconds self._min_update_interval = min_update_interval @@ -268,11 +268,13 @@ class DirtyBit: # If we're freshly clean, set our next auto-dirty time (if we have # one). if self._dirty and not value and self._auto_dirty_seconds is not None: - self._next_auto_dirty_time = time.time() + self._auto_dirty_seconds + self._next_auto_dirty_time = ( + time.monotonic() + self._auto_dirty_seconds + ) # If we're freshly dirty, schedule an immediate update. if not self._dirty and value: - self._next_update_time = time.time() + self._next_update_time = time.monotonic() # If they want to enforce a minimum update interval, # push out the next update time if it hasn't been long enough. @@ -295,7 +297,7 @@ class DirtyBit: Takes into account the amount of time passed since the target was marked dirty or since should_update last returned True. """ - curtime = time.time() + curtime = time.monotonic() # Auto-dirty ourself if we're into that. if ( @@ -871,3 +873,11 @@ def ago_str( timedelta_str(now - timeval, maxparts=maxparts, decimals=decimals) + ' ago' ) + + +def split_list(input_list: list[T], max_length: int) -> list[list[T]]: + """Split a single list into smaller lists.""" + return [ + input_list[i : i + max_length] + for i in range(0, len(input_list), max_length) + ] diff --git a/tools/efrotools/code.py b/tools/efrotools/code.py index 66f9374b..762c0961 100644 --- a/tools/efrotools/code.py +++ b/tools/efrotools/code.py @@ -103,14 +103,14 @@ def format_project_cpp_files(projroot: Path, full: bool) -> None: dirtyfiles = cache.get_dirty_files() def format_file(filename: str) -> dict[str, Any]: - start_time = time.time() + start_time = time.monotonic() # Note: seems os.system does not unlock the gil; # make sure to use subprocess. result = subprocess.call(['clang-format', '-i', filename]) if result != 0: raise RuntimeError(f'Formatting failed for {filename}') - duration = time.time() - start_time + duration = time.monotonic() - start_time print(f'Formatted {filename} in {duration:.2f} seconds.') sys.stdout.flush() return {'f': filename, 't': duration} @@ -514,7 +514,7 @@ def _run_pylint( from pylint import lint from efro.terminal import Clr - start_time = time.time() + start_time = time.monotonic() args = ['--rcfile', str(pylintrc), '--output-format=colorized'] args += dirtyfiles @@ -540,7 +540,7 @@ def _run_pylint( if run.linter.msg_status != 0: raise CleanError('Pylint failed.') - duration = time.time() - start_time + duration = time.monotonic() - start_time print( f'{Clr.GRN}Pylint passed for {name}' f' in {duration:.1f} seconds.{Clr.RST}' @@ -796,12 +796,12 @@ def mypy(projroot: Path, full: bool) -> None: filenames = get_script_filenames(projroot) desc = '(full)' if full else '(incremental)' print(f'{Clr.BLU}Running Mypy {desc}...{Clr.RST}', flush=True) - starttime = time.time() + starttime = time.monotonic() try: mypy_files(projroot, filenames, full) except Exception as exc: raise CleanError('Mypy failed.') from exc - duration = time.time() - starttime + duration = time.monotonic() - starttime print( f'{Clr.GRN}Mypy passed in {duration:.1f} seconds.{Clr.RST}', flush=True ) @@ -819,7 +819,7 @@ def dmypy(projroot: Path) -> None: return print('Running Mypy (daemon)...', flush=True) - starttime = time.time() + starttime = time.monotonic() try: args = [ 'dmypy', @@ -834,7 +834,7 @@ def dmypy(projroot: Path) -> None: subprocess.run(args, check=True) except Exception as exc: raise CleanError('Mypy daemon: fail.') from exc - duration = time.time() - starttime + duration = time.monotonic() - starttime print( f'{Clr.GRN}Mypy daemon passed in {duration:.1f} seconds.{Clr.RST}', flush=True, @@ -893,7 +893,7 @@ def _run_idea_inspections( from efro.terminal import Clr - start_time = time.time() + start_time = time.monotonic() print( f'{Clr.BLU}{displayname} checking' f' {len(scripts)} file(s)...{Clr.RST}', @@ -944,7 +944,7 @@ def _run_idea_inspections( f'{Clr.SRED}{displayname} inspection' f' found {total_errors} error(s).{Clr.RST}' ) - duration = time.time() - start_time + duration = time.monotonic() - start_time print( f'{Clr.GRN}{displayname} passed for {len(scripts)} files' f' in {duration:.1f} seconds.{Clr.RST}', diff --git a/tools/efrotools/pybuild.py b/tools/efrotools/pybuild.py index 1177ec79..82120d75 100644 --- a/tools/efrotools/pybuild.py +++ b/tools/efrotools/pybuild.py @@ -37,8 +37,8 @@ VERSION_MIN_TVOS = '9.0' # why-is-lldb-generating-exc-bad-instruction-with-user-compiled-library-on-macos # # For now will try to ride out this 3.0 LTS version as long as possible. -OPENSSL_VER_APPLE = '3.0.12' -OPENSSL_VER_ANDROID = '3.0.12' +OPENSSL_VER_APPLE = '3.0.13' +OPENSSL_VER_ANDROID = '3.0.13' LIBFFI_VER_APPLE = '3.4.4' BZIP2_VER_APPLE = '1.0.8' From 1907c344ae76d981f0c607c5efd72e84401a8508 Mon Sep 17 00:00:00 2001 From: brostos <67740566+brostosjoined@users.noreply.github.com> Date: Sat, 2 Mar 2024 03:35:22 +0300 Subject: [PATCH 22/30] Update CONTRIBUTORS.md --- CONTRIBUTORS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 8fccc544..94c6e71d 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -50,3 +50,6 @@ ### Rikko - Created the original "reject_recently_left_players" plugin + +### brostos +- Added support for joining using ipv6 address From e811679ec5883bfdcb068f5c4eafd22546cd5029 Mon Sep 17 00:00:00 2001 From: Eric Date: Fri, 1 Mar 2024 17:03:15 -0800 Subject: [PATCH 23/30] tidying --- .efrocachemap | 40 +++++++++---------- CHANGELOG.md | 4 +- src/assets/ba_data/python/baenv.py | 2 +- .../ba_data/python/bascenev1lib/actor/spaz.py | 2 + src/ballistica/shared/ballistica.cc | 2 +- 5 files changed, 27 insertions(+), 23 deletions(-) diff --git a/.efrocachemap b/.efrocachemap index 55096fc2..dcea1814 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -4060,26 +4060,26 @@ "build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1", "build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae", "build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599", - "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "1cf452ed4653e93921de7a2b6bb19669", - "build/prefab/full/linux_arm64_gui/release/ballisticakit": "2635ca7a0e0d9ca9291b0611a6e3a4a9", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "ae3efe5eaf140d58ad2404119f41f832", - "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "1f942a62356c44611567f92b8eeac697", - "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "dbc6bf037fe98ab85df435f0f5dcd64b", - "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "70a6974c4b620e124f05b40dcd6813db", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "5d01f7bc6644d3a67ca463af36bd5535", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "52471d786b3ee3fc810129b33d18f6a9", - "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "efd3526235cbaf84c126ece8260d39d2", - "build/prefab/full/mac_arm64_gui/release/ballisticakit": "a1c07fde2b8ab53fb9cf11d7f86a39d8", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "2361961394bf06d914077f41969e7013", - "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "ec9d52d27119a55d8a86e40b04785cfc", - "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "0a10c3f196f48cd338b66240755d25ed", - "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "6af21795e58dfe4790686ae21886bfcd", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "ddb898d18b9f1a59e4fa9d57a6f7a7d8", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "10852d507a445bcadb19dd1468aff190", - "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "ad4c7c93ab7a7c31cf30719a05fcb412", - "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "ac24b39b493dc7ed6243e7d297b03992", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "12be5e9f91892836b5a0e1ef6280a71a", - "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "ebf1b09620266808688f72bf99785657", + "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "9cfdec94ec84dd9c8811631b8bb9794d", + "build/prefab/full/linux_arm64_gui/release/ballisticakit": "d0c987c9bb70256d74edac186d0f4162", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "6bbd0d415831f0dc029334e4bd19ef5c", + "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "1e74862be648297c9f2892e137456d54", + "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "85add7681422d4f26816c384230b754c", + "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "324e55800b57332cbaa16971d2806463", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "4977b35a78b3dd97a85d492ec2da8e74", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "da556d1a27865674bcfc5bfe9f317f29", + "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "26d122da6d23020090486f7869a80357", + "build/prefab/full/mac_arm64_gui/release/ballisticakit": "55938b5e06b1f5ed017e15a07a240e19", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "42b9cf187a57e5954ce3f601a92a2352", + "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "4967471f83df6bebee68f61eb272631a", + "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "6ca147ea4e4275d899b09fed75e42e61", + "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "d52e5f6ccec7284c964bffb3496d9ec4", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "032c2d040d0beb02d0f2c70d5480e4b9", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "6f926618da3c1601df5215cf4553a2bc", + "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "b4e179bcc1a36cd9c0ac9ec04899d4f8", + "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "0d15b7ed7ee2eea10e51e13c8bea9548", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "98eb49198af3b3f18968c193e947a563", + "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "d6cb1d65c3b092174298054f0dd782ea", "build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "ee36a39fd0f524989cb68930c89c8868", "build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "dbed9145e5db116d92aa47cb9e98da39", "build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "ee36a39fd0f524989cb68930c89c8868", diff --git a/CHANGELOG.md b/CHANGELOG.md index 5067fee9..f72e355a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -### 1.7.33 (build 21767, api 8, 2024-03-01) +### 1.7.33 (build 21769, api 8, 2024-03-01) - Stress test input-devices are now a bit smarter; they won't press any buttons while UIs are up (this could cause lots of chaos if it happened). - Added a 'Show Demos When Idle' option in advanced settings. If enabled, the @@ -22,6 +22,8 @@ classes forget to adapt to the change. - Implemented `efro.dataclassio.IOMultiType` which will make my life a lot easier. +- Punches no longer physically affect powerup boxes which should make it easier + to grab the powerup (Thanks VinniTR!). ### 1.7.32 (build 21741, api 8, 2023-12-20) - Fixed a screen message that no one will ever see (Thanks vishal332008?...) diff --git a/src/assets/ba_data/python/baenv.py b/src/assets/ba_data/python/baenv.py index 23385c82..c38cf353 100644 --- a/src/assets/ba_data/python/baenv.py +++ b/src/assets/ba_data/python/baenv.py @@ -52,7 +52,7 @@ if TYPE_CHECKING: # Build number and version of the ballistica binary we expect to be # using. -TARGET_BALLISTICA_BUILD = 21767 +TARGET_BALLISTICA_BUILD = 21769 TARGET_BALLISTICA_VERSION = '1.7.33' diff --git a/src/assets/ba_data/python/bascenev1lib/actor/spaz.py b/src/assets/ba_data/python/bascenev1lib/actor/spaz.py index f5b017bb..768f2491 100644 --- a/src/assets/ba_data/python/bascenev1lib/actor/spaz.py +++ b/src/assets/ba_data/python/bascenev1lib/actor/spaz.py @@ -1226,6 +1226,8 @@ class Spaz(bs.Actor): if not self.node: return None node = bs.getcollision().opposingnode + + # Don't want to physically affect powerups. if node.getdelegate(PowerupBox): return None diff --git a/src/ballistica/shared/ballistica.cc b/src/ballistica/shared/ballistica.cc index 89e120d2..70273681 100644 --- a/src/ballistica/shared/ballistica.cc +++ b/src/ballistica/shared/ballistica.cc @@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int { namespace ballistica { // These are set automatically via script; don't modify them here. -const int kEngineBuildNumber = 21767; +const int kEngineBuildNumber = 21769; const char* kEngineVersion = "1.7.33"; const int kEngineApiVersion = 8; From ffa75ac4d1007ff90a460c105fae17eb65a2e25e Mon Sep 17 00:00:00 2001 From: Eric Date: Fri, 1 Mar 2024 17:30:29 -0800 Subject: [PATCH 24/30] Latest public/internal sync. --- .../python/bauiv1lib/gather/manualtab.py | 41 +++++++++---------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/src/assets/ba_data/python/bauiv1lib/gather/manualtab.py b/src/assets/ba_data/python/bauiv1lib/gather/manualtab.py index f45bb081..88232b73 100644 --- a/src/assets/ba_data/python/bauiv1lib/gather/manualtab.py +++ b/src/assets/ba_data/python/bauiv1lib/gather/manualtab.py @@ -48,7 +48,10 @@ class _HostLookupThread(Thread): try: import socket - result = [item[-1][0] for item in socket.getaddrinfo(self.name, self._port)][0] + result = [ + item[-1][0] + for item in socket.getaddrinfo(self.name, self._port) + ][0] except Exception: result = None bui.pushcall( @@ -212,15 +215,19 @@ class ManualGatherTab(GatherTab): inactive_color = (0.5, 0.4, 0.5) bui.textwidget( edit=self._join_by_address_text, - color=active_color - if value is SubTabType.JOIN_BY_ADDRESS - else inactive_color, + color=( + active_color + if value is SubTabType.JOIN_BY_ADDRESS + else inactive_color + ), ) bui.textwidget( edit=self._favorites_text, - color=active_color - if value is SubTabType.FAVORITES - else inactive_color, + color=( + active_color + if value is SubTabType.FAVORITES + else inactive_color + ), ) # Clear anything existing in the old sub-tab. @@ -354,9 +361,7 @@ class ManualGatherTab(GatherTab): self._height = ( 578 if uiscale is bui.UIScale.SMALL - else 670 - if uiscale is bui.UIScale.MEDIUM - else 800 + else 670 if uiscale is bui.UIScale.MEDIUM else 800 ) self._scroll_width = self._width - 130 + 2 * x_inset @@ -375,16 +380,12 @@ class ManualGatherTab(GatherTab): b_height = ( 107 if uiscale is bui.UIScale.SMALL - else 142 - if uiscale is bui.UIScale.MEDIUM - else 190 + else 142 if uiscale is bui.UIScale.MEDIUM else 190 ) b_space_extra = ( 0 if uiscale is bui.UIScale.SMALL - else -2 - if uiscale is bui.UIScale.MEDIUM - else -5 + else -2 if uiscale is bui.UIScale.MEDIUM else -5 ) btnv = ( @@ -392,9 +393,7 @@ class ManualGatherTab(GatherTab): - ( 48 if uiscale is bui.UIScale.SMALL - else 45 - if uiscale is bui.UIScale.MEDIUM - else 40 + else 45 if uiscale is bui.UIScale.MEDIUM else 40 ) - b_height ) @@ -513,9 +512,7 @@ class ManualGatherTab(GatherTab): scale=( 1.8 if uiscale is bui.UIScale.SMALL - else 1.55 - if uiscale is bui.UIScale.MEDIUM - else 1.0 + else 1.55 if uiscale is bui.UIScale.MEDIUM else 1.0 ), size=(c_width, c_height), transition='in_scale', From c2e68fe7b514307bbd2ce94e58f4a58f284d554c Mon Sep 17 00:00:00 2001 From: Eric Date: Fri, 1 Mar 2024 17:37:27 -0800 Subject: [PATCH 25/30] Latest public/internal sync. --- .efrocachemap | 40 ++++++++++++++--------------- CHANGELOG.md | 3 ++- src/assets/ba_data/python/baenv.py | 2 +- src/ballistica/shared/ballistica.cc | 2 +- 4 files changed, 24 insertions(+), 23 deletions(-) diff --git a/.efrocachemap b/.efrocachemap index dcea1814..cfb82614 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -4060,26 +4060,26 @@ "build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1", "build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae", "build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599", - "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "9cfdec94ec84dd9c8811631b8bb9794d", - "build/prefab/full/linux_arm64_gui/release/ballisticakit": "d0c987c9bb70256d74edac186d0f4162", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "6bbd0d415831f0dc029334e4bd19ef5c", - "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "1e74862be648297c9f2892e137456d54", - "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "85add7681422d4f26816c384230b754c", - "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "324e55800b57332cbaa16971d2806463", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "4977b35a78b3dd97a85d492ec2da8e74", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "da556d1a27865674bcfc5bfe9f317f29", - "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "26d122da6d23020090486f7869a80357", - "build/prefab/full/mac_arm64_gui/release/ballisticakit": "55938b5e06b1f5ed017e15a07a240e19", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "42b9cf187a57e5954ce3f601a92a2352", - "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "4967471f83df6bebee68f61eb272631a", - "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "6ca147ea4e4275d899b09fed75e42e61", - "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "d52e5f6ccec7284c964bffb3496d9ec4", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "032c2d040d0beb02d0f2c70d5480e4b9", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "6f926618da3c1601df5215cf4553a2bc", - "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "b4e179bcc1a36cd9c0ac9ec04899d4f8", - "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "0d15b7ed7ee2eea10e51e13c8bea9548", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "98eb49198af3b3f18968c193e947a563", - "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "d6cb1d65c3b092174298054f0dd782ea", + "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "a7161a4100172e2bb42b838a9851c353", + "build/prefab/full/linux_arm64_gui/release/ballisticakit": "9a63e694db2ed7536374c58a45ce65d3", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "9668ef38ddc59fadf323cf460c8b692c", + "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "8f58837d238dba248ae2e23e20bc3f06", + "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "f8a6e20f3fffd198494adfba4e884588", + "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "255205c95d519a594041fc239e435883", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "36facf256b69a8c0037370e23c82470d", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "d78aef348baf274f476ce9e344b80122", + "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "f1b9732cc7e7728dcedc39a55d9afea2", + "build/prefab/full/mac_arm64_gui/release/ballisticakit": "8cfc0e04c10a315cce91dae041dfc3ff", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "a9fec1930c851f8ed743b08669df2d75", + "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "a6fcaa9d7eb10412787e4416f3536bb9", + "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "a39230df064404a3b1dd18a644f2f6d6", + "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "04e971f62a000383a13eb021e30afa7b", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "a93fe4f0cfb3c2c9061df049068230ac", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "0f08a84bb09589991faaca9250171e3c", + "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "12c079e62d0125b8a24b16e418405ba9", + "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "eb0d76fd3be03082572b0d835df05252", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "e4268ef0b50e94747081ee83666d80ab", + "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "f4646fecfed11f5e2b2ee5c892b2940a", "build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "ee36a39fd0f524989cb68930c89c8868", "build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "dbed9145e5db116d92aa47cb9e98da39", "build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "ee36a39fd0f524989cb68930c89c8868", diff --git a/CHANGELOG.md b/CHANGELOG.md index f72e355a..c9380d08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -### 1.7.33 (build 21769, api 8, 2024-03-01) +### 1.7.33 (build 21770, api 8, 2024-03-01) - Stress test input-devices are now a bit smarter; they won't press any buttons while UIs are up (this could cause lots of chaos if it happened). - Added a 'Show Demos When Idle' option in advanced settings. If enabled, the @@ -24,6 +24,7 @@ easier. - Punches no longer physically affect powerup boxes which should make it easier to grab the powerup (Thanks VinniTR!). +- The 'Manual' party tab now supports entering IPv6 addresses (Thanks brostosjoined!). ### 1.7.32 (build 21741, api 8, 2023-12-20) - Fixed a screen message that no one will ever see (Thanks vishal332008?...) diff --git a/src/assets/ba_data/python/baenv.py b/src/assets/ba_data/python/baenv.py index c38cf353..64ec5fa4 100644 --- a/src/assets/ba_data/python/baenv.py +++ b/src/assets/ba_data/python/baenv.py @@ -52,7 +52,7 @@ if TYPE_CHECKING: # Build number and version of the ballistica binary we expect to be # using. -TARGET_BALLISTICA_BUILD = 21769 +TARGET_BALLISTICA_BUILD = 21770 TARGET_BALLISTICA_VERSION = '1.7.33' diff --git a/src/ballistica/shared/ballistica.cc b/src/ballistica/shared/ballistica.cc index 70273681..19703b87 100644 --- a/src/ballistica/shared/ballistica.cc +++ b/src/ballistica/shared/ballistica.cc @@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int { namespace ballistica { // These are set automatically via script; don't modify them here. -const int kEngineBuildNumber = 21769; +const int kEngineBuildNumber = 21770; const char* kEngineVersion = "1.7.33"; const int kEngineApiVersion = 8; From fb015da7f339092de9d9aefd4f364081795c296b Mon Sep 17 00:00:00 2001 From: Eric Date: Fri, 1 Mar 2024 17:46:40 -0800 Subject: [PATCH 26/30] Latest public/internal sync. --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c9380d08..2fa6a019 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,7 +24,10 @@ easier. - Punches no longer physically affect powerup boxes which should make it easier to grab the powerup (Thanks VinniTR!). -- The 'Manual' party tab now supports entering IPv6 addresses (Thanks brostosjoined!). +- The 'Manual' party tab now supports entering IPv6 addresses (Thanks + brostos!). +- Fixes a bug where Meteor Shower could make the game-end bell sound twice + (Thanks 3alTemp!). ### 1.7.32 (build 21741, api 8, 2023-12-20) - Fixed a screen message that no one will ever see (Thanks vishal332008?...) From 8f35aa8450c63a5b9cb606e7f6f2c26f9ee639f5 Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Fri, 1 Mar 2024 19:53:46 -0600 Subject: [PATCH 27/30] I think --- src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py b/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py index 0e67426f..316483f9 100644 --- a/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py +++ b/src/assets/ba_data/python/bascenev1lib/game/capturetheflag.py @@ -24,7 +24,7 @@ from bascenev1lib.actor.flag import ( ) if TYPE_CHECKING: - from typing import Any, Sequence, override + from typing import Any, Sequence class CTFFlag(Flag): From 1933f67d3d2efd5d6bd7c6dc05abbccca9427c00 Mon Sep 17 00:00:00 2001 From: Vishal Date: Sat, 2 Mar 2024 07:54:51 +0530 Subject: [PATCH 28/30] Fixing conflict --- src/assets/ba_data/python/bascenev1/_map.py | 2 +- .../ba_data/python/bauiv1lib/playlist/customizebrowser.py | 2 +- src/assets/ba_data/python/bauiv1lib/soundtrack/browser.py | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/assets/ba_data/python/bascenev1/_map.py b/src/assets/ba_data/python/bascenev1/_map.py index 42b22445..5ace08e2 100644 --- a/src/assets/ba_data/python/bascenev1/_map.py +++ b/src/assets/ba_data/python/bascenev1/_map.py @@ -334,7 +334,7 @@ class Map(Actor): closest_player_dist = 9999.0 for ppt in player_pts: dist = (ppt - testpt).length() - closest_player_dist = min(closest_player_dist, dist) + closest_player_dist = min(dist, closest_player_dist) if closest_player_dist > farthestpt_dist: farthestpt_dist = closest_player_dist farthestpt = testpt diff --git a/src/assets/ba_data/python/bauiv1lib/playlist/customizebrowser.py b/src/assets/ba_data/python/bauiv1lib/playlist/customizebrowser.py index 145a96eb..a2cdd9a0 100644 --- a/src/assets/ba_data/python/bauiv1lib/playlist/customizebrowser.py +++ b/src/assets/ba_data/python/bauiv1lib/playlist/customizebrowser.py @@ -538,7 +538,7 @@ class PlaylistCustomizeBrowserWindow(bui.Window): assert self._selected_playlist_index is not None self._selected_playlist_index = min( self._selected_playlist_index, - len(bui.app.config[self._pvars.config_name + ' Playlists']) + len(bui.app.config[self._pvars.config_name + ' Playlists']), ) self._refresh() diff --git a/src/assets/ba_data/python/bauiv1lib/soundtrack/browser.py b/src/assets/ba_data/python/bauiv1lib/soundtrack/browser.py index 04b57441..5907aa4b 100644 --- a/src/assets/ba_data/python/bauiv1lib/soundtrack/browser.py +++ b/src/assets/ba_data/python/bauiv1lib/soundtrack/browser.py @@ -287,8 +287,7 @@ class SoundtrackBrowserWindow(bui.Window): assert self._selected_soundtrack_index is not None assert self._soundtracks is not None self._selected_soundtrack_index = min( - self._selected_soundtrack_index, - len(self._soundtracks) + self._selected_soundtrack_index, len(self._soundtracks) ) self._refresh() From a01e5608e0b7edb10941afd9f3762cc74ab0ab3b Mon Sep 17 00:00:00 2001 From: Eric Date: Fri, 1 Mar 2024 18:28:46 -0800 Subject: [PATCH 29/30] Latest public/internal sync. --- .../ba_data/python/bauiv1lib/coop/browser.py | 119 ++++++++++-------- 1 file changed, 67 insertions(+), 52 deletions(-) diff --git a/src/assets/ba_data/python/bauiv1lib/coop/browser.py b/src/assets/ba_data/python/bauiv1lib/coop/browser.py index df606c8e..540f1804 100644 --- a/src/assets/ba_data/python/bauiv1lib/coop/browser.py +++ b/src/assets/ba_data/python/bauiv1lib/coop/browser.py @@ -90,9 +90,7 @@ class CoopBrowserWindow(bui.Window): self._height = ( 657 if uiscale is bui.UIScale.SMALL - else 730 - if uiscale is bui.UIScale.MEDIUM - else 800 + else 730 if uiscale is bui.UIScale.MEDIUM else 800 ) app.ui_v1.set_main_menu_location('Coop Select') self._r = 'coopSelectWindow' @@ -125,17 +123,13 @@ class CoopBrowserWindow(bui.Window): stack_offset=( (0, -15) if uiscale is bui.UIScale.SMALL - else (0, 0) - if uiscale is bui.UIScale.MEDIUM - else (0, 0) + else (0, 0) if uiscale is bui.UIScale.MEDIUM else (0, 0) ), transition=transition, scale=( 1.2 if uiscale is bui.UIScale.SMALL - else 0.8 - if uiscale is bui.UIScale.MEDIUM - else 0.75 + else 0.8 if uiscale is bui.UIScale.MEDIUM else 0.75 ), ) ) @@ -284,9 +278,11 @@ class CoopBrowserWindow(bui.Window): self._scrollwidget = bui.scrollwidget( parent=self._root_widget, highlight=False, - position=(65 + x_inset, 120) - if uiscale is bui.UIScale.SMALL and app.ui_v1.use_toolbars - else (65 + x_inset, 70), + position=( + (65 + x_inset, 120) + if uiscale is bui.UIScale.SMALL and app.ui_v1.use_toolbars + else (65 + x_inset, 70) + ), size=(self._scroll_width, self._scroll_height), simple_culling_v=10.0, claims_left_right=True, @@ -434,12 +430,14 @@ class CoopBrowserWindow(bui.Window): if tbtn.time_remaining_value_text is not None: bui.textwidget( edit=tbtn.time_remaining_value_text, - text=bui.timestring(tbtn.time_remaining, centi=False) - if ( - tbtn.has_time_remaining - and self._tourney_data_up_to_date - ) - else '-', + text=( + bui.timestring(tbtn.time_remaining, centi=False) + if ( + tbtn.has_time_remaining + and self._tourney_data_up_to_date + ) + else '-' + ), ) # Also adjust the ad icon visibility. @@ -460,9 +458,9 @@ class CoopBrowserWindow(bui.Window): try: bui.imagewidget( edit=self._hard_button_lock_image, - opacity=0.0 - if bui.app.classic.accounts.have_pro_options() - else 1.0, + opacity=( + 0.0 if bui.app.classic.accounts.have_pro_options() else 1.0 + ), ) except Exception: logging.exception('Error updating campaign lock.') @@ -572,12 +570,16 @@ class CoopBrowserWindow(bui.Window): enable_sound=False, on_activate_call=bui.Call(self._set_campaign_difficulty, 'easy'), on_select_call=bui.Call(self.sel_change, 'campaign', 'easyButton'), - color=sel_color - if self._campaign_difficulty == 'easy' - else un_sel_color, - textcolor=sel_textcolor - if self._campaign_difficulty == 'easy' - else un_sel_textcolor, + color=( + sel_color + if self._campaign_difficulty == 'easy' + else un_sel_color + ), + textcolor=( + sel_textcolor + if self._campaign_difficulty == 'easy' + else un_sel_textcolor + ), ) bui.widget(edit=self._easy_button, show_buffer_left=100) if self._selected_campaign_level == 'easyButton': @@ -598,12 +600,16 @@ class CoopBrowserWindow(bui.Window): enable_sound=False, on_activate_call=bui.Call(self._set_campaign_difficulty, 'hard'), on_select_call=bui.Call(self.sel_change, 'campaign', 'hardButton'), - color=sel_color_hard - if self._campaign_difficulty == 'hard' - else un_sel_color, - textcolor=sel_textcolor - if self._campaign_difficulty == 'hard' - else un_sel_textcolor, + color=( + sel_color_hard + if self._campaign_difficulty == 'hard' + else un_sel_color + ), + textcolor=( + sel_textcolor + if self._campaign_difficulty == 'hard' + else un_sel_textcolor + ), ) self._hard_button_lock_image = bui.imagewidget( parent=parent_widget, @@ -973,35 +979,43 @@ class CoopBrowserWindow(bui.Window): for i, tbutton in enumerate(self._tournament_buttons): bui.widget( edit=tbutton.button, - up_widget=self._tournament_info_button - if i == 0 - else self._tournament_buttons[i - 1].button, - down_widget=self._tournament_buttons[(i + 1)].button - if i + 1 < len(self._tournament_buttons) - else custom_h_scroll, + up_widget=( + self._tournament_info_button + if i == 0 + else self._tournament_buttons[i - 1].button + ), + down_widget=( + self._tournament_buttons[(i + 1)].button + if i + 1 < len(self._tournament_buttons) + else custom_h_scroll + ), ) bui.widget( edit=tbutton.more_scores_button, - down_widget=self._tournament_buttons[ - (i + 1) - ].current_leader_name_text - if i + 1 < len(self._tournament_buttons) - else custom_h_scroll, + down_widget=( + self._tournament_buttons[(i + 1)].current_leader_name_text + if i + 1 < len(self._tournament_buttons) + else custom_h_scroll + ), ) bui.widget( edit=tbutton.current_leader_name_text, - up_widget=self._tournament_info_button - if i == 0 - else self._tournament_buttons[i - 1].more_scores_button, + up_widget=( + self._tournament_info_button + if i == 0 + else self._tournament_buttons[i - 1].more_scores_button + ), ) for btn in self._custom_buttons: try: bui.widget( edit=btn.get_button(), - up_widget=tournament_h_scroll - if self._tournament_buttons - else self._tournament_info_button, + up_widget=( + tournament_h_scroll + if self._tournament_buttons + else self._tournament_info_button + ), ) except Exception: logging.exception('Error wiring up custom buttons.') @@ -1055,8 +1069,9 @@ class CoopBrowserWindow(bui.Window): def _switch_to_score( self, - show_tab: StoreBrowserWindow.TabID - | None = StoreBrowserWindow.TabID.EXTRAS, + show_tab: ( + StoreBrowserWindow.TabID | None + ) = StoreBrowserWindow.TabID.EXTRAS, ) -> None: # pylint: disable=cyclic-import from bauiv1lib.account import show_sign_in_prompt From f5ec632f83d92dad5ff6450ad9b711d7dd4ccd80 Mon Sep 17 00:00:00 2001 From: Vishal Date: Sat, 2 Mar 2024 09:15:48 +0530 Subject: [PATCH 30/30] Update modutils.py --- src/assets/ba_data/python/babase/modutils.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/assets/ba_data/python/babase/modutils.py b/src/assets/ba_data/python/babase/modutils.py index 7780d1f6..1608eb5c 100644 --- a/src/assets/ba_data/python/babase/modutils.py +++ b/src/assets/ba_data/python/babase/modutils.py @@ -136,7 +136,9 @@ def create_user_system_scripts() -> None: path = f'{env.python_directory_user}/sys/{env.version}' pathtmp = path + '_tmp' if os.path.exists(path): - shutil.rmtree(path) + print('Delete Existing User Scripts and try again.') + _babase.screenmessage('Delete Existing User Scripts and try again.') + return if os.path.exists(pathtmp): shutil.rmtree(pathtmp) @@ -159,6 +161,7 @@ def create_user_system_scripts() -> None: f"'\nRestart {_babase.appname()} to use them." f' (use babase.quit() to exit the game)' ) + _babase.screenmessage('Created User System Scripts') if app.classic is not None and app.classic.platform == 'android': print( 'Note: the new files may not be visible via ' @@ -183,6 +186,7 @@ def delete_user_system_scripts() -> None: f'Restart {_babase.appname()} to use internal' f' scripts. (use babase.quit() to exit the game)' ) + _babase.screenmessage('Deleted User System Scripts') else: print(f"User system scripts not found at '{path}'.")