language updates and 1.7 prep work

This commit is contained in:
Eric Froemling 2022-02-01 19:16:33 -06:00
parent 4d31d59467
commit d16b569052
No known key found for this signature in database
GPG Key ID: 89C93F0F8D6D5A98
21 changed files with 736 additions and 590 deletions

File diff suppressed because it is too large Load Diff

View File

@ -868,6 +868,7 @@
<w>fstab</w>
<w>fstat</w>
<w>fstrs</w>
<w>fsum</w>
<w>ftime</w>
<w>ftmp</w>
<w>ftplib</w>
@ -935,6 +936,7 @@
<w>getcwd</w>
<w>getdata</w>
<w>gethostbyname</w>
<w>getifaddr</w>
<w>getinputdevice</w>
<w>getkillerplayer</w>
<w>getlevel</w>
@ -1018,6 +1020,7 @@
<w>hattach</w>
<w>hcalc</w>
<w>hcfg</w>
<w>hdiutil</w>
<w>hdpi</w>
<w>headercheckline</w>
<w>headerregistry</w>
@ -1308,6 +1311,7 @@
<w>locktype</w>
<w>locs</w>
<w>logcat</w>
<w>logincode</w>
<w>logintoken</w>
<w>logitech</w>
<w>logput</w>
@ -1338,6 +1342,7 @@
<w>macbuild</w>
<w>macmusicapp</w>
<w>macos</w>
<w>macpackage</w>
<w>macpath</w>
<w>mailcap</w>
<w>mainmenu</w>
@ -1365,6 +1370,7 @@
<w>masktexstorename</w>
<w>masterhash</w>
<w>masterver</w>
<w>mastervers</w>
<w>mathmodule</w>
<w>mathnode</w>
<w>mathutils</w>
@ -1546,7 +1552,10 @@
<w>nosyncfiles</w>
<w>nosynctool</w>
<w>nosynctools</w>
<w>notarytool</w>
<w>notdir</w>
<w>notorize</w>
<w>notorized</w>
<w>nowtickets</w>
<w>npos</w>
<w>nprocessors</w>
@ -1843,6 +1852,7 @@
<w>pvval</w>
<w>pybee</w>
<w>pybuild</w>
<w>pybuildapple</w>
<w>pycache</w>
<w>pycharm's</w>
<w>pycharmbin</w>
@ -1888,6 +1898,7 @@
<w>pyver</w>
<w>qrcode</w>
<w>qrencode</w>
<w>qroffs</w>
<w>qual</w>
<w>qualname</w>
<w>quoprimime</w>
@ -2083,6 +2094,7 @@
<w>sharedctypes</w>
<w>sharedobj</w>
<w>sharedobjs</w>
<w>shasum</w>
<w>shellapi</w>
<w>shiftdelay</w>
<w>shiftposition</w>
@ -2160,6 +2172,7 @@
<w>srcattr</w>
<w>srcdata</w>
<w>srcdir</w>
<w>srcfolder</w>
<w>srcjson</w>
<w>srcnode</w>
<w>srcpath</w>
@ -2440,6 +2453,8 @@
<w>uadfc</w>
<w>uber</w>
<w>ucrtbased</w>
<w>udbz</w>
<w>udif</w>
<w>ugrade</w>
<w>uibounds</w>
<w>uicleanup</w>
@ -2602,6 +2617,7 @@
<w>xcodebuild</w>
<w>xcpretty</w>
<w>xcprojpath</w>
<w>xcrun</w>
<w>xcscheme</w>
<w>xcsettings</w>
<w>xcworkspacedata</w>

View File

@ -1,5 +1,9 @@
### 1.6.7 (20394)
### 1.6.7 (20435)
- 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
### 1.6.6 (20394)
- Beginning work on moving to new asset system.

View File

