diff --git a/.efrocachemap b/.efrocachemap
index 988b9239..9f34ff7b 100644
--- a/.efrocachemap
+++ b/.efrocachemap
@@ -4132,16 +4132,16 @@
"assets/build/windows/x64/python.exe": "https://files.ballistica.net/cache/ba1/25/a7/dc87c1be41605eb6fefd0145144c",
"assets/build/windows/x64/python37.dll": "https://files.ballistica.net/cache/ba1/b9/e4/d912f56e42e9991bcbb4c804cfcb",
"assets/build/windows/x64/pythonw.exe": "https://files.ballistica.net/cache/ba1/6c/bb/b6f52c306aa4e88061510e96cefe",
- "build/prefab/linux-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/1f/1d/c3e431b8c9116fb76eb10c7c3351",
- "build/prefab/linux-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/66/b8/9cb66184745ef1d783af3f7d3f22",
- "build/prefab/linux/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/52/e8/4826278e2030d629a682a8de070f",
- "build/prefab/linux/release/ballisticacore": "https://files.ballistica.net/cache/ba1/a5/8a/9e07236256d006f0357d5d1aa887",
- "build/prefab/mac-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/81/38/985294f68973344e2f012fe93c45",
- "build/prefab/mac-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d3/57/2cdf16147cdd25263ba76aa40198",
- "build/prefab/mac/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/a7/ec/1d64c0c31d58ef530b6894fabf2a",
- "build/prefab/mac/release/ballisticacore": "https://files.ballistica.net/cache/ba1/4c/ea/c136ba4360d210842915c2f6c55e",
- "build/prefab/windows-server/debug/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/35/06/d5ae11c90f89d1c10ca62a2b2f66",
- "build/prefab/windows-server/release/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/a1/e9/960e434759c45b623fba34725e64",
- "build/prefab/windows/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/dd/d0/f85582938a539d2d677d3e36b61b",
- "build/prefab/windows/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/8d/e9/3685ecf7b07f3e3568867da5536f"
+ "build/prefab/linux-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6d/a5/bc48ad0c1b5757913b8d354e4302",
+ "build/prefab/linux-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/94/e0/cd115dbd1ce795e9b6a2878e8912",
+ "build/prefab/linux/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/44/78/d3166e9e3f2f443c13838768b4ee",
+ "build/prefab/linux/release/ballisticacore": "https://files.ballistica.net/cache/ba1/79/af/4d26abbac53e9fc396d1fc5660ae",
+ "build/prefab/mac-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e0/85/8d8d8d74685d0823bc341942c31c",
+ "build/prefab/mac-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/34/81/06f6dff6c5686d1b2ffb1b44bb46",
+ "build/prefab/mac/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/34/96/f1d361405a41d118016a576ef517",
+ "build/prefab/mac/release/ballisticacore": "https://files.ballistica.net/cache/ba1/0c/7e/116fdd2bb269fd3c4c3826f526b9",
+ "build/prefab/windows-server/debug/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/75/a6/320d0a4b79a1e0c0cb8fecbc69e2",
+ "build/prefab/windows-server/release/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/8a/de/f35f0be58d20cc58cf1ba078013a",
+ "build/prefab/windows/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/2b/23/849c8e6286a8de4f6140f249c59a",
+ "build/prefab/windows/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/ba/fd/49fe8a41b0448e2fd81a462618cb"
}
\ No newline at end of file
diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml
index 563dcadb..ecf35539 100644
--- a/.idea/dictionaries/ericf.xml
+++ b/.idea/dictionaries/ericf.xml
@@ -934,6 +934,7 @@
instancer
interstitials
intex
+ intp
introspectable
ipaddress
ipos
diff --git a/assets/src/ba_data/python/_ba.py b/assets/src/ba_data/python/_ba.py
index 667f6921..e7c48f86 100644
--- a/assets/src/ba_data/python/_ba.py
+++ b/assets/src/ba_data/python/_ba.py
@@ -34,7 +34,7 @@ NOTE: This file was autogenerated by gendummymodule; do not edit by hand.
"""
# (hash we can use to see if this file is out of date)
-# SOURCES_HASH=48988468250135652281791058794704714718
+# SOURCES_HASH=289441941088504861465847265420796017643
# I'm sorry Pylint. I know this file saddens you. Be strong.
# pylint: disable=useless-suppression
@@ -855,18 +855,12 @@ class SessionPlayer:
character: str
activityplayer: Optional[ba.Player]
- def assigninput(self, type: Union[str, Tuple[str, ...]],
+ def assigninput(self, type: Union[ba.InputType, Tuple[ba.InputType, ...]],
call: Callable) -> None:
- """assigninput(type: Union[str, Tuple[str, ...]],
+ """assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]],
call: Callable) -> None
Set the python callable to be run for one or more types of input.
- Valid type values are: 'jumpPress', 'jumpRelease', 'punchPress',
- 'punchRelease','bombPress', 'bombRelease', 'pickUpPress',
- 'pickUpRelease', 'upDown','leftRight','upPress', 'upRelease',
- 'downPress', 'downRelease', 'leftPress','leftRelease','rightPress',
- 'rightRelease', 'run', 'flyPress', 'flyRelease', 'startPress',
- 'startRelease'
"""
return None
@@ -2922,22 +2916,6 @@ def music_player_stop() -> None:
return None
-def new_activity(activity_type: Type[ba.Activity],
- settings: dict = None) -> ba.Activity:
- """new_activity(activity_type: Type[ba.Activity],
- settings: dict = None) -> ba.Activity
-
- Instantiates a ba.Activity given a type object.
-
- Category: General Utility Functions
-
- Activities require special setup and thus cannot be directly
- instantiated; You must go through this function.
- """
- import ba # pylint: disable=cyclic-import
- return ba.Activity(settings={})
-
-
def new_host_session(sessiontype: Type[ba.Session],
benchmark_type: str = None) -> None:
"""new_host_session(sessiontype: Type[ba.Session],
@@ -2956,6 +2934,22 @@ def new_replay_session(file_name: str) -> None:
return None
+def newactivity(activity_type: Type[ba.Activity],
+ settings: dict = None) -> ba.Activity:
+ """newactivity(activity_type: Type[ba.Activity],
+ settings: dict = None) -> ba.Activity
+
+ Instantiates a ba.Activity given a type object.
+
+ Category: General Utility Functions
+
+ Activities require special setup and thus cannot be directly
+ instantiated; You must go through this function.
+ """
+ import ba # pylint: disable=cyclic-import
+ return ba.Activity(settings={})
+
+
def newnode(type: str,
owner: ba.Node = None,
attrs: dict = None,
diff --git a/assets/src/ba_data/python/ba/__init__.py b/assets/src/ba_data/python/ba/__init__.py
index 9f1c38b3..26bdf607 100644
--- a/assets/src/ba_data/python/ba/__init__.py
+++ b/assets/src/ba_data/python/ba/__init__.py
@@ -32,7 +32,7 @@ from _ba import (CollideModel, Context, ContextCall, Data, InputDevice,
Vec3, Widget, buttonwidget, camerashake, checkboxwidget,
columnwidget, containerwidget, do_once, emitfx, getactivity,
getcollidemodel, getmodel, getnodes, getsession, getsound,
- gettexture, hscrollwidget, imagewidget, log, new_activity,
+ gettexture, hscrollwidget, imagewidget, log, newactivity,
newnode, playsound, printnodes, printobjects, pushcall, quit,
rowwidget, safecolor, screenmessage, scrollwidget,
set_analytics_screen, charstr, textwidget, time, timer,
@@ -46,7 +46,7 @@ from ba._coopgame import CoopGameActivity
from ba._coopsession import CoopSession
from ba._dependency import (Dependency, DependencyComponent, DependencySet,
AssetPackage)
-from ba._enums import TimeType, Permission, TimeFormat, SpecialChar
+from ba._enums import TimeType, Permission, TimeFormat, SpecialChar, InputType
from ba._error import (
print_exception, print_error, ContextError, NotFoundError,
PlayerNotFoundError, SessionPlayerNotFoundError, NodeNotFoundError,
@@ -55,7 +55,7 @@ from ba._error import (
SessionNotFoundError, DelegateNotFoundError, DependencyError)
from ba._freeforallsession import FreeForAllSession
from ba._gameactivity import GameActivity
-from ba._gameresults import TeamGameResults
+from ba._gameresults import GameResults
from ba._gamesettings import (Setting, IntSetting, FloatSetting, ChoiceSetting,
BoolSetting, IntChoiceSetting,
FloatChoiceSetting)
diff --git a/assets/src/ba_data/python/ba/_activitytypes.py b/assets/src/ba_data/python/ba/_activitytypes.py
index 66bbc980..01e3fc55 100644
--- a/assets/src/ba_data/python/ba/_activitytypes.py
+++ b/assets/src/ba_data/python/ba/_activitytypes.py
@@ -26,6 +26,7 @@ from typing import TYPE_CHECKING
import _ba
from ba._activity import Activity
from ba._music import setmusic, MusicType
+from ba._enums import InputType
# False-positive from pylint due to our class-generics-filter.
from ba._player import EmptyPlayer # pylint: disable=W0611
from ba._team import EmptyTeam # pylint: disable=W0611
@@ -229,6 +230,6 @@ class ScoreScreenActivity(Activity[EmptyPlayer, EmptyTeam]):
# Just to be extra careful, don't assign if we're transitioning out.
# (though theoretically that would be ok).
if not self.is_transitioning_out() and player:
- player.assigninput(
- ('jumpPress', 'punchPress', 'bombPress', 'pickUpPress'),
- self._player_press)
+ player.assigninput((InputType.JUMP_PRESS, InputType.PUNCH_PRESS,
+ InputType.BOMB_PRESS, InputType.PICK_UP_PRESS),
+ self._player_press)
diff --git a/assets/src/ba_data/python/ba/_benchmark.py b/assets/src/ba_data/python/ba/_benchmark.py
index 7646f03a..539cc31d 100644
--- a/assets/src/ba_data/python/ba/_benchmark.py
+++ b/assets/src/ba_data/python/ba/_benchmark.py
@@ -53,7 +53,7 @@ def run_cpu_benchmark() -> None:
cfg['Graphics Quality'] = 'Low'
cfg.apply()
self.benchmark_type = 'cpu'
- self.setactivity(_ba.new_activity(tutorial.TutorialActivity))
+ self.setactivity(_ba.newactivity(tutorial.TutorialActivity))
def __del__(self) -> None:
diff --git a/assets/src/ba_data/python/ba/_coopsession.py b/assets/src/ba_data/python/ba/_coopsession.py
index ac2b4add..926d1cc9 100644
--- a/assets/src/ba_data/python/ba/_coopsession.py
+++ b/assets/src/ba_data/python/ba/_coopsession.py
@@ -98,7 +98,7 @@ class CoopSession(Session):
self._custom_menu_ui: List[Dict[str, Any]] = []
# Start our joining screen.
- self.setactivity(_ba.new_activity(CoopJoinActivity))
+ self.setactivity(_ba.newactivity(CoopJoinActivity))
self._next_game_instance: Optional[ba.GameActivity] = None
self._next_game_level_name: Optional[str] = None
@@ -126,7 +126,7 @@ class CoopSession(Session):
if setting.name not in settings:
settings[setting.name] = setting.default
- newactivity = _ba.new_activity(gametype, settings)
+ newactivity = _ba.newactivity(gametype, settings)
assert isinstance(newactivity, GameActivity)
self._current_game_instance: GameActivity = newactivity
@@ -150,7 +150,7 @@ class CoopSession(Session):
settings[setting.name] = setting.default
# We wanna be in the activity's context while taking it down.
- newactivity = _ba.new_activity(gametype, settings)
+ newactivity = _ba.newactivity(gametype, settings)
assert isinstance(newactivity, GameActivity)
self._next_game_instance = newactivity
self._next_game_level_name = nextlevel.name
@@ -165,7 +165,7 @@ class CoopSession(Session):
and self._tutorial_activity is None
and not self._ran_tutorial_activity):
from bastd.tutorial import TutorialActivity
- self._tutorial_activity = _ba.new_activity(TutorialActivity)
+ self._tutorial_activity = _ba.newactivity(TutorialActivity)
def get_custom_menu_entries(self) -> List[Dict[str, Any]]:
return self._custom_menu_ui
@@ -250,7 +250,7 @@ class CoopSession(Session):
from ba._lang import Lstr
from ba._general import WeakCall
from ba._coopgame import CoopGameActivity
- from ba._gameresults import TeamGameResults
+ from ba._gameresults import GameResults
from ba._score import ScoreType
from ba._player import PlayerInfo
from bastd.tutorial import TutorialActivity
@@ -258,10 +258,10 @@ class CoopSession(Session):
app = _ba.app
- # If we're running a TeamGameActivity we'll have a TeamGameResults
+ # If we're running a TeamGameActivity we'll have a GameResults
# as results. Otherwise its an old CoopGameActivity so its giving
# us a dict of random stuff.
- if isinstance(results, TeamGameResults):
+ if isinstance(results, GameResults):
outcome = 'defeat' # This can't be 'beaten'.
else:
try:
@@ -338,13 +338,13 @@ class CoopSession(Session):
# If we were in a tutorial, just pop a transition to get to the
# actual round.
elif isinstance(activity, TutorialActivity):
- self.setactivity(_ba.new_activity(TransitionActivity))
+ self.setactivity(_ba.newactivity(TransitionActivity))
else:
playerinfos: List[ba.PlayerInfo]
# Generic team games.
- if isinstance(results, TeamGameResults):
+ if isinstance(results, GameResults):
playerinfos = results.playerinfos
score = results.get_team_score(results.sessionteams[0])
fail_message = None
@@ -390,10 +390,10 @@ class CoopSession(Session):
if outcome == 'restart':
# This will pop up back in the same round.
- self.setactivity(_ba.new_activity(TransitionActivity))
+ self.setactivity(_ba.newactivity(TransitionActivity))
else:
self.setactivity(
- _ba.new_activity(
+ _ba.newactivity(
CoopScoreScreen, {
'playerinfos': playerinfos,
'score': score,
diff --git a/assets/src/ba_data/python/ba/_dualteamsession.py b/assets/src/ba_data/python/ba/_dualteamsession.py
index c07e0451..b53eb62f 100644
--- a/assets/src/ba_data/python/ba/_dualteamsession.py
+++ b/assets/src/ba_data/python/ba/_dualteamsession.py
@@ -35,8 +35,11 @@ class DualTeamSession(MultiTeamSession):
Category: Gameplay Classes
"""
+
+ # Base class overrides:
use_teams = True
use_team_colors = True
+
_playlist_selection_var = 'Team Tournament Playlist Selection'
_playlist_randomize_var = 'Team Tournament Playlist Randomize'
_playlists_var = 'Team Tournament Playlists'
@@ -45,28 +48,28 @@ class DualTeamSession(MultiTeamSession):
_ba.increment_analytics_count('Teams session start')
super().__init__()
- def _switch_to_score_screen(self, results: ba.TeamGameResults) -> None:
+ def _switch_to_score_screen(self, results: ba.GameResults) -> None:
# pylint: disable=cyclic-import
from bastd.activity.drawscore import DrawScoreScreenActivity
from bastd.activity.dualteamscore import (
TeamVictoryScoreScreenActivity)
from bastd.activity.multiteamvictory import (
TeamSeriesVictoryScoreScreenActivity)
- winners = results.winnergroups
+ winnergroups = results.winnergroups
# If everyone has the same score, call it a draw.
- if len(winners) < 2:
- self.setactivity(_ba.new_activity(DrawScoreScreenActivity))
+ if len(winnergroups) < 2:
+ self.setactivity(_ba.newactivity(DrawScoreScreenActivity))
else:
- winner = winners[0].teams[0]
+ winner = winnergroups[0].teams[0]
winner.customdata['score'] += 1
# If a team has won, show final victory screen.
if winner.customdata['score'] >= (self._series_length - 1) / 2 + 1:
self.setactivity(
- _ba.new_activity(TeamSeriesVictoryScoreScreenActivity,
- {'winner': winner}))
+ _ba.newactivity(TeamSeriesVictoryScoreScreenActivity,
+ {'winner': winner}))
else:
self.setactivity(
- _ba.new_activity(TeamVictoryScoreScreenActivity,
- {'winner': winner}))
+ _ba.newactivity(TeamVictoryScoreScreenActivity,
+ {'winner': winner}))
diff --git a/assets/src/ba_data/python/ba/_enums.py b/assets/src/ba_data/python/ba/_enums.py
index 4d69467e..3d78425a 100644
--- a/assets/src/ba_data/python/ba/_enums.py
+++ b/assets/src/ba_data/python/ba/_enums.py
@@ -23,6 +23,39 @@
from enum import Enum
+class InputType(Enum):
+ """Types of input a controller can send to the game.
+
+ Category: Enums
+
+ """
+ UP_DOWN = 0
+ LEFT_RIGHT = 1
+ JUMP_PRESS = 2
+ JUMP_RELEASE = 3
+ PUNCH_PRESS = 4
+ PUNCH_RELEASE = 5
+ BOMB_PRESS = 6
+ BOMB_RELEASE = 7
+ PICK_UP_PRESS = 8
+ PICK_UP_RELEASE = 9
+ RUN = 10
+ FLY_PRESS = 11
+ FLY_RELEASE = 12
+ START_PRESS = 13
+ START_RELEASE = 14
+ HOLD_POSITION_PRESS = 15
+ HOLD_POSITION_RELEASE = 16
+ LEFT_PRESS = 17
+ LEFT_RELEASE = 18
+ RIGHT_PRESS = 19
+ RIGHT_RELEASE = 20
+ UP_PRESS = 21
+ UP_RELEASE = 22
+ DOWN_PRESS = 23
+ DOWN_RELEASE = 24
+
+
class TimeType(Enum):
"""Specifies the type of time for various operations to target/use.
diff --git a/assets/src/ba_data/python/ba/_freeforallsession.py b/assets/src/ba_data/python/ba/_freeforallsession.py
index 71ac1088..2f39ba5c 100644
--- a/assets/src/ba_data/python/ba/_freeforallsession.py
+++ b/assets/src/ba_data/python/ba/_freeforallsession.py
@@ -69,7 +69,7 @@ class FreeForAllSession(MultiTeamSession):
_ba.increment_analytics_count('Free-for-all session start')
super().__init__()
- def _switch_to_score_screen(self, results: ba.TeamGameResults) -> None:
+ def _switch_to_score_screen(self, results: ba.GameResults) -> None:
# pylint: disable=cyclic-import
from bastd.activity.drawscore import DrawScoreScreenActivity
from bastd.activity.multiteamvictory import (
@@ -82,8 +82,7 @@ class FreeForAllSession(MultiTeamSession):
# call it a draw.
if len(self.players) > 1 and len(winners) < 2:
self.setactivity(
- _ba.new_activity(DrawScoreScreenActivity,
- {'results': results}))
+ _ba.newactivity(DrawScoreScreenActivity, {'results': results}))
else:
# Award different point amounts based on number of players.
point_awards = self.get_ffa_point_awards()
@@ -106,9 +105,9 @@ class FreeForAllSession(MultiTeamSession):
and series_winners[0].customdata['score'] !=
series_winners[1].customdata['score'])):
self.setactivity(
- _ba.new_activity(TeamSeriesVictoryScoreScreenActivity,
- {'winner': series_winners[0]}))
+ _ba.newactivity(TeamSeriesVictoryScoreScreenActivity,
+ {'winner': series_winners[0]}))
else:
self.setactivity(
- _ba.new_activity(FreeForAllVictoryScoreScreenActivity,
- {'results': results}))
+ _ba.newactivity(FreeForAllVictoryScoreScreenActivity,
+ {'results': results}))
diff --git a/assets/src/ba_data/python/ba/_gameactivity.py b/assets/src/ba_data/python/ba/_gameactivity.py
index 66f8d263..a6320fa8 100644
--- a/assets/src/ba_data/python/ba/_gameactivity.py
+++ b/assets/src/ba_data/python/ba/_gameactivity.py
@@ -820,11 +820,11 @@ class GameActivity(Activity[PlayerType, TeamType]):
results: Any = None,
delay: float = 0.0,
force: bool = False) -> None:
- from ba._gameresults import TeamGameResults
+ from ba._gameresults import GameResults
# If results is a standard team-game-results, associate it with us
# so it can grab our score prefs.
- if isinstance(results, TeamGameResults):
+ if isinstance(results, GameResults):
results.set_game(self)
# If we had a standard time-limit that had not expired, stop it so
diff --git a/assets/src/ba_data/python/ba/_gameresults.py b/assets/src/ba_data/python/ba/_gameresults.py
index 58e0a285..8b850f80 100644
--- a/assets/src/ba_data/python/ba/_gameresults.py
+++ b/assets/src/ba_data/python/ba/_gameresults.py
@@ -39,9 +39,9 @@ class WinnerGroup:
teams: Sequence[ba.SessionTeam]
-class TeamGameResults:
+class GameResults:
"""
- Results for a completed ba.TeamGameActivity.
+ Results for a completed game.
Category: Gameplay Classes
@@ -65,7 +65,7 @@ class TeamGameResults:
def set_game(self, game: ba.GameActivity) -> None:
"""Set the game instance these results are applying to."""
if self._game_set:
- raise RuntimeError('Game set twice for TeamGameResults.')
+ raise RuntimeError('Game set twice for GameResults.')
self._game_set = True
self._sessionteams = [weakref.ref(team) for team in game.teams]
scoreconfig = game.getscoreconfig()
diff --git a/assets/src/ba_data/python/ba/_lobby.py b/assets/src/ba_data/python/ba/_lobby.py
index 10cfa563..c3564c81 100644
--- a/assets/src/ba_data/python/ba/_lobby.py
+++ b/assets/src/ba_data/python/ba/_lobby.py
@@ -30,7 +30,7 @@ import _ba
from ba._error import print_exception, print_error, NotFoundError
from ba._gameutils import animate, animate_array
from ba._lang import Lstr
-from ba._enums import SpecialChar
+from ba._enums import SpecialChar, InputType
from ba._profile import get_player_profile_colors
if TYPE_CHECKING:
@@ -515,32 +515,36 @@ class Chooser:
if not ready:
self._sessionplayer.assigninput(
- 'leftPress', Call(self.handlemessage,
- ChangeMessage('team', -1)))
+ InputType.LEFT_PRESS,
+ Call(self.handlemessage, ChangeMessage('team', -1)))
self._sessionplayer.assigninput(
- 'rightPress', Call(self.handlemessage,
- ChangeMessage('team', 1)))
+ InputType.RIGHT_PRESS,
+ Call(self.handlemessage, ChangeMessage('team', 1)))
self._sessionplayer.assigninput(
- 'bombPress',
+ InputType.BOMB_PRESS,
Call(self.handlemessage, ChangeMessage('character', 1)))
self._sessionplayer.assigninput(
- 'upPress',
+ InputType.UP_PRESS,
Call(self.handlemessage, ChangeMessage('profileindex', -1)))
self._sessionplayer.assigninput(
- 'downPress',
+ InputType.DOWN_PRESS,
Call(self.handlemessage, ChangeMessage('profileindex', 1)))
self._sessionplayer.assigninput(
- ('jumpPress', 'pickUpPress', 'punchPress'),
+ (InputType.JUMP_PRESS, InputType.PICK_UP_PRESS,
+ InputType.PUNCH_PRESS),
Call(self.handlemessage, ChangeMessage('ready', 1)))
self._ready = False
self._update_text()
self._sessionplayer.setname('untitled', real=False)
else:
self._sessionplayer.assigninput(
- ('leftPress', 'rightPress', 'upPress', 'downPress',
- 'jumpPress', 'bombPress', 'pickUpPress'), self._do_nothing)
+ (InputType.LEFT_PRESS, InputType.RIGHT_PRESS,
+ InputType.UP_PRESS, InputType.DOWN_PRESS,
+ InputType.JUMP_PRESS, InputType.BOMB_PRESS,
+ InputType.PICK_UP_PRESS), self._do_nothing)
self._sessionplayer.assigninput(
- ('jumpPress', 'bombPress', 'pickUpPress', 'punchPress'),
+ (InputType.JUMP_PRESS, InputType.BOMB_PRESS,
+ InputType.PICK_UP_PRESS, InputType.PUNCH_PRESS),
Call(self.handlemessage, ChangeMessage('ready', 0)))
# Store the last profile picked by this input for reuse.
diff --git a/assets/src/ba_data/python/ba/_multiteamsession.py b/assets/src/ba_data/python/ba/_multiteamsession.py
index 91a17e5c..90bd4b1f 100644
--- a/assets/src/ba_data/python/ba/_multiteamsession.py
+++ b/assets/src/ba_data/python/ba/_multiteamsession.py
@@ -85,7 +85,7 @@ class MultiTeamSession(Session):
from bastd.tutorial import TutorialActivity
# Get this loading.
- self._tutorial_activity_instance = _ba.new_activity(
+ self._tutorial_activity_instance = _ba.newactivity(
TutorialActivity)
else:
self._tutorial_activity_instance = None
@@ -133,7 +133,7 @@ class MultiTeamSession(Session):
self._instantiate_next_game()
# Start in our custom join screen.
- self.setactivity(_ba.new_activity(MultiTeamJoinActivity))
+ self.setactivity(_ba.newactivity(MultiTeamJoinActivity))
def get_ffa_series_length(self) -> int:
"""Return free-for-all series length."""
@@ -165,7 +165,7 @@ class MultiTeamSession(Session):
return _ba.app.config.get('Free-for-All Max Players', 8)
def _instantiate_next_game(self) -> None:
- self._next_game_instance = _ba.new_activity(
+ self._next_game_instance = _ba.newactivity(
self._next_game_spec['resolved_type'],
self._next_game_spec['settings'])
@@ -187,7 +187,7 @@ class MultiTeamSession(Session):
# to transition us into a round gracefully (otherwise we'd snap from
# one terrain to another instantly).
elif isinstance(activity, TutorialActivity):
- self.setactivity(_ba.new_activity(TransitionActivity))
+ self.setactivity(_ba.newactivity(TransitionActivity))
# If we're in a between-round activity or a restart-activity, hop
# into a round.
@@ -241,7 +241,7 @@ class MultiTeamSession(Session):
def announce_game_results(self,
activity: ba.GameActivity,
- results: ba.TeamGameResults,
+ results: ba.GameResults,
delay: float,
announce_winning_team: bool = True) -> None:
"""Show basic game result at the end of a game.
diff --git a/assets/src/ba_data/python/ba/_player.py b/assets/src/ba_data/python/ba/_player.py
index 3a1c38e1..a07bc61d 100644
--- a/assets/src/ba_data/python/ba/_player.py
+++ b/assets/src/ba_data/python/ba/_player.py
@@ -269,18 +269,13 @@ class Player(Generic[TeamType]):
assert not self._expired
return self._sessionplayer.get_icon()
- def assigninput(self, inputtype: Union[str, Tuple[str, ...]],
+ def assigninput(self, inputtype: Union[ba.InputType, Tuple[ba.InputType,
+ ...]],
call: Callable) -> None:
- """assigninput(type: Union[str, Tuple[str, ...]],
+ """assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]],
call: Callable) -> None
Set the python callable to be run for one or more types of input.
- Valid type values are: 'jumpPress', 'jumpRelease', 'punchPress',
- 'punchRelease','bombPress', 'bombRelease', 'pickUpPress',
- 'pickUpRelease', 'upDown','leftRight','upPress', 'upRelease',
- 'downPress', 'downRelease', 'leftPress','leftRelease','rightPress',
- 'rightRelease', 'run', 'flyPress', 'flyRelease', 'startPress',
- 'startRelease'
"""
assert self._postinited
assert not self._expired
diff --git a/assets/src/ba_data/python/ba/_session.py b/assets/src/ba_data/python/ba/_session.py
index a290efde..2025cc42 100644
--- a/assets/src/ba_data/python/ba/_session.py
+++ b/assets/src/ba_data/python/ba/_session.py
@@ -177,7 +177,7 @@ class Session:
self._ending = False
self._activity_should_end_immediately = False
self._activity_should_end_immediately_results: (
- Optional[ba.TeamGameResults]) = None
+ Optional[ba.GameResults]) = None
self._activity_should_end_immediately_delay = 0.0
# Create static teams if we're using them.
@@ -348,7 +348,7 @@ class Session:
'_launch_end_session_activity called twice (since_last=' +
str(since_last) + ')')
self._launch_end_session_activity_time = curtime
- self.setactivity(_ba.new_activity(EndSessionActivity))
+ self.setactivity(_ba.newactivity(EndSessionActivity))
self._wants_to_end = False
self._ending = True # Prevent further actions.
diff --git a/assets/src/ba_data/python/ba/_teamgame.py b/assets/src/ba_data/python/ba/_teamgame.py
index b6cb3386..0bd3736c 100644
--- a/assets/src/ba_data/python/ba/_teamgame.py
+++ b/assets/src/ba_data/python/ba/_teamgame.py
@@ -26,7 +26,7 @@ from typing import TYPE_CHECKING, TypeVar
from ba._freeforallsession import FreeForAllSession
from ba._gameactivity import GameActivity
-from ba._gameresults import TeamGameResults
+from ba._gameresults import GameResults
from ba._dualteamsession import DualTeamSession
import _ba
@@ -152,7 +152,7 @@ class TeamGameActivity(GameActivity[PlayerType, TeamType]):
super().end(results, delay=2.0 + announce_delay, force=force)
# Need to do this *after* end end call so that results is valid.
- assert isinstance(results, TeamGameResults)
+ assert isinstance(results, GameResults)
if do_announce and isinstance(session, MultiTeamSession):
session.announce_game_results(
self,
diff --git a/assets/src/ba_data/python/bastd/activity/freeforallvictory.py b/assets/src/ba_data/python/bastd/activity/freeforallvictory.py
index 3dd4232c..d3147b32 100644
--- a/assets/src/ba_data/python/bastd/activity/freeforallvictory.py
+++ b/assets/src/ba_data/python/bastd/activity/freeforallvictory.py
@@ -83,7 +83,7 @@ class FreeForAllVictoryScoreScreenActivity(MultiTeamScoreScreenActivity):
ba.timer(0.3, ba.Call(ba.playsound, self._score_display_sound))
results = self.settings_raw['results']
- assert isinstance(results, ba.TeamGameResults)
+ assert isinstance(results, ba.GameResults)
self.show_player_scores(delay=0.001,
results=results,
scale=1.2,
diff --git a/assets/src/ba_data/python/bastd/activity/multiteamscore.py b/assets/src/ba_data/python/bastd/activity/multiteamscore.py
index 909619b5..c95266d1 100644
--- a/assets/src/ba_data/python/bastd/activity/multiteamscore.py
+++ b/assets/src/ba_data/python/bastd/activity/multiteamscore.py
@@ -70,7 +70,7 @@ class MultiTeamScoreScreenActivity(ScoreScreenActivity):
def show_player_scores(self,
delay: float = 2.5,
- results: Optional[ba.TeamGameResults] = None,
+ results: Optional[ba.GameResults] = None,
scale: float = 1.0,
x_offset: float = 0.0,
y_offset: float = 0.0) -> None:
@@ -87,7 +87,7 @@ class MultiTeamScoreScreenActivity(ScoreScreenActivity):
def _get_prec_score(p_rec: ba.PlayerRecord) -> Optional[int]:
if is_free_for_all and results is not None:
- assert isinstance(results, ba.TeamGameResults)
+ assert isinstance(results, ba.GameResults)
assert p_rec.team.gameteam is not None
val = results.get_team_score(p_rec.team)
return val
@@ -95,7 +95,7 @@ class MultiTeamScoreScreenActivity(ScoreScreenActivity):
def _get_prec_score_str(p_rec: ba.PlayerRecord) -> Union[str, ba.Lstr]:
if is_free_for_all and results is not None:
- assert isinstance(results, ba.TeamGameResults)
+ assert isinstance(results, ba.GameResults)
assert p_rec.team.gameteam is not None
val = results.get_team_score_str(p_rec.team.gameteam)
assert val is not None
@@ -107,7 +107,7 @@ class MultiTeamScoreScreenActivity(ScoreScreenActivity):
# (since they're not in results and that's where we pull their
# scores from)
if results is not None:
- assert isinstance(results, ba.TeamGameResults)
+ assert isinstance(results, ba.GameResults)
player_records = []
assert self.stats
valid_players = list(self.stats.get_records().items())
diff --git a/assets/src/ba_data/python/bastd/actor/playerspaz.py b/assets/src/ba_data/python/bastd/actor/playerspaz.py
index 7d8da8d5..48acc0aa 100644
--- a/assets/src/ba_data/python/bastd/actor/playerspaz.py
+++ b/assets/src/ba_data/python/bastd/actor/playerspaz.py
@@ -143,28 +143,30 @@ class PlayerSpaz(Spaz):
else:
player.resetinput()
- player.assigninput('upDown', self.on_move_up_down)
- player.assigninput('leftRight', self.on_move_left_right)
- player.assigninput('holdPositionPress', self.on_hold_position_press)
- player.assigninput('holdPositionRelease',
+ player.assigninput(ba.InputType.UP_DOWN, self.on_move_up_down)
+ player.assigninput(ba.InputType.LEFT_RIGHT, self.on_move_left_right)
+ player.assigninput(ba.InputType.HOLD_POSITION_PRESS,
+ self.on_hold_position_press)
+ player.assigninput(ba.InputType.HOLD_POSITION_RELEASE,
self.on_hold_position_release)
+ intp = ba.InputType
if enable_jump:
- player.assigninput('jumpPress', self.on_jump_press)
- player.assigninput('jumpRelease', self.on_jump_release)
+ player.assigninput(intp.JUMP_PRESS, self.on_jump_press)
+ player.assigninput(intp.JUMP_RELEASE, self.on_jump_release)
if enable_pickup:
- player.assigninput('pickUpPress', self.on_pickup_press)
- player.assigninput('pickUpRelease', self.on_pickup_release)
+ player.assigninput(intp.PICK_UP_PRESS, self.on_pickup_press)
+ player.assigninput(intp.PICK_UP_RELEASE, self.on_pickup_release)
if enable_punch:
- player.assigninput('punchPress', self.on_punch_press)
- player.assigninput('punchRelease', self.on_punch_release)
+ player.assigninput(intp.PUNCH_PRESS, self.on_punch_press)
+ player.assigninput(intp.PUNCH_RELEASE, self.on_punch_release)
if enable_bomb:
- player.assigninput('bombPress', self.on_bomb_press)
- player.assigninput('bombRelease', self.on_bomb_release)
+ player.assigninput(intp.BOMB_PRESS, self.on_bomb_press)
+ player.assigninput(intp.BOMB_RELEASE, self.on_bomb_release)
if enable_run:
- player.assigninput('run', self.on_run)
+ player.assigninput(intp.RUN, self.on_run)
if enable_fly:
- player.assigninput('flyPress', self.on_fly_press)
- player.assigninput('flyRelease', self.on_fly_release)
+ player.assigninput(intp.FLY_PRESS, self.on_fly_press)
+ player.assigninput(intp.FLY_RELEASE, self.on_fly_release)
self._connected_to_player = player
diff --git a/assets/src/ba_data/python/bastd/game/assault.py b/assets/src/ba_data/python/bastd/game/assault.py
index d1226977..17d6fea2 100644
--- a/assets/src/ba_data/python/bastd/game/assault.py
+++ b/assets/src/ba_data/python/bastd/game/assault.py
@@ -261,7 +261,7 @@ class AssaultGame(ba.TeamGameActivity[Player, Team]):
self.end_game()
def end_game(self) -> None:
- results = ba.TeamGameResults()
+ results = ba.GameResults()
for team in self.teams:
results.set_team_score(team, team.score)
self.end(results=results)
diff --git a/assets/src/ba_data/python/bastd/game/capturetheflag.py b/assets/src/ba_data/python/bastd/game/capturetheflag.py
index 3f709d0b..f12cdde8 100644
--- a/assets/src/ba_data/python/bastd/game/capturetheflag.py
+++ b/assets/src/ba_data/python/bastd/game/capturetheflag.py
@@ -388,7 +388,7 @@ class CaptureTheFlagGame(ba.TeamGameActivity[Player, Team]):
self.end_game()
def end_game(self) -> None:
- results = ba.TeamGameResults()
+ results = ba.GameResults()
for team in self.teams:
results.set_team_score(team, team.score)
self.end(results=results, announce_delay=0.8)
diff --git a/assets/src/ba_data/python/bastd/game/chosenone.py b/assets/src/ba_data/python/bastd/game/chosenone.py
index 95fc6527..b9d4463f 100644
--- a/assets/src/ba_data/python/bastd/game/chosenone.py
+++ b/assets/src/ba_data/python/bastd/game/chosenone.py
@@ -262,7 +262,7 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]):
self._set_chosen_one_player(None)
def end_game(self) -> None:
- results = ba.TeamGameResults()
+ results = ba.GameResults()
for team in self.teams:
results.set_team_score(team,
self._chosen_one_time - team.time_remaining)
diff --git a/assets/src/ba_data/python/bastd/game/conquest.py b/assets/src/ba_data/python/bastd/game/conquest.py
index 7849910b..06ac4d21 100644
--- a/assets/src/ba_data/python/bastd/game/conquest.py
+++ b/assets/src/ba_data/python/bastd/game/conquest.py
@@ -149,8 +149,10 @@ class ConquestGame(ba.TeamGameActivity[Player, Team]):
# We want flags to tell us they've been hit but not react physically.
self._extraflagmat.add_actions(
conditions=('they_have_material', shared.player_material),
- actions=(('modify_part_collision', 'collide', True),
- ('call', 'at_connect', self._handle_flag_player_collide)))
+ actions=(
+ ('modify_part_collision', 'collide', True),
+ ('call', 'at_connect', self._handle_flag_player_collide),
+ ))
def get_instance_description(self) -> Union[str, Sequence]:
return 'Secure all ${ARG1} flags.', len(self.map.flag_points)
@@ -229,7 +231,7 @@ class ConquestGame(ba.TeamGameActivity[Player, Team]):
len(self._flags))
def end_game(self) -> None:
- results = ba.TeamGameResults()
+ results = ba.GameResults()
for team in self.teams:
results.set_team_score(team, team.flags_held)
self.end(results=results)
diff --git a/assets/src/ba_data/python/bastd/game/deathmatch.py b/assets/src/ba_data/python/bastd/game/deathmatch.py
index 0b29ef1f..4a8c95c4 100644
--- a/assets/src/ba_data/python/bastd/game/deathmatch.py
+++ b/assets/src/ba_data/python/bastd/game/deathmatch.py
@@ -211,7 +211,7 @@ class DeathMatchGame(ba.TeamGameActivity[Player, Team]):
self._score_to_win)
def end_game(self) -> None:
- results = ba.TeamGameResults()
+ results = ba.GameResults()
for team in self.teams:
results.set_team_score(team, team.score)
self.end(results=results)
diff --git a/assets/src/ba_data/python/bastd/game/easteregghunt.py b/assets/src/ba_data/python/bastd/game/easteregghunt.py
index bc37fcca..aa0c99ea 100644
--- a/assets/src/ba_data/python/bastd/game/easteregghunt.py
+++ b/assets/src/ba_data/python/bastd/game/easteregghunt.py
@@ -230,7 +230,7 @@ class EasterEggHuntGame(ba.TeamGameActivity[Player, Team]):
self._scoreboard.set_team_value(team, team.score)
def end_game(self) -> None:
- results = ba.TeamGameResults()
+ results = ba.GameResults()
for team in self.teams:
results.set_team_score(team, team.score)
self.end(results)
diff --git a/assets/src/ba_data/python/bastd/game/elimination.py b/assets/src/ba_data/python/bastd/game/elimination.py
index 3ab82c96..14c428fc 100644
--- a/assets/src/ba_data/python/bastd/game/elimination.py
+++ b/assets/src/ba_data/python/bastd/game/elimination.py
@@ -575,7 +575,7 @@ class EliminationGame(ba.TeamGameActivity[Player, Team]):
def end_game(self) -> None:
if self.has_ended():
return
- results = ba.TeamGameResults()
+ results = ba.GameResults()
self._vs_text = None # Kill our 'vs' if its there.
for team in self.teams:
results.set_team_score(team, team.survival_seconds)
diff --git a/assets/src/ba_data/python/bastd/game/football.py b/assets/src/ba_data/python/bastd/game/football.py
index 530ea8ef..c6b12473 100644
--- a/assets/src/ba_data/python/bastd/game/football.py
+++ b/assets/src/ba_data/python/bastd/game/football.py
@@ -266,7 +266,7 @@ class FootballTeamGame(ba.TeamGameActivity[Player, Team]):
self._update_scoreboard()
def end_game(self) -> None:
- results = ba.TeamGameResults()
+ results = ba.GameResults()
for team in self.teams:
results.set_team_score(team, team.score)
self.end(results=results, announce_delay=0.8)
diff --git a/assets/src/ba_data/python/bastd/game/hockey.py b/assets/src/ba_data/python/bastd/game/hockey.py
index 30a64f2b..bf09dff9 100644
--- a/assets/src/ba_data/python/bastd/game/hockey.py
+++ b/assets/src/ba_data/python/bastd/game/hockey.py
@@ -343,7 +343,7 @@ class HockeyGame(ba.TeamGameActivity[Player, Team]):
self._update_scoreboard()
def end_game(self) -> None:
- results = ba.TeamGameResults()
+ results = ba.GameResults()
for team in self.teams:
results.set_team_score(team, team.score)
self.end(results=results)
diff --git a/assets/src/ba_data/python/bastd/game/keepaway.py b/assets/src/ba_data/python/bastd/game/keepaway.py
index 79007e6d..a15de541 100644
--- a/assets/src/ba_data/python/bastd/game/keepaway.py
+++ b/assets/src/ba_data/python/bastd/game/keepaway.py
@@ -190,7 +190,7 @@ class KeepAwayGame(ba.TeamGameActivity[Player, Team]):
self.end_game()
def end_game(self) -> None:
- results = ba.TeamGameResults()
+ results = ba.GameResults()
for team in self.teams:
results.set_team_score(team, self._hold_time - team.timeremaining)
self.end(results=results, announce_delay=0)
diff --git a/assets/src/ba_data/python/bastd/game/kingofthehill.py b/assets/src/ba_data/python/bastd/game/kingofthehill.py
index 5e44602e..079a1f73 100644
--- a/assets/src/ba_data/python/bastd/game/kingofthehill.py
+++ b/assets/src/ba_data/python/bastd/game/kingofthehill.py
@@ -227,7 +227,7 @@ class KingOfTheHillGame(ba.TeamGameActivity[Player, Team]):
self.end_game()
def end_game(self) -> None:
- results = ba.TeamGameResults()
+ results = ba.GameResults()
for team in self.teams:
results.set_team_score(team, self._hold_time - team.time_remaining)
self.end(results=results, announce_delay=0)
diff --git a/assets/src/ba_data/python/bastd/game/meteorshower.py b/assets/src/ba_data/python/bastd/game/meteorshower.py
index 5f7df16f..233894c6 100644
--- a/assets/src/ba_data/python/bastd/game/meteorshower.py
+++ b/assets/src/ba_data/python/bastd/game/meteorshower.py
@@ -263,7 +263,7 @@ class MeteorShowerGame(ba.TeamGameActivity[Player, Team]):
# Ok now calc game results: set a score for each team and then tell
# the game to end.
- results = ba.TeamGameResults()
+ results = ba.GameResults()
# Remember that 'free-for-all' mode is simply a special form
# of 'teams' mode where each player gets their own team, so we can
diff --git a/assets/src/ba_data/python/bastd/game/ninjafight.py b/assets/src/ba_data/python/bastd/game/ninjafight.py
index 54e0a20d..1180dda6 100644
--- a/assets/src/ba_data/python/bastd/game/ninjafight.py
+++ b/assets/src/ba_data/python/bastd/game/ninjafight.py
@@ -172,7 +172,7 @@ class NinjaFightGame(ba.TeamGameActivity[Player, Team]):
assert self._timer is not None
self._timer.stop()
- results = ba.TeamGameResults()
+ results = ba.GameResults()
# If we won, set our score to the elapsed time in milliseconds.
# (there should just be 1 team here since this is co-op).
diff --git a/assets/src/ba_data/python/bastd/game/race.py b/assets/src/ba_data/python/bastd/game/race.py
index 9b050b96..bbe8dc26 100644
--- a/assets/src/ba_data/python/bastd/game/race.py
+++ b/assets/src/ba_data/python/bastd/game/race.py
@@ -712,7 +712,7 @@ class RaceGame(ba.TeamGameActivity[Player, Team]):
endtime=None if self._last_team_time is None else (
self._timer.getstarttime() + self._last_team_time))
- results = ba.TeamGameResults()
+ results = ba.GameResults()
for team in self.teams:
if team.time is not None:
diff --git a/assets/src/ba_data/python/bastd/game/runaround.py b/assets/src/ba_data/python/bastd/game/runaround.py
index acccd945..34d6139d 100644
--- a/assets/src/ba_data/python/bastd/game/runaround.py
+++ b/assets/src/ba_data/python/bastd/game/runaround.py
@@ -68,7 +68,7 @@ class Point(Enum):
@dataclass
class Spawn:
- """Defines a bot spawn."""
+ """Defines a bot spawn event."""
type: Type[SpazBot]
path: int = 0
point: Optional[Point] = None
diff --git a/assets/src/ba_data/python/bastd/game/targetpractice.py b/assets/src/ba_data/python/bastd/game/targetpractice.py
index c646a6af..2945551d 100644
--- a/assets/src/ba_data/python/bastd/game/targetpractice.py
+++ b/assets/src/ba_data/python/bastd/game/targetpractice.py
@@ -202,7 +202,7 @@ class TargetPracticeGame(ba.TeamGameActivity[Player, Team]):
self._scoreboard.set_team_value(team, team.score)
def end_game(self) -> None:
- results = ba.TeamGameResults()
+ results = ba.GameResults()
for team in self.teams:
results.set_team_score(team, team.score)
self.end(results)
diff --git a/assets/src/ba_data/python/bastd/mainmenu.py b/assets/src/ba_data/python/bastd/mainmenu.py
index e0e39deb..ae792fbb 100644
--- a/assets/src/ba_data/python/bastd/mainmenu.py
+++ b/assets/src/ba_data/python/bastd/mainmenu.py
@@ -920,14 +920,14 @@ class MainMenuSession(ba.Session):
super().__init__([self._activity_deps])
self._locked = False
- self.setactivity(ba.new_activity(MainMenuActivity))
+ self.setactivity(ba.newactivity(MainMenuActivity))
def on_activity_end(self, activity: ba.Activity, results: Any) -> None:
if self._locked:
_ba.unlock_all_input()
# Any ending activity leads us into the main menu one.
- self.setactivity(ba.new_activity(MainMenuActivity))
+ self.setactivity(ba.newactivity(MainMenuActivity))
def on_player_request(self, player: ba.SessionPlayer) -> bool:
# Reject all player requests.
diff --git a/assets/src/ba_data/python/bastd/tutorial.py b/assets/src/ba_data/python/bastd/tutorial.py
index 95a65111..3aa0ca0d 100644
--- a/assets/src/ba_data/python/bastd/tutorial.py
+++ b/assets/src/ba_data/python/bastd/tutorial.py
@@ -2413,7 +2413,8 @@ class TutorialActivity(ba.Activity[Player, Team]):
# We just wanna know if this player presses anything.
player.assigninput(
- ('jumpPress', 'punchPress', 'bombPress', 'pickUpPress'),
+ (ba.InputType.JUMP_PRESS, ba.InputType.PUNCH_PRESS,
+ ba.InputType.BOMB_PRESS, ba.InputType.PICK_UP_PRESS),
ba.Call(self._player_pressed_button, player))
def on_player_leave(self, player: Player) -> None:
diff --git a/docs/ba_module.md b/docs/ba_module.md
index 1ecb47b6..c3fadfde 100644
--- a/docs/ba_module.md
+++ b/docs/ba_module.md
@@ -1,5 +1,5 @@
-
last updated on 2020-06-02 for Ballistica version 1.5.0 build 20042
+last updated on 2020-06-02 for Ballistica version 1.5.0 build 20043
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!
@@ -20,6 +20,7 @@
ba.NodeActor
ba.Chooser
+ ba.GameResults
ba.InputDevice
ba.Level
ba.Lobby
@@ -50,7 +51,6 @@
- ba.TeamGameResults
@@ -87,7 +87,7 @@
- ba.is_browser_likely_available()
- ba.is_point_in_box()
- ba.log()
- - ba.new_activity()
+ - ba.newactivity()
- ba.normalized_color()
- ba.open_url()
- ba.print_error()
@@ -182,6 +182,7 @@
- ba.DeathType
+ - ba.InputType
- ba.MusicPlayMode
- ba.MusicType
- ba.Permission
@@ -2757,6 +2758,102 @@ If the time-limit expires, end_game() will be called.
Return whether this game supports the provided Session type.
+
+
+
+<top level class>
+
+
+Results for a completed game.
+
+Category: Gameplay Classes
+
+Upon completion, a game should fill one of these out and pass it to its
+ba.Activity.end() call.
+
+Attributes:
+
+
+-
+
bool
+Whether lower scores are better.
+
+
+-
+
List[ba.PlayerInfo]
+Get info about the players represented by the results.
+
+
+-
+
str
+The label associated with scores ('points', etc).
+
+
+-
+
ba.ScoreType
+The type of score.
+
+
+-
+
List[ba.SessionTeam]
+Return all ba.SessionTeams in the results.
+
+
+-
+
List[WinnerGroup]
+Get an ordered list of winner groups.
+
+
+-
+
Optional[ba.SessionTeam]
+The winning ba.SessionTeam if there is exactly one, or else None.
+
+
+
+Methods:
+
+
+-
+
ba.GameResults()
+
+Instantiate a results instance.
+
+
+-
+
get_team_score(self, sessionteam: Union[ba.SessionTeam]) -> Optional[int]
+
+Return the score for a given ba.SessionTeam.
+
+
+-
+
get_team_score_str(self, team: ba.Team) -> ba.Lstr
+
+Return the score for the given ba.Team as an Lstr.
+
+(properly formatted for the score type.)
+
+
+-
+
has_score_for_team(self, sessionteam: ba.SessionTeam) -> bool
+
+Return whether there is a score for a given team.
+
+
+-
+
set_game(self, game: ba.GameActivity) -> None
+
+Set the game instance these results are applying to.
+
+
+-
+
set_team_score(self, team: ba.Team, score: Optional[int]) -> None
+
+Set the score for a given ba.Team.
+
+This can be a number or None.
+(see the none_is_winner arg in the constructor)
+
@@ -2914,6 +3011,43 @@ prefs, etc.
Methods:
<all methods inherited from ba.NotFoundError>
+Inherits from: enum.Enum
+Types of input a controller can send to the game.
+
+Category: Enums
+
+
+
+Values:
+
+- UP_DOWN
+- LEFT_RIGHT
+- JUMP_PRESS
+- JUMP_RELEASE
+- PUNCH_PRESS
+- PUNCH_RELEASE
+- BOMB_PRESS
+- BOMB_RELEASE
+- PICK_UP_PRESS
+- PICK_UP_RELEASE
+- RUN
+- FLY_PRESS
+- FLY_RELEASE
+- START_PRESS
+- START_RELEASE
+- HOLD_POSITION_PRESS
+- HOLD_POSITION_RELEASE
+- LEFT_PRESS
+- LEFT_RELEASE
+- RIGHT_PRESS
+- RIGHT_RELEASE
+- UP_PRESS
+- UP_RELEASE
+- DOWN_PRESS
+- DOWN_RELEASE
+
+
Inherits from: ba.ChoiceSetting, ba.Setting
An int setting with multiple choices.
@@ -3615,7 +3749,7 @@ Use ba.getmodel() to instantiate one.
-
-
announce_game_results(self, activity: ba.GameActivity, results: ba.TeamGameResults, delay: float, announce_winning_team: bool = True) -> None
+announce_game_results(self, activity: ba.GameActivity, results: ba.GameResults, delay: float, announce_winning_team: bool = True) -> None
Show basic game result at the end of a game.
@@ -4134,18 +4268,12 @@ even if myactor is set to None.
-
-
assigninput(self, inputtype: Union[str, Tuple[str, ...]], call: Callable) -> None
+assigninput(self, inputtype: Union[ba.InputType, Tuple[ba.InputType, ...]], call: Callable) -> None
-assigninput(type: Union[str, Tuple[str, ...]],
+
assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]],
call: Callable) -> None
-Set the python callable to be run for one or more types of input.
-Valid type values are: 'jumpPress', 'jumpRelease', 'punchPress',
- 'punchRelease','bombPress', 'bombRelease', 'pickUpPress',
- 'pickUpRelease', 'upDown','leftRight','upPress', 'upRelease',
- 'downPress', 'downRelease', 'leftPress','leftRelease','rightPress',
- 'rightRelease', 'run', 'flyPress', 'flyRelease', 'startPress',
- 'startRelease'
+Set the python callable to be run for one or more types of input.
-
@@ -4828,16 +4956,10 @@ is still in its lobby selecting a team/etc. then a
-
-
assigninput(type: Union[str, Tuple[str, ...]],
+assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]],
call: Callable) -> None
-Set the python callable to be run for one or more types of input.
-Valid type values are: 'jumpPress', 'jumpRelease', 'punchPress',
- 'punchRelease','bombPress', 'bombRelease', 'pickUpPress',
- 'pickUpRelease', 'upDown','leftRight','upPress', 'upRelease',
- 'downPress', 'downRelease', 'leftPress','leftRelease','rightPress',
- 'rightRelease', 'run', 'flyPress', 'flyRelease', 'startPress',
- 'startRelease'
+Set the python callable to be run for one or more types of input.
-
@@ -5404,102 +5526,6 @@ on the ba.Player and their ba.DualTeamSessions and ba.FreeForAllSessions;
False otherwise.
-
-
-
-<top level class>
-
-
-Results for a completed ba.TeamGameActivity.
-
-Category: Gameplay Classes
-
-Upon completion, a game should fill one of these out and pass it to its
-ba.Activity.end() call.
-
-Attributes:
-
-
--
-
bool
-Whether lower scores are better.
-
-
--
-
List[ba.PlayerInfo]
-Get info about the players represented by the results.
-
-
--
-
str
-The label associated with scores ('points', etc).
-
-
--
-
ba.ScoreType
-The type of score.
-
-
--
-
List[ba.SessionTeam]
-Return all ba.SessionTeams in the results.
-
-
--
-
List[WinnerGroup]
-Get an ordered list of winner groups.
-
-
--
-
Optional[ba.SessionTeam]
-The winning ba.SessionTeam if there is exactly one, or else None.
-
-
-
-Methods:
-
-
--
-
ba.TeamGameResults()
-
-Instantiate a results instance.
-
-
--
-
get_team_score(self, sessionteam: Union[ba.SessionTeam]) -> Optional[int]
-
-Return the score for a given ba.SessionTeam.
-
-
--
-
get_team_score_str(self, team: ba.Team) -> ba.Lstr
-
-Return the score for the given ba.Team as an Lstr.
-
-(properly formatted for the score type.)
-
-
--
-
has_score_for_team(self, sessionteam: ba.SessionTeam) -> bool
-
-Return whether there is a score for a given team.
-
-
--
-
set_game(self, game: ba.GameActivity) -> None
-
-Set the game instance these results are applying to.
-
-
--
-
set_team_score(self, team: ba.Team, score: Optional[int]) -> None
-
-Set the score for a given ba.Team.
-
-This can be a number or None.
-(see the none_is_winner arg in the constructor)
-
@@ -6375,8 +6401,8 @@ issues unless to_server is False.
so in most cases you can just use that.
-new_activity(activity_type: Type[ba.Activity],
+newactivity(activity_type: Type[ba.Activity],
settings: dict = None) -> ba.Activity
Instantiates a ba.Activity given a type object.
diff --git a/tools/update_project b/tools/update_project
index 008ec748..f50d074b 100755
--- a/tools/update_project
+++ b/tools/update_project
@@ -145,7 +145,7 @@ class App:
if os.path.exists('tools/gendummymodule.py'):
if os.system('tools/gendummymodule.py' + self._checkarg) != 0:
print(
- f'{Clr.RED}Error checking/updating dummy module{Clr.RST}')
+ f'{Clr.RED}Error checking/updating dummy module.{Clr.RST}')
sys.exit(255)
def _update_docs_md(self) -> None:
@@ -636,33 +636,32 @@ class App:
def _update_assets_makefile(self) -> None:
assert os.path.exists('tools/update_assets_makefile')
if os.system('tools/update_assets_makefile' + self._checkarg) != 0:
- print(Clr.RED + 'Error checking/updating assets Makefile' +
- Clr.RST)
+ print(
+ f'{Clr.RED}Error checking/updating assets Makefile.f{Clr.RST}')
sys.exit(255)
def _update_generated_code_makefile(self) -> None:
if os.path.exists('tools/update_generated_code_makefile'):
if os.system('tools/update_generated_code_makefile' +
self._checkarg) != 0:
- print(Clr.RED +
- 'Error checking/updating generated-code Makefile' +
- Clr.RST)
+ print(f'{Clr.RED}Error checking/updating'
+ f' generated-code Makefile{Clr.RED}')
sys.exit(255)
def _update_resources_makefile(self) -> None:
if os.path.exists('tools/update_resources_makefile'):
if os.system('tools/update_resources_makefile' +
self._checkarg) != 0:
- print(Clr.RED + 'Error checking/updating resources Makefile' +
- Clr.RST)
+ print(f'{Clr.RED}Error checking/updating'
+ f' resources Makefile.{Clr.RST}')
sys.exit(255)
def _update_python_enums_module(self) -> None:
if os.path.exists('tools/update_python_enums_module'):
if os.system('tools/update_python_enums_module' +
self._checkarg) != 0:
- print(Clr.RED + 'Error checking/updating python enums module' +
- Clr.RST)
+ print(f'{Clr.RED}Error checking/updating'
+ f' python enums module.{Clr.RST}')
sys.exit(255)