From e009f29b98d2c9233f53e33943a7e247e7a9ee3c Mon Sep 17 00:00:00 2001 From: Roman Trapeznikov <47295209+Dliwk@users.noreply.github.com> Date: Thu, 10 Feb 2022 23:05:47 +0300 Subject: [PATCH 01/11] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fa6460b..28dbdbbc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ - Now generating Linux Arm64 server and test builds (currently built against Ubuntu 20). - Mac test builds are now Universal binaries (Arm64 & x86-64 versions bundled together). - Mac test builds are now notarized and distributed via a snazzy .dmg instead of a zip file, so the OS should no longer try to prevent you from running them. -- Now, when pushing new builds to https://files.ballistica.net/bombsquad/builds , corresponding checksums are written to a different server and can be accessed via https://tools.ballistica.net/checksums +- Now, when pushing new builds to https://files.ballistica.net/bombsquad/builds , corresponding checksums are written to a different server and can be accessed via https://tools.ballistica.net/builds. ### 1.6.6 (20394) - Beginning work on moving to new asset system. From f5df30ba20e9a1def91123b665e676f7126732ce Mon Sep 17 00:00:00 2001 From: Eric Froemling Date: Wed, 16 Feb 2022 12:57:26 -0600 Subject: [PATCH 02/11] ssl work and lang updates --- .idea/dictionaries/ericf.xml | 12 ++++++++ CHANGELOG.md | 7 +++-- assets/.asset_manifest_private.json | 7 +++++ assets/Makefile | 14 ++++++++- assets/src/ba_data/python/ba/_app.py | 30 ++++++++++++++++--- assets/src/ba_data/python/ba/_asyncio.py | 15 +++++----- assets/src/ba_data/python/ba/_net.py | 3 ++ .../.idea/dictionaries/ericf.xml | 12 ++++++++ config/config.json | 3 +- src/ballistica/ballistica.cc | 2 +- .../python/methods/python_methods_system.cc | 15 ++++++++++ src/meta/bameta/python_embedded/bootstrap.py | 16 +++++++++- tools/batools/assetsmakefile.py | 1 + tools/batools/assetstaging.py | 3 +- tools/batools/build.py | 8 +++++ tools/efro/dataclassio/_prep.py | 2 +- tools/efro/error.py | 6 ++++ 17 files changed, 136 insertions(+), 20 deletions(-) diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml index 83c39a0c..32dc7073 100644 --- a/.idea/dictionaries/ericf.xml +++ b/.idea/dictionaries/ericf.xml @@ -292,6 +292,7 @@ bylw bytecount byteswap + cacert cachable cachebasename cacheentry @@ -327,6 +328,7 @@ cend centeuro centiseconds + certifi cfconfig cfenv cfgdir @@ -426,6 +428,7 @@ columnwidget colw commitconfig + comms compat compileall compilelocations @@ -482,6 +485,7 @@ creditslist cresult cryptmodule + cryptosimple cspbd cspnf cspre @@ -731,6 +735,7 @@ excstr exec'ed execcode + execed execing execlocals executils @@ -898,6 +903,7 @@ futimens fval fverts + fwefocjwerj gameactivity gamebutton gameclass @@ -1145,6 +1151,7 @@ iometa ioprep ioprepped + ioprepping ipaddress ipos iprof @@ -1168,6 +1175,7 @@ jdict jenkinsfile jexport + jfwe jisx jite jittering @@ -1936,6 +1944,7 @@ recv redist redistributables + regionid regtp reimported relpath @@ -1998,6 +2007,7 @@ runonly runpy runpylint + runseconds runswindows rval safecolor @@ -2426,6 +2436,7 @@ tracemalloc tradeoff trailcolor + transportagentrequest transtime trapeznikov tref @@ -2477,6 +2488,7 @@ uiupkeeptimer unallowed uname + unbased unbounds uncollectible underruns diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fa6460b..45d2b5ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,14 @@ -### 1.6.8 (20444) +### 1.6.8 (20449) - Added Filipino language (Thanks David!) - Restored pre-v1.5 jump behaviour. +- All communication with the master-server should now be secure (https) using root certificates from the [certifi](https://github.com/certifi/python-certifi) project. Please holler if you run into any connection issues with this version. ### 1.6.7 (20436) - Fixed a vulnerability which could expose device-account uuids. - Now generating Linux Arm64 server and test builds (currently built against Ubuntu 20). - Mac test builds are now Universal binaries (Arm64 & x86-64 versions bundled together). - Mac test builds are now notarized and distributed via a snazzy .dmg instead of a zip file, so the OS should no longer try to prevent you from running them. -- Now, when pushing new builds to https://files.ballistica.net/bombsquad/builds , corresponding checksums are written to a different server and can be accessed via https://tools.ballistica.net/checksums +- Test builds can now be found at - this page shows more info about the builds, including file checksums (stored on a separate server from the actual files for increased security). ### 1.6.6 (20394) - Beginning work on moving to new asset system. @@ -18,7 +19,7 @@ - Added co-op support to server builds (thanks Dliwk!) - Updated everything from Python 3.8 to Python 3.9. The biggest immediate impact to our code is that basic types such as list, dict, and tuple can be used in annotations, eliminating the need to import typing.Dict, typing.List, etc. See python.org for more changes. - Note: accessing mods on external storage on Android will not work in this release. This functionality has not been working in recent versions of Android due to increased security features anyway and I am in the process of replacing it with a cloud based system for installing mods. More on this soon. -- Python 3.9 no longer supports Windows 7 or earlier (according to https://www.python.org/downloads/windows/) so if you are running such a version of Windows you will need to stick to older builds. +- Python 3.9 no longer supports Windows 7 or earlier (according to ) so if you are running such a version of Windows you will need to stick to older builds. ### 1.6.4 (20382) - Some cleanups in the Favorites tab of the gather window. diff --git a/assets/.asset_manifest_private.json b/assets/.asset_manifest_private.json index dcf73da1..7b6c3d5d 100644 --- a/assets/.asset_manifest_private.json +++ b/assets/.asset_manifest_private.json @@ -946,6 +946,13 @@ "ba_data/python-site-packages/__pycache__/typing_extensions.cpython-39.opt-1.pyc", "ba_data/python-site-packages/_yaml/__init__.py", "ba_data/python-site-packages/_yaml/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/certifi/__init__.py", + "ba_data/python-site-packages/certifi/__main__.py", + "ba_data/python-site-packages/certifi/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/certifi/__pycache__/__main__.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/certifi/__pycache__/core.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/certifi/cacert.pem", + "ba_data/python-site-packages/certifi/core.py", "ba_data/python-site-packages/typing_extensions.py", "ba_data/python-site-packages/yaml/__init__.py", "ba_data/python-site-packages/yaml/__pycache__/__init__.cpython-39.opt-1.pyc", diff --git a/assets/Makefile b/assets/Makefile index 5b0786b7..ba284356 100644 --- a/assets/Makefile +++ b/assets/Makefile @@ -2475,6 +2475,9 @@ $(eval $(call make-opt-pyc-target,$(element)))) SCRIPT_TARGETS_PY_PRIVATE_COMMON = \ build/ba_data/python-site-packages/_yaml/__init__.py \ + build/ba_data/python-site-packages/certifi/__init__.py \ + build/ba_data/python-site-packages/certifi/__main__.py \ + build/ba_data/python-site-packages/certifi/core.py \ build/ba_data/python-site-packages/typing_extensions.py \ build/ba_data/python-site-packages/yaml/__init__.py \ build/ba_data/python-site-packages/yaml/composer.py \ @@ -2496,6 +2499,9 @@ SCRIPT_TARGETS_PY_PRIVATE_COMMON = \ SCRIPT_TARGETS_PYC_PRIVATE_COMMON = \ build/ba_data/python-site-packages/_yaml/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/certifi/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/certifi/__pycache__/__main__.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/certifi/__pycache__/core.cpython-39.opt-1.pyc \ build/ba_data/python-site-packages/__pycache__/typing_extensions.cpython-39.opt-1.pyc \ build/ba_data/python-site-packages/yaml/__pycache__/__init__.cpython-39.opt-1.pyc \ build/ba_data/python-site-packages/yaml/__pycache__/composer.cpython-39.opt-1.pyc \ @@ -4785,6 +4791,9 @@ FONT_TARGETS = \ build/ba_data/fonts/fontSmall6.fdata \ build/ba_data/fonts/fontSmall7.fdata +PEM_TARGETS = \ + build/ba_data/python-site-packages/certifi/cacert.pem + DATA_TARGETS = \ build/ba_data/data/langdata.json \ build/ba_data/data/languages/arabic.json \ @@ -7075,6 +7084,9 @@ build/%.ogg : ../.efrocachemap build/%.fdata : ../.efrocachemap @cd .. && tools/pcommand efrocache_get assets/$@ +build/%.pem : ../.efrocachemap + @cd .. && tools/pcommand efrocache_get assets/$@ + # Langdata one-off json file. build/ba_data/data/langdata.json : ../.efrocachemap @cd .. && tools/pcommand efrocache_get assets/$@ @@ -7155,7 +7167,7 @@ SCRIPT_TARGETS_ANDROID = $(SCRIPT_TARGETS_PY_PRIVATE_ANDROID) \ SCRIPT_TARGETS_COMMON = $(SCRIPT_TARGETS_PY_PUBLIC) \ $(SCRIPT_TARGETS_PYC_PUBLIC) $(SCRIPT_TARGETS_PY_PUBLIC_TOOLS) \ $(SCRIPT_TARGETS_PYC_PUBLIC_TOOLS) $(SCRIPT_TARGETS_PY_PRIVATE_COMMON) \ - $(SCRIPT_TARGETS_PYC_PRIVATE_COMMON) + $(SCRIPT_TARGETS_PYC_PRIVATE_COMMON) $(PEM_TARGETS) # Build scripts for a specific platform. scripts-cmake: $(SCRIPT_TARGETS_CMAKE) $(SCRIPT_TARGETS_COMMON) diff --git a/assets/src/ba_data/python/ba/_app.py b/assets/src/ba_data/python/ba/_app.py index d9bd3383..8d2cdebc 100644 --- a/assets/src/ba_data/python/ba/_app.py +++ b/assets/src/ba_data/python/ba/_app.py @@ -3,8 +3,9 @@ """Functionality related to the high level state of the app.""" from __future__ import annotations -from enum import Enum import random +import logging +from enum import Enum from typing import TYPE_CHECKING import _ba @@ -184,6 +185,9 @@ class App: self.state = self.State.LAUNCHING + self._app_launched = False + self._app_paused = False + # Config. self.config_file_healthy = False @@ -366,22 +370,40 @@ class App: self.accounts.on_app_launch() self.plugins.on_app_launch() - self.state = self.State.RUNNING + # See note below in on_app_pause. + if self.state != self.State.LAUNCHING: + logging.error('on_app_launch found state %s; expected LAUNCHING.', + self.state) + + self._app_launched = True + self._update_state() # from ba._dependency import test_depset # test_depset() if bool(False): self._test_https() + def _update_state(self) -> None: + if self._app_paused: + self.state = self.State.PAUSED + else: + if self._app_launched: + self.state = self.State.RUNNING + else: + self.state = self.State.LAUNCHING + def on_app_pause(self) -> None: """Called when the app goes to a suspended state.""" - self.state = self.State.PAUSED + + self._app_paused = True + self._update_state() self.plugins.on_app_pause() def on_app_resume(self) -> None: """Run when the app resumes from a suspended state.""" - self.state = self.State.RUNNING + self._app_paused = False + self._update_state() self.fg_state += 1 self.accounts.on_app_resume() self.music.on_app_resume() diff --git a/assets/src/ba_data/python/ba/_asyncio.py b/assets/src/ba_data/python/ba/_asyncio.py index 76206e6f..79407a79 100644 --- a/assets/src/ba_data/python/ba/_asyncio.py +++ b/assets/src/ba_data/python/ba/_asyncio.py @@ -60,12 +60,13 @@ def setup_asyncio() -> None: timetype=TimeType.REAL, repeat=True) - async def aio_test() -> None: - print('TEST AIO TASK STARTING') - assert _asyncio_event_loop is not None - assert asyncio.get_running_loop() is _asyncio_event_loop - await asyncio.sleep(2.0) - print('TEST AIO TASK ENDING') - if bool(False): + + async def aio_test() -> None: + print('TEST AIO TASK STARTING') + assert _asyncio_event_loop is not None + assert asyncio.get_running_loop() is _asyncio_event_loop + await asyncio.sleep(2.0) + print('TEST AIO TASK ENDING') + _asyncio_event_loop.create_task(aio_test()) diff --git a/assets/src/ba_data/python/ba/_net.py b/assets/src/ba_data/python/ba/_net.py index ccbfc558..d7d2885d 100644 --- a/assets/src/ba_data/python/ba/_net.py +++ b/assets/src/ba_data/python/ba/_net.py @@ -25,6 +25,9 @@ class NetworkSubsystem: """Network related app subsystem.""" def __init__(self) -> None: + + # Anyone accessing/modifying region_pings should hold this lock. + self.region_pings_lock = threading.Lock() self.region_pings: dict[str, float] = {} diff --git a/ballisticacore-cmake/.idea/dictionaries/ericf.xml b/ballisticacore-cmake/.idea/dictionaries/ericf.xml index 2d8c997b..10be43f6 100644 --- a/ballisticacore-cmake/.idea/dictionaries/ericf.xml +++ b/ballisticacore-cmake/.idea/dictionaries/ericf.xml @@ -152,6 +152,7 @@ buttonup buttonwidget bwst + cacert calced calcing calcs @@ -172,6 +173,7 @@ ccylinder cend centiseconds + certifi cfgdir cfgpath changeme @@ -210,6 +212,7 @@ collidable collider columnwidget + comms connectattr containerwidget controlfp @@ -229,6 +232,7 @@ crom crosswire crvel + cryptosimple csize cspr cspre @@ -349,6 +353,7 @@ exargs exctype exec'ed + execed execinfo execing exhash @@ -423,6 +428,7 @@ funcname fval fvals + fwefocjwerj gamecenter gamedata gamepacket @@ -545,6 +551,7 @@ iometa ioprep ioprepped + ioprepping iserverget iserverput isinst @@ -566,6 +573,7 @@ jaxis jcjwf jdict + jfwe jmessage jnames json's @@ -928,6 +936,7 @@ redundants refcounted refl + regionid regtp rehel reimported @@ -962,6 +971,7 @@ rtypes rtypevar runnables + runseconds rvec rvel safecolor @@ -1145,6 +1155,7 @@ tradeoff trailcolor transobj + transportagentrequest treturn trifunovic trilinear @@ -1166,6 +1177,7 @@ udif uibounds uiid + unbased unblessed uncas unchecking diff --git a/config/config.json b/config/config.json index 0a17a714..87d3aa6b 100644 --- a/config/config.json +++ b/config/config.json @@ -33,7 +33,8 @@ "cpplint", "ansiwrap", "filelock", - "Cocoa" + "Cocoa", + "certifi" ], "python_paths": [ "assets/src/ba_data/python", diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc index 92afd09f..420da088 100644 --- a/src/ballistica/ballistica.cc +++ b/src/ballistica/ballistica.cc @@ -21,7 +21,7 @@ namespace ballistica { // These are set automatically via script; don't modify them here. -const int kAppBuildNumber = 20446; +const int kAppBuildNumber = 20452; const char* kAppVersion = "1.6.8"; // Our standalone globals. diff --git a/src/ballistica/python/methods/python_methods_system.cc b/src/ballistica/python/methods/python_methods_system.cc index 0a64f147..41c61843 100644 --- a/src/ballistica/python/methods/python_methods_system.cc +++ b/src/ballistica/python/methods/python_methods_system.cc @@ -238,6 +238,16 @@ auto PyHasUserMods(PyObject* self, PyObject* args) -> PyObject* { BA_PYTHON_CATCH; } +auto PyContainsPythonDist(PyObject* self, PyObject* args) -> PyObject* { + BA_PYTHON_TRY; + Platform::SetLastPyCall("contains_python_dist"); + if (g_platform->ContainsPythonDist()) { + Py_RETURN_TRUE; + } + Py_RETURN_FALSE; + BA_PYTHON_CATCH; +} + auto PyValueTest(PyObject* self, PyObject* args, PyObject* keywds) -> PyObject* { BA_PYTHON_TRY; @@ -1039,6 +1049,11 @@ auto PythonMethodsSystem::GetMethods() -> std::vector { "\n" "(internal)"}, + {"contains_python_dist", PyContainsPythonDist, METH_VARARGS, + "contains_python_dist() -> bool\n" + "\n" + "(internal)"}, + {"get_idle_time", PyGetIdleTime, METH_VARARGS, "get_idle_time() -> int\n" "\n" diff --git a/src/meta/bameta/python_embedded/bootstrap.py b/src/meta/bameta/python_embedded/bootstrap.py index 8688d2db..2e743aa1 100644 --- a/src/meta/bameta/python_embedded/bootstrap.py +++ b/src/meta/bameta/python_embedded/bootstrap.py @@ -3,6 +3,7 @@ from __future__ import annotations +import os import sys import signal import threading @@ -100,6 +101,20 @@ if debug_build != sys.flags.dev_mode: print(f'WARNING: Mismatch in debug_build {debug_build}' f' and sys.flags.dev_mode {sys.flags.dev_mode}') +# In embedded situations (when we're providing our own Python) let's +# also provide our own root certs so ssl works. We can consider overriding +# this in particular embedded cases if we can verify that system certs +# are working. +# (We also allow forcing this via an env var if the user desires) +# pylint: disable=wrong-import-position +if (_ba.contains_python_dist() + or os.environ.get('BA_USE_BUNDLED_ROOT_CERTS') == '1'): + import certifi + + # Let both OpenSSL and requests (if present) know to use this. + os.environ['SSL_CERT_FILE'] = os.environ['REQUESTS_CA_BUNDLE'] = ( + certifi.where()) + # FIXME: I think we should init Python in the main thread, which should # also avoid these issues. (and also might help us play better with # Python debuggers?) @@ -136,7 +151,6 @@ if debug_build: del testthread # Clear out the standard quit/exit messages since they don't work for us. -# pylint: disable=wrong-import-position # pylint: disable=c-extension-no-member if not TYPE_CHECKING: import __main__ diff --git a/tools/batools/assetsmakefile.py b/tools/batools/assetsmakefile.py index c65029c7..ae60e54e 100755 --- a/tools/batools/assetsmakefile.py +++ b/tools/batools/assetsmakefile.py @@ -331,6 +331,7 @@ def update_assets_makefile(projroot: str, check: bool) -> None: all_targets_private), _get_targets('FONT_TARGETS', '.fdata', '.fdata', all_targets_private), + _get_targets('PEM_TARGETS', '.pem', '.pem', all_targets_private), _get_targets('DATA_TARGETS', '.json', '.json', diff --git a/tools/batools/assetstaging.py b/tools/batools/assetstaging.py index 9c231bc7..46f75ebd 100755 --- a/tools/batools/assetstaging.py +++ b/tools/batools/assetstaging.py @@ -337,7 +337,8 @@ def _sync_standard_game_data(cfg: Config) -> None: ' --prune-empty-dirs') if cfg.include_scripts: - cmd += " --include '*.py' --include '*." + OPT_PYC_SUFFIX + "'" + cmd += (f" --include '*.py' --include '*.pem'" + f" --include '*.{OPT_PYC_SUFFIX}'") if cfg.include_textures: assert cfg.tex_suffix is not None diff --git a/tools/batools/build.py b/tools/batools/build.py index 8158c662..f197f77e 100644 --- a/tools/batools/build.py +++ b/tools/batools/build.py @@ -30,6 +30,12 @@ class PipRequirement: # Note: we look directly for modules when possible instead of just pip # entries; this accounts for manual installations or other nonstandard setups. + +# Note 2: We can probably just replace this with a simple requirements.txt +# file, can't we? Feels like we're mostly reinventing the wheel here. +# We just need a clean way to check/list missing stuff without necessarily +# installing it. And as far as manually-installed bits, pip itself must +# have some way to allow for that, right?... PIP_REQUIREMENTS = [ PipRequirement(modulename='pylint', minversion=[2, 12, 2]), PipRequirement(modulename='mypy', minversion=[0, 931]), @@ -45,6 +51,8 @@ PIP_REQUIREMENTS = [ PipRequirement(pipname='types-requests', minversion=[2, 27, 7]), PipRequirement(pipname='types-pytz', minversion=[2021, 3, 4]), PipRequirement(pipname='types-PyYAML', minversion=[6, 0, 3]), + PipRequirement(pipname='certifi', minversion=[2021, 10, 8]), + PipRequirement(pipname='types-certifi', minversion=[2021, 10, 8, 1]), ] # Parts of full-tests suite we only run on particular days. diff --git a/tools/efro/dataclassio/_prep.py b/tools/efro/dataclassio/_prep.py index aaf348df..57785b13 100644 --- a/tools/efro/dataclassio/_prep.py +++ b/tools/efro/dataclassio/_prep.py @@ -52,7 +52,7 @@ def ioprep(cls: type, globalns: dict = None) -> None: with localns set to the class dict (so that types defined in the class can be used) and globalns set to the containing module's class. It is possible to override globalns for special cases such as when - prepping happens as part of an exec'ed string instead of within a + prepping happens as part of an execed string instead of within a module. """ PrepSession(explicit=True, diff --git a/tools/efro/error.py b/tools/efro/error.py index 4627ffcc..3bc1a546 100644 --- a/tools/efro/error.py +++ b/tools/efro/error.py @@ -84,6 +84,12 @@ def is_urllib_network_error(exc: BaseException) -> bool: exc, (urllib.error.URLError, ConnectionError, http.client.IncompleteRead, http.client.BadStatusLine, socket.timeout)): + # Special case: although an HTTPError is a subclass of URLError, + # we don't return True for it. It means we have successfully + # communicated with the server but what we are asking for is + # not there/etc. + if isinstance(exc, urllib.error.HTTPError): + return False return True if isinstance(exc, OSError): if exc.errno == 10051: # Windows unreachable network error. From 7dcb3fdc077d4d2b069445ed8c0b873a4a9c0002 Mon Sep 17 00:00:00 2001 From: Eric Froemling Date: Wed, 16 Feb 2022 13:21:17 -0600 Subject: [PATCH 03/11] latest assets --- .efrocachemap | 117 ++++++++++++++++++++++++++------------------------ 1 file changed, 60 insertions(+), 57 deletions(-) diff --git a/.efrocachemap b/.efrocachemap index c72004d0..4634dec4 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -420,41 +420,41 @@ "assets/build/ba_data/audio/zoeOw.ogg": "https://files.ballistica.net/cache/ba1/51/eb/0a567253cc08c94c5d315a64d9af", "assets/build/ba_data/audio/zoePickup01.ogg": "https://files.ballistica.net/cache/ba1/bc/8f/a9c51a09c418136e386b7fdf21c7", "assets/build/ba_data/audio/zoeScream01.ogg": "https://files.ballistica.net/cache/ba1/02/e5/84916e123f47ccf11ddda380d699", - "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/f4/ee/ee34ed3985e810bd795c7979ec95", + "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/aa/52/0eb8b7da64db10e02b695a1806f6", "assets/build/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/0f/e1/94378b32c786d5365a7810a15d73", "assets/build/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/55/8c/8d0a0585e434b94865ae4befc090", - "assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/fc/a4/813e4ef8c4204d8616aa68a80891", + "assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/db/e1/03b6c717e7e0eacb7bc29d3d4ae3", "assets/build/ba_data/data/languages/chinesetraditional.json": "https://files.ballistica.net/cache/ba1/ff/7c/3bcab4ae1f39977434acb0d6f795", "assets/build/ba_data/data/languages/croatian.json": "https://files.ballistica.net/cache/ba1/66/bf/6e98398016da261296b8c306560e", - "assets/build/ba_data/data/languages/czech.json": "https://files.ballistica.net/cache/ba1/19/c5/2b1ae9e2b622892ff8c0beaad25b", + "assets/build/ba_data/data/languages/czech.json": "https://files.ballistica.net/cache/ba1/82/61/8319e81bc3fed77e8319a2fd6988", "assets/build/ba_data/data/languages/danish.json": "https://files.ballistica.net/cache/ba1/3f/46/e4da3c1d2b0ebf916df55c608b28", "assets/build/ba_data/data/languages/dutch.json": "https://files.ballistica.net/cache/ba1/97/90/39ba65c2ad714429aec82ea1ae3e", "assets/build/ba_data/data/languages/english.json": "https://files.ballistica.net/cache/ba1/5a/63/382c2cd707cd34d232f28f45f5d3", "assets/build/ba_data/data/languages/esperanto.json": "https://files.ballistica.net/cache/ba1/4c/c7/0184b8178869d1a3827a1bfcd5bb", - "assets/build/ba_data/data/languages/filipino.json": "https://files.ballistica.net/cache/ba1/b3/3b/65ec8c4100bf9170b85ad9b23164", - "assets/build/ba_data/data/languages/french.json": "https://files.ballistica.net/cache/ba1/f7/15/08a411143de698f715c69551cea3", - "assets/build/ba_data/data/languages/german.json": "https://files.ballistica.net/cache/ba1/83/a3/01a5ba0d128630afd31ecb518f82", + "assets/build/ba_data/data/languages/filipino.json": "https://files.ballistica.net/cache/ba1/52/09/449a5ff97460b32cf13edfd1fdbc", + "assets/build/ba_data/data/languages/french.json": "https://files.ballistica.net/cache/ba1/b6/e0/37dd30b686f475733ccc4b3cab49", + "assets/build/ba_data/data/languages/german.json": "https://files.ballistica.net/cache/ba1/20/3f/198dcc5cfed5789042e1595bd048", "assets/build/ba_data/data/languages/gibberish.json": "https://files.ballistica.net/cache/ba1/03/6a/4db89c5bf1ced8eb5a5615a4ae64", - "assets/build/ba_data/data/languages/greek.json": "https://files.ballistica.net/cache/ba1/01/ea/cd9dac4a24a5c92495c37cd98371", + "assets/build/ba_data/data/languages/greek.json": "https://files.ballistica.net/cache/ba1/8c/8e/67de1d9997a66299c8881d44ab22", "assets/build/ba_data/data/languages/hindi.json": "https://files.ballistica.net/cache/ba1/c2/f5/e7549f5179c22c6da97fafffc058", "assets/build/ba_data/data/languages/hungarian.json": "https://files.ballistica.net/cache/ba1/2d/e5/3737c6c3979cf381321c5472bea5", "assets/build/ba_data/data/languages/indonesian.json": "https://files.ballistica.net/cache/ba1/b1/81/d99fb5b8c368430944b357aa15fe", "assets/build/ba_data/data/languages/italian.json": "https://files.ballistica.net/cache/ba1/d7/f0/436072225f713259eaa5fa39ba5d", "assets/build/ba_data/data/languages/korean.json": "https://files.ballistica.net/cache/ba1/d7/8b/acdfb39196be7856f8bad77eb6a0", - "assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/f1/49/a7a94c6a662f65de4d8e9d5303f4", + "assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/5b/77/f09dfde1b14ff978737c8935474a", "assets/build/ba_data/data/languages/polish.json": "https://files.ballistica.net/cache/ba1/04/fa/b24dd48bfbf3c2d67ee5ad1269c3", - "assets/build/ba_data/data/languages/portuguese.json": "https://files.ballistica.net/cache/ba1/83/e8/26ccc434b55b79a343cfe8cfaa7d", + "assets/build/ba_data/data/languages/portuguese.json": "https://files.ballistica.net/cache/ba1/26/41/f1246ab56c6b7853f605c3a95889", "assets/build/ba_data/data/languages/romanian.json": "https://files.ballistica.net/cache/ba1/82/12/57bf144e12be229a9b70da9c45cb", - "assets/build/ba_data/data/languages/russian.json": "https://files.ballistica.net/cache/ba1/97/38/c8ae1079059dd6b6579c89802ed8", + "assets/build/ba_data/data/languages/russian.json": "https://files.ballistica.net/cache/ba1/e8/25/a304de7a79195cb37ce9340e4194", "assets/build/ba_data/data/languages/serbian.json": "https://files.ballistica.net/cache/ba1/e6/59/af13a5d296da5935699bec902ed7", "assets/build/ba_data/data/languages/slovak.json": "https://files.ballistica.net/cache/ba1/9f/a6/a2c9d7f3f90a2320aa45ccfd65cd", - "assets/build/ba_data/data/languages/spanish.json": "https://files.ballistica.net/cache/ba1/6d/25/745fec991d43eadfbde149d897bf", + "assets/build/ba_data/data/languages/spanish.json": "https://files.ballistica.net/cache/ba1/87/5d/d36a8a2e9cb0f02731a3fd7af000", "assets/build/ba_data/data/languages/swedish.json": "https://files.ballistica.net/cache/ba1/50/9f/be006ba19be6a69a57837eb6dca0", - "assets/build/ba_data/data/languages/tamil.json": "https://files.ballistica.net/cache/ba1/3c/cf/89114640ffa253721583c0d2699b", + "assets/build/ba_data/data/languages/tamil.json": "https://files.ballistica.net/cache/ba1/38/7a/3e9582e04e94bed62c4cd57aea88", "assets/build/ba_data/data/languages/thai.json": "https://files.ballistica.net/cache/ba1/74/3d/c3d40a1e5ee1edf82555da05eda9", "assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/e8/0b/6825043ce101a831732eb9c97e4f", "assets/build/ba_data/data/languages/ukrainian.json": "https://files.ballistica.net/cache/ba1/87/20/259904441097b886b841d7c4d09a", - "assets/build/ba_data/data/languages/venetian.json": "https://files.ballistica.net/cache/ba1/35/31/47dbbc1e3a581565681d4a0c0361", + "assets/build/ba_data/data/languages/venetian.json": "https://files.ballistica.net/cache/ba1/71/59/356404b8db683d8c946a40ca02e5", "assets/build/ba_data/data/languages/vietnamese.json": "https://files.ballistica.net/cache/ba1/0b/24/3cc2b5a6ebe4bca1e01b40f8ed09", "assets/build/ba_data/data/maps/big_g.json": "https://files.ballistica.net/cache/ba1/47/0a/a617cc85d927b576c4e6fc1091ed", "assets/build/ba_data/data/maps/bridgit.json": "https://files.ballistica.net/cache/ba1/03/4b/57ee9b42854b26f23f81bd8c58ef", @@ -944,7 +944,10 @@ "assets/build/ba_data/models/zoeUpperArm.bob": "https://files.ballistica.net/cache/ba1/99/38/b7694cae0804260eeb337aa1676a", "assets/build/ba_data/models/zoeUpperLeg.bob": "https://files.ballistica.net/cache/ba1/83/4f/28b2202d0109fa93272c0b09fa2d", "assets/build/ba_data/python-site-packages/_yaml/__init__.py": "https://files.ballistica.net/cache/ba1/0d/45/65ba92f51d411dcffac8835b6130", - "assets/build/ba_data/python-site-packages/typing_extensions.py": "https://files.ballistica.net/cache/ba1/26/a1/b771d51fc1cc475cf1f44f9d43d2", + "assets/build/ba_data/python-site-packages/certifi/__init__.py": "https://files.ballistica.net/cache/ba1/ce/d9/322bf171d394cc808da13acf80fe", + "assets/build/ba_data/python-site-packages/certifi/__main__.py": "https://files.ballistica.net/cache/ba1/b2/bb/d7d8216212bcf66cdc3067700fb7", + "assets/build/ba_data/python-site-packages/certifi/core.py": "https://files.ballistica.net/cache/ba1/57/a9/d6b6a7cb08e2318fbe4bc246f609", + "assets/build/ba_data/python-site-packages/typing_extensions.py": "https://files.ballistica.net/cache/ba1/03/bb/cd4d0182aa81d3bc6dcf57044530", "assets/build/ba_data/python-site-packages/yaml/__init__.py": "https://files.ballistica.net/cache/ba1/e5/47/17715ca7620f3b9749558b9dcb2d", "assets/build/ba_data/python-site-packages/yaml/composer.py": "https://files.ballistica.net/cache/ba1/3e/aa/d7fcfc4707ad19a6964d72654b82", "assets/build/ba_data/python-site-packages/yaml/constructor.py": "https://files.ballistica.net/cache/ba1/f4/29/cd8c7f5a2296d8f1715ad49b5797", @@ -3967,50 +3970,50 @@ "assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e", "assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/b2/e5/0ee0561e16257a32830645239f34", "ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a", - "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/88/fa/12a0c294c686015a09b4e483fb5a", + "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c4/8d/1511496903790ef71734662f2615", "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/12/3f/6bb33262268ec504c42889599d03", - "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/db/53/ea4f6e7fae365e12c005a8d8a207", - "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/17/95/1b4b9f735830a3e4569ff38bcaf3", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f0/04/c4810aef027ffa7a8882d2a07f1c", + "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/56/38/8ff4f175b628c8e373503e319fac", + "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/2e/69/ea8ac66e028e35a954b6e90c9831", "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/bc/05/865ee1d03b3bc560e2fb723767f5", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/8d/1c/6e9568248f1314a7b1d4cb4c39ca", - "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/12/31/a9be39151d99a41505ca048e9629", - "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/d3/58/e2b9debb00c8fde97dc38963af0a", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/62/3c/cc07faff46fc8a19efc08c0d3c10", - "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d8/aa/72c60fcf1848c6f4c744390317d3", - "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/73/75/101c990503a9ba965331040d9bf7", - "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/d2/b6/01a84b2ccc5056d6479a3da492d4", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/9b/57/86fdcd4b5646d76ef6c0b433eead", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6d/ef/4689aedf79f95b27fb584baff536", - "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/c3/43/f1d740ee7581d08b7bc47e4a1e3c", - "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/29/2c/d67cc5a3c2af08cedc9f81cc6b31", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/ae/c7/499833108f4a230e576b1d2686f0", - "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/91/c9/44e47eb68aa3f16bd73f23abda1d", - "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d7/9c/d585f497c36b22f6872b4d8b0d14", - "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/53/cd/7bcdeb377a33413266fcbc066b13", - "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/5c/5b/15c498b609f447f346cd2f004915", - "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/62/d4/e6bbb3e7730c9f5a4519c3a94f06", - "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ae/2d/6e509a3a27127d365dc9af83ab2b", - "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/36/18/b81804ac8d0384fc72f0367371a1", - "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e1/64/fcd5e883cd2c979be76e9e9f7987", - "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c7/6b/8326914b322f281c5ab03c6ced51", - "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/0e/07/ae4fffc008f05352690c16ea144f", - "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/66/f3/6268d6d28f9412ea65f5fa134749", - "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/59/a3/37af52a4d954b5e13bd690ccbf8c", - "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/88/1e/24ca02cbce792d64c008affbb8b2", - "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ba/a8/a8c6e992194a6d8f012ed89b80eb", - "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c4/0c/8469d0febecd1ef898627fb088c7", - "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/1f/b5/540e02a79ac1bae8b4ff74ae73e4", - "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a7/91/f4bc68c09b30b207bf66e62da00a", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/d1/c3/ffd69def77c4564ccb86025bc77b", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/7e/4b/eed633dcb3da435ee44fc917f3bf", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/30/1d/4cd247b5626fccbf9cb4cca8c6f3", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/26/1c/07cd64a03263f572dfdd25438b00", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/20/bf/182851b81a0a14d49cec25d7ed6d", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/fe/ff/703deeb403ee68a4414f60e97309", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/10/b3/19c3d5559ba7e9e877c2f2a51334", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/de/d5/851bca0dd2b7b608eb477075d3d0", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f1/69/54faa87301cf2f966c3f5ecae8f0", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/9f/22/90c52d235954c144ad80eb92338e", + "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/12/36/c4ef26207588fed03a3c833cc293", + "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/09/9d/35e5bb448f63eb3a1ca077e5585a", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6d/17/27fbe49093630f5efe510d3c0159", + "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/86/a2/d23f63e629383b8f3d299b4fd232", + "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/29/70/314987ed3c8d7eff9ee67cffdf24", + "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/f6/ca/4d718f12061ec8c32b6cddd4fa0a", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/af/d8/056e9b85a6debdcd9028ab082ac1", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/bd/94/ee23a0c5f8801472693376607bbd", + "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/81/58/b73d452ec6d7a6c5924e211243c7", + "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/7e/92/d63eb7088aec025c0b967030d1b9", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/ae/80/54c88d773b6f04a2e060ace851ef", + "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/8b/67/d402851c8d03d8e0e428fbbfc82f", + "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/56/51/2d1383c19b566a29babe28290369", + "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/86/11/1cb6ef8744e5c945c68149899704", + "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/39/7f/e2fbab5a4e2b6b1bb54a69dd79c1", + "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/9b/16/3e49bfa96b1a219ef92d864cfd68", + "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d2/a4/33c6b4a5a0dd893c5f79c4316e2e", + "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/cd/82/612797208eb8f471be1d001768ee", + "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8b/0b/f92157dc5a099c987f00b69bc31e", + "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/91/d3/08c8d338b7f578d32cf1b972ab00", + "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/61/2b/d121e8fdb4ca941de089b466caf6", + "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/10/22/aaac92c325e35ac4b7a28a4551f8", + "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/79/f3/013776e11252b8169a005314a6ed", + "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c5/7d/7a34635c5fd5830166c388d4c7ea", + "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b2/47/138a413c2a5e3df9c2d77a248ace", + "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/12/81/eb1bc6364779d784117ef8dd4b8e", + "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/de/d5/77d30ac63b6972be8deaf517254a", + "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ef/77/c014cd924fc9d5994dac71163d57", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/06/b9/1297e93c7dfa5ca55fcaf3eec901", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/54/01/da9b5593c35b6648a4e375f9f666", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/95/d5/ab29aaecfe642a5a10e2da5d0e0d", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/bb/2e/b3d98eb9d9e84117dec10a0e3cff", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/fc/38/efa4607b53a8a360669d6e09edb9", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/15/28/15edf5c58f3ea6e475bdca63e637", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/fd/3a/c33424013d2e5506b98b89df2a21", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/a2/68/fb9b08420849ad92512b95c8360c", "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/c5/18/29d9fe8e483ce222d3263336f7e6", - "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/65/ac/d5c4162a71028c1bfa73ebc1f881" + "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/9d/7e/0a5125aa421e722c59d22b8beb19" } \ No newline at end of file From 21959453e9dfe18f600aa5043a33bc60cfb5546b Mon Sep 17 00:00:00 2001 From: Eric Froemling Date: Wed, 16 Feb 2022 13:27:29 -0600 Subject: [PATCH 04/11] fixed pem file missing from efrocache --- .efrocachemap | 37 +++++++++++---------- assets/src/ba_data/python/._ba_sources_hash | 2 +- assets/src/ba_data/python/_ba.py | 8 +++++ docs/ba_module.md | 2 +- src/ballistica/ballistica.cc | 2 +- 5 files changed, 30 insertions(+), 21 deletions(-) diff --git a/.efrocachemap b/.efrocachemap index 4634dec4..1d8c2e7e 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -946,6 +946,7 @@ "assets/build/ba_data/python-site-packages/_yaml/__init__.py": "https://files.ballistica.net/cache/ba1/0d/45/65ba92f51d411dcffac8835b6130", "assets/build/ba_data/python-site-packages/certifi/__init__.py": "https://files.ballistica.net/cache/ba1/ce/d9/322bf171d394cc808da13acf80fe", "assets/build/ba_data/python-site-packages/certifi/__main__.py": "https://files.ballistica.net/cache/ba1/b2/bb/d7d8216212bcf66cdc3067700fb7", + "assets/build/ba_data/python-site-packages/certifi/cacert.pem": "https://files.ballistica.net/cache/ba1/7a/a9/08fc8386cfb7c8680cf9b1a42ef4", "assets/build/ba_data/python-site-packages/certifi/core.py": "https://files.ballistica.net/cache/ba1/57/a9/d6b6a7cb08e2318fbe4bc246f609", "assets/build/ba_data/python-site-packages/typing_extensions.py": "https://files.ballistica.net/cache/ba1/03/bb/cd4d0182aa81d3bc6dcf57044530", "assets/build/ba_data/python-site-packages/yaml/__init__.py": "https://files.ballistica.net/cache/ba1/e5/47/17715ca7620f3b9749558b9dcb2d", @@ -3970,26 +3971,26 @@ "assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e", "assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/b2/e5/0ee0561e16257a32830645239f34", "ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a", - "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c4/8d/1511496903790ef71734662f2615", + "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/f4/7d/fc64694d2410dee050b9f6ccfb1d", "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f0/04/c4810aef027ffa7a8882d2a07f1c", - "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/56/38/8ff4f175b628c8e373503e319fac", - "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/2e/69/ea8ac66e028e35a954b6e90c9831", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b4/15/9a8e9dc79b84174a9b4627444014", + "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/13/74/4e06b2737ed2ff5a9e1a0157be6b", + "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/e8/ee/67b2f755e6f1e12480b73b2bf7e2", "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f1/69/54faa87301cf2f966c3f5ecae8f0", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/9f/22/90c52d235954c144ad80eb92338e", - "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/12/36/c4ef26207588fed03a3c833cc293", - "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/09/9d/35e5bb448f63eb3a1ca077e5585a", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6d/17/27fbe49093630f5efe510d3c0159", - "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/86/a2/d23f63e629383b8f3d299b4fd232", - "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/29/70/314987ed3c8d7eff9ee67cffdf24", - "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/f6/ca/4d718f12061ec8c32b6cddd4fa0a", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/af/d8/056e9b85a6debdcd9028ab082ac1", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/bd/94/ee23a0c5f8801472693376607bbd", - "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/81/58/b73d452ec6d7a6c5924e211243c7", - "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/7e/92/d63eb7088aec025c0b967030d1b9", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/ae/80/54c88d773b6f04a2e060ace851ef", - "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/8b/67/d402851c8d03d8e0e428fbbfc82f", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a1/e0/669e566685eaf7e54ecf6f6dfe63", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/19/26/3d2881af6e7a20de49d6550bf799", + "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ab/a7/2f864c5cc717039a8dd8b6c58b82", + "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/09/9f/08146872624c48e31bfffd8f9592", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/df/77/d9dc3dd58c6c51a8a7424fa0be22", + "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/34/8c/fb7353479116475c17477b3020a1", + "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/eb/64/dd91323132f6f5c4b8619c8691e3", + "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/24/ab/989b513d7e00f819e3114f58f5ea", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6f/cf/f8f560bf0c5142f3b5641688df4b", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6a/6a/6c8f2122bf297bb97ac0748ca499", + "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/c1/76/26c78b2e6f8d30ba70d23d57f0b3", + "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/0a/3d/692ef1bcca4cc2d6eb031941f9a0", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/44/88/db253571b5c1f5a68db62175d71c", + "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/40/19/01856f095f7456778f09034d1e79", "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/56/51/2d1383c19b566a29babe28290369", "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/86/11/1cb6ef8744e5c945c68149899704", "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/39/7f/e2fbab5a4e2b6b1bb54a69dd79c1", diff --git a/assets/src/ba_data/python/._ba_sources_hash b/assets/src/ba_data/python/._ba_sources_hash index e00d6c53..b814fafa 100644 --- a/assets/src/ba_data/python/._ba_sources_hash +++ b/assets/src/ba_data/python/._ba_sources_hash @@ -1 +1 @@ -142084453862763162635228312125641718455 \ No newline at end of file +251250588769004084707045653514620133412 \ No newline at end of file diff --git a/assets/src/ba_data/python/_ba.py b/assets/src/ba_data/python/_ba.py index f67d9196..93d60b2e 100644 --- a/assets/src/ba_data/python/_ba.py +++ b/assets/src/ba_data/python/_ba.py @@ -1768,6 +1768,14 @@ def containerwidget(edit: ba.Widget = None, return ba.Widget() +def contains_python_dist() -> bool: + """contains_python_dist() -> bool + + (internal) + """ + return bool() + + def debug_print_py_err() -> None: """debug_print_py_err() -> None diff --git a/docs/ba_module.md b/docs/ba_module.md index 9ad4462e..9a6e481b 100644 --- a/docs/ba_module.md +++ b/docs/ba_module.md @@ -1,5 +1,5 @@ -