@ -897,8 +897,8 @@ clion-staging: assets-cmake resources meta
# if using this on other platforms.
CPUS = $(shell getconf _NPROCESSORS_ONLN || echo 8)
PROJ_DIR = ${abspath ${CURDIR}}
VERSION = $(shell tools/pcommand version_utils version)
BUILD_NUMBER = $(shell tools/pcommand version_utils build)
VERSION = $(shell tools/pcommand version version)
BUILD_NUMBER = $(shell tools/pcommand version build)
BUILD_DIR = ${PROJ_DIR}/build
LAZYBUILDDIR = .cache/lazybuild
STAGE_ASSETS = ${PROJ_DIR}/tools/pcommand stage_assets

View File

@ -340,10 +340,12 @@
"ba_data/python/bastd/ui/account/__pycache__/link.cpython-39.opt-1.pyc",
"ba_data/python/bastd/ui/account/__pycache__/settings.cpython-39.opt-1.pyc",
"ba_data/python/bastd/ui/account/__pycache__/unlink.cpython-39.opt-1.pyc",
"ba_data/python/bastd/ui/account/__pycache__/v2.cpython-39.opt-1.pyc",
"ba_data/python/bastd/ui/account/__pycache__/viewer.cpython-39.opt-1.pyc",
"ba_data/python/bastd/ui/account/link.py",
"ba_data/python/bastd/ui/account/settings.py",
"ba_data/python/bastd/ui/account/unlink.py",
"ba_data/python/bastd/ui/account/v2.py",
"ba_data/python/bastd/ui/account/viewer.py",
"ba_data/python/bastd/ui/achievements.py",
"ba_data/python/bastd/ui/appinvite.py",

View File

@ -279,6 +279,7 @@ SCRIPT_TARGETS_PY_PUBLIC = \
build/ba_data/python/bastd/ui/account/link.py \
build/ba_data/python/bastd/ui/account/settings.py \
build/ba_data/python/bastd/ui/account/unlink.py \
build/ba_data/python/bastd/ui/account/v2.py \
build/ba_data/python/bastd/ui/account/viewer.py \
build/ba_data/python/bastd/ui/achievements.py \
build/ba_data/python/bastd/ui/appinvite.py \
@ -525,6 +526,7 @@ SCRIPT_TARGETS_PYC_PUBLIC = \
build/ba_data/python/bastd/ui/account/__pycache__/link.cpython-39.opt-1.pyc \
build/ba_data/python/bastd/ui/account/__pycache__/settings.cpython-39.opt-1.pyc \
build/ba_data/python/bastd/ui/account/__pycache__/unlink.cpython-39.opt-1.pyc \
build/ba_data/python/bastd/ui/account/__pycache__/v2.cpython-39.opt-1.pyc \
build/ba_data/python/bastd/ui/account/__pycache__/viewer.cpython-39.opt-1.pyc \
build/ba_data/python/bastd/ui/__pycache__/achievements.cpython-39.opt-1.pyc \
build/ba_data/python/bastd/ui/__pycache__/appinvite.cpython-39.opt-1.pyc \

View File

@ -2170,8 +2170,11 @@ def get_low_level_config_value(key: str, default_value: int) -> int:
return int()
def get_master_server_address(source: int = -1, version: int = 1) -> str:
"""get_master_server_address(source: int = -1, version: int = 1) -> str
def get_master_server_address(source: int = -1,
version: int = 1,
internal: bool = False) -> str:
"""get_master_server_address(source: int = -1, version: int = 1,
internal: bool = False) -> str
(internal)
@ -2392,6 +2395,14 @@ def get_ui_input_device() -> ba.InputDevice:
return ba.InputDevice()
def get_v2_fleet() -> str:
"""get_v2_fleet() -> str
(internal)
"""
return str()
# Show that our return type varies based on "doraise" value:
@overload
def getactivity(doraise: Literal[True] = True) -> ba.Activity:

View File

