added standalone store purchases for infinite onslaught and runaround

This commit is contained in:
Eric Froemling 2025-01-17 15:02:32 -08:00
parent d92a665398
commit ba5b2bb8a6
No known key found for this signature in database
9 changed files with 97 additions and 106 deletions

32
.efrocachemap generated
View File

@ -4174,22 +4174,22 @@
"build/assets/windows/Win32/ucrtbased.dll": "bfd1180c269d3950b76f35a63655e9e1",
"build/assets/windows/Win32/vc_redist.x86.exe": "15a5f1f876503885adbdf5b3989b3718",
"build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599",
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "58555279ef155ef08469b947dedff151",
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "81c0cd7183ff6ef61eb9e905b4a4ad1b",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "5cd672a5ac7f36dd081dc31855599240",
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "0e6477355f829cecf1a11cdc5ea03c36",
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "493143b41303596b01d8408eb5f5abd8",
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "4de9ba79e3ee63cbc4ade231aad47436",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "57e3b03e8b2d8e554a5ccf344e3a0346",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "db9a19303a7488fd9567e9afa82d9b32",
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "6be26eac367f64772b3e25d01b5186a7",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "f0d23e8ad6070abfc817f368439c1504",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "1df1651f4ee70a1c13a541ff339a4e84",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "32ae2768e445c302d492ea7a82ed675a",
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "a2ebb1c973f4053f61b53b5e0d168941",
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "c9d7937a16b5796134878744d2d97817",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "40073949b69d00dbb4cabcc19912de91",
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "6680c4cedd8b8fe7afacf04d99cbb7dc",
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "cbc3b41cdc03a5ea477ca025087951f3",
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "c04260638a82ecc1a1c24308de1447a6",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "e2a148fd04337c64310bff6bf458e4d5",
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "ae85400edb0f4ed74e4ff984594df42e",
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "813cdf1e5773fc376bb0a275a9dd3584",
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "4fd874c5c3102c84f2ea951829be2b31",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "b0a75cc7b7941e23254c42de6b1c68ef",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "e98954ee8676031983d30e12ec800a01",
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "4718e53a8e831c7f1f55bd828b747e8e",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "1789ce6e59d6e15c7e8ba857a3ad6d7e",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "348e2cb791e5e5a76a536d53dfe1a09b",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "1bfecc981df6fe4f9780a31c45049096",
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "8581b9f97a2e4c4c4c64a5dd2db59f20",
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "88f5af63ea44c416a3e7c5da5cab8a57",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "099f0e4d327dcf301fbb6c016913dec5",
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "ce37d95901baf24c70d12a283b8f5b04",
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "b261c8140179fdaa56deeaff30b12e04",
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "72f521386bbf1ddfdd22b77b75a177fa",
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "b261c8140179fdaa56deeaff30b12e04",

View File

@ -1,4 +1,4 @@
### 1.7.37 (build 22197, api 9, 2025-01-17)
### 1.7.37 (build 22198, api 9, 2025-01-17)
- Bumping api version to 9. As you'll see below, there's some UI changes that
will require a bit of work for any UI mods to adapt to. If your mods don't
touch UI stuff at all you can simply bump your api version and call it a day.

View File

