oops fixed broken campaign buttons

This commit is contained in:
Eric Froemling 2025-01-18 16:33:17 -08:00
parent 2152bc8fa4
commit e8ff80c0dd
No known key found for this signature in database
7 changed files with 255 additions and 366 deletions

72
.efrocachemap generated
View File

@ -4174,42 +4174,42 @@
"build/assets/windows/Win32/ucrtbased.dll": "bfd1180c269d3950b76f35a63655e9e1", "build/assets/windows/Win32/ucrtbased.dll": "bfd1180c269d3950b76f35a63655e9e1",
"build/assets/windows/Win32/vc_redist.x86.exe": "15a5f1f876503885adbdf5b3989b3718", "build/assets/windows/Win32/vc_redist.x86.exe": "15a5f1f876503885adbdf5b3989b3718",
"build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599", "build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599",
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "ce8f860eca1987d08245184f86996182", "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "f476e40f3ede3c25330bbb1ea6bf155d",
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "50d39660fa219c8d6cf2efb61685a61a", "build/prefab/full/linux_arm64_gui/release/ballisticakit": "fe0b773103bc46eb5fa47c548f183a84",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "6ba96618dd57e6937abe9d1919dfa572", "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "bcfce7dfcec3d5dbba02b074107e7c62",
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "cecc7cee479a3d34f9b2fc9e9d9ded23", "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "e14c49f2ea7de894013d8dc08c348029",
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "e62e0586da50386f4f363ec018a5db5e", "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "aa1dbddf6ea08f85fada1e18dcf14ca8",
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "60c86684724816e72fe123a4181e9b5e", "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "749846cc9bcb40d56974f531439ae1aa",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "652e6dad52ffa1c7166ffad2da52e5cd", "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "8ecd4f62295759b1e0030db7e8f7f47e",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "7a54b3311d70edc58f6f2953df088e92", "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "140477033f5c6afbec5b9e69578e91d0",
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "1edb07436376dac497f1d298e26f9e96", "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "f0cd7f0df81de17a78439a2645dd9efc",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "02967dc5ba24c1b85ff0626934c3e1ae", "build/prefab/full/mac_arm64_gui/release/ballisticakit": "40b415329a5259398c16f86a41180719",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "4c93356e4f8ac89ebb53dbc20b09d22f", "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "7e8cf4f91c975e4b56bd42aba3c2b50a",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "f65ae7e22fba795c6368fd4d652eeff1", "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "06a72d193f6df9a85ea46d4fed48e4a4",
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "864f28591b3c789c432e2bd6681b4879", "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "629c86d69544ce68a163de61294390e9",
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "2199c997e096551c6aea48850287c9ab", "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "b6e63ea23ffd5d80f05f7590224bb927",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "1a9a6969c3fe39f2699f0135c348a250", "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "1f3106422e9b66a5b1da402cbc434d6c",
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "b8d883fcf9549006ad1691ac7ada47d2", "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "bcf8af5bf06a37fc887076841fad8ff3",
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "cbacac5a846cf8a0f6db760aaddcd13a", "build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "7497894d2943b75b6ac830cdba8481af",
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "3d16bac10d8f15bac7fe20e3a927b275", "build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "273a6f64cac5a233694223b85cd0f22b",
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "cbacac5a846cf8a0f6db760aaddcd13a", "build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "7497894d2943b75b6ac830cdba8481af",
"build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "3d16bac10d8f15bac7fe20e3a927b275", "build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "273a6f64cac5a233694223b85cd0f22b",
"build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "88251dd5c8428482c55e7c109a600ad8", "build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "6f4d0f923e186f013e20d894ce3cf5f0",
"build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "7f7c396ca028d265bc3eae4433a1a102", "build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "f9866ec5b496b5565cad36eebb695507",
"build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "88251dd5c8428482c55e7c109a600ad8", "build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "6f4d0f923e186f013e20d894ce3cf5f0",
"build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "7f7c396ca028d265bc3eae4433a1a102", "build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "f9866ec5b496b5565cad36eebb695507",
"build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "6121591b94d920ee541194b65d93958a", "build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "55a2b0c2d1db4d70627c901471d05fc7",
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "7dd182733a34da0ca5f5c97e5cb0b7f0", "build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "7e071962108a8d1727525fb331b70ee4",
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "6121591b94d920ee541194b65d93958a", "build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "55a2b0c2d1db4d70627c901471d05fc7",
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "7dd182733a34da0ca5f5c97e5cb0b7f0", "build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "7e071962108a8d1727525fb331b70ee4",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "9dc001d05d8de28fa8062832ccc6d781", "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "241f03051eb9d75ec538dda179980706",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "05a0000f747249c7059cfe9d2077d240", "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "9e465dfecd8dd4a1cb14bcdb59895942",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "88e20a1e62b05f10c11dad34de830e2e", "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "6cec133582ad66ec1bb2e80f2e7f81cc",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "1d620c706cf30bcbfcd2ea91c6bfb268", "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "f6a5f5154d91bb7b34eefefc7d3df7a9",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "8f68e596b586c4ce378b8fcf6bde8010", "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "584659bd114ad5fb5a6f2f3e10de4d9d",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "4d83e436fc57fed41286c6da16f149b9", "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "0abefcd3c092a30a8b62903bfcd49dc6",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "7a1531f840639d5cb873d01b13ac4f93", "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "9cff421668aeba53035369a5620a6c06",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "50694c2f2ae5374eb8212bd9254571a6", "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "41d882665240d037aaff8d2c23d37239",
"src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c", "src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c",
"src/assets/ba_data/python/babase/_mgen/enums.py": "794d258d59fd17a61752843a9a0551ad", "src/assets/ba_data/python/babase/_mgen/enums.py": "794d258d59fd17a61752843a9a0551ad",
"src/ballistica/base/mgen/pyembed/binding_base.inc": "06042d31df0ff9af96b99477162e2a91", "src/ballistica/base/mgen/pyembed/binding_base.inc": "06042d31df0ff9af96b99477162e2a91",