@ -348,7 +348,7 @@ class App:
# Debugging - make note if we're using the local test server so we
# don't accidentally leave it on in a release.
# FIXME - should move this to the native layer.
# FIXME - should move these sort of warnings to the C++ layer.
server_addr = _ba.get_master_server_address()
if 'localhost' in server_addr:
_ba.timer(2.0,
@ -391,6 +391,8 @@ class App:
# from ba._dependency import test_depset
# test_depset()
if bool(False):
self._test_https()
def on_app_pause(self) -> None:
"""Called when the app goes to a suspended state."""
@ -584,6 +586,8 @@ class App:
try:
with urllib.request.urlopen('https://example.com') as url:
val = url.read()
_ba.screenmessage('HTTPS SUCCESS!')
print('HTTPS TEST SUCCESS', len(val))
except Exception as exc:
_ba.screenmessage('HTTPS FAIL.')
print('HTTPS TEST FAIL:', exc)

View File

@ -364,7 +364,8 @@ class CoopSession(Session):
raise RuntimeError('FIXME')
else:
if results.scoretype is not ScoreType.POINTS:
print(f'Unknown ScoreType:' f' "{results.scoretype}"')
print(f'Unknown ScoreType:'
f' "{results.scoretype}"')
scoretype = 'points'
# Old coop-game-specific results; should migrate away from these.

View File

@ -111,14 +111,15 @@ class MasterServerCallThread(threading.Thread):
if self._request_type == 'get':
response = urllib.request.urlopen(
urllib.request.Request(
(_ba.get_master_server_address() + '/' +
(_ba.get_master_server_address(internal=True) + '/' +
self._request + '?' + parse.urlencode(self._data)),
None, {'User-Agent': _ba.app.user_agent_string}),
timeout=DEFAULT_REQUEST_TIMEOUT_SECONDS)
elif self._request_type == 'post':
response = urllib.request.urlopen(
urllib.request.Request(
_ba.get_master_server_address() + '/' + self._request,
_ba.get_master_server_address(internal=True) + '/' +
self._request,
parse.urlencode(self._data).encode(),
{'User-Agent': _ba.app.user_agent_string}),
timeout=DEFAULT_REQUEST_TIMEOUT_SECONDS)

View File

@ -10,17 +10,17 @@ import ba
def show_sign_in_prompt(account_type: str = None) -> None:
"""Bring up a prompt telling the user they must sign in."""
from bastd.ui import confirm
from bastd.ui.confirm import ConfirmWindow
from bastd.ui.account import settings
if account_type == 'Google Play':
confirm.ConfirmWindow(
ConfirmWindow(
ba.Lstr(resource='notSignedInGooglePlayErrorText'),
lambda: _ba.sign_in('Google Play'),
ok_text=ba.Lstr(resource='accountSettingsWindow.signInText'),
width=460,
height=130)
else:
confirm.ConfirmWindow(
ConfirmWindow(
ba.Lstr(resource='notSignedInErrorText'),
lambda: settings.AccountSettingsWindow(modal=True,
close_once_signed_in=True),

View File

@ -25,6 +25,10 @@ class AccountSettingsWindow(ba.Window):
close_once_signed_in: bool = False):
# pylint: disable=too-many-statements
self._sign_in_game_circle_button: Optional[ba.Widget] = None
self._sign_in_v2_button: Optional[ba.Widget] = None
self._sign_in_device_button: Optional[ba.Widget] = None
self._close_once_signed_in = close_once_signed_in
ba.set_analytics_screen('Account Window')
@ -86,6 +90,10 @@ class AccountSettingsWindow(ba.Window):
# exceptions.
self._show_sign_in_buttons.append('Local')
# Ditto with shiny new V2 ones.
if bool(False):
self._show_sign_in_buttons.append('V2')
top_extra = 15 if uiscale is ba.UIScale.SMALL else 0
super().__init__(root_widget=ba.containerwidget(
size=(self._width, self._height + top_extra),
@ -206,12 +214,10 @@ class AccountSettingsWindow(ba.Window):
show_game_circle_sign_in_button = (account_state == 'signed_out'
and 'Game Circle'
in self._show_sign_in_buttons)
show_ali_sign_in_button = (account_state == 'signed_out'
and 'Ali' in self._show_sign_in_buttons)
show_test_sign_in_button = (account_state == 'signed_out'
and 'Test' in self._show_sign_in_buttons)
show_device_sign_in_button = (account_state == 'signed_out' and 'Local'
in self._show_sign_in_buttons)
show_v2_sign_in_button = (account_state == 'signed_out'
and 'V2' in self._show_sign_in_buttons)
sign_in_button_space = 70.0
show_game_service_button = (self._signed_in and account_type
@ -223,9 +229,9 @@ class AccountSettingsWindow(ba.Window):
'allowAccountLinking2', False))
linked_accounts_text_space = 60.0
show_achievements_button = (self._signed_in and account_type
in ('Google Play', 'Alibaba', 'Local',
'OUYA', 'Test'))
show_achievements_button = (
self._signed_in
and account_type in ('Google Play', 'Alibaba', 'Local', 'OUYA'))
achievements_button_space = 60.0
show_achievements_text = (self._signed_in
@ -255,8 +261,8 @@ class AccountSettingsWindow(ba.Window):
show_unlink_accounts_button = show_link_accounts_button
unlink_accounts_button_space = 90.0
show_sign_out_button = (self._signed_in and account_type
in ['Test', 'Local', 'Google Play'])
show_sign_out_button = (self._signed_in
and account_type in ['Local', 'Google Play'])
sign_out_button_space = 70.0
if self._subcontainer is not None:
@ -272,12 +278,10 @@ class AccountSettingsWindow(ba.Window):
self._sub_height += sign_in_button_space
if show_game_circle_sign_in_button:
self._sub_height += sign_in_button_space
if show_ali_sign_in_button:
self._sub_height += sign_in_button_space
if show_test_sign_in_button:
self._sub_height += sign_in_button_space
if show_device_sign_in_button:
self._sub_height += sign_in_button_space
if show_v2_sign_in_button:
self._sub_height += sign_in_button_space
if show_game_service_button:
self._sub_height += game_service_button_space
if show_linked_accounts_text:
@ -462,21 +466,42 @@ class AccountSettingsWindow(ba.Window):
ba.widget(edit=btn, show_buffer_bottom=40, show_buffer_top=100)
self._sign_in_text = None
if show_ali_sign_in_button:
if show_v2_sign_in_button:
button_width = 350
v -= sign_in_button_space
self._sign_in_ali_button = btn = ba.buttonwidget(
self._sign_in_v2_button = btn = ba.buttonwidget(
parent=self._subcontainer,
position=((self._sub_width - button_width) * 0.5, v - 20),
autoselect=True,
size=(button_width, 60),
label=ba.Lstr(value='${A}${B}',
subs=[('${A}',
ba.charstr(ba.SpecialChar.ALIBABA_LOGO)),
('${B}',
ba.Lstr(resource=self._r + '.signInText'))
]),
on_activate_call=lambda: self._sign_in_press('Ali'))
label='',
on_activate_call=self._v2_sign_in_press)
ba.textwidget(
parent=self._subcontainer,
draw_controller=btn,
h_align='center',
v_align='center',
size=(0, 0),
position=(self._sub_width * 0.5, v + 17),
text=ba.Lstr(
value='${A}${B}',
subs=[('${A}', ba.charstr(ba.SpecialChar.V2_LOGO)),
('${B}',
ba.Lstr(resource=self._r + '.signInWithV2Text'))]),
maxwidth=button_width * 0.8,
color=(0.75, 1.0, 0.7))
ba.textwidget(parent=self._subcontainer,
draw_controller=btn,
h_align='center',
v_align='center',
size=(0, 0),
position=(self._sub_width * 0.5, v - 4),
text=ba.Lstr(resource=self._r +
'.signInWithV2InfoText'),
flatness=1.0,
scale=0.57,
maxwidth=button_width * 0.9,
color=(0.55, 0.8, 0.5))
if first_selectable is None:
first_selectable = btn
if ba.app.ui.use_toolbars:
@ -532,53 +557,6 @@ class AccountSettingsWindow(ba.Window):
ba.widget(edit=btn, show_buffer_bottom=40, show_buffer_top=100)
self._sign_in_text = None
# Old test-account option.
if show_test_sign_in_button:
button_width = 350
v -= sign_in_button_space
self._sign_in_test_button = btn = ba.buttonwidget(
parent=self._subcontainer,
position=((self._sub_width - button_width) * 0.5, v - 20),
autoselect=True,
size=(button_width, 60),
label='',
on_activate_call=lambda: self._sign_in_press('Test'))
ba.textwidget(parent=self._subcontainer,
draw_controller=btn,
h_align='center',
v_align='center',
size=(0, 0),
position=(self._sub_width * 0.5, v + 17),
text=ba.Lstr(
value='${A}${B}',
subs=[('${A}',
ba.charstr(ba.SpecialChar.TEST_ACCOUNT)),
('${B}',
ba.Lstr(resource=self._r +
'.signInWithTestAccountText'))]),
maxwidth=button_width * 0.8,
color=(0.75, 1.0, 0.7))
ba.textwidget(parent=self._subcontainer,
draw_controller=btn,
h_align='center',
v_align='center',
size=(0, 0),
position=(self._sub_width * 0.5, v - 4),
text=ba.Lstr(resource=self._r +
'.signInWithTestAccountInfoText'),
flatness=1.0,
scale=0.57,
maxwidth=button_width * 0.9,
color=(0.55, 0.8, 0.5))
if first_selectable is None:
first_selectable = btn
if ba.app.ui.use_toolbars:
ba.widget(edit=btn,
right_widget=_ba.get_special_widget('party_button'))
ba.widget(edit=btn, left_widget=bbtn)
ba.widget(edit=btn, show_buffer_bottom=40, show_buffer_top=100)
self._sign_in_text = None
if show_player_profiles_button:
button_width = 300
v -= player_profiles_button_space
@ -1051,6 +1029,12 @@ class AccountSettingsWindow(ba.Window):
self._needs_refresh = True
ba.timer(0.1, ba.WeakCall(self._update), timetype=ba.TimeType.REAL)
def _v2_sign_in_press(self) -> None:
# pylint: disable=cyclic-import
from bastd.ui.account.v2 import V2SignInWindow
assert self._sign_in_v2_button is not None
V2SignInWindow(origin_widget=self._sign_in_v2_button)
def _reset_progress(self) -> None:
try:
from ba.internal import getcampaign

View File

@ -0,0 +1,92 @@
# Released under the MIT License. See LICENSE for details.
#
"""V2 account ui bits."""
from __future__ import annotations
from typing import TYPE_CHECKING
import ba
import _ba
if TYPE_CHECKING:
from typing import Any, Optional
class V2SignInWindow(ba.Window):
"""A window allowing signing in to a v2 account."""
def __init__(self, origin_widget: ba.Widget):
from ba.internal import is_browser_likely_available
logincode = '1412345'
address = (
f'{_ba.get_master_server_address(version=2)}?login={logincode}')
self._width = 600
self._height = 500
uiscale = ba.app.ui.uiscale
super().__init__(root_widget=ba.containerwidget(
size=(self._width, self._height),
transition='in_scale',
scale_origin_stack_offset=origin_widget.get_screen_space_center(),
scale=(1.25 if uiscale is ba.UIScale.SMALL else
1.0 if uiscale is ba.UIScale.MEDIUM else 0.85)))
ba.textwidget(
parent=self._root_widget,
position=(self._width * 0.5, self._height - 85),
size=(0, 0),
text=ba.Lstr(
resource='accountSettingsWindow.v2LinkInstructionsText'),
color=ba.app.ui.title_color,
maxwidth=self._width * 0.9,
h_align='center',
v_align='center')
button_width = 450
if is_browser_likely_available():
ba.buttonwidget(parent=self._root_widget,
position=((self._width * 0.5 - button_width * 0.5),
self._height - 175),
autoselect=True,
size=(button_width, 60),
label=ba.Lstr(value=address),
color=(0.55, 0.5, 0.6),
textcolor=(0.75, 0.7, 0.8),
on_activate_call=lambda: ba.open_url(address))
qroffs = 0.0
else:
ba.textwidget(parent=self._root_widget,
position=(self._width * 0.5, self._height - 135),
size=(0, 0),
text=ba.Lstr(value=address),
flatness=1.0,
maxwidth=self._width,
scale=0.75,
h_align='center',
v_align='center')
qroffs = 20.0
self._cancel_button = ba.buttonwidget(
parent=self._root_widget,
position=(30, self._height - 55),
size=(130, 50),
scale=0.8,
label=ba.Lstr(resource='cancelText'),
# color=(0.6, 0.5, 0.6),
on_activate_call=self._done,
autoselect=True,
textcolor=(0.75, 0.7, 0.8),
# icon=ba.gettexture('crossOut'),
# iconscale=1.2
)
ba.containerwidget(edit=self._root_widget,
cancel_button=self._cancel_button)
qr_size = 270
ba.imagewidget(parent=self._root_widget,
position=(self._width * 0.5 - qr_size * 0.5,
self._height * 0.34 + qroffs - qr_size * 0.5),
size=(qr_size, qr_size),
texture=_ba.get_qrcode_texture(address))
def _done(self) -> None:
ba.containerwidget(edit=self._root_widget, transition='out_scale')

View File

@ -409,6 +409,7 @@
<w>fromini</w>
<w>frompos</w>
<w>frontmost</w>
<w>fsum</w>
<w>ftos</w>
<w>ftou</w>
<w>fullpath</w>
@ -437,6 +438,7 @@
<w>getcollidemodel</w>
<w>getdata</w>
<w>gethostbyname</w>
<w>getifaddr</w>
<w>getifaddrs</w>
<w>getinputdevice</w>
<w>getline</w>
@ -482,6 +484,7 @@
<w>haveint</w>
<w>havn't</w>
<w>havnt</w>
<w>hdiutil</w>
<w>healthcare</w>
<w>hexval</w>
<w>highp</w>
@ -599,6 +602,7 @@
<w>lockpath</w>
<w>lockstr</w>
<w>locktype</w>
<w>logincode</w>
<w>logmsg</w>
<w>logpath</w>
<w>logprefix</w>
@ -627,6 +631,7 @@
<w>macmusicappsetvolume</w>
<w>macmusicappstop</w>
<w>macos</w>
<w>macpackage</w>
<w>magoogan</w>
<w>magua</w>
<w>mainmenu</w>
@ -639,6 +644,7 @@
<w>maskhigh</w>
<w>maskuv</w>
<w>masterver</w>
<w>mastervers</w>
<w>maximus</w>
<w>maxtries</w>
<w>maxwidth</w>
@ -728,7 +734,10 @@
<w>noninteractively</w>
<w>nonlint</w>
<w>noone</w>
<w>notarytool</w>
<w>nothin</w>
<w>notorize</w>
<w>notorized</w>
<w>nowtickets</w>
<w>nptr</w>
<w>nsize</w>
@ -868,6 +877,7 @@
<w>pver</w>
<w>pverraw</w>
<w>pvrtc</w>
<w>pybuildapple</w>
<w>pycommand</w>
<w>pyconfig</w>
<w>pycontext</w>
@ -883,6 +893,7 @@
<w>qrel</w>
<w>qrencode</w>
<w>qrinput</w>
<w>qroffs</w>
<w>qrspec</w>
<w>quadtreespace</w>
<w>qual</w>
@ -990,6 +1001,7 @@
<w>setsockopt</w>
<w>sgis</w>
<w>sharedobj</w>
<w>shasum</w>
<w>shhh</w>
<w>shifthigh</w>
<w>shouldnt</w>
@ -1017,6 +1029,7 @@
<w>spinup</w>
<w>spivak</w>
<w>srcattr</w>
<w>srcfolder</w>
<w>srcpath</w>
<w>srcsz</w>
<w>sresult</w>
@ -1138,6 +1151,8 @@
<w>typestr</w>
<w>tzpath</w>
<w>uber</w>
<w>udbz</w>
<w>udif</w>
<w>uibounds</w>
<w>uiid</w>
<w>unblessed</w>
@ -1221,6 +1236,7 @@
<w>wunused</w>
<w>wvmpth</w>
<w>xclamped</w>
<w>xcrun</w>
<w>xdiff</w>
<w>xdist</w>
<w>xinput</w>

View File

@ -1,5 +1,5 @@
<!-- THIS FILE IS AUTO GENERATED; DO NOT EDIT BY HAND -->
<h4><em>last updated on 2022-01-25 for Ballistica version 1.6.7 build 20427</em></h4>
<h4><em>last updated on 2022-02-01 for Ballistica version 1.6.7 build 20436</em></h4>
<p>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 <a href="mailto:support@froemling.net">let me know</a>. Happy modding!</p>
<hr>
@ -5633,6 +5633,7 @@ of the session.</p>
<li>FLAG_PHILIPPINES</li>
<li>FLAG_CHILE</li>
<li>MIKIROG</li>
<li>V2_LOGO</li>
</ul>
<hr>
<h2><strong><a name="class_ba_StandLocation">ba.StandLocation</a></strong></h3>

View File

@ -21,7 +21,7 @@
namespace ballistica {
// These are set automatically via script; don't modify them here.
const int kAppBuildNumber = 20427;
const int kAppBuildNumber = 20436;
const char* kAppVersion = "1.6.7";
// Our standalone globals.

View File

@ -398,6 +398,7 @@ enum class SpecialChar {
kFlagPhilippines,
kFlagChile,
kMikirog,
kV2Logo,
kLast // Sentinel
};

View File

@ -224,6 +224,7 @@ void Game::InitSpecialChars() {
special_char_strings_[SpecialChar::kFlagChile] = "\xee\x81\xA1";
special_char_strings_[SpecialChar::kMikirog] = "\xee\x81\xA2";
special_char_strings_[SpecialChar::kV2Logo] = "\xee\x81\xA3";
}
void Game::SetGameRoster(cJSON* r) {

View File

@ -63,7 +63,7 @@ TextGraphics::TextGraphics() {
}
// Same with the logo and all the icons on sheets 3 and 4.
if (index == 30 || (index >= 50 && index < 100)) {
if (index == 30 || (index >= 50 && index < 99)) {
// A few are *extra* big
if (index == 67 || index == 65 || index == 70 || index == 72
|| index == 73 || index == 75 || index == 76 || index == 78
@ -80,6 +80,13 @@ TextGraphics::TextGraphics() {
g.y_size *= 0.55f;
}
}
// Special case for v2 logo.
if (index == 99) {
g.pen_offset_y += 0.25f;
extra_advance += 0.12f;
g.x_size *= 0.75f;
g.y_size *= 0.75f;
}
g.advance = g.x_size - 0.09f + extra_advance;
// Ticket overlay should be big and shouldn't advance us at all.

View File

@ -31,20 +31,20 @@ class PipRequirement:
# Note: we look directly for modules when possible instead of just pip
# entries; this accounts for manual installations or other nonstandard setups.
PIP_REQUIREMENTS = [
PipRequirement(modulename='pylint', minversion=[2, 12, 1]),
PipRequirement(modulename='mypy', minversion=[0, 930]),
PipRequirement(modulename='yapf', minversion=[0, 31, 0]),
PipRequirement(modulename='pylint', minversion=[2, 12, 2]),
PipRequirement(modulename='mypy', minversion=[0, 931]),
PipRequirement(modulename='yapf', minversion=[0, 32, 0]),
PipRequirement(modulename='cpplint', minversion=[1, 5, 5]),
PipRequirement(modulename='pytest', minversion=[6, 2, 4]),
PipRequirement(modulename='pytest', minversion=[6, 2, 5]),
PipRequirement(modulename='pytz'),
PipRequirement(modulename='ansiwrap'),
PipRequirement(modulename='yaml', pipname='PyYAML'),
PipRequirement(modulename='requests'),
PipRequirement(pipname='typing_extensions', minversion=[4, 0, 0]),
PipRequirement(pipname='types-filelock', minversion=[0, 1, 5]),
PipRequirement(pipname='types-requests', minversion=[2, 25, 6]),
PipRequirement(pipname='types-pytz', minversion=[2021, 1, 2]),
PipRequirement(pipname='types-PyYAML', minversion=[5, 4, 6]),
PipRequirement(pipname='typing_extensions', minversion=[4, 0, 1]),
PipRequirement(pipname='types-filelock', minversion=[3, 2, 5]),
PipRequirement(pipname='types-requests', minversion=[2, 27, 7]),
PipRequirement(pipname='types-pytz', minversion=[2021, 3, 4]),
PipRequirement(pipname='types-PyYAML', minversion=[6, 0, 3]),
]
# Parts of full-tests suite we only run on particular days.
@ -178,7 +178,7 @@ def lazybuild(target: str, category: SourceCategory, command: str) -> None:
'Makefile', 'tools/batoolsinternal/meta.py',
'tools/batoolsinternal/pcommand.py', 'tools/batools/meta.py',
'tools/batools/pcommand.py', 'src/meta',
'tools/batools/pythonenumsmodule.py'
'tools/batools/pythonenumsmodule.py', 'src/ballistica/core/types.h'
]
# Everything possibly affecting asset builds.
@ -398,6 +398,10 @@ def gen_fulltest_buildfile_apple() -> None:
# noinspection PyListCreation
lines = []
# pybuildapple = 'tools/pcommand python_build_apple'
pybuildapple = ('tools/cloudshell --env tools fromini -- '
'tools/pcommand python_build_apple')
# iOS stuff
lines.append('make ios-build')
lines.append('make ios-new-build')
@ -406,9 +410,9 @@ def gen_fulltest_buildfile_apple() -> None:
extras = [e for e in extras if e.startswith('ios.')]
for extra in extras:
if extra == 'ios.pylibs':
lines.append('tools/pcommand python_build_apple ios')
lines.append(f'{pybuildapple} ios')
elif extra == 'ios.pylibs.debug':
lines.append('tools/pcommand python_build_apple_debug ios')
lines.append(f'{pybuildapple}_debug ios')
else:
raise RuntimeError(f'Unknown extra: {extra}')
@ -419,9 +423,9 @@ def gen_fulltest_buildfile_apple() -> None:
extras = [e for e in extras if e.startswith('tvos.')]
for extra in extras:
if extra == 'tvos.pylibs':
lines.append('tools/pcommand python_build_apple tvos')
lines.append(f'{pybuildapple} tvos')
elif extra == 'tvos.pylibs.debug':
lines.append('tools/pcommand python_build_apple_debug tvos')
lines.append(f'{pybuildapple}_debug tvos')
else:
raise RuntimeError(f'Unknown extra: {extra}')
@ -439,13 +443,13 @@ def gen_fulltest_buildfile_apple() -> None:
if extra == 'mac.package':
lines.append('make mac-package')
elif extra == 'mac.package.server.x86_64':
lines.append('make mac-cloud-server-package-x86-64')
lines.append('make mac-server-package-x86-64')
elif extra == 'mac.package.server.arm64':
lines.append('make mac-cloud-server-package-arm64')
lines.append('make mac-server-package-arm64')
elif extra == 'mac.pylibs':
lines.append('tools/pcommand python_build_apple mac')
lines.append(f'{pybuildapple} mac')
elif extra == 'mac.pylibs.debug':
lines.append('tools/pcommand python_build_apple_debug mac')
lines.append(f'{pybuildapple}_debug mac')
else:
raise RuntimeError(f'Unknown extra: {extra}')

View File

@ -171,9 +171,8 @@ def lazy_increment_build() -> None:
if not update_hash_only:
# Just go ahead and bless; this will increment the build as needed.
# subprocess.run(['make', 'bless'], check=True)
subprocess.run(
['tools/pcommand', 'version_utils', 'incrementbuild'],
check=True)
subprocess.run(['tools/pcommand', 'version', 'incrementbuild'],
check=True)
# We probably just changed code, so we need to re-calc the hash.
codehash = get_files_hash(codefiles)
@ -187,7 +186,7 @@ def get_master_asset_src_dir() -> None:
import subprocess
import os
master_assets_dir = '/Users/ericf/Dropbox/ballisticacore_master_assets'
master_assets_dir = '/Users/ericf/Documents/ballisticacore_master_assets'
dummy_dir = '/__DUMMY_MASTER_SRC_DISABLED_PATH__'
# Only apply this on my setup