From dbd19e58be7a13f63e2e4f842fe47b9c53f638e9 Mon Sep 17 00:00:00 2001 From: Era <100019405+EraOSBeta@users.noreply.github.com> Date: Fri, 22 Dec 2023 23:16:22 +0330 Subject: [PATCH 01/39] Added session_max_players_override option for servers --- .../ba_data/python/baclassic/_servermode.py | 4 ++++ src/assets/ba_data/python/bascenev1/__init__.py | 5 ++++- src/assets/ba_data/python/bascenev1/_session.py | 17 +++++++++++++++-- tools/bacommon/servermanager.py | 8 ++++++-- 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/assets/ba_data/python/baclassic/_servermode.py b/src/assets/ba_data/python/baclassic/_servermode.py index 45ee6eb9..60f5200c 100644 --- a/src/assets/ba_data/python/baclassic/_servermode.py +++ b/src/assets/ba_data/python/baclassic/_servermode.py @@ -427,6 +427,10 @@ class ServerController: self._config.player_rejoin_cooldown ) + bascenev1.set_max_players_override( + self._config.session_max_players_override + ) + # And here.. we.. go. if self._config.stress_test_players is not None: # Special case: run a stress test. diff --git a/src/assets/ba_data/python/bascenev1/__init__.py b/src/assets/ba_data/python/bascenev1/__init__.py index e96deb0b..6465139b 100644 --- a/src/assets/ba_data/python/bascenev1/__init__.py +++ b/src/assets/ba_data/python/bascenev1/__init__.py @@ -228,7 +228,9 @@ from bascenev1._settings import ( IntSetting, Setting, ) -from bascenev1._session import Session, set_player_rejoin_cooldown +from bascenev1._session import ( + Session, set_player_rejoin_cooldown, set_max_players_override +) from bascenev1._stats import PlayerScoredMessage, PlayerRecord, Stats from bascenev1._team import SessionTeam, Team, EmptyTeam from bascenev1._teamgame import TeamGameActivity @@ -420,6 +422,7 @@ __all__ = [ 'set_public_party_queue_enabled', 'set_public_party_stats_url', 'set_player_rejoin_cooldown', + 'set_max_players_override', 'set_replay_speed_exponent', 'set_touchscreen_editing', 'setmusic', diff --git a/src/assets/ba_data/python/bascenev1/_session.py b/src/assets/ba_data/python/bascenev1/_session.py index d561f12d..b7a203f2 100644 --- a/src/assets/ba_data/python/bascenev1/_session.py +++ b/src/assets/ba_data/python/bascenev1/_session.py @@ -23,6 +23,9 @@ if TYPE_CHECKING: # such as skipping respawn waits. _g_player_rejoin_cooldown: float = 0.0 +# overrides the session's decision of max_players +_max_players_override: int | None = None + def set_player_rejoin_cooldown(cooldown: float) -> None: """Set the cooldown for individual players rejoining after leaving.""" @@ -30,6 +33,12 @@ def set_player_rejoin_cooldown(cooldown: float) -> None: _g_player_rejoin_cooldown = max(0.0, cooldown) +def set_max_players_override(max_players: int | None) -> None: + """Set the override for how many players can join a session""" + global _max_players_override # pylint: disable=global-statement + _max_players_override = max_players + + class Session: """Defines a high level series of bascenev1.Activity-es. @@ -161,7 +170,11 @@ class Session: self.sessionteams = [] self.sessionplayers = [] self.min_players = min_players - self.max_players = max_players + self.max_players = ( + max_players + if _max_players_override is None + else _max_players_override + ) self.customdata = {} self._in_set_activity = False @@ -255,7 +268,7 @@ class Session: babase.app.classic is not None and babase.app.classic.stress_test_reset_timer is None ): - if len(self.sessionplayers) >= self.max_players: + if len(self.sessionplayers) >= self.max_players >= 0: # Print a rejection message *only* to the client trying to # join (prevents spamming everyone else in the game). _bascenev1.getsound('error').play() diff --git a/tools/bacommon/servermanager.py b/tools/bacommon/servermanager.py index 28ca0db5..295a8be8 100644 --- a/tools/bacommon/servermanager.py +++ b/tools/bacommon/servermanager.py @@ -47,10 +47,14 @@ class ServerConfig: # Max devices in the party. Note that this does *NOT* mean max players. # Any device in the party can have more than one player on it if they have # multiple controllers. Also, this number currently includes the server so - # generally make it 1 bigger than you need. Max-players is not currently - # exposed but I'll try to add that soon. + # generally make it 1 bigger than you need. max_party_size: int = 6 + # Max players that can join a session. If present this will override the + # session's preferred max_players. if a value below 0 is given player limit + # will be removed. + session_max_players_override: int | None = None + # Options here are 'ffa' (free-for-all), 'teams' and 'coop' (cooperative) # This value is ignored if you supply a playlist_code (see below). session_type: str = 'ffa' From 2c66a5f2451335150fdeb458a3bae3e409ae9e61 Mon Sep 17 00:00:00 2001 From: Era <100019405+EraOSBeta@users.noreply.github.com> Date: Fri, 22 Dec 2023 23:32:02 +0330 Subject: [PATCH 02/39] Updated CHANGELOG and CONTRIBUTORS --- CHANGELOG.md | 9 +++++---- CONTRIBUTORS.md | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d84b9b62..d657d2e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ ### 1.7.33 (build 21743, api 8, 2023-12-21) +- Exposed an override for `bascenev1.Session`'s max players on servers (by EraOSBeta) ### 1.7.32 (build 21741, api 8, 2023-12-20) - Fixed a screen message that no one will ever see (Thanks vishal332008?...) @@ -42,7 +43,7 @@ intended. Now, however, such commands get scheduled to a current 'ui-operation' and then run *almost* immediately, which should prevent such situations. Please holler if you run into any UI weirdness at this point. - + ### 1.7.30 (build 21697, api 8, 2023-12-08) - Continued work on the big 1.7.28 update. - Got the Android version back up and running. There's been lots of cleanup and @@ -319,7 +320,7 @@ - Added a 'glow_type' arg to `bauiv1.textwidget()` to adjust the glow used when the text is selected. The default is 'gradient' but there is now a 'uniform' option which may look better in some circumstances. - + ### 1.7.27 (build 21282, api 8, 2023-08-30) - Fixed a rare crash that could occur if the app shuts down while a background @@ -440,7 +441,7 @@ Visual Studio Code (and potentially other editors), so am seeing if it is worth officially supporting in addition to or as a replacement for Mypy. See `tools/pcommand pyright` - + ### 1.7.24 (build 21199, api 8, 2023-07-27) - Fixed an issue where respawn icons could disappear in epic mode (Thanks for @@ -495,7 +496,7 @@ can be useful for core engine code to directly and clearly point out problems that cannot be recovered from (Exceptions in such cases can tend to be 'handled' which leads to a broken or crashing app). - + ### 1.7.23 (build 21178, api 8, 2023-07-19) - Network security improvements. (Thanks Dliwk!) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 8fccc544..a097222f 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -37,12 +37,12 @@ - Added feature ### Vishal332008 -- Bug Fixer +- QoL and Bug Fixer - Modder ### Era0S - Community Suggestions Implementer -- Bug Fixer +- QoL and Bug Fixer - Modder ### VinniTR From c2f34bac3a809d1eafa503399e6018484b8345cf Mon Sep 17 00:00:00 2001 From: Era <100019405+EraOSBeta@users.noreply.github.com> Date: Sat, 23 Dec 2023 21:14:37 +0330 Subject: [PATCH 03/39] UI for series length --- .../ba_data/python/baclassic/_servermode.py | 4 +++ .../ba_data/python/baclassic/_subsystem.py | 4 +-- .../python/bascenev1/_multiteamsession.py | 4 +-- src/assets/ba_data/python/bauiv1lib/config.py | 10 ++++-- .../ba_data/python/bauiv1lib/playoptions.py | 31 +++++++++++++++++-- 5 files changed, 44 insertions(+), 9 deletions(-) diff --git a/src/assets/ba_data/python/baclassic/_servermode.py b/src/assets/ba_data/python/baclassic/_servermode.py index 60f5200c..65720ae3 100644 --- a/src/assets/ba_data/python/baclassic/_servermode.py +++ b/src/assets/ba_data/python/baclassic/_servermode.py @@ -406,6 +406,10 @@ class ServerController: else: raise RuntimeError(f'Unknown session type {sessiontype}') + appcfg['Teams Series Length'] = self._config.teams_series_length + appcfg['FFA Series Length'] = self._config.ffa_series_length + + # deprecated, left here in order to not break mods classic.teams_series_length = self._config.teams_series_length classic.ffa_series_length = self._config.ffa_series_length diff --git a/src/assets/ba_data/python/baclassic/_subsystem.py b/src/assets/ba_data/python/baclassic/_subsystem.py index 16299bdc..65c799d6 100644 --- a/src/assets/ba_data/python/baclassic/_subsystem.py +++ b/src/assets/ba_data/python/baclassic/_subsystem.py @@ -101,8 +101,8 @@ class ClassicSubsystem(babase.AppSubsystem): self.maps: dict[str, type[bascenev1.Map]] = {} # Gameplay. - self.teams_series_length = 7 - self.ffa_series_length = 24 + self.teams_series_length = 7 # deprecated, left for old mods + self.ffa_series_length = 24 # deprecated, left for old mods self.coop_session_args: dict = {} # UI. diff --git a/src/assets/ba_data/python/bascenev1/_multiteamsession.py b/src/assets/ba_data/python/bascenev1/_multiteamsession.py index cdd1bf2a..ce816888 100644 --- a/src/assets/ba_data/python/bascenev1/_multiteamsession.py +++ b/src/assets/ba_data/python/bascenev1/_multiteamsession.py @@ -65,8 +65,8 @@ class MultiTeamSession(Session): max_players=self.get_max_players(), ) - self._series_length: int = classic.teams_series_length - self._ffa_series_length: int = classic.ffa_series_length + self._series_length: int = int(cfg.get('Teams Series Length', 7)) + self._ffa_series_length: int = int(cfg.get('FFA Series Length', 24)) show_tutorial = cfg.get('Show Tutorial', True) diff --git a/src/assets/ba_data/python/bauiv1lib/config.py b/src/assets/ba_data/python/bauiv1lib/config.py index 763a3704..255dd6d3 100644 --- a/src/assets/ba_data/python/bauiv1lib/config.py +++ b/src/assets/ba_data/python/bauiv1lib/config.py @@ -94,6 +94,8 @@ class ConfigNumberEdit: changesound: bool = True, textscale: float = 1.0, as_percent: bool = False, + fallback_value: float = 0.0, + f: int = 1, ): if displayname is None: displayname = configkey @@ -103,8 +105,12 @@ class ConfigNumberEdit: self._maxval = maxval self._increment = increment self._callback = callback - self._value = bui.app.config.resolve(configkey) + try: + self._value = bui.app.config.resolve(configkey) + except ValueError: + self._value = bui.app.config.get(configkey, fallback_value) self._as_percent = as_percent + self._f = f self.nametext = bui.textwidget( parent=parent, @@ -171,5 +177,5 @@ class ConfigNumberEdit: if self._as_percent: val = f'{round(self._value*100.0)}%' else: - val = f'{self._value:.1f}' + val = f'{self._value:.{self._f}f}' bui.textwidget(edit=self.valuetext, text=val) diff --git a/src/assets/ba_data/python/bauiv1lib/playoptions.py b/src/assets/ba_data/python/bauiv1lib/playoptions.py index ea58e4d6..88935bf3 100644 --- a/src/assets/ba_data/python/bauiv1lib/playoptions.py +++ b/src/assets/ba_data/python/bauiv1lib/playoptions.py @@ -32,6 +32,7 @@ class PlayOptionsWindow(PopupWindow): # pylint: disable=too-many-locals from bascenev1 import filter_playlist, get_map_class from bauiv1lib.playlist import PlaylistTypeVars + from bauiv1lib.config import ConfigNumberEdit self._r = 'gameListWindow' self._delegate = delegate @@ -51,7 +52,7 @@ class PlayOptionsWindow(PopupWindow): self._playlist = playlist self._width = 500.0 - self._height = 330.0 - 50.0 + self._height = 370.0 - 50.0 # In teams games, show the custom names/colors button. if self._sessiontype is bs.DualTeamSession: @@ -274,13 +275,37 @@ class PlayOptionsWindow(PopupWindow): texture=bui.gettexture('lock'), ) + y_offs = 50 if show_shuffle_check_box else 0 + + # Series Length + y_offs2 = 40 if self._sessiontype is bs.DualTeamSession else 0 + self._series_length_numedit = ConfigNumberEdit( + parent=self.root_widget, + position=(100, 200 + y_offs + y_offs2), + configkey=( + 'FFA' if self._sessiontype is bs.FreeForAllSession else 'Teams' + ) + ' Series Length', + displayname=bui.Lstr( + resource=self._r + ( + '.pointsToWinText' + if self._sessiontype is bs.FreeForAllSession + else '.seriesLengthText' + ) + ), + minval=1.0, + increment=1.0 if self._sessiontype is bs.FreeForAllSession else 2.0, + fallback_value=( + 24 if self._sessiontype is bs.FreeForAllSession else 7 + ), + f=0, + ) + # Team names/colors. self._custom_colors_names_button: bui.Widget | None if self._sessiontype is bs.DualTeamSession: - y_offs = 50 if show_shuffle_check_box else 0 self._custom_colors_names_button = bui.buttonwidget( parent=self.root_widget, - position=(100, 200 + y_offs), + position=(100, 195 + y_offs), size=(290, 35), on_activate_call=bui.WeakCall(self._custom_colors_names_press), autoselect=True, From 1018a158c7097bae845766c418198b4e223fb914 Mon Sep 17 00:00:00 2001 From: Era <100019405+EraOSBeta@users.noreply.github.com> Date: Sat, 23 Dec 2023 21:58:03 +0330 Subject: [PATCH 04/39] Added temp to CONTRIBUTORS --- CONTRIBUTORS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index a097222f..4c8e0f2d 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -50,3 +50,6 @@ ### Rikko - Created the original "reject_recently_left_players" plugin + +### 3alTemp +- Original idea for customizable series length on GUI builds From b925aa31f9b3cf6c11c6d444d05295bf9de2845f Mon Sep 17 00:00:00 2001 From: Era <100019405+EraOSBeta@users.noreply.github.com> Date: Sat, 23 Dec 2023 21:59:56 +0330 Subject: [PATCH 05/39] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d657d2e1..8b2ee065 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ### 1.7.33 (build 21743, api 8, 2023-12-21) - Exposed an override for `bascenev1.Session`'s max players on servers (by EraOSBeta) +- Added UI for customizing teams and FFA series length (by EraOSBeta, idea by 3alTemp) ### 1.7.32 (build 21741, api 8, 2023-12-20) - Fixed a screen message that no one will ever see (Thanks vishal332008?...) From d1defe0558f3d48e00a50493077e2f86d4534be0 Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Fri, 5 Jan 2024 21:53:29 -0600 Subject: [PATCH 06/39] 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 07/39] 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 08/39] 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 09/39] 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 10/39] 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 11/39] 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 12/39] 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 13/39] 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 14/39] 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 15/39] 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 16/39] 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 17/39] 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 18/39] 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 19/39] 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 20/39] 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 21/39] 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 22/39] 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 23/39] 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 5c0d768dcc29d40e9524c3a71b0803a8a9d524b1 Mon Sep 17 00:00:00 2001 From: Era <100019405+EraOSBeta@users.noreply.github.com> Date: Sun, 11 Feb 2024 12:38:49 +0330 Subject: [PATCH 24/39] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d8f5910a..7b5a399d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ classes forget to adapt to the change. - Implemented `efro.dataclassio.IOMultiType` which will make my life a lot easier. + ### 1.7.32 (build 21741, api 8, 2023-12-20) - Fixed a screen message that no one will ever see (Thanks vishal332008?...) - Plugins window now displays 'No Plugins Installed' when no plugins are present (Thanks vishal332008!) From 4fefd20688051f253fbca1b87d13aa12e8e74fa9 Mon Sep 17 00:00:00 2001 From: Vishal Date: Fri, 1 Mar 2024 10:16:31 +0530 Subject: [PATCH 25/39] 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 26/39] 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 27/39] 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 28/39] 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 29/39] 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 30/39] 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 31/39] 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 32/39] 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 33/39] 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 34/39] 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 35/39] 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 36/39] 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}'.") From 4a9dd247b68df5027e28b7acbaa2bf8b4ea02140 Mon Sep 17 00:00:00 2001 From: Eric Date: Fri, 1 Mar 2024 20:11:05 -0800 Subject: [PATCH 37/39] Latest public/internal sync. --- .../ba_data/python/baclassic/_servermode.py | 16 +++++++--------- src/assets/ba_data/python/bascenev1/__init__.py | 4 +++- .../ba_data/python/bauiv1lib/playoptions.py | 16 ++++++++-------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/assets/ba_data/python/baclassic/_servermode.py b/src/assets/ba_data/python/baclassic/_servermode.py index 65720ae3..a5479955 100644 --- a/src/assets/ba_data/python/baclassic/_servermode.py +++ b/src/assets/ba_data/python/baclassic/_servermode.py @@ -310,9 +310,7 @@ class ServerController: typename = ( 'teams' if result['playlistType'] == 'Team Tournament' - else 'ffa' - if result['playlistType'] == 'Free-for-All' - else '??' + else 'ffa' if result['playlistType'] == 'Free-for-All' else '??' ) plistname = result['playlistName'] print(f'{Clr.SBLU}Got playlist: "{plistname}" ({typename}).{Clr.RST}') @@ -390,14 +388,14 @@ class ServerController: if sessiontype is bascenev1.FreeForAllSession: appcfg['Free-for-All Playlist Selection'] = self._playlist_name - appcfg[ - 'Free-for-All Playlist Randomize' - ] = self._config.playlist_shuffle + appcfg['Free-for-All Playlist Randomize'] = ( + self._config.playlist_shuffle + ) elif sessiontype is bascenev1.DualTeamSession: appcfg['Team Tournament Playlist Selection'] = self._playlist_name - appcfg[ - 'Team Tournament Playlist Randomize' - ] = self._config.playlist_shuffle + appcfg['Team Tournament Playlist Randomize'] = ( + self._config.playlist_shuffle + ) elif sessiontype is bascenev1.CoopSession: classic.coop_session_args = { 'campaign': self._config.coop_campaign, diff --git a/src/assets/ba_data/python/bascenev1/__init__.py b/src/assets/ba_data/python/bascenev1/__init__.py index ee9605da..8e8b6686 100644 --- a/src/assets/ba_data/python/bascenev1/__init__.py +++ b/src/assets/ba_data/python/bascenev1/__init__.py @@ -232,7 +232,9 @@ from bascenev1._settings import ( Setting, ) from bascenev1._session import ( - Session, set_player_rejoin_cooldown, set_max_players_override + Session, + set_player_rejoin_cooldown, + set_max_players_override, ) from bascenev1._stats import PlayerScoredMessage, PlayerRecord, Stats from bascenev1._team import SessionTeam, Team, EmptyTeam diff --git a/src/assets/ba_data/python/bauiv1lib/playoptions.py b/src/assets/ba_data/python/bauiv1lib/playoptions.py index 637b50c1..ace486ac 100644 --- a/src/assets/ba_data/python/bauiv1lib/playoptions.py +++ b/src/assets/ba_data/python/bauiv1lib/playoptions.py @@ -146,9 +146,7 @@ class PlayOptionsWindow(PopupWindow): scale = ( 1.69 if uiscale is bui.UIScale.SMALL - else 1.1 - if uiscale is bui.UIScale.MEDIUM - else 0.85 + else 1.1 if uiscale is bui.UIScale.MEDIUM else 0.85 ) # Creates our _root_widget. super().__init__( @@ -285,9 +283,11 @@ class PlayOptionsWindow(PopupWindow): position=(100, 200 + y_offs + y_offs2), configkey=( 'FFA' if self._sessiontype is bs.FreeForAllSession else 'Teams' - ) + ' Series Length', + ) + + ' Series Length', displayname=bui.Lstr( - resource=self._r + ( + resource=self._r + + ( '.pointsToWinText' if self._sessiontype is bs.FreeForAllSession else '.seriesLengthText' @@ -329,9 +329,9 @@ class PlayOptionsWindow(PopupWindow): def _cb_callback(val: bool) -> None: self._do_randomize_val = val cfg = bui.app.config - cfg[ - self._pvars.config_name + ' Playlist Randomize' - ] = self._do_randomize_val + cfg[self._pvars.config_name + ' Playlist Randomize'] = ( + self._do_randomize_val + ) cfg.commit() if show_shuffle_check_box: From 92c189c9b0f9dc133716260840f19c846b8a9d5f Mon Sep 17 00:00:00 2001 From: Eric Date: Fri, 1 Mar 2024 20:26:19 -0800 Subject: [PATCH 38/39] pr lang entries and changelog --- .efrocachemap | 46 ++++++++++++++--------------- CHANGELOG.md | 11 +++++-- src/assets/ba_data/python/baenv.py | 2 +- src/ballistica/shared/ballistica.cc | 2 +- 4 files changed, 33 insertions(+), 28 deletions(-) diff --git a/.efrocachemap b/.efrocachemap index cfb82614..49c6faf4 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -421,7 +421,7 @@ "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": "5273cf3bfe2d25d70395690bf3c21825", + "build/assets/ba_data/data/langdata.json": "c1dc01c157ad403fcdcb266f56f91333", "build/assets/ba_data/data/languages/arabic.json": "0db32e21b6d5337ccca478381744aa88", "build/assets/ba_data/data/languages/belarussian.json": "09954e550d13d3d9cb5a635a1d32a151", "build/assets/ba_data/data/languages/chinese.json": "1360ffde06828b63ce4fe956c3c3cd1d", @@ -430,12 +430,12 @@ "build/assets/ba_data/data/languages/czech.json": "7171420af6d662e3a47b64576850a384", "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": "28a1c17925aba4f4f908732e5e5cb266", + "build/assets/ba_data/data/languages/english.json": "6501b04faba1d81e26725dfa19b15667", "build/assets/ba_data/data/languages/esperanto.json": "0e397cfa5f3fb8cef5f4a64f21cda880", "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": "ab9571486f703b8d57eab61dbf1d54d8", + "build/assets/ba_data/data/languages/gibberish.json": "0c1c4ac59d82a58c4b89328d44510d72", "build/assets/ba_data/data/languages/greek.json": "287c0ec437b38772284ef9d3e4fb2fc3", "build/assets/ba_data/data/languages/hindi.json": "90f54663e15d85a163f1848a8e9d8d07", "build/assets/ba_data/data/languages/hungarian.json": "796a290a8c44a1e7635208c2ff5fdc6e", @@ -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": "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/full/linux_arm64_gui/debug/ballisticakit": "55dacc27483948501fe57814e7a1c048", + "build/prefab/full/linux_arm64_gui/release/ballisticakit": "8b9bdbcae2f7a9f1327a64c20d790322", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "f354a257164894b7b3ce511d0eb62c4d", + "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "1c8e81de367b0d9a16586ad67f83db69", + "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "ec225fc0398f1ddf57607706d53b4e61", + "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "33a1641cc6518748e3217ea9c21b1b26", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "cca66ccf64c0fc40633f4b1e711b2a14", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "0043be05c9f41ae7417bd3567ab63bb8", + "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "c58717e1649120a2957ec5bfe7b84e44", + "build/prefab/full/mac_arm64_gui/release/ballisticakit": "25555f6d2ec3257ed7d67232a99b7a95", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "a5853dcf427be1df65b3dc18b5d14591", + "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "b94ee0bada178617b99e2fcdb92f8269", + "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "7c7dca3c924ecf745cc0d046399a8637", + "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "599facf037474e9feb2d5f71d1acd457", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "a48ffb700f115dbcaef56c899dca9e06", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "2e4282cfdfda7f841f8b8e8186aa3aa2", + "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "610580b4578cc7f7feec836b013dbe06", + "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "51a69b023f3100bcd7e6db81db2124b1", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "5d859cf8d9fd9864a6c20bf048353b58", + "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "071d235b498437868d5555a4a44c7f7e", "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 f66dbf76..9a3bdc8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -### 1.7.33 (build 21770, api 8, 2024-03-01) +### 1.7.33 (build 21771, 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 @@ -29,8 +29,13 @@ brostos!). - Fixes a bug where Meteor Shower could make the game-end bell sound twice (Thanks 3alTemp!). -- 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 3alTemp!) +- 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 + 3alTemp!) +- Added a server config setting for max players (not max clients) (Thanks + EraOSBeta!) +- Added a UI for customizing Series Length in Teams and Points-to-Win in FFA + (Thanks EraOSBeta!) ### 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 64ec5fa4..db992296 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 = 21770 +TARGET_BALLISTICA_BUILD = 21771 TARGET_BALLISTICA_VERSION = '1.7.33' diff --git a/src/ballistica/shared/ballistica.cc b/src/ballistica/shared/ballistica.cc index 19703b87..7faf8f2c 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 = 21770; +const int kEngineBuildNumber = 21771; const char* kEngineVersion = "1.7.33"; const int kEngineApiVersion = 8; From c2d88cab28566d69f624a5d82c598fa8e1da38af Mon Sep 17 00:00:00 2001 From: Eric Date: Sat, 2 Mar 2024 12:09:38 -0800 Subject: [PATCH 39/39] translations and tidying --- .efrocachemap | 76 ++++++++++++++--------------- CHANGELOG.md | 2 +- src/assets/ba_data/python/baenv.py | 2 +- src/ballistica/shared/ballistica.cc | 2 +- 4 files changed, 41 insertions(+), 41 deletions(-) diff --git a/.efrocachemap b/.efrocachemap index 49c6faf4..b0cbce77 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -421,41 +421,41 @@ "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": "c1dc01c157ad403fcdcb266f56f91333", + "build/assets/ba_data/data/langdata.json": "66f05313ffa9880373066332cff4594c", "build/assets/ba_data/data/languages/arabic.json": "0db32e21b6d5337ccca478381744aa88", "build/assets/ba_data/data/languages/belarussian.json": "09954e550d13d3d9cb5a635a1d32a151", - "build/assets/ba_data/data/languages/chinese.json": "1360ffde06828b63ce4fe956c3c3cd1d", + "build/assets/ba_data/data/languages/chinese.json": "bb51b5aa614830c561e8fe2542a9ab8a", "build/assets/ba_data/data/languages/chinesetraditional.json": "319565f8a15667488f48dbce59278e39", "build/assets/ba_data/data/languages/croatian.json": "e671b9d0c012be1a30f9c15eb1b81860", - "build/assets/ba_data/data/languages/czech.json": "7171420af6d662e3a47b64576850a384", + "build/assets/ba_data/data/languages/czech.json": "15be4fd59895135bad0265f79b362d5b", "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": "6501b04faba1d81e26725dfa19b15667", "build/assets/ba_data/data/languages/esperanto.json": "0e397cfa5f3fb8cef5f4a64f21cda880", "build/assets/ba_data/data/languages/filipino.json": "fe3f1efcb47efaa23524300d21728933", - "build/assets/ba_data/data/languages/french.json": "cc8ac601f5443dd539893728db983f5c", + "build/assets/ba_data/data/languages/french.json": "917e4174d6f0eb7f00c27fd79cfbb924", "build/assets/ba_data/data/languages/german.json": "450fa41ae264f29a5d1af22143d0d0ad", "build/assets/ba_data/data/languages/gibberish.json": "0c1c4ac59d82a58c4b89328d44510d72", "build/assets/ba_data/data/languages/greek.json": "287c0ec437b38772284ef9d3e4fb2fc3", "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/italian.json": "fc6440be9ba1846172cf5e11df617c05", "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": "1a4c74ad9089cd746ad6fda4186c2220", + "build/assets/ba_data/data/languages/persian.json": "c4144aebf2900fc655860de891d16f83", "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": "b3e46efd6f869dbd78014570e037c290", - "build/assets/ba_data/data/languages/russian.json": "30d5f3d2415088e1fb6558fcd6ccfa98", + "build/assets/ba_data/data/languages/russian.json": "0590f49889616b5279be569dea926e17", "build/assets/ba_data/data/languages/serbian.json": "d7452dd72ac0e51680cb39b5ebaa1c69", "build/assets/ba_data/data/languages/slovak.json": "c00fb27cf982ffad5a4370ad3b16bd21", - "build/assets/ba_data/data/languages/spanish.json": "e3e9ac8f96f52302a480c7e955aed71f", + "build/assets/ba_data/data/languages/spanish.json": "b2edb923fdca973a16f0efb1acc26a97", "build/assets/ba_data/data/languages/swedish.json": "5142a96597d17d8344be96a603da64ac", "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/turkish.json": "db71f3776072b7a15ef37b1bb1245795", + "build/assets/ba_data/data/languages/ukrainian.json": "3d75d21205c82db34fb1a1b014592747", "build/assets/ba_data/data/languages/venetian.json": "f896fc3df13a42f1bef8813ca80b1a09", "build/assets/ba_data/data/languages/vietnamese.json": "921cd1e50f60fe3e101f246e172750ba", "build/assets/ba_data/data/maps/big_g.json": "1dd301d490643088a435ce75df971054", @@ -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": "55dacc27483948501fe57814e7a1c048", - "build/prefab/full/linux_arm64_gui/release/ballisticakit": "8b9bdbcae2f7a9f1327a64c20d790322", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "f354a257164894b7b3ce511d0eb62c4d", - "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "1c8e81de367b0d9a16586ad67f83db69", - "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "ec225fc0398f1ddf57607706d53b4e61", - "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "33a1641cc6518748e3217ea9c21b1b26", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "cca66ccf64c0fc40633f4b1e711b2a14", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "0043be05c9f41ae7417bd3567ab63bb8", - "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "c58717e1649120a2957ec5bfe7b84e44", - "build/prefab/full/mac_arm64_gui/release/ballisticakit": "25555f6d2ec3257ed7d67232a99b7a95", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "a5853dcf427be1df65b3dc18b5d14591", - "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "b94ee0bada178617b99e2fcdb92f8269", - "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "7c7dca3c924ecf745cc0d046399a8637", - "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "599facf037474e9feb2d5f71d1acd457", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "a48ffb700f115dbcaef56c899dca9e06", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "2e4282cfdfda7f841f8b8e8186aa3aa2", - "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "610580b4578cc7f7feec836b013dbe06", - "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "51a69b023f3100bcd7e6db81db2124b1", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "5d859cf8d9fd9864a6c20bf048353b58", - "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "071d235b498437868d5555a4a44c7f7e", + "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "5db2ea1c6bacab3fe60eb948aaa4afdb", + "build/prefab/full/linux_arm64_gui/release/ballisticakit": "2b476166b869112112d57f26833a8381", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "7b8d2cb654ab2c022584114ed9910c38", + "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "846150203fe0611a71ff832176579ce5", + "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "683c3d3b7ac3b052f3ecc3fef36fc13a", + "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "e41d6aeb7a2e335ebcc701a35d45df8c", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "f0a97f7c34a78bfd829f460a9f4ea81c", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "d1e697c045e3b4092ec35fb8f3b4bd25", + "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "952c02766cecd280af3e9b77c80e91e1", + "build/prefab/full/mac_arm64_gui/release/ballisticakit": "bceae148212f47bfc9acf60ea52b1003", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "e9ea0d09ba4af6253025cbe3aa8469cf", + "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "d2cf18fbc6d815268790532bc38d2434", + "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "1134322221c0ccea4057e462d9fa5197", + "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "30d10d34fb0e14b8f7ceec1760b521d6", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "d132bc58d9744941144244484bb005a6", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "5ae4aef6e0291175a3a9e3b77adcc0c0", + "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "abb92db084cdc165d7c1ed500be919ba", + "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "57bb6f6b5dadbc8f05fbab3271ef8abb", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "c4a68563f1237c1679c870def5d91b1a", + "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "e2f338fd1d4d8ff9a079e2e9c492aabb", "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": "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", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "72901cf56d898442b6bcf4ecafd5cd65", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "c185b4f41dfc69c133a75260b95421d1", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "096880b9e8faac99a72d234a61ddd624", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "266f4e6a3d8b39c97ee7b5e766e8b207", + "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "0927775fb993a977de90e4671a09e996", + "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "53fcf97128862b34771ca967f88641c8", + "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "160a2caaa393f9ddb40ffebc7546e6bb", + "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "90716a0e1310a90247a9aee3a7a97a38", "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 9a3bdc8b..3e9f4499 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -### 1.7.33 (build 21771, api 8, 2024-03-01) +### 1.7.33 (build 21772, api 8, 2024-03-02) - 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 db992296..1bb9453c 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 = 21771 +TARGET_BALLISTICA_BUILD = 21772 TARGET_BALLISTICA_VERSION = '1.7.33' diff --git a/src/ballistica/shared/ballistica.cc b/src/ballistica/shared/ballistica.cc index 7faf8f2c..00fd591e 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 = 21771; +const int kEngineBuildNumber = 21772; const char* kEngineVersion = "1.7.33"; const int kEngineApiVersion = 8;