@ -26,6 +26,7 @@ class StoreSubsystem:
def get_store_item_name_translated(self, item_name: str) -> babase.Lstr:
"""Return a babase.Lstr for a store item name."""
# pylint: disable=cyclic-import
# pylint: disable=too-many-return-statements
item_info = self.get_store_item(item_name)
if item_name.startswith('characters.'):
return babase.Lstr(
@ -46,6 +47,14 @@ class StoreSubsystem:
return gametype.get_display_string()
if item_name.startswith('icons.'):
return babase.Lstr(resource='editProfileWindow.iconText')
if item_name == 'upgrades.infinite_runaround':
return babase.Lstr(
translate=('coopLevelNames', 'Infinite Runaround')
)
if item_name == 'upgrades.infinite_onslaught':
return babase.Lstr(
translate=('coopLevelNames', 'Infinite Onslaught')
)
raise ValueError('unrecognized item: ' + item_name)
def get_store_item_display_size(
@ -89,6 +98,8 @@ class StoreSubsystem:
# IMPORTANT - need to keep this synced with the master server.
# (doing so manually for now)
babase.app.classic.store_items = {
'upgrades.infinite_runaround': {},
'upgrades.infinite_onslaught': {},
'characters.kronk': {'character': 'Kronk'},
'characters.zoe': {'character': 'Zoe'},
'characters.jackmorgan': {'character': 'Jack Morgan'},
@ -119,6 +130,10 @@ class StoreSubsystem:
'gametype': meteorshower.MeteorShowerGame,
'previewTex': 'rampagePreview',
},
'games.infinite_onslaught': {
'gametype': meteorshower.MeteorShowerGame,
'previewTex': 'rampagePreview',
},
'games.target_practice': {
'gametype': targetpractice.TargetPracticeGame,
'previewTex': 'doomShroomPreview',
@ -368,6 +383,8 @@ class StoreSubsystem:
'games.ninja_fight',
'games.meteor_shower',
'games.target_practice',
'upgrades.infinite_onslaught',
'upgrades.infinite_runaround',
]
}
]
@ -567,6 +584,10 @@ class StoreSubsystem:
if babase.app.env.gui:
for section in self.get_store_layout()['minigames']:
for mname in section['items']:
if mname.startswith('upgrades.'):
# Ignore things like infinite onslaught which
# aren't actually game types.
continue
if (
plus is None
or not plus.get_v1_account_product_purchased(mname)

View File

@ -53,7 +53,7 @@ if TYPE_CHECKING:
# Build number and version of the ballistica binary we expect to be
# using.
TARGET_BALLISTICA_BUILD = 22197
TARGET_BALLISTICA_BUILD = 22198
TARGET_BALLISTICA_VERSION = '1.7.37'

View File

@ -153,70 +153,6 @@ class CoopBrowserWindow(bui.MainWindow):
edit=self._root_widget, cancel_button=self._back_button
)
# self._league_rank_button: LeagueRankButton | None
# self._store_button: StoreButton | None
# self._store_button_widget: bui.Widget | None
# self._league_rank_button_widget: bui.Widget | None
# if not app.ui_v1.use_toolbars:
# prb = self._league_rank_button = LeagueRankButton(
# parent=self._root_widget,
# position=(
# self._width - (282 + x_inset),
# self._height
# - 85
# - (4 if uiscale is bui.UIScale.SMALL else 0),
# ),
# size=(100, 60),
# color=(0.4, 0.4, 0.9),
# textcolor=(0.9, 0.9, 2.0),
# scale=1.05,
# on_activate_call=bui.WeakCall(
# self._switch_to_league_rankings),
# )
# self._league_rank_button_widget = prb.get_button()
# sbtn = self._store_button = StoreButton(
# parent=self._root_widget,
# position=(
# self._width - (170 + x_inset),
# self._height
# - 85
# - (4 if uiscale is bui.UIScale.SMALL else 0),
# ),
# size=(100, 60),
# color=(0.6, 0.4, 0.7),
# show_tickets=True,
# button_type='square',
# sale_scale=0.85,
# textcolor=(0.9, 0.7, 1.0),
# scale=1.05,
# on_activate_call=bui.WeakCall(self._switch_to_score, None),
# )
# self._store_button_widget = sbtn.get_button()
# assert self._back_button is not None
# bui.widget(
# edit=self._back_button,
# right_widget=self._league_rank_button_widget,
# )
# bui.widget(
# edit=self._league_rank_button_widget,
# left_widget=self._back_button,
# )
# else:
# self._league_rank_button = None
# self._store_button = None
# self._store_button_widget = None
# self._league_rank_button_widget = None
# Move our corner buttons dynamically to keep them out of the way of
# the party icon :-(
# self._update_corner_button_positions()
# self._update_corner_button_positions_timer = bui.AppTimer(
# 1.0, bui.WeakCall(
# self._update_corner_button_positions), repeat=True
# )
self._last_tournament_query_time: float | None = None
self._last_tournament_query_response_time: float | None = None
self._doing_tournament_query = False
@ -1076,24 +1012,21 @@ class CoopBrowserWindow(bui.MainWindow):
)
return
# Infinite onslaught/runaround require pro; bring up a store link
# if need be.
required_purchase: str | None
# Infinite onslaught requires pro or the newer standalone
# upgrade.
if (
game
in (
'Challenges:Infinite Runaround',
'Challenges:Infinite Onslaught',
)
game in ['Challenges:Infinite Runaround']
and not bui.app.classic.accounts.have_pro()
):
if plus.get_v1_account_state() != 'signed_in':
show_sign_in_prompt()
else:
PurchaseWindow(items=['pro'])
return
required_purchase: str | None
if game in ['Challenges:Meteor Shower']:
required_purchase = 'upgrades.infinite_runaround'
elif (
game in ['Challenges:Infinite Onslaught']
and not bui.app.classic.accounts.have_pro()
):
required_purchase = 'upgrades.infinite_onslaught'
elif game in ['Challenges:Meteor Shower']:
required_purchase = 'games.meteor_shower'
elif game in [
'Challenges:Target Practice',

View File

@ -234,12 +234,22 @@ class GameButton:
assert bui.app.classic is not None
if (
(
game
in (
'Challenges:Infinite Runaround',
'Challenges:Infinite Onslaught',
game in ('Challenges:Infinite Runaround',)
and not (
bui.app.classic.accounts.have_pro()
or plus.get_v1_account_product_purchased(
'upgrades.infinite_runaround'
)
)
)
or (
game in ('Challenges:Infinite Onslaught',)
and not (
bui.app.classic.accounts.have_pro()
or plus.get_v1_account_product_purchased(
'upgrades.infinite_onslaught'
)
)
and not bui.app.classic.accounts.have_pro()
)
or (
game in ('Challenges:Meteor Shower',)

View File

@ -26,7 +26,7 @@ class ResourceTypeInfoWindow(PopupWindow):
scale = (
2.0
if uiscale is bui.UIScale.SMALL
else 1.5 if uiscale is bui.UIScale.MEDIUM else 1.0
else 1.3 if uiscale is bui.UIScale.MEDIUM else 0.7
)
self._transitioning_out = False
self._width = 570

View File

@ -76,7 +76,7 @@ def instantiate_store_item_display(
tint_color = None
tint2_color = None
tex_name: str | None = None
desc: str | None = None
desc: bui.Lstr | None = None
modes: bui.Lstr | None = None
if item_name.startswith('characters.'):
@ -151,6 +151,30 @@ def instantiate_store_item_display(
base_text_scale = 0.8
title_v = 0.48
price_v = 0.17
elif item_name == 'upgrades.infinite_runaround':
base_text_scale = 0.8
desc = bui.Lstr(
translate=(
'gameDescriptions',
'Prevent enemies from reaching the exit.',
)
)
modes = bui.Lstr(resource='playModes.coopText')
tex_name = 'towerDPreview'
title_v = 0.48
price_v = 0.17
elif item_name == 'upgrades.infinite_onslaught':
base_text_scale = 0.8
desc = bui.Lstr(
translate=(
'gameDescriptions',
'Defeat all enemies.',
)
)
modes = bui.Lstr(resource='playModes.coopText')
tex_name = 'doomShroomPreview'
title_v = 0.48
price_v = 0.17
elif item_name.startswith('icons.'):
base_text_scale = 1.5
@ -512,7 +536,10 @@ def instantiate_store_item_display(
texture=bui.gettexture(tex_name),
)
if item_name.startswith('games.'):
if item_name.startswith('games.') or item_name in (
'upgrades.infinite_runaround',
'upgrades.infinite_onslaught',
):
frame_size = b_width * 0.8
im_dim = frame_size * (100.0 / 113.0)
im_pos = (

View File

@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int {
namespace ballistica {
// These are set automatically via script; don't modify them here.
const int kEngineBuildNumber = 22197;
const int kEngineBuildNumber = 22198;
const char* kEngineVersion = "1.7.37";
const int kEngineApiVersion = 9;