View File

@ -1,4 +1,4 @@
### 1.7.37 (build 22204, api 9, 2025-01-18) ### 1.7.37 (build 22207, api 9, 2025-01-18)
- Bumping api version to 9. As you'll see below, there's some UI changes that - 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 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. touch UI stuff at all you can simply bump your api version and call it a day.

View File

@ -6,6 +6,7 @@ from __future__ import annotations
import logging import logging
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
# from bacommon.bs import ClassicChestAppearance
import babase import babase
import bascenev1 import bascenev1
import bauiv1 import bauiv1
@ -86,429 +87,311 @@ class AchievementSubsystem:
def _init_achievements(self) -> None: def _init_achievements(self) -> None:
"""Fill in available achievements.""" """Fill in available achievements."""
achs = self.achievements self.achievements += [
Achievement(
# 5 'In Control',
achs.append( 'achievementInControl',
Achievement('In Control', 'achievementInControl', (1, 1, 1), '', 5) (1, 1, 1),
) '',
# 15 ticket_award=5,
achs.append( ),
Achievement( Achievement(
'Sharing is Caring', 'Sharing is Caring',
'achievementSharingIsCaring', 'achievementSharingIsCaring',
(1, 1, 1), (1, 1, 1),
'', '',
15, ticket_award=15,
) ),
)
# 10
achs.append(
Achievement( Achievement(
'Dual Wielding', 'achievementDualWielding', (1, 1, 1), '', 10 'Dual Wielding',
) 'achievementDualWielding',
) (1, 1, 1),
'',
# 10 ticket_award=10,
achs.append( ),
Achievement( Achievement(
'Free Loader', 'achievementFreeLoader', (1, 1, 1), '', 10 'Free Loader',
) 'achievementFreeLoader',
) (1, 1, 1),
# 20 '',
achs.append( ticket_award=10,
),
Achievement( Achievement(
'Team Player', 'achievementTeamPlayer', (1, 1, 1), '', 20 'Team Player',
) 'achievementTeamPlayer',
) (1, 1, 1),
'',
# 5 ticket_award=20,
achs.append( ),
Achievement( Achievement(
'Onslaught Training Victory', 'Onslaught Training Victory',
'achievementOnslaught', 'achievementOnslaught',
(1, 1, 1), (1, 1, 1),
'Default:Onslaught Training', 'Default:Onslaught Training',
5, ticket_award=5,
) ),
)
# 5
achs.append(
Achievement( Achievement(
'Off You Go Then', 'Off You Go Then',
'achievementOffYouGo', 'achievementOffYouGo',
(1, 1.1, 1.3), (1, 1.1, 1.3),
'Default:Onslaught Training', 'Default:Onslaught Training',
5, ticket_award=5,
) ),
)
# 10
achs.append(
Achievement( Achievement(
'Boxer', 'Boxer',
'achievementBoxer', 'achievementBoxer',
(1, 0.6, 0.6), (1, 0.6, 0.6),
'Default:Onslaught Training', 'Default:Onslaught Training',
10, ticket_award=10,
hard_mode_only=True, hard_mode_only=True,
) ),
)
# 10
achs.append(
Achievement( Achievement(
'Rookie Onslaught Victory', 'Rookie Onslaught Victory',
'achievementOnslaught', 'achievementOnslaught',
(0.5, 1.4, 0.6), (0.5, 1.4, 0.6),
'Default:Rookie Onslaught', 'Default:Rookie Onslaught',
10, ticket_award=10,
) ),
)
# 10
achs.append(
Achievement( Achievement(
'Mine Games', 'Mine Games',
'achievementMine', 'achievementMine',
(1, 1, 1.4), (1, 1, 1.4),
'Default:Rookie Onslaught', 'Default:Rookie Onslaught',
10, ticket_award=10,
) ),
)
# 15
achs.append(
Achievement( Achievement(
'Flawless Victory', 'Flawless Victory',
'achievementFlawlessVictory', 'achievementFlawlessVictory',
(1, 1, 1), (1, 1, 1),
'Default:Rookie Onslaught', 'Default:Rookie Onslaught',
15, ticket_award=15,
hard_mode_only=True, hard_mode_only=True,
) ),
)
# 10
achs.append(
Achievement( Achievement(
'Rookie Football Victory', 'Rookie Football Victory',
'achievementFootballVictory', 'achievementFootballVictory',
(1.0, 1, 0.6), (1.0, 1, 0.6),
'Default:Rookie Football', 'Default:Rookie Football',
10, ticket_award=10,
) ),
)
# 10
achs.append(
Achievement( Achievement(
'Super Punch', 'Super Punch',
'achievementSuperPunch', 'achievementSuperPunch',
(1, 1, 1.8), (1, 1, 1.8),
'Default:Rookie Football', 'Default:Rookie Football',
10, ticket_award=10,
) ),
)
# 15
achs.append(
Achievement( Achievement(
'Rookie Football Shutout', 'Rookie Football Shutout',
'achievementFootballShutout', 'achievementFootballShutout',
(1, 1, 1), (1, 1, 1),
'Default:Rookie Football', 'Default:Rookie Football',
15, ticket_award=15,
hard_mode_only=True, hard_mode_only=True,
) ),
)
# 15
achs.append(
Achievement( Achievement(
'Pro Onslaught Victory', 'Pro Onslaught Victory',
'achievementOnslaught', 'achievementOnslaught',
(0.3, 1, 2.0), (0.3, 1, 2.0),
'Default:Pro Onslaught', 'Default:Pro Onslaught',
15, ticket_award=15,
) ),
)
# 15
achs.append(
Achievement( Achievement(
'Boom Goes the Dynamite', 'Boom Goes the Dynamite',
'achievementTNT', 'achievementTNT',
(1.4, 1.2, 0.8), (1.4, 1.2, 0.8),
'Default:Pro Onslaught', 'Default:Pro Onslaught',
15, ticket_award=15,
) ),
)
# 20
achs.append(
Achievement( Achievement(
'Pro Boxer', 'Pro Boxer',
'achievementBoxer', 'achievementBoxer',
(2, 2, 0), (2, 2, 0),
'Default:Pro Onslaught', 'Default:Pro Onslaught',
20, ticket_award=20,
hard_mode_only=True, hard_mode_only=True,
) ),
)
# 15
achs.append(
Achievement( Achievement(
'Pro Football Victory', 'Pro Football Victory',
'achievementFootballVictory', 'achievementFootballVictory',
(1.3, 1.3, 2.0), (1.3, 1.3, 2.0),
'Default:Pro Football', 'Default:Pro Football',
15, ticket_award=15,
) ),
)
# 15
achs.append(
Achievement( Achievement(
'Super Mega Punch', 'Super Mega Punch',
'achievementSuperPunch', 'achievementSuperPunch',
(2, 1, 0.6), (2, 1, 0.6),
'Default:Pro Football', 'Default:Pro Football',
15, ticket_award=15,
) ),
)
# 20
achs.append(
Achievement( Achievement(
'Pro Football Shutout', 'Pro Football Shutout',
'achievementFootballShutout', 'achievementFootballShutout',
(0.7, 0.7, 2.0), (0.7, 0.7, 2.0),
'Default:Pro Football', 'Default:Pro Football',
20, ticket_award=20,
hard_mode_only=True, hard_mode_only=True,
) ),
)
# 15
achs.append(
Achievement( Achievement(
'Pro Runaround Victory', 'Pro Runaround Victory',
'achievementRunaround', 'achievementRunaround',
(1, 1, 1), (1, 1, 1),
'Default:Pro Runaround', 'Default:Pro Runaround',
15, ticket_award=15,
) ),
)
# 20
achs.append(
Achievement( Achievement(
'Precision Bombing', 'Precision Bombing',
'achievementCrossHair', 'achievementCrossHair',
(1, 1, 1.3), (1, 1, 1.3),
'Default:Pro Runaround', 'Default:Pro Runaround',
20, ticket_award=20,
hard_mode_only=True, hard_mode_only=True,
) ),
)
# 25
achs.append(
Achievement( Achievement(
'The Wall', 'The Wall',
'achievementWall', 'achievementWall',
(1, 0.7, 0.7), (1, 0.7, 0.7),
'Default:Pro Runaround', 'Default:Pro Runaround',
25, ticket_award=25,
hard_mode_only=True, hard_mode_only=True,
) ),
)
# 30
achs.append(
Achievement( Achievement(
'Uber Onslaught Victory', 'Uber Onslaught Victory',
'achievementOnslaught', 'achievementOnslaught',
(2, 2, 1), (2, 2, 1),
'Default:Uber Onslaught', 'Default:Uber Onslaught',
30, ticket_award=30,
) ),
)
# 30
achs.append(
Achievement( Achievement(
'Gold Miner', 'Gold Miner',
'achievementMine', 'achievementMine',
(2, 1.6, 0.2), (2, 1.6, 0.2),
'Default:Uber Onslaught', 'Default:Uber Onslaught',
30, ticket_award=30,
hard_mode_only=True, hard_mode_only=True,
) ),
)
# 30
achs.append(
Achievement( Achievement(
'TNT Terror', 'TNT Terror',
'achievementTNT', 'achievementTNT',
(2, 1.8, 0.3), (2, 1.8, 0.3),
'Default:Uber Onslaught', 'Default:Uber Onslaught',
30, ticket_award=30,
hard_mode_only=True, hard_mode_only=True,
) ),
)
# 30
achs.append(
Achievement( Achievement(
'Uber Football Victory', 'Uber Football Victory',
'achievementFootballVictory', 'achievementFootballVictory',
(1.8, 1.4, 0.3), (1.8, 1.4, 0.3),
'Default:Uber Football', 'Default:Uber Football',
30, ticket_award=30,
) ),
)
# 30
achs.append(
Achievement( Achievement(
'Got the Moves', 'Got the Moves',
'achievementGotTheMoves', 'achievementGotTheMoves',
(2, 1, 0), (2, 1, 0),
'Default:Uber Football', 'Default:Uber Football',
30, ticket_award=30,
hard_mode_only=True, hard_mode_only=True,
) ),
)
# 40
achs.append(
Achievement( Achievement(
'Uber Football Shutout', 'Uber Football Shutout',
'achievementFootballShutout', 'achievementFootballShutout',
(2, 2, 0), (2, 2, 0),
'Default:Uber Football', 'Default:Uber Football',
40, ticket_award=40,
hard_mode_only=True, hard_mode_only=True,
) ),
)
# 30
achs.append(
Achievement( Achievement(
'Uber Runaround Victory', 'Uber Runaround Victory',
'achievementRunaround', 'achievementRunaround',
(1.5, 1.2, 0.2), (1.5, 1.2, 0.2),
'Default:Uber Runaround', 'Default:Uber Runaround',
30, ticket_award=30,
) ),
)
# 40
achs.append(
Achievement( Achievement(
'The Great Wall', 'The Great Wall',
'achievementWall', 'achievementWall',
(2, 1.7, 0.4), (2, 1.7, 0.4),
'Default:Uber Runaround', 'Default:Uber Runaround',
40, ticket_award=40,
hard_mode_only=True, hard_mode_only=True,
) ),
)
# 40
achs.append(
Achievement( Achievement(
'Stayin\' Alive', 'Stayin\' Alive',
'achievementStayinAlive', 'achievementStayinAlive',
(2, 2, 1), (2, 2, 1),
'Default:Uber Runaround', 'Default:Uber Runaround',
40, ticket_award=40,
hard_mode_only=True, hard_mode_only=True,
) ),
)
# 20
achs.append(
Achievement( Achievement(
'Last Stand Master', 'Last Stand Master',
'achievementMedalSmall', 'achievementMedalSmall',
(2, 1.5, 0.3), (2, 1.5, 0.3),
'Default:The Last Stand', 'Default:The Last Stand',
20, ticket_award=20,
hard_mode_only=True, hard_mode_only=True,
) ),
)
# 40
achs.append(
Achievement( Achievement(
'Last Stand Wizard', 'Last Stand Wizard',
'achievementMedalMedium', 'achievementMedalMedium',
(2, 1.5, 0.3), (2, 1.5, 0.3),
'Default:The Last Stand', 'Default:The Last Stand',
40, ticket_award=40,
hard_mode_only=True, hard_mode_only=True,
) ),
)
# 60
achs.append(
Achievement( Achievement(
'Last Stand God', 'Last Stand God',
'achievementMedalLarge', 'achievementMedalLarge',
(2, 1.5, 0.3), (2, 1.5, 0.3),
'Default:The Last Stand', 'Default:The Last Stand',
60, ticket_award=60,
hard_mode_only=True, hard_mode_only=True,
) ),
)
# 5
achs.append(
Achievement( Achievement(
'Onslaught Master', 'Onslaught Master',
'achievementMedalSmall', 'achievementMedalSmall',
(0.7, 1, 0.7), (0.7, 1, 0.7),
'Challenges:Infinite Onslaught', 'Challenges:Infinite Onslaught',
5, ticket_award=5,
) ),
)
# 15
achs.append(
Achievement( Achievement(
'Onslaught Wizard', 'Onslaught Wizard',
'achievementMedalMedium', 'achievementMedalMedium',
(0.7, 1.0, 0.7), (0.7, 1.0, 0.7),
'Challenges:Infinite Onslaught', 'Challenges:Infinite Onslaught',
15, ticket_award=15,
) ),
)
# 30
achs.append(
Achievement( Achievement(
'Onslaught God', 'Onslaught God',
'achievementMedalLarge', 'achievementMedalLarge',
(0.7, 1.0, 0.7), (0.7, 1.0, 0.7),
'Challenges:Infinite Onslaught', 'Challenges:Infinite Onslaught',
30, ticket_award=30,
) ),
)
# 5
achs.append(
Achievement( Achievement(
'Runaround Master', 'Runaround Master',
'achievementMedalSmall', 'achievementMedalSmall',
(1.0, 1.0, 1.2), (1.0, 1.0, 1.2),
'Challenges:Infinite Runaround', 'Challenges:Infinite Runaround',
5, ticket_award=5,
) ),
)
# 15
achs.append(
Achievement( Achievement(
'Runaround Wizard', 'Runaround Wizard',
'achievementMedalMedium', 'achievementMedalMedium',
(1.0, 1.0, 1.2), (1.0, 1.0, 1.2),
'Challenges:Infinite Runaround', 'Challenges:Infinite Runaround',
15, ticket_award=15,
) ),
)
# 30
achs.append(
Achievement( Achievement(
'Runaround God', 'Runaround God',
'achievementMedalLarge', 'achievementMedalLarge',
(1.0, 1.0, 1.2), (1.0, 1.0, 1.2),
'Challenges:Infinite Runaround', 'Challenges:Infinite Runaround',
30, ticket_award=30,
) ),
) ]
def award_local_achievement(self, achname: str) -> None: def award_local_achievement(self, achname: str) -> None:
"""For non-game-based achievements such as controller-connection.""" """For non-game-based achievements such as controller-connection."""
@ -652,18 +535,20 @@ class Achievement:
self, self,
name: str, name: str,
icon_name: str, icon_name: str,
icon_color: Sequence[float], icon_color: tuple[float, float, float],
level_name: str, level_name: str,
award: int, *,
ticket_award: int,
# chest_award: ClassicChestAppearance,
hard_mode_only: bool = False, hard_mode_only: bool = False,
): ):
# pylint: disable=too-many-positional-arguments
self._name = name self._name = name
self._icon_name = icon_name self._icon_name = icon_name
self._icon_color: Sequence[float] = list(icon_color) + [1] assert len(icon_color) == 3
self._icon_color = icon_color + (1.0,)
self._level_name = level_name self._level_name = level_name
self._completion_banner_slot: int | None = None self._completion_banner_slot: int | None = None
self._award = award self._ticket_award = ticket_award
self._hard_mode_only = hard_mode_only self._hard_mode_only = hard_mode_only
@property @property
@ -843,16 +728,16 @@ class Achievement:
], ],
) )
def get_award_ticket_value(self, include_pro_bonus: bool = False) -> int: # def get_award_ticket_value(self, include_pro_bonus: bool = False) -> int:
"""Get the ticket award value for this achievement.""" # """Get the ticket award value for this achievement."""
plus = babase.app.plus # plus = babase.app.plus
if plus is None: # if plus is None:
return 0 # return 0
val: int = plus.get_v1_account_misc_read_val( # val: int = plus.get_v1_account_misc_read_val(
'achAward.' + self._name, self._award # 'achAward.' + self._name, self._ticket_award
) * _get_ach_mult(include_pro_bonus) # ) * _get_ach_mult(include_pro_bonus)
assert isinstance(val, int) # assert isinstance(val, int)
return val # return val
@property @property
def power_ranking_value(self) -> int: def power_ranking_value(self) -> int:
@ -861,7 +746,7 @@ class Achievement:
if plus is None: if plus is None:
return 0 return 0
val: int = plus.get_v1_account_misc_read_val( val: int = plus.get_v1_account_misc_read_val(
'achLeaguePoints.' + self._name, self._award 'achLeaguePoints.' + self._name, self._ticket_award
) )
assert isinstance(val, int) assert isinstance(val, int)
return val return val
@ -1019,39 +904,40 @@ class Achievement:
# Ticket-award. # Ticket-award.
award_x = -100 award_x = -100
objs.append( # print('FIXME SHOW ACH CHEST VAL')
Text( # objs.append(
babase.charstr(babase.SpecialChar.TICKET), # Text(
host_only=True, # babase.charstr(babase.SpecialChar.TICKET),
position=(x + award_x + 33, y + 7), # host_only=True,
transition=Text.Transition.FADE_IN, # position=(x + award_x + 33, y + 7),
scale=1.5, # transition=Text.Transition.FADE_IN,
h_attach=h_attach, # scale=1.5,
v_attach=v_attach, # h_attach=h_attach,
h_align=Text.HAlign.CENTER, # v_attach=v_attach,
v_align=Text.VAlign.CENTER, # h_align=Text.HAlign.CENTER,
color=(1, 1, 1, 0.2 if hmo else 0.4), # v_align=Text.VAlign.CENTER,
transition_delay=delay + 0.05, # color=(1, 1, 1, 0.2 if hmo else 0.4),
transition_out_delay=out_delay_fin, # transition_delay=delay + 0.05,
).autoretain() # transition_out_delay=out_delay_fin,
) # ).autoretain()
objs.append( # )
Text( # objs.append(
'+' + str(self.get_award_ticket_value()), # Text(
host_only=True, # '+' + str(self.get_award_ticket_value()),
position=(x + award_x + 28, y + 16), # host_only=True,
transition=Text.Transition.FADE_IN, # position=(x + award_x + 28, y + 16),
scale=0.7, # transition=Text.Transition.FADE_IN,
flatness=1, # scale=0.7,
h_attach=h_attach, # flatness=1,
v_attach=v_attach, # h_attach=h_attach,
h_align=Text.HAlign.CENTER, # v_attach=v_attach,
v_align=Text.VAlign.CENTER, # h_align=Text.HAlign.CENTER,
color=cl2, # v_align=Text.VAlign.CENTER,
transition_delay=delay + 0.05, # color=cl2,
transition_out_delay=out_delay_fin, # transition_delay=delay + 0.05,
).autoretain() # transition_out_delay=out_delay_fin,
) # ).autoretain()
# )
else: else:
complete = self.complete complete = self.complete
@ -1110,23 +996,24 @@ class Achievement:
transition_out_delay=None, transition_out_delay=None,
).autoretain() ).autoretain()
) )
objs.append( # print('FIXME SHOW ACH CHEST2')
Text( # objs.append(
'+' + str(self.get_award_ticket_value()), # Text(
host_only=True, # '+' + str(self.get_award_ticket_value()),
position=(x + award_x + 28, y + 16), # host_only=True,
transition=Text.Transition.IN_RIGHT, # position=(x + award_x + 28, y + 16),
scale=0.7, # transition=Text.Transition.IN_RIGHT,
flatness=1, # scale=0.7,
h_attach=h_attach, # flatness=1,
v_attach=v_attach, # h_attach=h_attach,
h_align=Text.HAlign.CENTER, # v_attach=v_attach,
v_align=Text.VAlign.CENTER, # h_align=Text.HAlign.CENTER,
color=(0.6, 0.6, 0.6, (0.2 if hmo else 0.4)), # v_align=Text.VAlign.CENTER,
transition_delay=delay + 0.05, # color=(0.6, 0.6, 0.6, (0.2 if hmo else 0.4)),
transition_out_delay=None, # transition_delay=delay + 0.05,
).autoretain() # transition_out_delay=None,
) # ).autoretain()
# )
# Show 'hard-mode-only' only over incomplete achievements # Show 'hard-mode-only' only over incomplete achievements
# when that's the case. # when that's the case.
@ -1478,49 +1365,51 @@ class Achievement:
assert objt.node assert objt.node
objt.node.host_only = True objt.node.host_only = True
objt = Text( # print('FIXME SHOW ACH CHEST3')
'+' + str(self.get_award_ticket_value()), # objt = Text(
position=(-120 - 180 + 5, 80 + y_offs - 20), # '+' + str(self.get_award_ticket_value()),
v_attach=Text.VAttach.BOTTOM, # position=(-120 - 180 + 5, 80 + y_offs - 20),
front=True, # v_attach=Text.VAttach.BOTTOM,
h_align=Text.HAlign.CENTER, # front=True,
v_align=Text.VAlign.CENTER, # h_align=Text.HAlign.CENTER,
transition=Text.Transition.IN_BOTTOM, # v_align=Text.VAlign.CENTER,
vr_depth=base_vr_depth, # transition=Text.Transition.IN_BOTTOM,
flatness=0.5, # vr_depth=base_vr_depth,
shadow=1.0, # flatness=0.5,
transition_delay=in_time, # shadow=1.0,
transition_out_delay=out_time, # transition_delay=in_time,
flash=True, # transition_out_delay=out_time,
color=(0, 1, 0, 1), # flash=True,
scale=1.5, # color=(0, 1, 0, 1),
).autoretain() # scale=1.5,
objs.append(objt) # ).autoretain()
# objs.append(objt)
assert objt.node assert objt.node
objt.node.host_only = True objt.node.host_only = True
# Add the 'x 2' if we've got pro. # Add the 'x 2' if we've got pro.
if app.classic.accounts.have_pro(): # if app.classic.accounts.have_pro():
objt = Text( # objt = Text(
'x 2', # 'x 2',
position=(-120 - 180 + 45, 80 + y_offs - 50), # position=(-120 - 180 + 45, 80 + y_offs - 50),
v_attach=Text.VAttach.BOTTOM, # v_attach=Text.VAttach.BOTTOM,
front=True, # front=True,
h_align=Text.HAlign.CENTER, # h_align=Text.HAlign.CENTER,
v_align=Text.VAlign.CENTER, # v_align=Text.VAlign.CENTER,
transition=Text.Transition.IN_BOTTOM, # transition=Text.Transition.IN_BOTTOM,
vr_depth=base_vr_depth, # vr_depth=base_vr_depth,
flatness=0.5, # flatness=0.5,
shadow=1.0, # shadow=1.0,
transition_delay=in_time, # transition_delay=in_time,
transition_out_delay=out_time, # transition_out_delay=out_time,
flash=True, # flash=True,
color=(0.4, 0, 1, 1), # color=(0.4, 0, 1, 1),
scale=0.9, # scale=0.9,
).autoretain() # ).autoretain()
objs.append(objt) # objs.append(objt)
assert objt.node # assert objt.node
objt.node.host_only = True # objt.node.host_only = True
objt = Text( objt = Text(
self.description_complete, self.description_complete,

View File

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

View File

@ -68,7 +68,7 @@ class GameButton:
position=(x + 23, y + 4), position=(x + 23, y + 4),
size=(sclx, scly), size=(sclx, scly),
label='', label='',
on_activate_call=bui.WeakCall(self._on_press), on_activate_call=self._on_press,
button_type='square', button_type='square',
autoselect=True, autoselect=True,
on_select_call=bui.Call(window.sel_change, row, game), on_select_call=bui.Call(window.sel_change, row, game),

View File

@ -198,8 +198,8 @@ class StoreBrowserWindow(bui.MainWindow):
center = (pos[0] + 0.1 * size[0], pos[1] + 0.9 * size[1]) center = (pos[0] + 0.1 * size[0], pos[1] + 0.9 * size[1])
img = bui.imagewidget( img = bui.imagewidget(
parent=self._root_widget, parent=self._root_widget,
position=(center[0] - rad * 1.04, center[1] - rad * 1.15), position=(center[0] - rad * 1.1, center[1] - rad * 1.2),
size=(rad * 2.2, rad * 2.2), size=(rad * 2.4, rad * 2.4),
texture=bui.gettexture('circleShadow'), texture=bui.gettexture('circleShadow'),
color=(1, 0, 0), color=(1, 0, 0),
) )

View File

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