last updated for Ballistica version 1.6.8 build 20446

+

last updated for Ballistica version 1.6.8 build 20454

This page documents the Python classes and functions in the 'ba' module, which are the ones most relevant to modding in Ballistica. If you come across something you feel should be included here or could be better explained, please let me know. Happy modding!


diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc index 420da088..fa8a321a 100644 --- a/src/ballistica/ballistica.cc +++ b/src/ballistica/ballistica.cc @@ -21,7 +21,7 @@ namespace ballistica { // These are set automatically via script; don't modify them here. -const int kAppBuildNumber = 20452; +const int kAppBuildNumber = 20454; const char* kAppVersion = "1.6.8"; // Our standalone globals. From e16dd0ff4e26ed81282d0ee81d11d02e9dba3e4e Mon Sep 17 00:00:00 2001 From: Eric Froemling Date: Wed, 16 Feb 2022 18:12:17 -0600 Subject: [PATCH 05/11] v1.6.8 --- .efrocachemap | 84 ++++++++++++++++++------------------ CHANGELOG.md | 2 +- src/ballistica/ballistica.cc | 2 +- 3 files changed, 44 insertions(+), 44 deletions(-) diff --git a/.efrocachemap b/.efrocachemap index 1d8c2e7e..84282397 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -3971,50 +3971,50 @@ "assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e", "assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/b2/e5/0ee0561e16257a32830645239f34", "ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a", - "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/f4/7d/fc64694d2410dee050b9f6ccfb1d", + "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/19/88/bee721cb91b789144af385051a4c", "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b4/15/9a8e9dc79b84174a9b4627444014", - "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/13/74/4e06b2737ed2ff5a9e1a0157be6b", - "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/e8/ee/67b2f755e6f1e12480b73b2bf7e2", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/5e/0d/695a9630d7d8e0854677e9cafb11", + "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6a/a3/2342f7b5a6d0cfea8ab8538aeffb", + "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/dc/a9/2a7105e237c54747d9463914250e", "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a1/e0/669e566685eaf7e54ecf6f6dfe63", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/19/26/3d2881af6e7a20de49d6550bf799", - "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ab/a7/2f864c5cc717039a8dd8b6c58b82", - "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/09/9f/08146872624c48e31bfffd8f9592", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/df/77/d9dc3dd58c6c51a8a7424fa0be22", - "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/34/8c/fb7353479116475c17477b3020a1", - "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/eb/64/dd91323132f6f5c4b8619c8691e3", - "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/24/ab/989b513d7e00f819e3114f58f5ea", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6f/cf/f8f560bf0c5142f3b5641688df4b", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6a/6a/6c8f2122bf297bb97ac0748ca499", - "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/c1/76/26c78b2e6f8d30ba70d23d57f0b3", - "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/0a/3d/692ef1bcca4cc2d6eb031941f9a0", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/44/88/db253571b5c1f5a68db62175d71c", - "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/40/19/01856f095f7456778f09034d1e79", - "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/56/51/2d1383c19b566a29babe28290369", - "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/86/11/1cb6ef8744e5c945c68149899704", - "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/39/7f/e2fbab5a4e2b6b1bb54a69dd79c1", - "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/9b/16/3e49bfa96b1a219ef92d864cfd68", - "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d2/a4/33c6b4a5a0dd893c5f79c4316e2e", - "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/cd/82/612797208eb8f471be1d001768ee", - "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8b/0b/f92157dc5a099c987f00b69bc31e", - "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/91/d3/08c8d338b7f578d32cf1b972ab00", - "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/61/2b/d121e8fdb4ca941de089b466caf6", - "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/10/22/aaac92c325e35ac4b7a28a4551f8", - "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/79/f3/013776e11252b8169a005314a6ed", - "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c5/7d/7a34635c5fd5830166c388d4c7ea", - "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b2/47/138a413c2a5e3df9c2d77a248ace", - "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/12/81/eb1bc6364779d784117ef8dd4b8e", - "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/de/d5/77d30ac63b6972be8deaf517254a", - "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ef/77/c014cd924fc9d5994dac71163d57", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/06/b9/1297e93c7dfa5ca55fcaf3eec901", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/54/01/da9b5593c35b6648a4e375f9f666", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/95/d5/ab29aaecfe642a5a10e2da5d0e0d", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/bb/2e/b3d98eb9d9e84117dec10a0e3cff", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/fc/38/efa4607b53a8a360669d6e09edb9", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/15/28/15edf5c58f3ea6e475bdca63e637", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/fd/3a/c33424013d2e5506b98b89df2a21", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/a2/68/fb9b08420849ad92512b95c8360c", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6a/43/d0bc568c5378ef076f8d1f0b8ec4", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/59/1b/b499905f6e70df7e99611c23f28d", + "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/4e/2e/012869ef811141cd2bdeafedcaa7", + "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/70/59/01049aa35f003beff73a72baa902", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/98/d6/0bfc7ac39592f40ac15c13301950", + "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/0e/f3/99a76b0325207a06316916a0f6ef", + "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/42/35/b985490f2f3153d0c554378e884e", + "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/36/9e/017ca8c14073eb5ff1d196397063", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a2/74/0fd3e925619cb638dae3bb049afc", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/0f/b4/6054b8c07086fa5cdd1aa452a1c8", + "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/18/98/76ab24b86619cdb6f6d9190a2472", + "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/e9/37/f8604ec9532fcb77de0c47adf4f7", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/14/ae/534de726a92ad41f623c43d93136", + "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/e6/9c/03d5ade7a7ea9dd84ea55fbbee63", + "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f9/29/302b9242929cb49edf898ed1ba7a", + "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ed/9d/dd639f3199ec5bc1caf901987ff4", + "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d2/f5/848874824f57b67c5b6b3c6a2baa", + "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d8/c0/a522335c7ba3150af576bb7136a3", + "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/21/3d/75e919b2acd230c2f107f0a4776a", + "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ad/88/01e67d29156c38f2774cea30c188", + "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e0/a3/924f6b88737442fc0190ee6bfed7", + "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7e/96/52a2c78644879deb38677259fdaa", + "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6a/45/47fa87fc676af9b738afd5a89fc7", + "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/47/17/eaffbc7ed2863ab398a23d5d247c", + "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8b/42/b133f6e102f69ae685ad5b3f87eb", + "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/06/08/60a2858cb8760b8e5d5b24d525ad", + "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/43/76/21a77c1d04568338ee36e476dfb4", + "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/9f/01/cfdeb633d83f043df25405c24e7b", + "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/27/09/8433d1e7e83d80223a47bb6e9e57", + "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/79/12/b247bac22dc3af4ade11f805901a", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/31/b7/c12cb6e376240e5475e46dcfc325", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/41/72/d88d8c3630aa1e711dc33061ac83", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/78/95/1e6a2ad9a8d8cf3915d6f9ed9370", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/8c/1e/72c7db17d8336f334f5513993de2", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/1f/cf/e621518d6f2e26a3a6cfbc14e2cb", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/c5/82/0568e01475f020bd546db8061bf4", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/7c/4e/7ef7b3ddfc3eb9b8dd5633ab0d5a", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/db/92/605afe5812c552e89a8aeafd54ee", "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/c5/18/29d9fe8e483ce222d3263336f7e6", "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/9d/7e/0a5125aa421e722c59d22b8beb19" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 45d2b5ce..db9799e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -### 1.6.8 (20449) +### 1.6.8 (20458, 2022-02-16) - Added Filipino language (Thanks David!) - Restored pre-v1.5 jump behaviour. - All communication with the master-server should now be secure (https) using root certificates from the [certifi](https://github.com/certifi/python-certifi) project. Please holler if you run into any connection issues with this version. diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc index fa8a321a..ab5a9b03 100644 --- a/src/ballistica/ballistica.cc +++ b/src/ballistica/ballistica.cc @@ -21,7 +21,7 @@ namespace ballistica { // These are set automatically via script; don't modify them here. -const int kAppBuildNumber = 20454; +const int kAppBuildNumber = 20459; const char* kAppVersion = "1.6.8"; // Our standalone globals. From 762e7c11932cc0b4805f8d170d1d38ac293559b5 Mon Sep 17 00:00:00 2001 From: Eric Froemling Date: Thu, 17 Feb 2022 15:10:14 -0600 Subject: [PATCH 06/11] fixed ssl in embedded android python builds --- .efrocachemap | 52 +++++++++---------- .idea/dictionaries/ericf.xml | 2 + CHANGELOG.md | 4 ++ .../.idea/dictionaries/ericf.xml | 2 + src/ballistica/ballistica.cc | 4 +- tools/batools/pcommand.py | 19 +++++++ tools/efrotools/pybuild.py | 39 ++++++++++++-- tools/pcommand | 5 +- 8 files changed, 94 insertions(+), 33 deletions(-) diff --git a/.efrocachemap b/.efrocachemap index 84282397..c5f35717 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -3971,26 +3971,26 @@ "assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e", "assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/b2/e5/0ee0561e16257a32830645239f34", "ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a", - "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/19/88/bee721cb91b789144af385051a4c", + "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/22/91/9788a455078b2c6ae6b0530b376f", "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/5e/0d/695a9630d7d8e0854677e9cafb11", - "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6a/a3/2342f7b5a6d0cfea8ab8538aeffb", - "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/dc/a9/2a7105e237c54747d9463914250e", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/c1/4b/87fc75b8f04952794a897fb19fc7", + "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e3/66/afbe79ac0d6fbd593ec1e549d5c0", + "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/e4/73/d07113aab410b1c51090952bfafe", "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6a/43/d0bc568c5378ef076f8d1f0b8ec4", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/59/1b/b499905f6e70df7e99611c23f28d", - "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/4e/2e/012869ef811141cd2bdeafedcaa7", - "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/70/59/01049aa35f003beff73a72baa902", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/98/d6/0bfc7ac39592f40ac15c13301950", - "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/0e/f3/99a76b0325207a06316916a0f6ef", - "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/42/35/b985490f2f3153d0c554378e884e", - "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/36/9e/017ca8c14073eb5ff1d196397063", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a2/74/0fd3e925619cb638dae3bb049afc", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/0f/b4/6054b8c07086fa5cdd1aa452a1c8", - "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/18/98/76ab24b86619cdb6f6d9190a2472", - "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/e9/37/f8604ec9532fcb77de0c47adf4f7", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/14/ae/534de726a92ad41f623c43d93136", - "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/e6/9c/03d5ade7a7ea9dd84ea55fbbee63", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/c2/7c/0c439110ac2fdbeb5548ad35632b", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/c1/41/fe950818630506df8fdfd04d674d", + "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/e4/a9/59db1426754a1c7716850c17be91", + "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/7e/c9/90e3afef7cc1aea9e11a252e3379", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6d/f6/41fcb16519bb5257c337749a78ea", + "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e3/f4/27e8aa597a15296c07cb77263451", + "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/35/0c/be285aa08f62ac2420126455357c", + "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/36/69/075a41d69723e230e9ae9ca0f6c7", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/09/f3/e81bb333811f848a056f2a2d4c92", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/8d/7b/e5d18bf5d8f78a9c2ac050f17979", + "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/5b/6d/1fcbd8637eb1c2d09a0ec042d2f9", + "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/04/85/c400c05b6b6ea1d41cff444f2608", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/07/1c/7c4e59c63f8a359c179a2a74a802", + "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/fe/37/e82e03fdf5b5396f975ab15cbc71", "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f9/29/302b9242929cb49edf898ed1ba7a", "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ed/9d/dd639f3199ec5bc1caf901987ff4", "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d2/f5/848874824f57b67c5b6b3c6a2baa", @@ -4007,14 +4007,14 @@ "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/9f/01/cfdeb633d83f043df25405c24e7b", "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/27/09/8433d1e7e83d80223a47bb6e9e57", "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/79/12/b247bac22dc3af4ade11f805901a", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/31/b7/c12cb6e376240e5475e46dcfc325", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/41/72/d88d8c3630aa1e711dc33061ac83", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/78/95/1e6a2ad9a8d8cf3915d6f9ed9370", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/8c/1e/72c7db17d8336f334f5513993de2", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/1f/cf/e621518d6f2e26a3a6cfbc14e2cb", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/c5/82/0568e01475f020bd546db8061bf4", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/7c/4e/7ef7b3ddfc3eb9b8dd5633ab0d5a", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/db/92/605afe5812c552e89a8aeafd54ee", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/da/a3/75db770dd02eb2049fa84de64a3b", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/b4/e7/0e6c1bdc7b66093c5613dfbb5c5d", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/04/2d/0c5eb518b40c9c31cafad1bab5d5", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/42/f3/ac8ddc452b6380f902f3de61f180", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/58/c8/ab5043d41c6bd0d556e037cfca97", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/c6/16/a8a82b70227523b5ee154763468d", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/36/76/be5b138bcdefd00a033c657b004c", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/53/91/c294c4bd174ce28f2546dd9a57b4", "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/c5/18/29d9fe8e483ce222d3263336f7e6", "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/9d/7e/0a5125aa421e722c59d22b8beb19" } \ No newline at end of file diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml index 32dc7073..f90bcf08 100644 --- a/.idea/dictionaries/ericf.xml +++ b/.idea/dictionaries/ericf.xml @@ -299,6 +299,7 @@ cachefile cachemap cachepath + cafile calced calcing calcs @@ -949,6 +950,7 @@ getcurrency getcwd getdata + getenv gethostbyname getifaddr getinputdevice diff --git a/CHANGELOG.md b/CHANGELOG.md index db9799e9..773b65db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +### 1.6.9 (20461, 2022-02-17) +- Upgraded Android Python to 3.9.10 +- Fixed an issue with SSL in Android builds that was preventing communication with the master-server in 1.6.8 + ### 1.6.8 (20458, 2022-02-16) - Added Filipino language (Thanks David!) - Restored pre-v1.5 jump behaviour. diff --git a/ballisticacore-cmake/.idea/dictionaries/ericf.xml b/ballisticacore-cmake/.idea/dictionaries/ericf.xml index 10be43f6..1ffa37a4 100644 --- a/ballisticacore-cmake/.idea/dictionaries/ericf.xml +++ b/ballisticacore-cmake/.idea/dictionaries/ericf.xml @@ -153,6 +153,7 @@ buttonwidget bwst cacert + cafile calced calcing calcs @@ -451,6 +452,7 @@ getbitshigh getcollidemodel getdata + getenv gethostbyname getifaddr getifaddrs diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc index ab5a9b03..96a921db 100644 --- a/src/ballistica/ballistica.cc +++ b/src/ballistica/ballistica.cc @@ -21,8 +21,8 @@ namespace ballistica { // These are set automatically via script; don't modify them here. -const int kAppBuildNumber = 20459; -const char* kAppVersion = "1.6.8"; +const int kAppBuildNumber = 20461; +const char* kAppVersion = "1.6.9"; // Our standalone globals. // These are separated out for easy access. diff --git a/tools/batools/pcommand.py b/tools/batools/pcommand.py index 9f7bc20b..037cec4b 100644 --- a/tools/batools/pcommand.py +++ b/tools/batools/pcommand.py @@ -1,5 +1,6 @@ # Released under the MIT License. See LICENSE for details. # +# pylint: disable=too-many-lines """A nice collection of ready-to-use pcommands for this package.""" from __future__ import annotations @@ -301,6 +302,18 @@ def gen_fulltest_buildfile_linux() -> None: batools.build.gen_fulltest_buildfile_linux() +def python_version_android() -> None: + """Print Android embedded Python version.""" + from efrotools.pybuild import PY_VER_EXACT_ANDROID + print(PY_VER_EXACT_ANDROID, end='') + + +def python_version_apple() -> None: + """Print Apple embedded Python version.""" + from efrotools.pybuild import PY_VER_EXACT_APPLE + print(PY_VER_EXACT_APPLE, end='') + + def python_build_apple() -> None: """Build an embeddable python for mac/ios/tvos.""" _python_build_apple(debug=False) @@ -360,6 +373,12 @@ def python_android_patch() -> None: pybuild.android_patch() +def python_android_patch_ssl() -> None: + """Patches Python ssl to prep for building for Android.""" + from efrotools import pybuild + pybuild.android_patch_ssl() + + def python_apple_patch() -> None: """Patches Python to prep for building for Apple platforms.""" from efrotools import pybuild diff --git a/tools/efrotools/pybuild.py b/tools/efrotools/pybuild.py index 1c46ab39..4b9f7dab 100644 --- a/tools/efrotools/pybuild.py +++ b/tools/efrotools/pybuild.py @@ -15,7 +15,7 @@ if TYPE_CHECKING: ENABLE_OPENSSL = True NEWER_PY_TEST = True -PY_VER_EXACT_ANDROID = '3.9.7' +PY_VER_EXACT_ANDROID = '3.9.10' PY_VER_EXACT_APPLE = '3.9.6' # Filenames we prune from Python lib dirs in source repo to cut down on size. @@ -177,6 +177,17 @@ def build_android(rootdir: str, arch: str, debug: bool = False) -> None: ftxt, "source = 'https://www.openssl.org/source/openssl-1.1.1h.tar.gz'", "source = 'https://www.openssl.org/source/openssl-1.1.1l.tar.gz'") + + # Give ourselves a handle to patch the OpenSSL build. + ftxt = replace_one( + ftxt, + ' # OpenSSL handles NDK internal paths by itself', + ' # Ericf addition: do some patching:\n' + ' self.run(["../../../../../../../tools/pcommand",' + ' "python_android_patch_ssl"])\n' + ' # OpenSSL handles NDK internal paths by itself', + ) + writefile('Android/build_deps.py', ftxt) # Tweak some things in the base build script; grab the right version @@ -190,8 +201,6 @@ def build_android(rootdir: str, arch: str, debug: bool = False) -> None: writefile('build.sh', ftxt) # Ok, let 'er rip - # (we often run these builds in parallel so limit to 1 job a piece; - # otherwise they each inherit the -j12 or whatever from the top level). exargs = ' --with-pydebug' if debug else '' run(f'ARCH={arch} ANDROID_API=21 ./build.sh{exargs}') print('python build complete! (android/' + arch + ')') @@ -348,6 +357,30 @@ def _patch_setup_file(platform: str, arch: str) -> None: writefile(fname, txt) +def android_patch_ssl() -> None: + """Run necessary patches on an android ssl before building.""" + + # We bundle our own SSL root certificates on various platforms and use + # the OpenSSL 'SSL_CERT_FILE' env var override to get them to be used + # by default. However, OpenSSL is picky about allowing env-vars to be + # used and something about the Android environment makes it disallow + # them. So we need to force the issue. Alternately we could explicitly + # pass 'cafile' args to SSLContexts whenever we do network-y stuff + # but it seems cleaner to just have things work by default. + fname = 'crypto/getenv.c' + txt = readfile(fname) + txt = replace_one( + txt, + ('char *ossl_safe_getenv(const char *name)\n' + '{\n'), + ('char *ossl_safe_getenv(const char *name)\n' + '{\n' + ' // ERICF TWEAK: ALWAYS ALLOW GETENV.\n' + ' return getenv(name);\n'), + ) + writefile(fname, txt) + + def winprune() -> None: """Prune unneeded files from windows python dists.""" for libdir in ('assets/src/windows/Win32/Lib', diff --git a/tools/pcommand b/tools/pcommand index 2928e795..f9fd1aaa 100755 --- a/tools/pcommand +++ b/tools/pcommand @@ -30,8 +30,9 @@ from batools.pcommand import ( get_master_asset_src_dir, androidaddr, push_ipa, printcolors, gen_fulltest_buildfile_android, gen_fulltest_buildfile_windows, gen_fulltest_buildfile_apple, gen_fulltest_buildfile_linux, - python_build_apple, python_build_apple_debug, python_build_android, - python_build_android_debug, python_android_patch, python_apple_patch, + python_version_android, python_version_apple, python_build_apple, + python_build_apple_debug, python_build_android, python_build_android_debug, + python_android_patch, python_android_patch_ssl, python_apple_patch, python_gather, python_winprune, capitalize, upper, efrocache_update, efrocache_get, get_modern_make, warm_start_asset_build, gendocs, update_docs_md, list_pip_reqs, install_pip_reqs, checkenv, From 90185419a9b0a4d9f6113f417f03a5cd7acb4d37 Mon Sep 17 00:00:00 2001 From: Eric Froemling Date: Fri, 18 Feb 2022 19:36:44 -0600 Subject: [PATCH 07/11] Added network diagnostics ui --- .efrocachemap | 94 +++--- .idea/dictionaries/ericf.xml | 6 + CHANGELOG.md | 3 +- README.md | 4 +- .../python/bastd/ui/settings/nettesting.py | 291 +++++++++++++++++- .../python/bastd/ui/settings/testing.py | 14 +- .../python/bastd/ui/settings/vrtesting.py | 4 +- .../.idea/dictionaries/ericf.xml | 6 + src/ballistica/ballistica.cc | 2 +- src/ballistica/core/fatal_error.cc | 5 +- 10 files changed, 361 insertions(+), 68 deletions(-) diff --git a/.efrocachemap b/.efrocachemap index c5f35717..9a964e39 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -420,16 +420,16 @@ "assets/build/ba_data/audio/zoeOw.ogg": "https://files.ballistica.net/cache/ba1/51/eb/0a567253cc08c94c5d315a64d9af", "assets/build/ba_data/audio/zoePickup01.ogg": "https://files.ballistica.net/cache/ba1/bc/8f/a9c51a09c418136e386b7fdf21c7", "assets/build/ba_data/audio/zoeScream01.ogg": "https://files.ballistica.net/cache/ba1/02/e5/84916e123f47ccf11ddda380d699", - "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/aa/52/0eb8b7da64db10e02b695a1806f6", + "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/d9/3d/da829892fc4c495a6cdd51bbc4d0", "assets/build/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/0f/e1/94378b32c786d5365a7810a15d73", "assets/build/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/55/8c/8d0a0585e434b94865ae4befc090", "assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/db/e1/03b6c717e7e0eacb7bc29d3d4ae3", - "assets/build/ba_data/data/languages/chinesetraditional.json": "https://files.ballistica.net/cache/ba1/ff/7c/3bcab4ae1f39977434acb0d6f795", + "assets/build/ba_data/data/languages/chinesetraditional.json": "https://files.ballistica.net/cache/ba1/ef/c2/a607f318b815f025a20ab92f0a7b", "assets/build/ba_data/data/languages/croatian.json": "https://files.ballistica.net/cache/ba1/66/bf/6e98398016da261296b8c306560e", "assets/build/ba_data/data/languages/czech.json": "https://files.ballistica.net/cache/ba1/82/61/8319e81bc3fed77e8319a2fd6988", "assets/build/ba_data/data/languages/danish.json": "https://files.ballistica.net/cache/ba1/3f/46/e4da3c1d2b0ebf916df55c608b28", "assets/build/ba_data/data/languages/dutch.json": "https://files.ballistica.net/cache/ba1/97/90/39ba65c2ad714429aec82ea1ae3e", - "assets/build/ba_data/data/languages/english.json": "https://files.ballistica.net/cache/ba1/5a/63/382c2cd707cd34d232f28f45f5d3", + "assets/build/ba_data/data/languages/english.json": "https://files.ballistica.net/cache/ba1/99/2a/bdcfa0932cf73e5cf63fd8113b1b", "assets/build/ba_data/data/languages/esperanto.json": "https://files.ballistica.net/cache/ba1/4c/c7/0184b8178869d1a3827a1bfcd5bb", "assets/build/ba_data/data/languages/filipino.json": "https://files.ballistica.net/cache/ba1/52/09/449a5ff97460b32cf13edfd1fdbc", "assets/build/ba_data/data/languages/french.json": "https://files.ballistica.net/cache/ba1/b6/e0/37dd30b686f475733ccc4b3cab49", @@ -439,9 +439,9 @@ "assets/build/ba_data/data/languages/hindi.json": "https://files.ballistica.net/cache/ba1/c2/f5/e7549f5179c22c6da97fafffc058", "assets/build/ba_data/data/languages/hungarian.json": "https://files.ballistica.net/cache/ba1/2d/e5/3737c6c3979cf381321c5472bea5", "assets/build/ba_data/data/languages/indonesian.json": "https://files.ballistica.net/cache/ba1/b1/81/d99fb5b8c368430944b357aa15fe", - "assets/build/ba_data/data/languages/italian.json": "https://files.ballistica.net/cache/ba1/d7/f0/436072225f713259eaa5fa39ba5d", + "assets/build/ba_data/data/languages/italian.json": "https://files.ballistica.net/cache/ba1/c7/16/e31ce16d1b4150c271401669f24f", "assets/build/ba_data/data/languages/korean.json": "https://files.ballistica.net/cache/ba1/d7/8b/acdfb39196be7856f8bad77eb6a0", - "assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/5b/77/f09dfde1b14ff978737c8935474a", + "assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/02/ab/e310f81582b6dc2ae93348d45166", "assets/build/ba_data/data/languages/polish.json": "https://files.ballistica.net/cache/ba1/04/fa/b24dd48bfbf3c2d67ee5ad1269c3", "assets/build/ba_data/data/languages/portuguese.json": "https://files.ballistica.net/cache/ba1/26/41/f1246ab56c6b7853f605c3a95889", "assets/build/ba_data/data/languages/romanian.json": "https://files.ballistica.net/cache/ba1/82/12/57bf144e12be229a9b70da9c45cb", @@ -3971,50 +3971,50 @@ "assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e", "assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/b2/e5/0ee0561e16257a32830645239f34", "ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a", - "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/22/91/9788a455078b2c6ae6b0530b376f", + "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/1a/f8/ad0c078b60b48e42c6338adf6593", "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/c1/4b/87fc75b8f04952794a897fb19fc7", - "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e3/66/afbe79ac0d6fbd593ec1e549d5c0", - "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/e4/73/d07113aab410b1c51090952bfafe", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/4f/56/2f420e3ff1dfbcbc27e9b6f8cab1", + "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/75/08/a3aa8a9b72b395427d80a799ce8a", + "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c1/fd/cf7c98243cf9c09a60e53dcf5fea", "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/c2/7c/0c439110ac2fdbeb5548ad35632b", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/c1/41/fe950818630506df8fdfd04d674d", - "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/e4/a9/59db1426754a1c7716850c17be91", - "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/7e/c9/90e3afef7cc1aea9e11a252e3379", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6d/f6/41fcb16519bb5257c337749a78ea", - "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e3/f4/27e8aa597a15296c07cb77263451", - "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/35/0c/be285aa08f62ac2420126455357c", - "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/36/69/075a41d69723e230e9ae9ca0f6c7", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/09/f3/e81bb333811f848a056f2a2d4c92", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/8d/7b/e5d18bf5d8f78a9c2ac050f17979", - "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/5b/6d/1fcbd8637eb1c2d09a0ec042d2f9", - "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/04/85/c400c05b6b6ea1d41cff444f2608", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/07/1c/7c4e59c63f8a359c179a2a74a802", - "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/fe/37/e82e03fdf5b5396f975ab15cbc71", - "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f9/29/302b9242929cb49edf898ed1ba7a", - "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ed/9d/dd639f3199ec5bc1caf901987ff4", - "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d2/f5/848874824f57b67c5b6b3c6a2baa", - "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d8/c0/a522335c7ba3150af576bb7136a3", - "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/21/3d/75e919b2acd230c2f107f0a4776a", - "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ad/88/01e67d29156c38f2774cea30c188", - "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e0/a3/924f6b88737442fc0190ee6bfed7", - "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7e/96/52a2c78644879deb38677259fdaa", - "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6a/45/47fa87fc676af9b738afd5a89fc7", - "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/47/17/eaffbc7ed2863ab398a23d5d247c", - "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8b/42/b133f6e102f69ae685ad5b3f87eb", - "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/06/08/60a2858cb8760b8e5d5b24d525ad", - "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/43/76/21a77c1d04568338ee36e476dfb4", - "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/9f/01/cfdeb633d83f043df25405c24e7b", - "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/27/09/8433d1e7e83d80223a47bb6e9e57", - "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/79/12/b247bac22dc3af4ade11f805901a", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/da/a3/75db770dd02eb2049fa84de64a3b", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/b4/e7/0e6c1bdc7b66093c5613dfbb5c5d", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/04/2d/0c5eb518b40c9c31cafad1bab5d5", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/42/f3/ac8ddc452b6380f902f3de61f180", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/58/c8/ab5043d41c6bd0d556e037cfca97", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/c6/16/a8a82b70227523b5ee154763468d", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/36/76/be5b138bcdefd00a033c657b004c", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/53/91/c294c4bd174ce28f2546dd9a57b4", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f6/4b/555e3b9a9e2d86daed786e962cdc", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ab/b9/5251e7cf19ce49426ed06abab235", + "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c4/62/a30289b64948799104f09f5b523a", + "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/35/34/91df78166ea43e9d293bc9272575", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6d/1d/7c362a4bc1e9e59636a5327a611f", + "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/5c/75/cde9c1909117d7442cb2302c274f", + "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/54/df/d28fbd98a92ce45cdb8141563205", + "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/42/bb/e022386630ffcb17f567c8bb65b1", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/c9/c2/1e8ad4f633f662a0d142883cd7a0", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/8a/a4/479729125294f2aed832491ed2ca", + "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/7d/9c/009ee3c03e90ffdca73aaed30ffa", + "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/9d/62/1bbbf5499f99f2749b54ac7f85ca", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/92/5c/315e8b6475c502a96d7cc393712d", + "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/d3/45/d6f13256b2238c1bda90faf3e02d", + "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c0/e6/606201d69229c046ed9fb5c3338b", + "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/63/a9/9da6ca254d462675cdce8abdbf0b", + "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/61/45/eee74c4c33a9a76376b452a75689", + "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7a/74/60613067338c57246225eb95828d", + "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f9/75/28d109017fc6233bf6c5e18c3ad3", + "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/bc/38/15e5bde3bd60cd8d760cacb7c825", + "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ff/4d/95cf853485249ae7110b10093e65", + "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/43/6a/85802eec068c4aad35253ade806c", + "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b1/07/3409386feb1e5cd448a4e89007db", + "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/87/6c/560bd65f3fbdb007e562593079df", + "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/3e/03/8d57f7814793dab7907834cf29ff", + "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d9/c8/6e1236bd6f7e6067fd43a2a3b28d", + "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c5/d7/7b3d6226d950c09d90ca8dbf3732", + "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/78/3a/d36f49ada60ed6d8cb4fabceca2d", + "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d0/49/5818e127d362afa6ab928323ff43", + "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6c/d9/dce5d751277c55ad994446dcf4e2", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/ca/74/2be44182ddaf1ff46c02ce461bb8", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/89/40/d140336bb8aba43c63a192ed5626", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/f1/db/6de5b4ba914384b8e77a3c207be2", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/c6/96/e6d4806efe59a47cd6a0e7119dfe", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/18/77/57cae7a43acfce18ad25d311ae30", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/6d/a8/3d30810f5efbea3e501216269e7a", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/3d/a4/3a98bbe8716ed349005076422ca9", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/ad/b2/335bf62301d7b6bc7b9444192693", "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/c5/18/29d9fe8e483ce222d3263336f7e6", "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/9d/7e/0a5125aa421e722c59d22b8beb19" } \ No newline at end of file diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml index f90bcf08..28760bb1 100644 --- a/.idea/dictionaries/ericf.xml +++ b/.idea/dictionaries/ericf.xml @@ -167,6 +167,7 @@ bacfg backgrounded backgrounding + backwin bacloud bacloudcmd bacommon @@ -183,6 +184,7 @@ bametainternal barcolor barebones + baseaddr baseh basemult basepos @@ -317,6 +319,7 @@ cbgn cbits cbot + cbresults cbtn cbtnoffs ccfgs @@ -1523,6 +1526,7 @@ ndbm ndkpath nearbytab + nearstr neededsettings ness netcode @@ -2456,6 +2460,7 @@ tval tvalue tvos + twidth twrths txtactor txtl @@ -2591,6 +2596,7 @@ weakref weakrefs weakrefset + weakwin webbrowser webpage webpages diff --git a/CHANGELOG.md b/CHANGELOG.md index 773b65db..250182b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ -### 1.6.9 (20461, 2022-02-17) +### 1.6.9 (20466, 2022-02-18) - Upgraded Android Python to 3.9.10 - Fixed an issue with SSL in Android builds that was preventing communication with the master-server in 1.6.8 +- Added a new network-diagnostics tool at 'Settings->Advanced->Network Testing'. Can be used to diagnose issues talking to master-servers/etc. (especially useful now that SSL can factor in) ### 1.6.8 (20458, 2022-02-16) - Added Filipino language (Thanks David!) diff --git a/README.md b/README.md index e84378f9..65c96357 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,13 @@ ![](https://github.com/efroemling/ballistica/workflows/CI/badge.svg) -The Ballistica project is the foundation for the next generation of [BombSquad](http://bombsquadgame.com). It will be debuting with the upcoming 1.5 release of the game and lays the foundation for some of the big changes coming in 2.0. +The Ballistica project is the foundation for the next generation of [BombSquad](http://bombsquadgame.com). It debuted with version 1.5 of the game and lays the foundation for some of the big changes coming in 2.0. [Head to the project wiki to get started](https://github.com/efroemling/ballistica/wiki), or learn more about the project below. ### Project Goals * Cleanup - * BombSquad's codebase, and especially its scripting layer, have grown a lot over its lifetime, but not always in a 'designed' way. It was overdue for a major refactoring, which should keep it more maintainable for years to come. Examples of this include breaking up the monstrous twenty-six-thousand-line bsUI.py file into a much cleaner individual subpackages, updating all code from Python 2.7 to 3.7, and adding type annotations to the entire codebase. + * BombSquad's codebase, and especially its scripting layer, have grown a lot over its lifetime, but not always in a 'designed' way. It was overdue for a major refactoring, which should keep it more maintainable for years to come. Examples of this include breaking up the monstrous twenty-six-thousand-line bsUI.py file into a much cleaner individual subpackages, updating all code from Python 2.7 to the latest 3.X versions, and adding type annotations to the entire codebase. * Provide modders and tinkerers with the best possible development environment * I've spent a lot of time incorporating auto-formatters, type-checkers, linters, and smart IDEs into my development workflow and have found them to be an enormous help. By sharing my setup here I hope to make them easily accessible to everyone. * Improve transparency diff --git a/assets/src/ba_data/python/bastd/ui/settings/nettesting.py b/assets/src/ba_data/python/bastd/ui/settings/nettesting.py index e8b645c5..9fe1910e 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/nettesting.py +++ b/assets/src/ba_data/python/bastd/ui/settings/nettesting.py @@ -4,11 +4,290 @@ from __future__ import annotations +import time +import copy +import weakref +from threading import Thread +from typing import TYPE_CHECKING + +import _ba import ba -from bastd.ui.settings import testing +from bastd.ui.settings.testing import TestingWindow + +if TYPE_CHECKING: + from typing import Callable, Any, Optional -class NetTestingWindow(testing.TestingWindow): +class NetTestingWindow(ba.Window): + """Window that runs a networking test suite to help diagnose issues.""" + + def __init__(self, transition: str = 'in_right'): + self._width = 820 + self._height = 500 + self._printed_lines: list[str] = [] + uiscale = ba.app.ui.uiscale + super().__init__(root_widget=ba.containerwidget( + size=(self._width, self._height), + scale=(1.56 if uiscale is ba.UIScale.SMALL else + 1.2 if uiscale is ba.UIScale.MEDIUM else 0.8), + stack_offset=(0.0, -7 if uiscale is ba.UIScale.SMALL else 0.0), + transition=transition)) + self._done_button = ba.buttonwidget(parent=self._root_widget, + position=(40, self._height - 77), + size=(120, 60), + scale=0.8, + autoselect=True, + label=ba.Lstr(resource='doneText'), + on_activate_call=self._done) + + self._copy_button = ba.buttonwidget(parent=self._root_widget, + position=(self._width - 200, + self._height - 77), + size=(100, 60), + scale=0.8, + autoselect=True, + label=ba.Lstr(resource='copyText'), + on_activate_call=self._copy) + + self._settings_button = ba.buttonwidget( + parent=self._root_widget, + position=(self._width - 100, self._height - 77), + size=(60, 60), + scale=0.8, + autoselect=True, + label=ba.Lstr(value='...'), + on_activate_call=self._show_val_testing) + + twidth = self._width - 450 + ba.textwidget( + parent=self._root_widget, + position=(self._width * 0.5, self._height - 55), + size=(0, 0), + text=ba.Lstr(resource='settingsWindowAdvanced.netTestingText'), + color=(0.8, 0.8, 0.8, 1.0), + h_align='center', + v_align='center', + maxwidth=twidth) + + self._scroll = ba.scrollwidget(parent=self._root_widget, + position=(50, 50), + size=(self._width - 100, + self._height - 140), + capture_arrows=True, + autoselect=True) + self._rows = ba.columnwidget(parent=self._scroll) + + ba.containerwidget(edit=self._root_widget, + cancel_button=self._done_button) + + # Now kick off the tests. + # Pass a weak-ref to this window so we don't keep it alive + # if we back out before it completes. Also set is as daemon + # so it doesn't keep the app running if the user is trying to quit. + Thread( + daemon=True, + target=ba.Call(_run_diagnostics, weakref.ref(self)), + ).start() + + def print(self, text: str, color: tuple[float, float, float]) -> None: + """Print text to our console thingie.""" + for line in text.splitlines(): + txt = ba.textwidget(parent=self._rows, + color=color, + text=line, + scale=0.75, + flatness=1.0, + shadow=0.0, + size=(0, 20)) + ba.containerwidget(edit=self._rows, visible_child=txt) + self._printed_lines.append(line) + + def _copy(self) -> None: + if not ba.clipboard_is_supported(): + ba.screenmessage('Clipboard not supported on this platform.', + color=(1, 0, 0)) + return + ba.clipboard_set_text('\n'.join(self._printed_lines)) + ba.screenmessage(f'{len(self._printed_lines)} lines copied.') + + def _show_val_testing(self) -> None: + ba.app.ui.set_main_menu_window(NetValTestingWindow().get_root_widget()) + ba.containerwidget(edit=self._root_widget, transition='out_left') + + def _done(self) -> None: + # pylint: disable=cyclic-import + from bastd.ui.settings.advanced import AdvancedSettingsWindow + ba.app.ui.set_main_menu_window( + AdvancedSettingsWindow(transition='in_left').get_root_widget()) + ba.containerwidget(edit=self._root_widget, transition='out_right') + + +def _run_diagnostics(weakwin: weakref.ref[NetTestingWindow]) -> None: + + from efro.util import utc_now + + have_error = [False] + + # We're running in a background thread but UI stuff needs to run + # in the logic thread; give ourself a way to pass stuff to it. + def _print(text: str, color: tuple[float, float, float] = None) -> None: + + def _print_in_logic_thread() -> None: + win = weakwin() + if win is not None: + win.print(text, (1.0, 1.0, 1.0) if color is None else color) + + ba.pushcall(_print_in_logic_thread, from_other_thread=True) + + def _print_test_results(call: Callable[[], Any]) -> None: + """Run the provided call; return success/fail text & color.""" + starttime = time.monotonic() + try: + call() + duration = time.monotonic() - starttime + _print(f'Succeeded in {duration:.2f}s.', color=(0, 1, 0)) + except Exception as exc: + duration = time.monotonic() - starttime + _print(f'Failed in {duration:.2f}s. Error={exc!r}', + color=(1, 0, 0)) + have_error[0] = True + + try: + _print(f'Running network diagnostics...\n' + f'ua: {_ba.app.user_agent_string}\n' + f'time: {utc_now()}.') + + if bool(False): + _print('\nRunning dummy success test...') + _print_test_results(_dummy_success) + + _print('\nRunning dummy fail test...') + _print_test_results(_dummy_fail) + + # V1 ping + baseaddr = _ba.get_master_server_address(internal=True, + source=0, + version=1) + _print(f'\nContacting V1 master-server ({baseaddr})...') + _print_test_results(lambda: _test_fetch(baseaddr)) + + # V1 alternate ping + baseaddr = _ba.get_master_server_address(internal=True, + source=1, + version=1) + _print(f'\nContacting V1 alt master-server ({baseaddr})...') + _print_test_results(lambda: _test_fetch(baseaddr)) + + _print('\nRunning V1 transaction...') + _print_test_results(_test_v1_transaction) + + # V2 ping + baseaddr = _ba.get_master_server_address(internal=True, version=2) + _print(f'\nContacting V2 master-server ({baseaddr})...') + _print_test_results(lambda: _test_fetch(baseaddr)) + + # Get V2 nearby region + with ba.app.net.region_pings_lock: + region_pings = copy.deepcopy(ba.app.net.region_pings) + nearest_region = (None if not region_pings else sorted( + region_pings.items(), key=lambda i: i[1])[0]) + + if nearest_region is not None: + nearstr = f'{nearest_region[0]}: {nearest_region[1]:.0f}ms' + else: + nearstr = '-' + _print(f'\nChecking nearest V2 region ping ({nearstr})...') + _print_test_results(lambda: _test_nearby_region_ping(nearest_region)) + + if have_error[0]: + _print('\nDiagnostics complete. Some diagnostics failed.', + color=(10, 0, 0)) + else: + _print('\nDiagnostics complete. Everything looks good!', + color=(0, 1, 0)) + except Exception: + import traceback + _print( + f'An unexpected error occurred during testing;' + f' please report this.\n' + f'{traceback.format_exc()}', + color=(1, 0, 0)) + + +def _dummy_success() -> None: + """Dummy success test.""" + time.sleep(1.2) + + +def _dummy_fail() -> None: + """Dummy fail test case.""" + raise RuntimeError('fail-test') + + +def _test_v1_transaction() -> None: + """Dummy fail test case.""" + if _ba.get_account_state() != 'signed_in': + raise RuntimeError('Not signed in.') + + starttime = time.monotonic() + + # Gets set to True on success or string on error. + results: list[Any] = [False] + + def _cb(cbresults: Any) -> None: + # Simply set results here; our other thread acts on them. + if not isinstance(cbresults, dict) or 'party_code' not in cbresults: + results[0] = 'Unexpected transaction response' + return + results[0] = True # Success! + + def _do_it() -> None: + # Fire off a transaction with a callback. + _ba.add_transaction( + { + 'type': 'PRIVATE_PARTY_QUERY', + 'expire_time': time.time() + 20, + }, + callback=_cb, + ) + _ba.run_transactions() + + ba.pushcall(_do_it, from_other_thread=True) + + while results[0] is False: + time.sleep(0.01) + if time.monotonic() - starttime > 10.0: + raise RuntimeError('timed out') + + # If we got left a string, its an error. + if isinstance(results[0], str): + raise RuntimeError(results[0]) + + +def _test_fetch(baseaddr: str) -> None: + # pylint: disable=consider-using-with + import urllib.request + response = urllib.request.urlopen(urllib.request.Request( + f'{baseaddr}/ping', None, {'User-Agent': _ba.app.user_agent_string}), + timeout=10.0) + if response.getcode() != 200: + raise RuntimeError( + f'Got unexpected response code {response.getcode()}.') + data = response.read() + if data != b'pong': + raise RuntimeError('Got unexpected response data.') + + +def _test_nearby_region_ping( + nearest_region: Optional[tuple[str, float]]) -> None: + """Try to ping nearest v2 region.""" + if nearest_region is None: + raise RuntimeError('No nearest region.') + if nearest_region[1] > 500: + raise RuntimeError('Ping too high.') + + +class NetValTestingWindow(TestingWindow): """Window to test network related settings.""" def __init__(self, transition: str = 'in_right'): @@ -35,6 +314,8 @@ class NetTestingWindow(testing.TestingWindow): 'increment': 1 }, ] - testing.TestingWindow.__init__( - self, ba.Lstr(resource='settingsWindowAdvanced.netTestingText'), - entries, transition) + super().__init__( + title=ba.Lstr(resource='settingsWindowAdvanced.netTestingText'), + entries=entries, + transition=transition, + back_call=lambda: NetTestingWindow(transition='in_left')) diff --git a/assets/src/ba_data/python/bastd/ui/settings/testing.py b/assets/src/ba_data/python/bastd/ui/settings/testing.py index 51f237e8..54e8349e 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/testing.py +++ b/assets/src/ba_data/python/bastd/ui/settings/testing.py @@ -11,7 +11,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any + from typing import Any, Callable, Optional class TestingWindow(ba.Window): @@ -20,11 +20,13 @@ class TestingWindow(ba.Window): def __init__(self, title: ba.Lstr, entries: list[dict[str, Any]], - transition: str = 'in_right'): + transition: str = 'in_right', + back_call: Optional[Callable[[], ba.Window]] = None): uiscale = ba.app.ui.uiscale self._width = 600 self._height = 324 if uiscale is ba.UIScale.SMALL else 400 self._entries = copy.deepcopy(entries) + self._back_call = back_call super().__init__(root_widget=ba.containerwidget( size=(self._width, self._height), transition=transition, @@ -176,8 +178,8 @@ class TestingWindow(ba.Window): def _do_back(self) -> None: # pylint: disable=cyclic-import - import bastd.ui.settings.advanced + from bastd.ui.settings.advanced import AdvancedSettingsWindow ba.containerwidget(edit=self._root_widget, transition='out_right') - ba.app.ui.set_main_menu_window( - bastd.ui.settings.advanced.AdvancedSettingsWindow( - transition='in_left').get_root_widget()) + backwin = (self._back_call() if self._back_call is not None else + AdvancedSettingsWindow(transition='in_left')) + ba.app.ui.set_main_menu_window(backwin.get_root_widget()) diff --git a/assets/src/ba_data/python/bastd/ui/settings/vrtesting.py b/assets/src/ba_data/python/bastd/ui/settings/vrtesting.py index a899caac..a6723f78 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/vrtesting.py +++ b/assets/src/ba_data/python/bastd/ui/settings/vrtesting.py @@ -7,13 +7,13 @@ from __future__ import annotations from typing import TYPE_CHECKING import ba -from bastd.ui.settings import testing +from bastd.ui.settings.testing import TestingWindow if TYPE_CHECKING: from typing import Any -class VRTestingWindow(testing.TestingWindow): +class VRTestingWindow(TestingWindow): """Window for testing vr settings.""" def __init__(self, transition: str = 'in_right'): diff --git a/ballisticacore-cmake/.idea/dictionaries/ericf.xml b/ballisticacore-cmake/.idea/dictionaries/ericf.xml index 1ffa37a4..4e9a01f4 100644 --- a/ballisticacore-cmake/.idea/dictionaries/ericf.xml +++ b/ballisticacore-cmake/.idea/dictionaries/ericf.xml @@ -77,6 +77,7 @@ backgrounded backgrounding backtraces + backwin ballistica ballisticacore bamasteraddr @@ -84,6 +85,7 @@ bameta bametainternal barebones + baseaddr basetype basicsize basn @@ -167,6 +169,7 @@ capitan cargs cbgn + cbresults cbtnoffs ccdd ccind @@ -720,6 +723,7 @@ nameval ndebug nearbytab + nearstr nearval needwindow negativex @@ -1169,6 +1173,7 @@ tval tvos tweakage + twidth twotimer twst typeobj @@ -1241,6 +1246,7 @@ wdeprecated weakref weakthis + weakwin weeeird welp whaaaaaaa diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc index 96a921db..7d5fbdd9 100644 --- a/src/ballistica/ballistica.cc +++ b/src/ballistica/ballistica.cc @@ -21,7 +21,7 @@ namespace ballistica { // These are set automatically via script; don't modify them here. -const int kAppBuildNumber = 20461; +const int kAppBuildNumber = 20466; const char* kAppVersion = "1.6.9"; // Our standalone globals. diff --git a/src/ballistica/core/fatal_error.cc b/src/ballistica/core/fatal_error.cc index 1e231b59..80736b28 100644 --- a/src/ballistica/core/fatal_error.cc +++ b/src/ballistica/core/fatal_error.cc @@ -42,15 +42,12 @@ auto FatalError::ReportFatalError(const std::string& message, if (!dialog_msg.empty()) { dialog_msg += "\n"; } - // (No longer adding this note; individual errors to which the log is - // relevant can do to themselves). - // dialog_msg += "See BallisticaCore log for details."; auto starttime = time(nullptr); // Launch a thread and give it a chance to directly send our logs to the // master-server. The standard mechanism probably won't get the job done - // since it relies on the game thread loop and we're likely blocking that. + // since it relies on the logic thread loop and we're likely blocking that. // But generally we want to stay in this function and call abort() or whatnot // from here so that our stack trace makes it into platform logs. int result{}; From be8f8d13bb48271ad6949e598e3703a7b6a3991b Mon Sep 17 00:00:00 2001 From: Eric Froemling Date: Sat, 19 Feb 2022 10:42:59 -0600 Subject: [PATCH 08/11] net diagnostic now shows traces on errors --- .efrocachemap | 62 +++++++++---------- CHANGELOG.md | 2 +- .../python/bastd/ui/settings/nettesting.py | 8 ++- src/ballistica/ballistica.cc | 2 +- 4 files changed, 38 insertions(+), 36 deletions(-) diff --git a/.efrocachemap b/.efrocachemap index 9a964e39..d839c82f 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -420,10 +420,10 @@ "assets/build/ba_data/audio/zoeOw.ogg": "https://files.ballistica.net/cache/ba1/51/eb/0a567253cc08c94c5d315a64d9af", "assets/build/ba_data/audio/zoePickup01.ogg": "https://files.ballistica.net/cache/ba1/bc/8f/a9c51a09c418136e386b7fdf21c7", "assets/build/ba_data/audio/zoeScream01.ogg": "https://files.ballistica.net/cache/ba1/02/e5/84916e123f47ccf11ddda380d699", - "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/d9/3d/da829892fc4c495a6cdd51bbc4d0", + "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/92/86/8888faee87cda525007485ddf0e8", "assets/build/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/0f/e1/94378b32c786d5365a7810a15d73", "assets/build/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/55/8c/8d0a0585e434b94865ae4befc090", - "assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/db/e1/03b6c717e7e0eacb7bc29d3d4ae3", + "assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/f6/21/951b7ff02b0ad14b1f0ac55763c4", "assets/build/ba_data/data/languages/chinesetraditional.json": "https://files.ballistica.net/cache/ba1/ef/c2/a607f318b815f025a20ab92f0a7b", "assets/build/ba_data/data/languages/croatian.json": "https://files.ballistica.net/cache/ba1/66/bf/6e98398016da261296b8c306560e", "assets/build/ba_data/data/languages/czech.json": "https://files.ballistica.net/cache/ba1/82/61/8319e81bc3fed77e8319a2fd6988", @@ -431,7 +431,7 @@ "assets/build/ba_data/data/languages/dutch.json": "https://files.ballistica.net/cache/ba1/97/90/39ba65c2ad714429aec82ea1ae3e", "assets/build/ba_data/data/languages/english.json": "https://files.ballistica.net/cache/ba1/99/2a/bdcfa0932cf73e5cf63fd8113b1b", "assets/build/ba_data/data/languages/esperanto.json": "https://files.ballistica.net/cache/ba1/4c/c7/0184b8178869d1a3827a1bfcd5bb", - "assets/build/ba_data/data/languages/filipino.json": "https://files.ballistica.net/cache/ba1/52/09/449a5ff97460b32cf13edfd1fdbc", + "assets/build/ba_data/data/languages/filipino.json": "https://files.ballistica.net/cache/ba1/55/63/fbe4b09943bfaf33438122874ee8", "assets/build/ba_data/data/languages/french.json": "https://files.ballistica.net/cache/ba1/b6/e0/37dd30b686f475733ccc4b3cab49", "assets/build/ba_data/data/languages/german.json": "https://files.ballistica.net/cache/ba1/20/3f/198dcc5cfed5789042e1595bd048", "assets/build/ba_data/data/languages/gibberish.json": "https://files.ballistica.net/cache/ba1/03/6a/4db89c5bf1ced8eb5a5615a4ae64", @@ -442,7 +442,7 @@ "assets/build/ba_data/data/languages/italian.json": "https://files.ballistica.net/cache/ba1/c7/16/e31ce16d1b4150c271401669f24f", "assets/build/ba_data/data/languages/korean.json": "https://files.ballistica.net/cache/ba1/d7/8b/acdfb39196be7856f8bad77eb6a0", "assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/02/ab/e310f81582b6dc2ae93348d45166", - "assets/build/ba_data/data/languages/polish.json": "https://files.ballistica.net/cache/ba1/04/fa/b24dd48bfbf3c2d67ee5ad1269c3", + "assets/build/ba_data/data/languages/polish.json": "https://files.ballistica.net/cache/ba1/d5/fe/422745cdbe51ccb4f2ced6f5554a", "assets/build/ba_data/data/languages/portuguese.json": "https://files.ballistica.net/cache/ba1/26/41/f1246ab56c6b7853f605c3a95889", "assets/build/ba_data/data/languages/romanian.json": "https://files.ballistica.net/cache/ba1/82/12/57bf144e12be229a9b70da9c45cb", "assets/build/ba_data/data/languages/russian.json": "https://files.ballistica.net/cache/ba1/e8/25/a304de7a79195cb37ce9340e4194", @@ -450,7 +450,7 @@ "assets/build/ba_data/data/languages/slovak.json": "https://files.ballistica.net/cache/ba1/9f/a6/a2c9d7f3f90a2320aa45ccfd65cd", "assets/build/ba_data/data/languages/spanish.json": "https://files.ballistica.net/cache/ba1/87/5d/d36a8a2e9cb0f02731a3fd7af000", "assets/build/ba_data/data/languages/swedish.json": "https://files.ballistica.net/cache/ba1/50/9f/be006ba19be6a69a57837eb6dca0", - "assets/build/ba_data/data/languages/tamil.json": "https://files.ballistica.net/cache/ba1/38/7a/3e9582e04e94bed62c4cd57aea88", + "assets/build/ba_data/data/languages/tamil.json": "https://files.ballistica.net/cache/ba1/cb/11/e11957be752c3dc552898b60ab20", "assets/build/ba_data/data/languages/thai.json": "https://files.ballistica.net/cache/ba1/74/3d/c3d40a1e5ee1edf82555da05eda9", "assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/e8/0b/6825043ce101a831732eb9c97e4f", "assets/build/ba_data/data/languages/ukrainian.json": "https://files.ballistica.net/cache/ba1/87/20/259904441097b886b841d7c4d09a", @@ -3971,26 +3971,26 @@ "assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e", "assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/b2/e5/0ee0561e16257a32830645239f34", "ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a", - "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/1a/f8/ad0c078b60b48e42c6338adf6593", + "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/e7/5e/59333b9db5a9486c94b616d7d547", "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/4f/56/2f420e3ff1dfbcbc27e9b6f8cab1", - "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/75/08/a3aa8a9b72b395427d80a799ce8a", - "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c1/fd/cf7c98243cf9c09a60e53dcf5fea", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/58/9b/76b597f4a14af112d343a02c727a", + "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/49/72/9d6dddb041e6d5948af59f42c6fc", + "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c6/d8/6c0f703639df3ce0caff7b2b6218", "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f6/4b/555e3b9a9e2d86daed786e962cdc", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ab/b9/5251e7cf19ce49426ed06abab235", - "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c4/62/a30289b64948799104f09f5b523a", - "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/35/34/91df78166ea43e9d293bc9272575", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6d/1d/7c362a4bc1e9e59636a5327a611f", - "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/5c/75/cde9c1909117d7442cb2302c274f", - "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/54/df/d28fbd98a92ce45cdb8141563205", - "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/42/bb/e022386630ffcb17f567c8bb65b1", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/c9/c2/1e8ad4f633f662a0d142883cd7a0", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/8a/a4/479729125294f2aed832491ed2ca", - "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/7d/9c/009ee3c03e90ffdca73aaed30ffa", - "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/9d/62/1bbbf5499f99f2749b54ac7f85ca", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/92/5c/315e8b6475c502a96d7cc393712d", - "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/d3/45/d6f13256b2238c1bda90faf3e02d", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/58/c8/b8b3ff0a84252fae685f4e0f0124", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a9/82/f26d0ff0283e7a6f32d4adb3b4ab", + "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/dc/72/32b9ae11568f811657edcb5129de", + "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/db/94/c3cb06d3bcd9564005863e40335a", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/22/bf/a66488be7a126cd94f7502b5be5e", + "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/92/50/97e262eaa0339f42f871aaab91da", + "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ca/cc/8c1200e34d617267627d91db8486", + "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/77/c6/7ca8897282baad0a079fdc3b12a0", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/82/a3/6c571299d0a7719bb6024561547b", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d2/ba/5614593a7ab4e2988e65bb92216f", + "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/e1/3f/78f91ddf22d58b430b8cd8bb7287", + "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/84/80/b3aa1869048ec7fc9fdad0ae877f", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/b0/61/528f9bb9f3776cab9504d7ac415a", + "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/11/16/174d4992497dcf9c936745036855", "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c0/e6/606201d69229c046ed9fb5c3338b", "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/63/a9/9da6ca254d462675cdce8abdbf0b", "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/61/45/eee74c4c33a9a76376b452a75689", @@ -4007,14 +4007,14 @@ "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/78/3a/d36f49ada60ed6d8cb4fabceca2d", "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d0/49/5818e127d362afa6ab928323ff43", "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6c/d9/dce5d751277c55ad994446dcf4e2", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/ca/74/2be44182ddaf1ff46c02ce461bb8", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/89/40/d140336bb8aba43c63a192ed5626", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/f1/db/6de5b4ba914384b8e77a3c207be2", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/c6/96/e6d4806efe59a47cd6a0e7119dfe", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/18/77/57cae7a43acfce18ad25d311ae30", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/6d/a8/3d30810f5efbea3e501216269e7a", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/3d/a4/3a98bbe8716ed349005076422ca9", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/ad/b2/335bf62301d7b6bc7b9444192693", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/0e/56/c00af8d4bc0fdb76402fca28b5d3", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/59/e4/297cefcd5c754fbeb154d7354dba", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/4e/51/b1420c4c937efdc09581e511c7f9", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/ce/13/8112685d64b9dd0e24edd87dafdc", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/e0/c6/be6eec53dc23d864ffb0919429fb", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/47/18/9dac3ea464b3e93fb132d1a66f45", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/4f/77/4130b38ddac3afb2f11bbeb3b9b5", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/6a/4c/c035ab61ffd17d70c2cb4091eb91", "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/c5/18/29d9fe8e483ce222d3263336f7e6", "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/9d/7e/0a5125aa421e722c59d22b8beb19" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 250182b8..5f1cba3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -### 1.6.9 (20466, 2022-02-18) +### 1.6.9 (20469, 2022-02-19) - Upgraded Android Python to 3.9.10 - Fixed an issue with SSL in Android builds that was preventing communication with the master-server in 1.6.8 - Added a new network-diagnostics tool at 'Settings->Advanced->Network Testing'. Can be used to diagnose issues talking to master-servers/etc. (especially useful now that SSL can factor in) diff --git a/assets/src/ba_data/python/bastd/ui/settings/nettesting.py b/assets/src/ba_data/python/bastd/ui/settings/nettesting.py index 9fe1910e..f3d7281b 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/nettesting.py +++ b/assets/src/ba_data/python/bastd/ui/settings/nettesting.py @@ -123,6 +123,7 @@ class NetTestingWindow(ba.Window): def _run_diagnostics(weakwin: weakref.ref[NetTestingWindow]) -> None: + # pylint: disable=too-many-statements from efro.util import utc_now @@ -146,10 +147,11 @@ def _run_diagnostics(weakwin: weakref.ref[NetTestingWindow]) -> None: call() duration = time.monotonic() - starttime _print(f'Succeeded in {duration:.2f}s.', color=(0, 1, 0)) - except Exception as exc: + except Exception: + import traceback duration = time.monotonic() - starttime - _print(f'Failed in {duration:.2f}s. Error={exc!r}', - color=(1, 0, 0)) + _print(traceback.format_exc(), color=(1.0, 1.0, 0.3)) + _print(f'Failed in {duration:.2f}s.', color=(1, 0, 0)) have_error[0] = True try: diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc index 7d5fbdd9..15a5cda7 100644 --- a/src/ballistica/ballistica.cc +++ b/src/ballistica/ballistica.cc @@ -21,7 +21,7 @@ namespace ballistica { // These are set automatically via script; don't modify them here. -const int kAppBuildNumber = 20466; +const int kAppBuildNumber = 20469; const char* kAppVersion = "1.6.9"; // Our standalone globals. From d210675242b766eb8dcf309327ae53aa83ad856f Mon Sep 17 00:00:00 2001 From: Eric Froemling Date: Sun, 20 Feb 2022 15:50:00 -0600 Subject: [PATCH 09/11] language updates, clipboard support in mac test builds, tidying --- .efrocachemap | 82 +++++++++---------- .idea/dictionaries/ericf.xml | 2 + CHANGELOG.md | 3 +- .../.idea/dictionaries/ericf.xml | 3 + .../inspectionProfiles/Project_Default.xml | 31 +++++++ src/ballistica/ballistica.cc | 2 +- src/ballistica/game/host_activity.cc | 6 +- src/ballistica/input/device/joystick.cc | 42 +--------- src/ballistica/input/device/joystick.h | 1 - src/ballistica/input/input.cc | 3 + .../platform/apple/platform_apple.h | 73 +++++++++-------- src/ballistica/platform/platform.cc | 4 +- 12 files changed, 132 insertions(+), 120 deletions(-) diff --git a/.efrocachemap b/.efrocachemap index d839c82f..37b9fdff 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -420,7 +420,7 @@ "assets/build/ba_data/audio/zoeOw.ogg": "https://files.ballistica.net/cache/ba1/51/eb/0a567253cc08c94c5d315a64d9af", "assets/build/ba_data/audio/zoePickup01.ogg": "https://files.ballistica.net/cache/ba1/bc/8f/a9c51a09c418136e386b7fdf21c7", "assets/build/ba_data/audio/zoeScream01.ogg": "https://files.ballistica.net/cache/ba1/02/e5/84916e123f47ccf11ddda380d699", - "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/92/86/8888faee87cda525007485ddf0e8", + "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/de/d7/c8c170867f5ba0682c6600d388ca", "assets/build/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/0f/e1/94378b32c786d5365a7810a15d73", "assets/build/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/55/8c/8d0a0585e434b94865ae4befc090", "assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/f6/21/951b7ff02b0ad14b1f0ac55763c4", @@ -438,7 +438,7 @@ "assets/build/ba_data/data/languages/greek.json": "https://files.ballistica.net/cache/ba1/8c/8e/67de1d9997a66299c8881d44ab22", "assets/build/ba_data/data/languages/hindi.json": "https://files.ballistica.net/cache/ba1/c2/f5/e7549f5179c22c6da97fafffc058", "assets/build/ba_data/data/languages/hungarian.json": "https://files.ballistica.net/cache/ba1/2d/e5/3737c6c3979cf381321c5472bea5", - "assets/build/ba_data/data/languages/indonesian.json": "https://files.ballistica.net/cache/ba1/b1/81/d99fb5b8c368430944b357aa15fe", + "assets/build/ba_data/data/languages/indonesian.json": "https://files.ballistica.net/cache/ba1/75/70/e33e6ee95830052e8f36cd2135f7", "assets/build/ba_data/data/languages/italian.json": "https://files.ballistica.net/cache/ba1/c7/16/e31ce16d1b4150c271401669f24f", "assets/build/ba_data/data/languages/korean.json": "https://files.ballistica.net/cache/ba1/d7/8b/acdfb39196be7856f8bad77eb6a0", "assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/02/ab/e310f81582b6dc2ae93348d45166", @@ -452,7 +452,7 @@ "assets/build/ba_data/data/languages/swedish.json": "https://files.ballistica.net/cache/ba1/50/9f/be006ba19be6a69a57837eb6dca0", "assets/build/ba_data/data/languages/tamil.json": "https://files.ballistica.net/cache/ba1/cb/11/e11957be752c3dc552898b60ab20", "assets/build/ba_data/data/languages/thai.json": "https://files.ballistica.net/cache/ba1/74/3d/c3d40a1e5ee1edf82555da05eda9", - "assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/e8/0b/6825043ce101a831732eb9c97e4f", + "assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/0a/4f/90fcd63bd12a7648b2a1e9b01586", "assets/build/ba_data/data/languages/ukrainian.json": "https://files.ballistica.net/cache/ba1/87/20/259904441097b886b841d7c4d09a", "assets/build/ba_data/data/languages/venetian.json": "https://files.ballistica.net/cache/ba1/71/59/356404b8db683d8c946a40ca02e5", "assets/build/ba_data/data/languages/vietnamese.json": "https://files.ballistica.net/cache/ba1/0b/24/3cc2b5a6ebe4bca1e01b40f8ed09", @@ -3971,50 +3971,50 @@ "assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e", "assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/b2/e5/0ee0561e16257a32830645239f34", "ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a", - "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/e7/5e/59333b9db5a9486c94b616d7d547", + "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ed/48/5b2f69e4f296dab9a564ef4ba0b2", "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/58/9b/76b597f4a14af112d343a02c727a", - "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/49/72/9d6dddb041e6d5948af59f42c6fc", - "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c6/d8/6c0f703639df3ce0caff7b2b6218", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/cc/dc/9e3907edeff5bdcdf130f8b46043", + "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/86/cf/640a60d55fa9af110489e9f7d654", + "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/77/12/80eb1c3d63fc6bf5327566645541", "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/58/c8/b8b3ff0a84252fae685f4e0f0124", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a9/82/f26d0ff0283e7a6f32d4adb3b4ab", - "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/dc/72/32b9ae11568f811657edcb5129de", - "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/db/94/c3cb06d3bcd9564005863e40335a", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/22/bf/a66488be7a126cd94f7502b5be5e", - "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/92/50/97e262eaa0339f42f871aaab91da", - "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ca/cc/8c1200e34d617267627d91db8486", - "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/77/c6/7ca8897282baad0a079fdc3b12a0", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/82/a3/6c571299d0a7719bb6024561547b", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d2/ba/5614593a7ab4e2988e65bb92216f", - "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/e1/3f/78f91ddf22d58b430b8cd8bb7287", - "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/84/80/b3aa1869048ec7fc9fdad0ae877f", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/b0/61/528f9bb9f3776cab9504d7ac415a", - "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/11/16/174d4992497dcf9c936745036855", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/3f/7d/b103ee4aa60c1713d8959fb37bdb", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/73/8e/afa74f2d49b74723aa64b478e103", + "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/1f/e1/cb24f26e1a1e48fc134e87857a12", + "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/bd/a1/2e854d38392de862f27690289276", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/84/92/4d157d6cca2ede298dc52fd8e6e0", + "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e5/f9/7d8c05b6e3d71a486953afe02d2e", + "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/a0/02/dbeec08c32a6532395a63f7ce7a3", + "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/36/d6/1ec4ee0bbb0697c886c19afc1464", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/5a/11/aa1d5f115d7f5a3c036d5a170e5e", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/33/19/4dfc1c0930f2e22cad9cbed245bb", + "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/55/06/790f0c625ff2bbc37ec45a192fb2", + "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/dd/a3/aaf84cba25bcc7920d46fdf6051a", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/2c/99/71c64f151f39d4758285863604f2", + "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/ae/1e/84924ade4179dd92122302be3813", "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c0/e6/606201d69229c046ed9fb5c3338b", "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/63/a9/9da6ca254d462675cdce8abdbf0b", "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/61/45/eee74c4c33a9a76376b452a75689", "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7a/74/60613067338c57246225eb95828d", - "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f9/75/28d109017fc6233bf6c5e18c3ad3", - "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/bc/38/15e5bde3bd60cd8d760cacb7c825", - "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ff/4d/95cf853485249ae7110b10093e65", - "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/43/6a/85802eec068c4aad35253ade806c", - "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b1/07/3409386feb1e5cd448a4e89007db", - "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/87/6c/560bd65f3fbdb007e562593079df", - "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/3e/03/8d57f7814793dab7907834cf29ff", - "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d9/c8/6e1236bd6f7e6067fd43a2a3b28d", - "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c5/d7/7b3d6226d950c09d90ca8dbf3732", - "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/78/3a/d36f49ada60ed6d8cb4fabceca2d", - "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d0/49/5818e127d362afa6ab928323ff43", - "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6c/d9/dce5d751277c55ad994446dcf4e2", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/0e/56/c00af8d4bc0fdb76402fca28b5d3", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/59/e4/297cefcd5c754fbeb154d7354dba", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/4e/51/b1420c4c937efdc09581e511c7f9", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/ce/13/8112685d64b9dd0e24edd87dafdc", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/e0/c6/be6eec53dc23d864ffb0919429fb", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/47/18/9dac3ea464b3e93fb132d1a66f45", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/4f/77/4130b38ddac3afb2f11bbeb3b9b5", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/6a/4c/c035ab61ffd17d70c2cb4091eb91", + "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/57/03/10ed96783f925f635679fd54f52b", + "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ef/d3/3ce6784fb56347646d4e8c7479ec", + "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/39/25/8f3ffb98cb73cf0bdd974b98d947", + "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e5/be/fba3c5fbf804aed9e0fea8d9f7c1", + "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/de/1e/5016a6a654464001226d6d84c3dc", + "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/25/05/df2cc676d8bb4e715826984fcd5f", + "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/16/98/97ddbdaf3e1369e292d6cdf67dc2", + "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fa/a9/9ef499b38e4d899f7fd362f4b59e", + "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f9/35/d728d8ab9fe691366225c5a7e199", + "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/bf/ef/c48e4357202b00879e6848e81130", + "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a1/90/c69d9978cc8808612fde4bae8232", + "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/1c/4d/a1a2da08fd6e76aa051c301a5ab8", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/99/21/b71e35e4a679f8677ea00973a9e2", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/8f/1f/473567523fd49f1ffbff870422a9", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/15/52/5e13d441ffd25d1daa220dbde46e", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/0c/c8/a617edbe5d634364964ee956239f", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/c8/83/db874353ce5a53932abd8c4066e8", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/d8/47/b007731fa81a438ba3eff999bdca", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/1d/8c/795b3914ad039b5dad704199a7e4", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/89/a8/aa768714b1fd24649f08f7ef5905", "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/c5/18/29d9fe8e483ce222d3263336f7e6", "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/9d/7e/0a5125aa421e722c59d22b8beb19" } \ No newline at end of file diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml index 28760bb1..8c6095a7 100644 --- a/.idea/dictionaries/ericf.xml +++ b/.idea/dictionaries/ericf.xml @@ -614,6 +614,7 @@ downmix dpad dpath + dpos dprofilename drawscore drawscreen @@ -2538,6 +2539,7 @@ useragentstring userbase userfunctions + usid utcnow utimensat uuidmodule diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f1cba3e..9b2e0f97 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,8 @@ -### 1.6.9 (20469, 2022-02-19) +### 1.6.9 (20472, 2022-02-20) - Upgraded Android Python to 3.9.10 - Fixed an issue with SSL in Android builds that was preventing communication with the master-server in 1.6.8 - Added a new network-diagnostics tool at 'Settings->Advanced->Network Testing'. Can be used to diagnose issues talking to master-servers/etc. (especially useful now that SSL can factor in) +- Added clipboard support to Mac test build (thought pasting currently requires ctrl-v instead of cmd-v). ### 1.6.8 (20458, 2022-02-16) - Added Filipino language (Thanks David!) diff --git a/ballisticacore-cmake/.idea/dictionaries/ericf.xml b/ballisticacore-cmake/.idea/dictionaries/ericf.xml index 4e9a01f4..cf4cbd5a 100644 --- a/ballisticacore-cmake/.idea/dictionaries/ericf.xml +++ b/ballisticacore-cmake/.idea/dictionaries/ericf.xml @@ -304,6 +304,7 @@ downsample dpad dpads + dpos drpt dsize dsound @@ -412,6 +413,7 @@ fovs fovx fovy + fpath framebuffers framedef frameldefs @@ -1203,6 +1205,7 @@ unsynchronized uppercased userspace + usid uther uuidmodule uuids diff --git a/ballisticacore-cmake/.idea/inspectionProfiles/Project_Default.xml b/ballisticacore-cmake/.idea/inspectionProfiles/Project_Default.xml index f52b6fcd..4d495b1e 100644 --- a/ballisticacore-cmake/.idea/inspectionProfiles/Project_Default.xml +++ b/ballisticacore-cmake/.idea/inspectionProfiles/Project_Default.xml @@ -13,6 +13,37 @@ + + + diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc index 15a5cda7..258cb842 100644 --- a/src/ballistica/ballistica.cc +++ b/src/ballistica/ballistica.cc @@ -21,7 +21,7 @@ namespace ballistica { // These are set automatically via script; don't modify them here. -const int kAppBuildNumber = 20469; +const int kAppBuildNumber = 20472; const char* kAppVersion = "1.6.9"; // Our standalone globals. diff --git a/src/ballistica/game/host_activity.cc b/src/ballistica/game/host_activity.cc index 5cabe4bb..961a09c1 100644 --- a/src/ballistica/game/host_activity.cc +++ b/src/ballistica/game/host_activity.cc @@ -385,7 +385,7 @@ auto HostActivity::Update(millisecs_t time_advance) -> millisecs_t { // If we haven't been told to start yet, don't do anything more. if (!_started) { - return 1000; + return 100; } // Advance base time by the specified amount, stopping at all timers along the @@ -426,7 +426,9 @@ void HostActivity::GraphicsQualityChanged(GraphicsQuality q) { } void HostActivity::Draw(FrameDef* frame_def) { - if (!_started) return; + if (!_started) { + return; + } scene()->Draw(frame_def); } diff --git a/src/ballistica/input/device/joystick.cc b/src/ballistica/input/device/joystick.cc index d82e8f82..1f211a57 100644 --- a/src/ballistica/input/device/joystick.cc +++ b/src/ballistica/input/device/joystick.cc @@ -99,7 +99,6 @@ Joystick::Joystick(int sdl_joystick_id, const std::string& custom_device_name, sdl_joystick_ = nullptr; is_mfi_controller_ = (custom_device_name_ == kMFiControllerName); - is_mac_wiimote_ = (custom_device_name_ == "Wiimote"); // Hard code a few remote controls. // The newer way to do this is just set 'UI-Only' on the device config @@ -297,27 +296,6 @@ Joystick::~Joystick() { child_joy_stick_ = nullptr; } - // If we're a wiimote, announce our departure. - if (g_buildconfig.ostype_macos() && is_mac_wiimote_) { - char msg[255]; - - int num = device_number(); - - // If we disconnected before any events came through, treat it as an error. - snprintf(msg, sizeof(msg), "Wii Remote #%d", num); - - // Ask the user to try again if the disconnect was immediate. - std::string s; - if (GetRealTime() - creation_time_ < 5000) { - s = g_game->GetResourceString("controllerDisconnectedTryAgainText"); - } else { - s = g_game->GetResourceString("controllerDisconnectedText"); - } - Utils::StringReplaceOne(&s, "${CONTROLLER}", msg); - ScreenMessage(s); - g_audio->PlaySound(g_media->GetSound(SystemSoundID::kCorkPop)); - } - // Have SDL actually close the joystick in the main thread. // Send a message back to the main thread to close this SDL Joystick. // HMMM - can we just have the main thread close the joystick immediately @@ -342,25 +320,7 @@ auto Joystick::GetDefaultPlayerName() -> std::string { return InputDevice::GetDefaultPlayerName(); } -void Joystick::ConnectionComplete() { - assert(InGameThread()); - - // Special case for mac wiimotes. - if (g_buildconfig.ostype_macos() && is_mac_wiimote_) { - char msg[128]; - - int num = device_number(); - - snprintf(msg, sizeof(msg), "Wii Remote #%d", num); - g_audio->PlaySound(g_media->GetSound(SystemSoundID::kGunCock)); - - // Replace ${CONTROLLER} with it in our message. - std::string s = g_game->GetResourceString("controllerConnectedText"); - Utils::StringReplaceOne(&s, "${CONTROLLER}", msg); - ScreenMessage(s); - return; - } -} +void Joystick::ConnectionComplete() { assert(InGameThread()); } auto Joystick::ShouldBeHiddenFromUser() -> bool { std::string d_name = GetDeviceName(); diff --git a/src/ballistica/input/device/joystick.h b/src/ballistica/input/device/joystick.h index 597ec4a4..0b5a587a 100644 --- a/src/ballistica/input/device/joystick.h +++ b/src/ballistica/input/device/joystick.h @@ -115,7 +115,6 @@ class Joystick : public InputDevice { bool is_remote_app_{}; bool is_mfi_controller_{}; bool is_mac_ps3_controller_{}; - bool is_mac_wiimote_{}; millisecs_t ps3_last_joy_press_time_{-10000}; diff --git a/src/ballistica/input/input.cc b/src/ballistica/input/input.cc index 12f8007f..016efaf7 100644 --- a/src/ballistica/input/input.cc +++ b/src/ballistica/input/input.cc @@ -1219,6 +1219,9 @@ void Input::HandleKeyPress(const SDL_Keysym* keysym) { // Ctrl-V or Cmd-V sends paste commands to any interested text fields. // Command-Q or Control-Q quits. + if (!repeat_press && keysym->sym == SDLK_v) { + printf("PASTE?"); + } if (!repeat_press && keysym->sym == SDLK_v && ((keysym->mod & KMOD_CTRL) || (keysym->mod & KMOD_GUI))) { // NOLINT g_ui->SendWidgetMessage(WidgetMessage(WidgetMessage::Type::kPaste)); diff --git a/src/ballistica/platform/apple/platform_apple.h b/src/ballistica/platform/apple/platform_apple.h index bf7c3114..e5f02c0d 100644 --- a/src/ballistica/platform/apple/platform_apple.h +++ b/src/ballistica/platform/apple/platform_apple.h @@ -25,56 +25,65 @@ class PlatformApple : public Platform { auto DoHasTouchScreen() -> bool override; auto GetUIScale() -> UIScale override; auto IsRunningOnDesktop() -> bool override; - void HandleLog(const std::string& msg) override; - void SetupDataDirectory() override; - void GetTextBoundsAndWidth(const std::string& text, Rect* r, - float* width) override; - void FreeTextTexture(void* tex) override; + auto HandleLog(const std::string& msg) -> void override; + auto SetupDataDirectory() -> void override; + auto GetTextBoundsAndWidth(const std::string& text, Rect* r, float* width) + -> void override; + auto FreeTextTexture(void* tex) -> void override; auto CreateTextTexture(int width, int height, const std::vector& strings, const std::vector& positions, const std::vector& widths, float scale) -> void* override; auto GetTextTextureData(void* tex) -> uint8_t* override; - void GetFriendScores(const std::string& game, const std::string& game_version, - void* py_callback) override; - void SubmitScore(const std::string& game, const std::string& version, - int64_t score) override; - void ReportAchievement(const std::string& achievement) override; + auto GetFriendScores(const std::string& game, const std::string& game_version, + void* py_callback) -> void override; + auto SubmitScore(const std::string& game, const std::string& version, + int64_t score) -> void override; + auto ReportAchievement(const std::string& achievement) -> void override; auto HaveLeaderboard(const std::string& game, const std::string& config) -> bool override; - void ShowOnlineScoreUI(const std::string& show, const std::string& game, - const std::string& game_version) override; - void Purchase(const std::string& item) override; - void RestorePurchases() override; + auto ShowOnlineScoreUI(const std::string& show, const std::string& game, + const std::string& game_version) -> void override; + auto Purchase(const std::string& item) -> void override; + auto RestorePurchases() -> void override; auto NewAutoReleasePool() -> void* override; - void DrainAutoReleasePool(void* pool) override; - void DoOpenURL(const std::string& url) override; - void ResetAchievements() override; - void GameCenterLogin() override; - void PurchaseAck(const std::string& purchase, - const std::string& order_id) override; + auto DrainAutoReleasePool(void* pool) -> void override; + auto DoOpenURL(const std::string& url) -> void override; + auto ResetAchievements() -> void override; + auto GameCenterLogin() -> void override; + auto PurchaseAck(const std::string& purchase, const std::string& order_id) + -> void override; auto IsOSPlayingMusic() -> bool override; - void SetHardwareCursorVisible(bool visible) override; - void QuitApp() override; - void GetScoresToBeat(const std::string& level, const std::string& config, - void* py_callback) override; - void OpenFileExternally(const std::string& path) override; - void OpenDirExternally(const std::string& path) override; - void MacMusicAppInit() override; + auto SetHardwareCursorVisible(bool visible) -> void override; + auto QuitApp() -> void override; + auto GetScoresToBeat(const std::string& level, const std::string& config, + void* py_callback) -> void override; + auto OpenFileExternally(const std::string& path) -> void override; + auto OpenDirExternally(const std::string& path) -> void override; + auto MacMusicAppInit() -> void override; auto MacMusicAppGetVolume() -> int override; - void MacMusicAppSetVolume(int volume) override; - void MacMusicAppGetLibrarySource() override; - void MacMusicAppStop() override; + auto MacMusicAppSetVolume(int volume) -> void override; + auto MacMusicAppGetLibrarySource() -> void override; + auto MacMusicAppStop() -> void override; auto MacMusicAppPlayPlaylist(const std::string& playlist) -> bool override; auto MacMusicAppGetPlaylists() -> std::list override; - void StartListeningForWiiRemotes() override; - void StopListeningForWiiRemotes() override; + auto StartListeningForWiiRemotes() -> void override; + auto StopListeningForWiiRemotes() -> void override; auto IsEventPushMode() -> bool override; auto ContainsPythonDist() -> bool override; auto GetPlatformName() -> std::string override; auto GetSubplatformName() -> std::string override; + auto DoClipboardIsSupported() -> bool override; + auto DoClipboardHasText() -> bool override; + auto DoClipboardSetText(const std::string& text) -> void override; + auto DoClipboardGetText() -> std::string override; + + /// Return current text from the clipboard. Raises an Exception if + /// clipboard is unsupported or if there's no text on the clipboard. + auto ClipboardGetText() -> std::string; + private: // std::mutex log_mutex_; // std::string log_line_; diff --git a/src/ballistica/platform/platform.cc b/src/ballistica/platform/platform.cc index 5c6c228d..d6092d51 100644 --- a/src/ballistica/platform/platform.cc +++ b/src/ballistica/platform/platform.cc @@ -1479,7 +1479,9 @@ auto Platform::DoClipboardGetText() -> std::string { if (out == nullptr) { throw Exception("Error fetching clipboard contents.", PyExcType::kRuntime); } - return out; + std::string out_s{out}; + SDL_free(out); + return out_s; #else // Shouldn't get here since we default to no clipboard support. FatalError("Shouldn't get here."); From f2ecf75b0c7b23f075d300d71c29b850a6a0ad66 Mon Sep 17 00:00:00 2001 From: Eric Froemling Date: Mon, 21 Feb 2022 10:59:16 -0600 Subject: [PATCH 10/11] Fixed issue with unicode characters in device names breaking networking --- .efrocachemap | 88 ++++++++++++++--------------- CHANGELOG.md | 3 +- src/ballistica/ballistica.cc | 2 +- src/ballistica/generic/utils.cc | 8 +++ src/ballistica/generic/utils.h | 4 ++ src/ballistica/input/input.cc | 3 - src/ballistica/platform/platform.cc | 18 +++--- src/ballistica/platform/platform.h | 2 +- 8 files changed, 71 insertions(+), 57 deletions(-) diff --git a/.efrocachemap b/.efrocachemap index 37b9fdff..e6a54490 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -420,7 +420,7 @@ "assets/build/ba_data/audio/zoeOw.ogg": "https://files.ballistica.net/cache/ba1/51/eb/0a567253cc08c94c5d315a64d9af", "assets/build/ba_data/audio/zoePickup01.ogg": "https://files.ballistica.net/cache/ba1/bc/8f/a9c51a09c418136e386b7fdf21c7", "assets/build/ba_data/audio/zoeScream01.ogg": "https://files.ballistica.net/cache/ba1/02/e5/84916e123f47ccf11ddda380d699", - "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/de/d7/c8c170867f5ba0682c6600d388ca", + "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/0a/8c/4b3344df186e2f26d959bd886c72", "assets/build/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/0f/e1/94378b32c786d5365a7810a15d73", "assets/build/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/55/8c/8d0a0585e434b94865ae4befc090", "assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/f6/21/951b7ff02b0ad14b1f0ac55763c4", @@ -431,7 +431,7 @@ "assets/build/ba_data/data/languages/dutch.json": "https://files.ballistica.net/cache/ba1/97/90/39ba65c2ad714429aec82ea1ae3e", "assets/build/ba_data/data/languages/english.json": "https://files.ballistica.net/cache/ba1/99/2a/bdcfa0932cf73e5cf63fd8113b1b", "assets/build/ba_data/data/languages/esperanto.json": "https://files.ballistica.net/cache/ba1/4c/c7/0184b8178869d1a3827a1bfcd5bb", - "assets/build/ba_data/data/languages/filipino.json": "https://files.ballistica.net/cache/ba1/55/63/fbe4b09943bfaf33438122874ee8", + "assets/build/ba_data/data/languages/filipino.json": "https://files.ballistica.net/cache/ba1/00/70/fabda1781ddbb540cd1c2a6278db", "assets/build/ba_data/data/languages/french.json": "https://files.ballistica.net/cache/ba1/b6/e0/37dd30b686f475733ccc4b3cab49", "assets/build/ba_data/data/languages/german.json": "https://files.ballistica.net/cache/ba1/20/3f/198dcc5cfed5789042e1595bd048", "assets/build/ba_data/data/languages/gibberish.json": "https://files.ballistica.net/cache/ba1/03/6a/4db89c5bf1ced8eb5a5615a4ae64", @@ -3971,50 +3971,50 @@ "assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e", "assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/b2/e5/0ee0561e16257a32830645239f34", "ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a", - "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ed/48/5b2f69e4f296dab9a564ef4ba0b2", + "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/be/a6/3f794efed8c208476f6303fa4946", "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/cc/dc/9e3907edeff5bdcdf130f8b46043", - "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/86/cf/640a60d55fa9af110489e9f7d654", - "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/77/12/80eb1c3d63fc6bf5327566645541", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b1/c8/2367fb54d758e69059bc0ab94f01", + "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/5a/23/07b33f5df4c620c596b1d926615b", + "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/50/aa/71ddcf1aee0398f60f582ec06a50", "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/3f/7d/b103ee4aa60c1713d8959fb37bdb", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/73/8e/afa74f2d49b74723aa64b478e103", - "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/1f/e1/cb24f26e1a1e48fc134e87857a12", - "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/bd/a1/2e854d38392de862f27690289276", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/84/92/4d157d6cca2ede298dc52fd8e6e0", - "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e5/f9/7d8c05b6e3d71a486953afe02d2e", - "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/a0/02/dbeec08c32a6532395a63f7ce7a3", - "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/36/d6/1ec4ee0bbb0697c886c19afc1464", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/5a/11/aa1d5f115d7f5a3c036d5a170e5e", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/33/19/4dfc1c0930f2e22cad9cbed245bb", - "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/55/06/790f0c625ff2bbc37ec45a192fb2", - "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/dd/a3/aaf84cba25bcc7920d46fdf6051a", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/2c/99/71c64f151f39d4758285863604f2", - "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/ae/1e/84924ade4179dd92122302be3813", - "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c0/e6/606201d69229c046ed9fb5c3338b", - "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/63/a9/9da6ca254d462675cdce8abdbf0b", - "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/61/45/eee74c4c33a9a76376b452a75689", - "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7a/74/60613067338c57246225eb95828d", - "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/57/03/10ed96783f925f635679fd54f52b", - "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ef/d3/3ce6784fb56347646d4e8c7479ec", - "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/39/25/8f3ffb98cb73cf0bdd974b98d947", - "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e5/be/fba3c5fbf804aed9e0fea8d9f7c1", - "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/de/1e/5016a6a654464001226d6d84c3dc", - "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/25/05/df2cc676d8bb4e715826984fcd5f", - "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/16/98/97ddbdaf3e1369e292d6cdf67dc2", - "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fa/a9/9ef499b38e4d899f7fd362f4b59e", - "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f9/35/d728d8ab9fe691366225c5a7e199", - "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/bf/ef/c48e4357202b00879e6848e81130", - "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a1/90/c69d9978cc8808612fde4bae8232", - "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/1c/4d/a1a2da08fd6e76aa051c301a5ab8", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/99/21/b71e35e4a679f8677ea00973a9e2", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/8f/1f/473567523fd49f1ffbff870422a9", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/15/52/5e13d441ffd25d1daa220dbde46e", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/0c/c8/a617edbe5d634364964ee956239f", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/c8/83/db874353ce5a53932abd8c4066e8", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/d8/47/b007731fa81a438ba3eff999bdca", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/1d/8c/795b3914ad039b5dad704199a7e4", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/89/a8/aa768714b1fd24649f08f7ef5905", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/cc/78/c6aa19160783008990a5634c21a0", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ab/34/fe2ced069d869793f6f5b430edd4", + "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c2/e1/0d49b8d193c7d21440ab617868e7", + "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/2c/08/eada9fa01448f697b09f18ce2c21", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/13/ec/754591c6f73f787462f3d9f6ae45", + "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/df/a4/37e89b60df2e05f0dc1570c46d64", + "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/03/a0/3e6f783984a75e06200d47d25440", + "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/b4/36/5f5cebd0829854f7136a84b6e225", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/db/42/2d072f3d0c11698f7d8921f24ede", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f3/b8/5fe74e125fc87d5bf61794ebb807", + "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/cb/1b/a39144509e66e23fed23bbf5406d", + "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/7b/56/ec8fdf4027b27880ff7c6d5ebd54", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/ee/c2/4860ea493f0fc8a8f8f3deb3df6d", + "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/af/11/58fd8c32ab413f93a2e1214d21c7", + "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/84/87/1f3aa0e529829ce9864171d9eef9", + "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d0/46/ee23308d315f098fa3f512936880", + "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d7/b4/bec563f7f6b755b44f45720a4be1", + "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a9/57/00f58913c9682e49b123e4acdec3", + "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ed/91/d32f9e483961e04864caf779192a", + "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ad/48/6e471f169e76089290c872893012", + "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/73/3f/9826454e5f78857b1ab23cd50772", + "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/21/7a/e063d50077123b480c648834b88f", + "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/62/94/03b217fc591160901dce11a894f2", + "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/de/f6/5ea9875cf1f6cf4aa289737cf35c", + "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/0d/64/e4e9dad71e85cdca5e7975d75dbf", + "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/18/69/0c94ab639a2db0be160b587d9bc0", + "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/13/3a/27fbb5c5875a189ab81acf2027a2", + "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c8/00/6cbfb32012f88c6fab179eb41a09", + "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6a/0b/fb82ed889b08e741a750cc406fff", + "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/02/93/5c4c75b89b3b3092c49907c3c1dd", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/b5/0e/f6a511e81aa197d0446620a2ac06", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/82/82/136d4e3f0b8bd97b3de991e5d6bb", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/c6/5c/a6de210112c28cd86e85297317f8", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/e3/df/f1c722f104a31d366a79bece7312", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/56/7a/3ff0fcf84f7fab86fee6ec1f25f1", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/dc/66/051d9473e188c68bf6b4f9decee8", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/08/c0/051746eaa9b594a61ffa19465f4a", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/cf/42/4fca8fb5d08724f0613250ab9495", "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/c5/18/29d9fe8e483ce222d3263336f7e6", "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/9d/7e/0a5125aa421e722c59d22b8beb19" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b2e0f97..98e0886d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,9 @@ -### 1.6.9 (20472, 2022-02-20) +### 1.6.9 (20477, 2022-02-21) - Upgraded Android Python to 3.9.10 - Fixed an issue with SSL in Android builds that was preventing communication with the master-server in 1.6.8 - Added a new network-diagnostics tool at 'Settings->Advanced->Network Testing'. Can be used to diagnose issues talking to master-servers/etc. (especially useful now that SSL can factor in) - Added clipboard support to Mac test build (thought pasting currently requires ctrl-v instead of cmd-v). +- Fixed an issue where non-ascii characters in device names could break network communication. ### 1.6.8 (20458, 2022-02-16) - Added Filipino language (Thanks David!) diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc index 258cb842..2185baea 100644 --- a/src/ballistica/ballistica.cc +++ b/src/ballistica/ballistica.cc @@ -21,7 +21,7 @@ namespace ballistica { // These are set automatically via script; don't modify them here. -const int kAppBuildNumber = 20472; +const int kAppBuildNumber = 20477; const char* kAppVersion = "1.6.9"; // Our standalone globals. diff --git a/src/ballistica/generic/utils.cc b/src/ballistica/generic/utils.cc index a82ac732..34a736dc 100644 --- a/src/ballistica/generic/utils.cc +++ b/src/ballistica/generic/utils.cc @@ -515,4 +515,12 @@ auto Utils::BaseName(const std::string& val) -> std::string { return lastvalid; } +auto Utils::StripNonAsciiFromUTF8(const std::string& str) -> std::string { + auto uni = UnicodeFromUTF8(str, "wGcwe87"); + uni.erase( + std::remove_if(uni.begin(), uni.end(), [](int i) { return i > 127; }), + uni.end()); + return UTF8FromUnicode(uni); +} + } // namespace ballistica diff --git a/src/ballistica/generic/utils.h b/src/ballistica/generic/utils.h index 58f5fcea..dfec54ca 100644 --- a/src/ballistica/generic/utils.h +++ b/src/ballistica/generic/utils.h @@ -40,6 +40,10 @@ class Utils { static auto GetRandomNameList() -> const std::list&; static void SetRandomNameList(const std::list& names); + /// Strip non-ascii chars from a utf-8 string (the full chars; not just + /// control characters). + static auto StripNonAsciiFromUTF8(const std::string& s) -> std::string; + static auto UnicodeFromUTF8(const std::string& s, const char* loc) -> std::vector; static auto UTF8FromUnicode(std::vector unichars) -> std::string; diff --git a/src/ballistica/input/input.cc b/src/ballistica/input/input.cc index 016efaf7..12f8007f 100644 --- a/src/ballistica/input/input.cc +++ b/src/ballistica/input/input.cc @@ -1219,9 +1219,6 @@ void Input::HandleKeyPress(const SDL_Keysym* keysym) { // Ctrl-V or Cmd-V sends paste commands to any interested text fields. // Command-Q or Control-Q quits. - if (!repeat_press && keysym->sym == SDLK_v) { - printf("PASTE?"); - } if (!repeat_press && keysym->sym == SDLK_v && ((keysym->mod & KMOD_CTRL) || (keysym->mod & KMOD_GUI))) { // NOLINT g_ui->SendWidgetMessage(WidgetMessage(WidgetMessage::Type::kPaste)); diff --git a/src/ballistica/platform/platform.cc b/src/ballistica/platform/platform.cc index d6092d51..6fba02cd 100644 --- a/src/ballistica/platform/platform.cc +++ b/src/ballistica/platform/platform.cc @@ -787,10 +787,7 @@ auto Platform::IsStdinATerminal() -> bool { auto Platform::GetOSVersionString() -> std::string { return ""; } auto Platform::GetUserAgentString() -> std::string { - // Fetch our device name here from main thread so it'll be safe - // to from other threads later (it gets cached as a string) std::string device = GetDeviceName(); - std::string version = GetOSVersionString(); if (!version.empty()) { version = " " + version; @@ -832,10 +829,17 @@ auto Platform::GetUserAgentString() -> std::string { if (IsRunningOnTV()) { subplatform += " OnTV"; } - return std::string("BallisticaCore ") + kAppVersion + subplatform + " (" - + std::to_string(kAppBuildNumber) + ") (" - + g_buildconfig.platform_string() + version + "; " + device + "; " - + GetLocale() + ")"; + + std::string out{std::string("BallisticaCore ") + kAppVersion + subplatform + + " (" + std::to_string(kAppBuildNumber) + ") (" + + g_buildconfig.platform_string() + version + "; " + device + + "; " + GetLocale() + ")"}; + + // This gets shipped to various places which might choke on fancy unicode + // characers, so let's limit to simple ascii. + out = Utils::StripNonAsciiFromUTF8(out); + + return out; } auto Platform::GetCWD() -> std::string { diff --git a/src/ballistica/platform/platform.h b/src/ballistica/platform/platform.h index 7f68738f..d7e02208 100644 --- a/src/ballistica/platform/platform.h +++ b/src/ballistica/platform/platform.h @@ -169,7 +169,7 @@ class Platform { // Return en_US or whatnot. virtual auto GetLocale() -> std::string; virtual void SetupDataDirectory(); - virtual auto GetUserAgentString() -> std::string; + auto GetUserAgentString() -> std::string; virtual auto GetOSVersionString() -> std::string; /// Set an environment variable as utf8, overwriting if it already exists. From b9a9594fdc953bf5a47fdb1b9f0bdf004ad4ac3a Mon Sep 17 00:00:00 2001 From: Eric Froemling Date: Mon, 21 Feb 2022 14:00:40 -0600 Subject: [PATCH 11/11] additional net diagnostics --- .efrocachemap | 84 +++--- .idea/dictionaries/ericf.xml | 3 + CHANGELOG.md | 2 +- assets/.asset_manifest_public.json | 4 - assets/Makefile | 4 - assets/src/ba_data/python/ba/_net.py | 3 + .../python/bastd/ui/settings/controls.py | 91 ------- .../python/bastd/ui/settings/nettesting.py | 5 + .../python/bastd/ui/settings/ps3controller.py | 107 -------- .../python/bastd/ui/settings/wiimote.py | 251 ------------------ .../.idea/dictionaries/ericf.xml | 3 + docs/ba_module.md | 2 +- src/ballistica/ballistica.cc | 2 +- src/ballistica/platform/platform.h | 2 +- 14 files changed, 60 insertions(+), 503 deletions(-) delete mode 100644 assets/src/ba_data/python/bastd/ui/settings/ps3controller.py delete mode 100644 assets/src/ba_data/python/bastd/ui/settings/wiimote.py diff --git a/.efrocachemap b/.efrocachemap index e6a54490..9dfcc088 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -3971,50 +3971,50 @@ "assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e", "assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/b2/e5/0ee0561e16257a32830645239f34", "ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a", - "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/be/a6/3f794efed8c208476f6303fa4946", + "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/58/fd/d72fbca459b185e8afbb06809ed6", "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b1/c8/2367fb54d758e69059bc0ab94f01", - "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/5a/23/07b33f5df4c620c596b1d926615b", - "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/50/aa/71ddcf1aee0398f60f582ec06a50", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/53/08/51bcc266af4f781b51f901f1035c", + "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/7c/5a/8073a7469267775f911146e5a63b", + "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/a4/0b/4b8d1d1860e07d6c310491737038", "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/cc/78/c6aa19160783008990a5634c21a0", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ab/34/fe2ced069d869793f6f5b430edd4", - "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c2/e1/0d49b8d193c7d21440ab617868e7", - "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/2c/08/eada9fa01448f697b09f18ce2c21", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/13/ec/754591c6f73f787462f3d9f6ae45", - "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/df/a4/37e89b60df2e05f0dc1570c46d64", - "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/03/a0/3e6f783984a75e06200d47d25440", - "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/b4/36/5f5cebd0829854f7136a84b6e225", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/db/42/2d072f3d0c11698f7d8921f24ede", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f3/b8/5fe74e125fc87d5bf61794ebb807", - "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/cb/1b/a39144509e66e23fed23bbf5406d", - "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/7b/56/ec8fdf4027b27880ff7c6d5ebd54", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/ee/c2/4860ea493f0fc8a8f8f3deb3df6d", - "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/af/11/58fd8c32ab413f93a2e1214d21c7", - "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/84/87/1f3aa0e529829ce9864171d9eef9", - "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d0/46/ee23308d315f098fa3f512936880", - "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d7/b4/bec563f7f6b755b44f45720a4be1", - "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a9/57/00f58913c9682e49b123e4acdec3", - "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ed/91/d32f9e483961e04864caf779192a", - "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ad/48/6e471f169e76089290c872893012", - "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/73/3f/9826454e5f78857b1ab23cd50772", - "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/21/7a/e063d50077123b480c648834b88f", - "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/62/94/03b217fc591160901dce11a894f2", - "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/de/f6/5ea9875cf1f6cf4aa289737cf35c", - "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/0d/64/e4e9dad71e85cdca5e7975d75dbf", - "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/18/69/0c94ab639a2db0be160b587d9bc0", - "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/13/3a/27fbb5c5875a189ab81acf2027a2", - "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c8/00/6cbfb32012f88c6fab179eb41a09", - "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6a/0b/fb82ed889b08e741a750cc406fff", - "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/02/93/5c4c75b89b3b3092c49907c3c1dd", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/b5/0e/f6a511e81aa197d0446620a2ac06", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/82/82/136d4e3f0b8bd97b3de991e5d6bb", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/c6/5c/a6de210112c28cd86e85297317f8", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/e3/df/f1c722f104a31d366a79bece7312", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/56/7a/3ff0fcf84f7fab86fee6ec1f25f1", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/dc/66/051d9473e188c68bf6b4f9decee8", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/08/c0/051746eaa9b594a61ffa19465f4a", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/cf/42/4fca8fb5d08724f0613250ab9495", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/0f/41/50fb52935e99d22064a846ba0228", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/96/d9/744aaf4cafdab3604c3ade120566", + "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/fd/da/d960a375186f00e31bfe525c4ddf", + "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/62/27/808783deef688eae80758fd366bb", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/08/13/8d736b50fc456c0f4bf28932cdba", + "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b2/7a/f146b4c46af2d879f9d2001f5549", + "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/de/5f/fc9a0bead56b3aebbe7ce5fe3e76", + "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/a0/f1/1ff103dd68124320676dd5bb55b5", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/60/e1/0a32c6a13ef0584f9fd05c63a14c", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ff/ac/69a19cd8529e3be4c41c6b9dc41b", + "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/0e/f9/e5c30b3c21cd0f56bf5c2273152b", + "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/f6/a3/ddeb4ac188dcd75180229af77c7e", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/80/32/eaa12833c0c1058e8de23ba61ef0", + "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/1a/7e/78c2ca66e9fe29c94e837846b833", + "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/05/31/c89531314b9ad630e191a5821a0c", + "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a6/4f/6ed44d4194bfe50d1fa634823b6d", + "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/4b/c7/948c131d58594bfc9358c76fc9cc", + "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/94/57/cd3580bf48aa736523a81bf132b9", + "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6b/80/d71d814dbb7fd2c7062524d74ac3", + "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f4/fa/7084c793e3a0de5ada3a4c5ef242", + "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/88/f9/076ea39266eaaf256f75bbed1af3", + "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/11/cc/7a587313f931221d486c0af4868b", + "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d4/75/16ff39f4507a3d7b5c063eccea2e", + "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/9a/50/1221d18faf9363305f5d8c370a0a", + "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a7/ea/840e778dc33042219f7c7068ef20", + "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/bc/ab/e803c965fa448e268afc49555ab7", + "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/44/24/cf847c839553d5ed959550581ac1", + "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/08/e0/90f957a27cba0a9aac1b5269cc95", + "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/0f/85/bee2da67697275c634cd88d5cf4d", + "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/08/0c/9396b12f9653cd7587f6daf5f58d", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/40/12/4f8ac59e0d505e26d672840ec894", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/11/25/0c493ecada2cd87fc84bf7877f3e", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/57/93/363cdc3317d902c9c1f92bd63696", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/6c/9f/2293738027a75bcd83f62ddd9810", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/28/1f/780afd766603475f611e6e6804d7", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/da/1c/a841b30ce31b3b41078948b24fe1", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/77/24/b769aadc90eb68c2183cdad3f719", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/64/22/c1e56da255ca05406a7c45cf22b5", "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/c5/18/29d9fe8e483ce222d3263336f7e6", "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/9d/7e/0a5125aa421e722c59d22b8beb19" } \ No newline at end of file diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml index 8c6095a7..f2e1cf3f 100644 --- a/.idea/dictionaries/ericf.xml +++ b/.idea/dictionaries/ericf.xml @@ -509,6 +509,7 @@ curstate curtime curtimestr + curv customdata customizebrowser cutscenes @@ -1178,6 +1179,7 @@ janktastic janky jascha + jcrc jdict jenkinsfile jexport @@ -2408,6 +2410,7 @@ timetype tipstext titletext + tlog tmpdir tmpf tmppath diff --git a/CHANGELOG.md b/CHANGELOG.md index 98e0886d..8e4864d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -### 1.6.9 (20477, 2022-02-21) +### 1.6.9 (20480, 2022-02-21) - Upgraded Android Python to 3.9.10 - Fixed an issue with SSL in Android builds that was preventing communication with the master-server in 1.6.8 - Added a new network-diagnostics tool at 'Settings->Advanced->Network Testing'. Can be used to diagnose issues talking to master-servers/etc. (especially useful now that SSL can factor in) diff --git a/assets/.asset_manifest_public.json b/assets/.asset_manifest_public.json index d2309e47..d66e526f 100644 --- a/assets/.asset_manifest_public.json +++ b/assets/.asset_manifest_public.json @@ -445,12 +445,10 @@ "ba_data/python/bastd/ui/settings/__pycache__/keyboard.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/settings/__pycache__/nettesting.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/settings/__pycache__/plugins.cpython-39.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/ps3controller.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/settings/__pycache__/remoteapp.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/settings/__pycache__/testing.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/settings/__pycache__/touchscreen.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/settings/__pycache__/vrtesting.cpython-39.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/wiimote.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/settings/__pycache__/xbox360controller.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/settings/advanced.py", "ba_data/python/bastd/ui/settings/allsettings.py", @@ -463,12 +461,10 @@ "ba_data/python/bastd/ui/settings/keyboard.py", "ba_data/python/bastd/ui/settings/nettesting.py", "ba_data/python/bastd/ui/settings/plugins.py", - "ba_data/python/bastd/ui/settings/ps3controller.py", "ba_data/python/bastd/ui/settings/remoteapp.py", "ba_data/python/bastd/ui/settings/testing.py", "ba_data/python/bastd/ui/settings/touchscreen.py", "ba_data/python/bastd/ui/settings/vrtesting.py", - "ba_data/python/bastd/ui/settings/wiimote.py", "ba_data/python/bastd/ui/settings/xbox360controller.py", "ba_data/python/bastd/ui/soundtrack/__init__.py", "ba_data/python/bastd/ui/soundtrack/__pycache__/__init__.cpython-39.opt-1.pyc", diff --git a/assets/Makefile b/assets/Makefile index ba284356..c9e3a463 100644 --- a/assets/Makefile +++ b/assets/Makefile @@ -351,12 +351,10 @@ SCRIPT_TARGETS_PY_PUBLIC = \ build/ba_data/python/bastd/ui/settings/keyboard.py \ build/ba_data/python/bastd/ui/settings/nettesting.py \ build/ba_data/python/bastd/ui/settings/plugins.py \ - build/ba_data/python/bastd/ui/settings/ps3controller.py \ build/ba_data/python/bastd/ui/settings/remoteapp.py \ build/ba_data/python/bastd/ui/settings/testing.py \ build/ba_data/python/bastd/ui/settings/touchscreen.py \ build/ba_data/python/bastd/ui/settings/vrtesting.py \ - build/ba_data/python/bastd/ui/settings/wiimote.py \ build/ba_data/python/bastd/ui/settings/xbox360controller.py \ build/ba_data/python/bastd/ui/soundtrack/__init__.py \ build/ba_data/python/bastd/ui/soundtrack/browser.py \ @@ -598,12 +596,10 @@ SCRIPT_TARGETS_PYC_PUBLIC = \ build/ba_data/python/bastd/ui/settings/__pycache__/keyboard.cpython-39.opt-1.pyc \ build/ba_data/python/bastd/ui/settings/__pycache__/nettesting.cpython-39.opt-1.pyc \ build/ba_data/python/bastd/ui/settings/__pycache__/plugins.cpython-39.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/ps3controller.cpython-39.opt-1.pyc \ build/ba_data/python/bastd/ui/settings/__pycache__/remoteapp.cpython-39.opt-1.pyc \ build/ba_data/python/bastd/ui/settings/__pycache__/testing.cpython-39.opt-1.pyc \ build/ba_data/python/bastd/ui/settings/__pycache__/touchscreen.cpython-39.opt-1.pyc \ build/ba_data/python/bastd/ui/settings/__pycache__/vrtesting.cpython-39.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/wiimote.cpython-39.opt-1.pyc \ build/ba_data/python/bastd/ui/settings/__pycache__/xbox360controller.cpython-39.opt-1.pyc \ build/ba_data/python/bastd/ui/soundtrack/__pycache__/__init__.cpython-39.opt-1.pyc \ build/ba_data/python/bastd/ui/soundtrack/__pycache__/browser.cpython-39.opt-1.pyc \ diff --git a/assets/src/ba_data/python/ba/_net.py b/assets/src/ba_data/python/ba/_net.py index d7d2885d..2a47e70d 100644 --- a/assets/src/ba_data/python/ba/_net.py +++ b/assets/src/ba_data/python/ba/_net.py @@ -30,6 +30,9 @@ class NetworkSubsystem: self.region_pings_lock = threading.Lock() self.region_pings: dict[str, float] = {} + # For debugging. + self.v1_test_log: str = '' + def get_ip_address_type(addr: str) -> socket.AddressFamily: """Return socket.AF_INET6 or socket.AF_INET4 for the provided address.""" diff --git a/assets/src/ba_data/python/bastd/ui/settings/controls.py b/assets/src/ba_data/python/bastd/ui/settings/controls.py index 81aa0715..3da6c7cd 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/controls.py +++ b/assets/src/ba_data/python/bastd/ui/settings/controls.py @@ -91,21 +91,6 @@ class ControlsSettingsWindow(ba.Window): else: show_remote = False - show_ps3 = False - # if platform == 'mac': - # show_ps3 = True - # height += spacing - - show360 = False - # if platform == 'mac' or is_fire_tv: - # show360 = True - # height += spacing - - show_mac_wiimote = False - # if platform == 'mac' and _ba.is_xcode_build(): - # show_mac_wiimote = True - # height += spacing - # On windows (outside of oculus/vr), show an option to disable xinput. show_xinput_toggle = False if platform == 'windows' and not app.vr_mode: @@ -152,9 +137,6 @@ class ControlsSettingsWindow(ba.Window): self._keyboard_button: Optional[ba.Widget] = None self._keyboard_2_button: Optional[ba.Widget] = None self._idevices_button: Optional[ba.Widget] = None - self._ps3_button: Optional[ba.Widget] = None - self._xbox_360_button: Optional[ba.Widget] = None - self._wiimotes_button: Optional[ba.Widget] = None ba.textwidget(parent=self._root_widget, position=(0, height - 49), @@ -261,42 +243,6 @@ class ControlsSettingsWindow(ba.Window): down_widget=self._idevices_button) self._have_selected_child = True v -= spacing - if show_ps3: - self._ps3_button = btn = ba.buttonwidget( - parent=self._root_widget, - position=((width - button_width) / 2 + 5, v), - size=(button_width, 43), - autoselect=True, - label=ba.Lstr(resource=self._r + '.ps3Text'), - on_activate_call=self._do_ps3_controllers) - if ba.app.ui.use_toolbars: - ba.widget(edit=btn, - right_widget=_ba.get_special_widget('party_button')) - v -= spacing - if show360: - self._xbox_360_button = btn = ba.buttonwidget( - parent=self._root_widget, - position=((width - button_width) / 2 - 1, v), - size=(button_width, 43), - autoselect=True, - label=ba.Lstr(resource=self._r + '.xbox360Text'), - on_activate_call=self._do_360_controllers) - if ba.app.ui.use_toolbars: - ba.widget(edit=btn, - right_widget=_ba.get_special_widget('party_button')) - v -= spacing - if show_mac_wiimote: - self._wiimotes_button = btn = ba.buttonwidget( - parent=self._root_widget, - position=((width - button_width) / 2 + 5, v), - size=(button_width, 43), - autoselect=True, - label=ba.Lstr(resource=self._r + '.wiimotesText'), - on_activate_call=self._do_wiimotes) - if ba.app.ui.use_toolbars: - ba.widget(edit=btn, - right_widget=_ba.get_special_widget('party_button')) - v -= spacing if show_xinput_toggle: @@ -397,31 +343,6 @@ class ControlsSettingsWindow(ba.Window): ba.app.ui.set_main_menu_window( RemoteAppSettingsWindow().get_root_widget()) - def _do_ps3_controllers(self) -> None: - # pylint: disable=cyclic-import - from bastd.ui.settings.ps3controller import PS3ControllerSettingsWindow - self._save_state() - ba.containerwidget(edit=self._root_widget, transition='out_left') - ba.app.ui.set_main_menu_window( - PS3ControllerSettingsWindow().get_root_widget()) - - def _do_360_controllers(self) -> None: - # pylint: disable=cyclic-import - from bastd.ui.settings.xbox360controller import ( - XBox360ControllerSettingsWindow) - self._save_state() - ba.containerwidget(edit=self._root_widget, transition='out_left') - ba.app.ui.set_main_menu_window( - XBox360ControllerSettingsWindow().get_root_widget()) - - def _do_wiimotes(self) -> None: - # pylint: disable=cyclic-import - from bastd.ui.settings.wiimote import WiimoteSettingsWindow - self._save_state() - ba.containerwidget(edit=self._root_widget, transition='out_left') - ba.app.ui.set_main_menu_window( - WiimoteSettingsWindow().get_root_widget()) - def _do_gamepads(self) -> None: # pylint: disable=cyclic-import from bastd.ui.settings.gamepadselect import GamepadSelectWindow @@ -449,12 +370,6 @@ class ControlsSettingsWindow(ba.Window): sel_name = 'Keyboard2' elif sel == self._idevices_button: sel_name = 'iDevices' - elif sel == self._ps3_button: - sel_name = 'PS3' - elif sel == self._xbox_360_button: - sel_name = 'xbox360' - elif sel == self._wiimotes_button: - sel_name = 'Wiimotes' else: sel_name = 'Back' ba.app.ui.window_states[type(self)] = sel_name @@ -471,12 +386,6 @@ class ControlsSettingsWindow(ba.Window): sel = self._keyboard_2_button elif sel_name == 'iDevices': sel = self._idevices_button - elif sel_name == 'PS3': - sel = self._ps3_button - elif sel_name == 'xbox360': - sel = self._xbox_360_button - elif sel_name == 'Wiimotes': - sel = self._wiimotes_button elif sel_name == 'Back': sel = self._back_button else: diff --git a/assets/src/ba_data/python/bastd/ui/settings/nettesting.py b/assets/src/ba_data/python/bastd/ui/settings/nettesting.py index f3d7281b..8a6d8088 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/nettesting.py +++ b/assets/src/ba_data/python/bastd/ui/settings/nettesting.py @@ -180,6 +180,11 @@ def _run_diagnostics(weakwin: weakref.ref[NetTestingWindow]) -> None: _print(f'\nContacting V1 alt master-server ({baseaddr})...') _print_test_results(lambda: _test_fetch(baseaddr)) + _print(f'\nV1-test-log: {ba.app.net.v1_test_log}') + + curv1addr = _ba.get_master_server_address(internal=True, version=1) + _print(f'\nCurrent V1 address: {curv1addr}') + _print('\nRunning V1 transaction...') _print_test_results(_test_v1_transaction) diff --git a/assets/src/ba_data/python/bastd/ui/settings/ps3controller.py b/assets/src/ba_data/python/bastd/ui/settings/ps3controller.py deleted file mode 100644 index 6d588da0..00000000 --- a/assets/src/ba_data/python/bastd/ui/settings/ps3controller.py +++ /dev/null @@ -1,107 +0,0 @@ -# Released under the MIT License. See LICENSE for details. -# -"""Settings UI related to PS3 controllers.""" - -from __future__ import annotations - -import _ba -import ba - - -class PS3ControllerSettingsWindow(ba.Window): - """UI showing info about using PS3 controllers.""" - - def __init__(self) -> None: - width = 760 - height = 330 if _ba.is_running_on_fire_tv() else 540 - spacing = 40 - self._r = 'ps3ControllersWindow' - uiscale = ba.app.ui.uiscale - super().__init__(root_widget=ba.containerwidget( - size=(width, height), - transition='in_right', - scale=(1.35 if uiscale is ba.UIScale.SMALL else - 1.3 if uiscale is ba.UIScale.MEDIUM else 1.0))) - - btn = ba.buttonwidget(parent=self._root_widget, - position=(37, height - 73), - size=(135, 65), - scale=0.85, - label=ba.Lstr(resource='backText'), - button_type='back', - autoselect=True, - on_activate_call=self._back) - ba.containerwidget(edit=self._root_widget, cancel_button=btn) - - ba.textwidget(parent=self._root_widget, - position=(width * 0.5, height - 46), - size=(0, 0), - maxwidth=410, - text=ba.Lstr(resource=self._r + '.titleText', - subs=[('${APP_NAME}', - ba.Lstr(resource='titleText'))]), - color=ba.app.ui.title_color, - h_align='center', - v_align='center') - - ba.buttonwidget(edit=btn, - button_type='backSmall', - size=(60, 60), - label=ba.charstr(ba.SpecialChar.BACK)) - - v = height - 90 - v -= spacing - - if _ba.is_running_on_fire_tv(): - ba.textwidget(parent=self._root_widget, - position=(width * 0.5, height * 0.45), - size=(0, 0), - color=(0.7, 0.9, 0.7, 1.0), - maxwidth=width * 0.95, - max_height=height * 0.8, - scale=1.0, - text=ba.Lstr(resource=self._r + - '.ouyaInstructionsText'), - h_align='center', - v_align='center') - else: - txts = ba.Lstr(resource=self._r + - '.macInstructionsText').evaluate().split('\n\n\n') - ba.textwidget(parent=self._root_widget, - position=(width * 0.5, v - 29), - size=(0, 0), - color=(0.7, 0.9, 0.7, 1.0), - maxwidth=width * 0.95, - max_height=170, - scale=1.0, - text=txts[0].strip(), - h_align='center', - v_align='center') - if txts: - ba.textwidget(parent=self._root_widget, - position=(width * 0.5, v - 280), - size=(0, 0), - color=(0.7, 0.9, 0.7, 1.0), - maxwidth=width * 0.95, - max_height=170, - scale=1.0, - text=txts[1].strip(), - h_align='center', - v_align='center') - - ba.buttonwidget(parent=self._root_widget, - position=(225, v - 176), - size=(300, 40), - label=ba.Lstr(resource=self._r + - '.pairingTutorialText'), - autoselect=True, - on_activate_call=ba.Call( - ba.open_url, 'http://www.youtube.com/watch' - '?v=IlR_HxeOQpI&feature=related')) - - def _back(self) -> None: - from bastd.ui.settings import controls - ba.containerwidget(edit=self._root_widget, transition='out_right') - ba.app.ui.set_main_menu_window( - controls.ControlsSettingsWindow( - transition='in_left').get_root_widget()) diff --git a/assets/src/ba_data/python/bastd/ui/settings/wiimote.py b/assets/src/ba_data/python/bastd/ui/settings/wiimote.py deleted file mode 100644 index 89dbadc7..00000000 --- a/assets/src/ba_data/python/bastd/ui/settings/wiimote.py +++ /dev/null @@ -1,251 +0,0 @@ -# Released under the MIT License. See LICENSE for details. -# -"""Settings UI functionality related to wiimote support.""" -from __future__ import annotations - -import _ba -import ba - - -class WiimoteSettingsWindow(ba.Window): - """Window for setting up Wiimotes.""" - - def __init__(self) -> None: - self._r = 'wiimoteSetupWindow' - width = 600 - height = 480 - spacing = 40 - super().__init__(root_widget=ba.containerwidget(size=(width, height), - transition='in_right')) - - btn = ba.buttonwidget(parent=self._root_widget, - position=(55, height - 50), - size=(120, 60), - scale=0.8, - autoselect=True, - label=ba.Lstr(resource='backText'), - button_type='back', - on_activate_call=self._back) - - ba.containerwidget(edit=self._root_widget, cancel_button=btn) - - ba.textwidget(parent=self._root_widget, - position=(width * 0.5, height - 28), - size=(0, 0), - text=ba.Lstr(resource=self._r + '.titleText'), - maxwidth=270, - color=ba.app.ui.title_color, - h_align='center', - v_align='center') - - ba.buttonwidget(edit=btn, - button_type='backSmall', - size=(60, 60), - label=ba.charstr(ba.SpecialChar.BACK)) - - v = height - 60.0 - v -= spacing - ba.textwidget(parent=self._root_widget, - position=(width * 0.5, v - 80), - size=(0, 0), - color=(0.7, 0.9, 0.7, 1.0), - scale=0.75, - text=ba.Lstr(resource=self._r + '.macInstructionsText'), - maxwidth=width * 0.95, - max_height=height * 0.5, - h_align='center', - v_align='center') - v -= 230 - button_width = 200 - v -= 30 - btn = ba.buttonwidget(parent=self._root_widget, - position=(width / 2 - button_width / 2, v + 1), - autoselect=True, - size=(button_width, 50), - label=ba.Lstr(resource=self._r + '.listenText'), - on_activate_call=WiimoteListenWindow) - ba.containerwidget(edit=self._root_widget, start_button=btn) - v -= spacing * 1.1 - ba.textwidget(parent=self._root_widget, - position=(width * 0.5, v), - size=(0, 0), - color=(0.7, 0.9, 0.7, 1.0), - scale=0.8, - maxwidth=width * 0.95, - text=ba.Lstr(resource=self._r + '.thanksText'), - h_align='center', - v_align='center') - v -= 30 - this_button_width = 200 - ba.buttonwidget(parent=self._root_widget, - position=(width / 2 - this_button_width / 2, v - 14), - color=(0.45, 0.4, 0.5), - autoselect=True, - size=(this_button_width, 15), - label=ba.Lstr(resource=self._r + '.copyrightText'), - textcolor=(0.55, 0.5, 0.6), - text_scale=0.6, - on_activate_call=WiimoteLicenseWindow) - - def _back(self) -> None: - from bastd.ui.settings import controls - ba.containerwidget(edit=self._root_widget, transition='out_right') - ba.app.ui.set_main_menu_window( - controls.ControlsSettingsWindow( - transition='in_left').get_root_widget()) - - -class WiimoteListenWindow(ba.Window): - """Window shown while listening for a wiimote connection.""" - - def __init__(self) -> None: - self._r = 'wiimoteListenWindow' - width = 650 - height = 210 - super().__init__(root_widget=ba.containerwidget(size=(width, height), - transition='in_right')) - btn = ba.buttonwidget(parent=self._root_widget, - position=(35, height - 60), - size=(140, 60), - autoselect=True, - label=ba.Lstr(resource='cancelText'), - scale=0.8, - on_activate_call=self._dismiss) - ba.containerwidget(edit=self._root_widget, cancel_button=btn) - _ba.start_listening_for_wii_remotes() - self._wiimote_connect_counter = 15 - ba.app.ui.dismiss_wii_remotes_window_call = ba.WeakCall(self._dismiss) - ba.textwidget(parent=self._root_widget, - position=(15, height - 55), - size=(width - 30, 30), - text=ba.Lstr(resource=self._r + '.listeningText'), - color=ba.app.ui.title_color, - maxwidth=320, - h_align='center', - v_align='center') - ba.textwidget(parent=self._root_widget, - position=(15, height - 110), - size=(width - 30, 30), - scale=1.0, - text=ba.Lstr(resource=self._r + '.pressText'), - maxwidth=width * 0.9, - color=(0.7, 0.9, 0.7, 1.0), - h_align='center', - v_align='center') - ba.textwidget(parent=self._root_widget, - position=(15, height - 140), - size=(width - 30, 30), - color=(0.7, 0.9, 0.7, 1.0), - scale=0.55, - text=ba.Lstr(resource=self._r + '.pressText2'), - maxwidth=width * 0.95, - h_align='center', - v_align='center') - self._counter_text = ba.textwidget(parent=self._root_widget, - position=(15, 23), - size=(width - 30, 30), - scale=1.2, - text='15', - h_align='center', - v_align='top') - for i in range(1, 15): - ba.timer(1.0 * i, - ba.WeakCall(self._decrement), - timetype=ba.TimeType.REAL) - ba.timer(15.0, ba.WeakCall(self._dismiss), timetype=ba.TimeType.REAL) - - def _decrement(self) -> None: - self._wiimote_connect_counter -= 1 - ba.textwidget(edit=self._counter_text, - text=str(self._wiimote_connect_counter)) - - def _dismiss(self) -> None: - ba.containerwidget(edit=self._root_widget, transition='out_left') - _ba.stop_listening_for_wii_remotes() - - -class WiimoteLicenseWindow(ba.Window): - """Window displaying the Darwiinremote software license.""" - - def __init__(self) -> None: - self._r = 'wiimoteLicenseWindow' - width = 750 - height = 550 - super().__init__(root_widget=ba.containerwidget(size=(width, height), - transition='in_right')) - btn = ba.buttonwidget(parent=self._root_widget, - position=(65, height - 50), - size=(120, 60), - scale=0.8, - autoselect=True, - label=ba.Lstr(resource='backText'), - button_type='back', - on_activate_call=self._close) - ba.containerwidget(edit=self._root_widget, cancel_button=btn) - ba.textwidget(parent=self._root_widget, - position=(0, height - 48), - size=(width, 30), - text=ba.Lstr(resource=self._r + '.titleText'), - h_align='center', - color=ba.app.ui.title_color, - v_align='center') - license_text = ( - 'Copyright (c) 2007, DarwiinRemote Team\n' - 'All rights reserved.\n' - '\n' - ' Redistribution and use in source and binary forms, with or ' - 'without modification,\n' - ' are permitted provided that' - ' the following conditions are met:\n' - '\n' - '1. Redistributions of source code must retain the above copyright' - ' notice, this\n' - ' list of conditions and the following disclaimer.\n' - '2. Redistributions in binary form must reproduce the above' - ' copyright notice, this\n' - ' list of conditions and the following disclaimer in the' - ' documentation and/or other\n' - ' materials provided with the distribution.\n' - '3. Neither the name of this project nor the names of its' - ' contributors may be used to\n' - ' endorse or promote products derived from this software' - ' without specific prior\n' - ' written permission.\n' - '\n' - 'THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND' - ' CONTRIBUTORS "AS IS"\n' - 'AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT' - ' LIMITED TO, THE\n' - 'IMPLIED WARRANTIES OF MERCHANTABILITY' - ' AND FITNESS FOR A PARTICULAR' - ' PURPOSE\n' - 'ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR' - ' CONTRIBUTORS BE\n' - 'LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,' - ' OR\n' - 'CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT' - ' OF\n' - ' SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;' - ' OR BUSINESS\n' - 'INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,' - ' WHETHER IN\n' - 'CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR' - ' OTHERWISE)\n' - 'ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF' - ' ADVISED OF THE\n' - 'POSSIBILITY OF SUCH DAMAGE.\n') - license_text_scale = 0.62 - ba.textwidget(parent=self._root_widget, - position=(100, height * 0.45), - size=(0, 0), - h_align='left', - v_align='center', - padding=4, - color=(0.7, 0.9, 0.7, 1.0), - scale=license_text_scale, - maxwidth=width * 0.9 - 100, - max_height=height * 0.85, - text=license_text) - - def _close(self) -> None: - ba.containerwidget(edit=self._root_widget, transition='out_right') diff --git a/ballisticacore-cmake/.idea/dictionaries/ericf.xml b/ballisticacore-cmake/.idea/dictionaries/ericf.xml index cf4cbd5a..3c7dd4c3 100644 --- a/ballisticacore-cmake/.idea/dictionaries/ericf.xml +++ b/ballisticacore-cmake/.idea/dictionaries/ericf.xml @@ -248,6 +248,7 @@ ctracker cubemap curtime + curv cutef cvar data @@ -579,6 +580,7 @@ janky jaxis jcjwf + jcrc jdict jfwe jmessage @@ -1146,6 +1148,7 @@ timesteps timetype timetypes + tlog tmpmat tomer topos diff --git a/docs/ba_module.md b/docs/ba_module.md index 9a6e481b..472e23ab 100644 --- a/docs/ba_module.md +++ b/docs/ba_module.md @@ -1,5 +1,5 @@ -

last updated for Ballistica version 1.6.8 build 20454

+

last updated for Ballistica version 1.6.9 build 20480

This page documents the Python classes and functions in the 'ba' module, which are the ones most relevant to modding in Ballistica. If you come across something you feel should be included here or could be better explained, please let me know. Happy modding!


diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc index 2185baea..fa30ef1d 100644 --- a/src/ballistica/ballistica.cc +++ b/src/ballistica/ballistica.cc @@ -21,7 +21,7 @@ namespace ballistica { // These are set automatically via script; don't modify them here. -const int kAppBuildNumber = 20477; +const int kAppBuildNumber = 20480; const char* kAppVersion = "1.6.9"; // Our standalone globals. diff --git a/src/ballistica/platform/platform.h b/src/ballistica/platform/platform.h index d7e02208..7f68738f 100644 --- a/src/ballistica/platform/platform.h +++ b/src/ballistica/platform/platform.h @@ -169,7 +169,7 @@ class Platform { // Return en_US or whatnot. virtual auto GetLocale() -> std::string; virtual void SetupDataDirectory(); - auto GetUserAgentString() -> std::string; + virtual auto GetUserAgentString() -> std::string; virtual auto GetOSVersionString() -> std::string; /// Set an environment variable as utf8, overwriting if it already exists.