bascenev1 package¶
- class bascenev1.Activity(settings: dict)[source]¶
Bases:
GenericUnits of execution wrangled by a
bascenev1.Session.Examples of activities include games, score-screens, cutscenes, etc. A
bascenev1.Sessionhas one ‘current’ activity at any time, though their existence can overlap during transitions.- add_actor_weak_ref(actor: bascenev1.Actor) None[source]¶
Add a weak-ref to a
bascenev1.Actorto the activity.(called by the
bascenev1.Actorbase class)
- allow_kick_idle_players = True¶
Whether idle players can potentially be kicked (should not happen in menus/etc).
- allow_mid_activity_joins: bool = True¶
Whether players should be allowed to join in the middle of this activity. Note that a
bascenev1.Sessionmay not allow mid-activity-joins even if the activity says it is ok.
- allow_pausing = False¶
Whether scene-time should still progress when in menus/etc.
- announce_player_deaths = False¶
Whether to print every time a player dies. This can be pertinent in games such as Death-Match but can be annoying in games where it doesn’t matter.
- can_show_ad_on_death = False¶
Is it ok to show an ad after this activity ends before showing the next activity?
- property context: bascenev1.ContextRef¶
A context-ref pointing at this activity.
- create_player(sessionplayer: bascenev1.SessionPlayer) PlayerT[source]¶
Create a
bascenev1.Playerinstance for this activity.Note that the player object should not be used at this point as it is not yet fully wired up; wait for
bascenev1.Activity.on_player_join()for that.
- create_team(sessionteam: bascenev1.SessionTeam) TeamT[source]¶
Create a
bascenev1.Teaminstance for this activity.Subclasses can override this if the activity’s team class requires a custom constructor; otherwise it will be called with no args. Note that the team object should not be used at this point as it is not yet fully wired up; wait for
bascenev1.Activity.on_team_join()for that.
- property customdata: dict¶
Entities needing to store simple data with an activity can put it here. This dict will be deleted when the activity expires, so contained objects generally do not need to worry about handling expired activities.
- end(results: Any = None, delay: float = 0.0, force: bool = False) None[source]¶
Commence activity shutdown and delivers results to the session.
‘delay’ is the time delay before the Activity actually ends (in seconds). Further end calls will be ignored up until this time, unless ‘force’ is True, in which case the new results will replace the old.
- property expired: bool¶
Whether the activity is expired.
An activity is set as expired when shutting down. At this point no new nodes, timers, etc should be made, run, etc, and the activity should be considered a ‘zombie’.
- property globalsnode: bascenev1.Node¶
The ‘globals’
Nodefor the activity.This contains various global controls and values.
- has_begun() bool[source]¶
Whether
on_begin()has run.
- has_transitioned_in() bool[source]¶
Whether
on_transition_in()has run.
- inherits_music = False¶
Set this to True to keep playing the music from the previous activity (without even restarting it).
- inherits_slow_motion = False¶
Set this to True to inherit slow motion setting from previous activity (useful for transitions to avoid hitches).
- inherits_tint = False¶
Set this to true to inherit screen tint/vignette colors from the previous activity (useful to prevent sudden color changes during transitions).
- inherits_vr_camera_offset = False¶
Set this to true to inherit VR camera offsets from the previous activity (useful for preventing sporadic camera movement during transitions).
- inherits_vr_overlay_center = False¶
Set this to true to inherit (non-fixed) VR overlay positioning from the previous activity (useful for prevent sporadic overlay jostling during transitions).
- is_joining_activity = False¶
Joining activities are for waiting for initial player joins. They are treated slightly differently than regular activities, mainly in that all players are passed to the activity at once instead of as each joins.
- is_transitioning_out() bool[source]¶
Whether
on_transition_out()has run.
- on_begin() None[source]¶
Called once the previous activity has finished transitioning out.
At this point the activity’s initial players and teams are filled in and it should begin its actual game logic.
- on_expire() None[source]¶
Called when your activity is being expired.
If your activity has created anything explicitly that may be retaining a strong reference to the activity and preventing it from dying, you should clear that out here. From this point on your activity’s sole purpose in life is to hit zero references and die so the next activity can begin.
- on_player_join(player: PlayerT) None[source]¶
Called when a player joins the activity.
(including the initial set of players)
- on_team_join(team: TeamT) None[source]¶
Called when a new team joins the activity.
(including the initial set of teams)
- on_transition_in() None[source]¶
Called when the activity is first becoming visible.
Upon this call, the activity should fade in backgrounds, start playing music, etc. It does not yet have access to players or teams, however. They remain owned by the previous activity up until
on_begin()is called.
- on_transition_out() None[source]¶
Called when your activity begins transitioning out.
Note that this may happen at any time even if
bascenev1.Activity.end()has not been called.
- players: list[PlayerT]¶
The list of players in the activity. This gets populated just before
on_begin()is called and is updated automatically as players join or leave the game.
- remove_player(sessionplayer: bascenev1.SessionPlayer) None[source]¶
Remove a player from the activity while it is running.
(internal)
- retain_actor(actor: bascenev1.Actor) None[source]¶
Add a strong-ref to a
bascenev1.Actorto this activity.The reference will be lazily released once
bascenev1.Actor.exists()returns False for the actor. Thebascenev1.Actor.autoretain()method is a convenient way to access this same functionality.
- property session: bascenev1.Session¶
The session this activity belongs to.
Raises a
SessionNotFoundErrorif the session no longer exists.
- settings_raw: dict[str, Any]¶
The settings dict passed in when the activity was made. This attribute is deprecated and should be avoided when possible; activities should pull all values they need from the
settingsarg passed to the activity’s __init__ call.
- slow_motion = False¶
If True, runs in slow motion and turns down sound pitch.
- property stats: bascenev1.Stats¶
The stats instance accessible while the activity is running.
If access is attempted before or after, raises a
NotFoundError.
- teams: list[TeamT]¶
The list of teams in the activity. This gets populated just before on_begin() is called and is updated automatically as players join or leave the game. (at least in free-for-all mode where every player gets their own team; in teams mode there are always 2 teams regardless of the player count).
- transition_time = 0.0¶
If the activity fades or transitions in, it should set the length of time here so that previous activities will be kept alive for that long (avoiding ‘holes’ in the screen) This value is given in real-time seconds.
- use_fixed_vr_overlay = False¶
In vr mode, this determines whether overlay nodes (text, images, etc) are created at a fixed position in space or one that moves based on the current map. Generally this should be on for games and off for transitions/score-screens/etc. that persist between maps.
- exception bascenev1.ActivityNotFoundError[source]¶
Bases:
NotFoundErrorRaised when an expected activity does not exist.
- class bascenev1.Actor[source]¶
Bases:
objectHigh level logical entities in an
Activity.Actors act as controllers, combining some number of
Node,Texture,Sound, and other type objects into a high-level cohesive unit.Some example actors include the
Bomb,Flag, andSpaz, classes that live in thebascenev1lib.actorpackage.One key feature of actors is that they generally ‘die’ (killing off or transitioning out their nodes) when the last Python reference to them disappears, so you can use logic such as:
# Create a flag actor in our game activity (self): from bascenev1lib.actor.flag import Flag self.flag = Flag(position=(0, 10, 0)) # Later, destroy the flag (provided nothing else is holding a # reference to it). We could also just assign a new flag to this # value. Either way, the old flag should disappear. self.flag = None
This is in contrast to the behavior of the more low level
Nodeclass, which is always explicitly created and destroyed and doesn’t care how many Python references to it exist.Note, however, that you can use the
autoretain()method if you want an actor to stick around until explicitly killed regardless of references.Another key feature of actors is their
handlemessage()method, which takes a single arbitrary object as an argument. This provides a safe way to communicate betweenActor,Activity,Session, and any other class providing ahandlemessage()method. The most universally handled message type for actors is theDieMessage.Another way to kill the flag from the example above: We can safely call this on any type with a
handlemessagemethod (though its not guaranteed to always have a meaningful effect). In this case the actor instance will still be around, but itsexists()andis_alive()methods will both return False:self.flag.handlemessage(bascenev1.DieMessage())
- property activity: bascenev1.Activity¶
The activity this actor was created in.
Raises a
ActivityNotFoundErrorif the activity no longer exists.
- autoretain() Self[source]¶
Keep this actor alive without needing to hold a reference to it.
This keeps the actor in existence by storing a reference to it with the
Activityit was created in. The reference is lazily released onceexists()returns False for the actor or when theActivityis set as expired. This can be a convenient alternative to storing references explicitly just to keep an actor from dying. For convenience, this method returns the actor it is called with, enabling chained statements such as:myflag = bascenev1.Flag().autoretain()
- exists() bool[source]¶
Returns whether the actor is still present in a meaningful way.
Note that a dying character should still return True here as long as their corpse is visible; this is about presence, not being ‘alive’ (see
is_alive()for that).If this returns False, it is assumed the actor can be completely deleted without affecting the game; this call is often used when pruning lists of actors, such as with
bascenev1.Actor.autoretain()The default implementation of this method always return True.
Note that the boolean operator for the actor class calls this method, so a simple
if myactortest will conveniently do the right thing even if myactor is set to None.
- property expired: bool¶
Whether the actor is expired.
(see
on_expire())
- getactivity(doraise: Literal[True] = True) bascenev1.Activity[source]¶
- getactivity(doraise: Literal[False]) bascenev1.Activity | None
Return the activity this actor is associated with.
If the activity no longer exists, raises a
ActivityNotFoundErroror returns None depending on whetherdoraiseis True.
- is_alive() bool[source]¶
Returns whether the actor is ‘alive’.
What this means is up to the actor. It is not a requirement for actors to be able to die; just that they report whether they consider themselves to be alive or not. In cases where dead/alive is irrelevant, True should be returned.
- on_expire() None[source]¶
Called for remaining actors when their activity dies.
Actors can use this opportunity to clear callbacks or other references which have the potential of keeping the
Activityalive inadvertently (activities can not exit cleanly while any Python references to them remain.)Once an actor is expired (see
expired) it should no longer perform any game-affecting operations (creating, modifying, or deleting nodes, media, timers, etc.) Attempts to do so will likely result in errors.
- class bascenev1.App[source]¶
Bases:
objectHigh level Ballistica app functionality and state.
Access the single shared instance of this class via the
appattr available on various high level modules such asbabase,bauiv1, andbascenev1.- SHUTDOWN_FAULTHANDLER_RUNWAY_SECONDS: float = 2.0¶
Extra time added to the suicide timer on faulthandler-capable platforms so the dump has room to complete before we die.
- SHUTDOWN_SUICIDE_TIMEOUT_SECONDS: float = 15.0¶
Hard deadline for shutdown. The C++ side arms a suicide timer at this many seconds from the start of shutdown; if shutdown hasn’t completed by then we’re considered officially hung. On platforms where the Python faulthandler can write to fd 2, a traceback dump is also armed to fire at this same deadline (so we get a dump of every thread before we die) and the suicide timer is extended by
SHUTDOWN_FAULTHANDLER_RUNWAY_SECONDSto give the dump time to finish writing.
- SHUTDOWN_TASK_TIMEOUT_SECONDS = 12¶
How long we allow shutdown tasks to run before killing them. Currently the entire app hard-exits if shutdown takes 15 seconds, so we need to keep it under that. Staying above 10 should allow 10 second network timeouts to happen though.
- property active: bool¶
Whether the app is currently front and center.
This will be False when the app is hidden, other activities are covering it, etc. (depending on the platform).
- add_shutdown_task(coro: Coroutine[None, None, None]) None[source]¶
Add a task to be run on app shutdown.
All shutdown tasks will be run concurrently alongside a fade-out, so it is ok for them to take a moment or two to do their thing.
If a shutdown task is still running after
SHUTDOWN_TASK_TIMEOUT_SECONDS, however, it will be canceled.Code needing more exact control over its place in app shutdown can look into
babase.atexit(), (though this comes with some limitations as well).
- analytics: AnalyticsSubsystem¶
Subsystem for wrangling analytics.
- assets: AssetSubsystem¶
Subsystem for acquiring + tracking downloadable asset packages.
- property asyncio_loop: AbstractEventLoop¶
The logic thread’s
asyncioevent-loop.This allows
asynciotasks to be run in the logic thread.Generally you should call
create_async_task()to schedule async code to run instead of using this directly. That will handle retaining the task and logging errors automatically. Only schedule tasks ontoasyncio_loopyourself when you intend to hold on to the returned task and await its results. Releasing the task reference can lead to subtle bugs such as unreported errors and garbage-collected tasks disappearing before their work is done.This loop is integrated directly into the logic thread’s event loop, so
asyncio.get_running_loop()returns it from anywhere on the logic thread, and work posted from other threads (such asrun_in_executorcompletions) wakes the logic thread immediately.
- property classic: ClassicAppSubsystem | None¶
Our classic subsystem (if available).
- create_async_task(coro: Coroutine[Any, Any, T], *, name: str | None = None) None[source]¶
Create a fully managed
asynciotask.This will automatically retain and release a reference to the task and log any exceptions that occur in it. If you need to await a task or otherwise need more control, schedule a task directly using
asyncio_loop.
- devconsole: DevConsoleSubsystem¶
Subsystem for wrangling the dev-console UI.
- env: babase.Env¶
Static environment values for the app.
- fg_state: int¶
Incremented each time the app leaves the
SUSPENDEDstate. This can be a simple way to determine if network data should be refreshed/etc.
- gc: GarbageCollectionSubsystem¶
Garbage collection related functionality.
- get_convenience_imports() dict[str, str | None][source]¶
Return active convenience imports.
This consists of a dict mapping module names to optional aliases. These are the modules that will be auto-imported into the REPL environment.
This can be set in the config as ‘Convenience Imports’. If it is not present there, defaults for the app are given.
- health: AppHealthSubsystem¶
Subsystem for keeping tabs on app health.
- lang: LanguageSubsystem¶
Language related functionality.
- locale: LocaleSubsystem¶
Locale related functionality.
- meta: MetadataSubsystem¶
Subsystem for wrangling metadata.
- property mode: AppMode¶
The app’s current mode.
Raises
ValueErrorif no mode is set.
- property mode_selector: babase.AppModeSelector¶
Controls which app-modes are used for handling given intents.
Plugins can override this to change high level app behavior and spinoff projects can change the default implementation for the same effect.
- net: NetworkSubsystem¶
Subsystem for network functionality.
- plugins: PluginSubsystem¶
Subsystem for wrangling plugins.
- property plus: PlusAppSubsystem | None¶
Our plus subsystem (if available).
- register_subsystem(subsystem: T) T[source]¶
Register an
AppSubsysteminstance with the app.Facilitates the subsystem receiving state callbacks, etc.
Note that subsystems can only be registered before the app completes its transition to the
RUNNINGstate.Returns the passed object for convenience in assigning it to an attr/etc.
- run() None[source]¶
Run the app to completion.
Note that this only works on builds/runs where Ballistica is managing its own event loop.
- set_intent(intent: AppIntent) None[source]¶
Set the intent for the app.
Intent defines what the app is trying to do at a given time. This call is asynchronous; the intent switch will happen in the logic thread in the near future. If this is called repeatedly before the change takes place, the final intent to be set will be used.
- shutdown_fault_handler_arm() float[source]¶
Arm a Python traceback dump for shutdown diagnostics.
Called from the C++ shutdown path, colocated with the suicide-timer arm. Returns the number of seconds C++ should use for its suicide timer:
SHUTDOWN_SUICIDE_TIMEOUT_SECONDSif the faulthandler dump can’t be armed (e.g.fd 2is not available), or that value plusSHUTDOWN_FAULTHANDLER_RUNWAY_SECONDSif it was armed successfully — the extra time gives the dump room to finish writing before the process is killed.Pairs with
shutdown_fault_handler_disarm(), which is called at the end of_pre_interpreter_shutdown.
- shutdown_fault_handler_disarm() None[source]¶
Cancel the shutdown faulthandler dump armed earlier.
Safe to call even if
shutdown_fault_handler_arm()was never called or didn’t arm anything — in that case it’s a no-op.
- property shutting_down: bool¶
Whether the app has begun (or completed) shutting down.
Becomes True once the app reaches
SHUTTING_DOWNand remains True throughSHUTDOWN_COMPLETE. Useful for long-running async work that should bow out quietly instead of erroring when app-level facilities (the threadpool, network, etc.) start getting torn down out from under it.
- stringedit: StringEditSubsystem¶
Subsystem for wrangling text input from various sources.
- threadpool: ThreadPoolExecutorEx¶
Default executor which can be used for misc background processing. It should also be passed to any additional asyncio loops we create so that everything shares the same single set of worker threads.
- property ui_v1: UIV1AppSubsystem¶
Our ui_v1 subsystem (always available).
- workspaces: WorkspaceSubsystem¶
Subsystem for wrangling workspaces.
- class bascenev1.AppIntent[source]¶
Bases:
objectBase class for high level directives given to the app.
- class bascenev1.AppIntentDefault[source]¶
Bases:
AppIntentTells the app to simply run in its default mode.
- class bascenev1.AppIntentExec(code: str)[source]¶
Bases:
AppIntentTells the app to exec some Python code.
- class bascenev1.AppMode[source]¶
Bases:
objectA low level mode the app can be in.
App-modes fundamentally change app behavior related to input handling, networking, graphics, and more. In a way, different app-modes can almost be considered different apps.
- classmethod can_handle_intent(intent: AppIntent) bool[source]¶
Override this to define indent handling for an app-mode.
- get_dev_console_ui_tab_buttons() list[DevConsoleButtonDef][source]¶
Define buttons to show up in the UI dev console.
This can be useful for exposing UI code examples or debugging functionality.
- on_app_active_changed() None[source]¶
Called when the app’s active state changes while in this app-mode.
This corresponds to the app’s
activeattr. App-active state becomes false when the app is hidden, minimized, backgrounded, etc. The app-mode may want to take action such as pausing a running game or saving state when this occurs.On platforms such as mobile where apps get suspended and later silently terminated by the OS, this is likely to be the last reliable place to save state/etc.
To best cover both mobile and desktop style platforms, actions such as saving state should generally happen in response to both
on_deactivate()andon_app_active_changed()(when active is False).
- on_deactivate() None[source]¶
Called when the mode stops being the active one for the app.
On platforms where the app is explicitly exited (such as desktop PC) this will also be called at app shutdown.
To best cover both mobile and desktop style platforms, actions such as saving state should generally happen in response to both
on_deactivate()andon_app_active_changed()(when active is False).
- class bascenev1.AppState(*values)[source]¶
Bases:
EnumHigh level state the app can be in.
- INITING = 2¶
Python app subsystems are being inited but should not yet interact or do any work.
- LOADING = 3¶
Python app subsystems are inited and interacting, but the app has not yet embarked on a high level course of action. It is doing initial account logins, workspace & asset downloads, etc.
- NATIVE_BOOTSTRAPPING = 1¶
The native layer is spinning up its machinery (screens, renderers, etc.). Nothing should happen in the Python layer until this completes.
- NOT_STARTED = 0¶
The app has not yet begun starting and should not be used in any way.
- RUNNING = 4¶
All pieces are in place and the app is now doing its thing.
- SHUTDOWN_COMPLETE = 7¶
The app has completed shutdown. Any code running here should be basically immediate.
- SHUTTING_DOWN = 6¶
The app is shutting down. This process may involve sending network messages or other things that can take up to a few seconds, so ideally graphics and audio should remain functional (with fades or spinners or whatever to show something is happening).
- SUSPENDED = 5¶
Used on platforms such as mobile where the app basically needs to shut down while backgrounded. In this state, all event loops are suspended and all graphics and audio must cease completely. Be aware that the suspended state can be entered from any other state including
NATIVE_BOOTSTRAPPINGandSHUTTING_DOWN.
- class bascenev1.AppTime¶
Monotonic time measurement that starts at 0 when the app launches and pauses while the app is suspended.
alias of
float
- class bascenev1.AppTimer(time: float, call: Callable[[], Any], repeat: bool = False)[source]¶
Bases:
objectTimers are used to run code at later points in time.
This class encapsulates a timer based on app-time. The underlying timer will be destroyed when this object is no longer referenced. If you do not want to worry about keeping a reference to your timer around, use the
apptimer()function instead to get a one-off timer.- Parameters:
time – Length of time in seconds that the timer will wait before firing.
call – A callable Python object. Remember that the timer will retain a strong reference to the callable for as long as it exists, so you may want to look into concepts such as
WeakCallif that is not desired.repeat – If True, the timer will fire repeatedly, with each successive firing having the same delay as the first.
Example: Use a timer object to print repeatedly for a few seconds:
def say_it(): babase.screenmessage('BADGER!') def stop_saying_it(): global g_timer g_timer = None babase.screenmessage('MUSHROOM MUSHROOM!') # Create our timer; it will run as long as we keep its ref alive. g_timer = babase.AppTimer(0.3, say_it, repeat=True) # Now fire off a one-shot timer to kill the ref. babase.apptimer(3.89, stop_saying_it)
- class bascenev1.BaseTime¶
Like
Timebut tied to the underlying scene’s clock rather than an activity — keeps advancing across activity transitions within the same session.alias of
float
- class bascenev1.BaseTimer(time: float, call: Callable[[], Any], repeat: bool = False)[source]¶
Bases:
objectTimers are used to run code at later points in time.
This class encapsulates a base-time timer in the current scene context. The underlying timer will be destroyed when either this object is no longer referenced or when its context (activity, etc.) dies. If you do not want to worry about keeping a reference to your timer around, you should use the
bascenev1.basetimer()function instead.- Parameters:
time – Length of time in seconds that the timer will wait before firing.
call – A callable Python object. Remember that the timer will retain a strong reference to the callable for as long as it exists, so you may want to look into concepts such as
WeakCallif that is not desired.repeat – If True, the timer will fire repeatedly, with each successive firing having the same delay as the first.
Example
Use a base-timer object to print repeatedly for a few seconds:
import bascenev1 as bs def say_it(): bs.screenmessage('BADGER!') def stop_saying_it(): global g_timer g_timer = None bs.screenmessage('MUSHROOM MUSHROOM!') # Create our timer; it will run as long as we keep its ref alive. g_timer = bs.BaseTimer(0.3, say_it, repeat=True) # Now fire off a one-shot timer to kill the ref. bs.basetimer(3.89, stop_saying_it)
- class bascenev1.BoolSetting(name: str, default: bool)[source]¶
Bases:
SettingA boolean game setting.
- class bascenev1.Call(**kwargs)[source]¶
Bases:
objectTransitional alias of
CallPartial.Deprecated — pick
CallPartialorCallStrictexplicitly. The@deprecateddecorator emits the runtime warning and is picked up by type-checkers/IDEs so call sites are flagged statically. TheCallname will return after API 9 support ends but will then aliasCallStrict, so migrating away now avoids a silent behavior change later.
- class bascenev1.CallPartial(call: Any, /, *args: Any, **keywds: Any)[source]¶
Bases:
objectWraps a callable and args into a single callable object.
The callable is strong-referenced so it won’t die until this object does.
Note that a bound method (ex:
myobj.dosomething) contains a reference toself(myobjin that case), so you will be keeping that object alive too. Use babase.WeakCall if you want to pass a method to a callback without keeping its object alive.Example: Wrap a method call with 1 positional and 1 keyword arg:
mycall = babase.Call(myobj.dostuff, argval, namedarg=argval2) # Now we have a single callable to run that whole mess. # ..the same as calling myobj.dostuff(argval, namedarg=argval2) mycall()
- class bascenev1.CallStrict(call: Callable[P, T], /, *args: P.args, **kwargs: P.kwargs)[source]¶
Bases:
Generic[P,T]Like
CallPartial()but disallows extra args at call time.This allows more complete type checking to occur, so this is recommended if you do not need extra args at call time.
- args¶
- call¶
- kwargs¶
- class bascenev1.Campaign(name: str, sequential: bool = True, levels: list[bascenev1.Level] | None = None)[source]¶
Bases:
objectRepresents a unique set of
Levelinstances.- addlevel(level: bascenev1.Level, index: int | None = None) None[source]¶
Add a level to the campaign.
- getlevel(name: str) bascenev1.Level[source]¶
Return a contained level by name.
- property levels: list[bascenev1.Level]¶
The list of levels in the campaign.
- class bascenev1.CelebrateMessage(duration: float = 10.0)[source]¶
Bases:
objectTells an object to celebrate.
- class bascenev1.ChoiceSetting(name: str, default: Any, choices: list[tuple[str, Any]])[source]¶
Bases:
SettingA setting with multiple choices.
- class bascenev1.Chooser(vpos: float, sessionplayer: bascenev1.SessionPlayer, lobby: Lobby)[source]¶
Bases:
objectA character/team selector for a player.
- get_lobby() bascenev1.Lobby | None[source]¶
Return this chooser’s lobby if it still exists; otherwise None.
- getplayer() bascenev1.SessionPlayer[source]¶
Return the player associated with this chooser.
- property lobby: bascenev1.Lobby¶
The chooser’s lobby.
- property sessionplayer: bascenev1.SessionPlayer¶
The session-player associated with this chooser.
- property sessionteam: bascenev1.SessionTeam¶
Return this chooser’s currently selected bascenev1.SessionTeam.
- class bascenev1.Collision[source]¶
Bases:
objectA class providing info about occurring collisions.
- property opposingnode: bascenev1.Node¶
The node the current callback material node is hitting.
Throws a
NodeNotFoundErrorif the node does not exist. This can be expected in some cases such as in ‘disconnect’ callbacks triggered by deleting a currently-colliding node.
- property position: bascenev1.Vec3¶
The position of the current collision.
- property sourcenode: bascenev1.Node¶
The node containing the material triggering the current callback.
Throws a
NodeNotFoundErrorif the node does not exist, though the node should always exist (at least at the start of the collision callback).
- class bascenev1.CollisionMesh[source]¶
Bases:
objectA reference to a collision-mesh.
Use
bascenev1.getcollisionmesh()to instantiate one.
- class bascenev1.CollisionMeshVerifiedSpec(apverid: str, name: str)[source]¶
Bases:
CollisionMeshSpecA collision-mesh reference that can also load the live one.
- get() bascenev1.CollisionMesh[source]¶
Resolve and return the live collision-mesh for this reference.
- exception bascenev1.ContextError[source]¶
Bases:
ExceptionRaised when a call is made in an invalid context.
Examples of this include calling UI functions within an activity context or calling scene manipulation functions outside of a scene context.
- class bascenev1.ContextRef[source]¶
Bases:
objectStore or use a Ballistica context.
Many operations such as
bascenev1.newnode()orbascenev1.gettexture()operate implicitly on a current ‘context’. A context is some sort of state that functionality can implicitly use. Context determines, for example, which scene new nodes or textures get added to without having to specify that explicitly in the newnode()/gettexture() call. Contexts can also affect object lifecycles; for example aContextCallwill instantly become a no-op and release any references it is holding when the context it belongs to is destroyed.In general, if you are a modder, you should not need to worry about contexts; mod code should mostly be getting run in the correct context and timers and other callbacks will take care of saving and restoring contexts automatically. There may be rare cases, however, where you need to deal directly with contexts, and that is where this class comes in.
Creating a context-ref will capture a reference to the current context. Other modules may provide ways to access their contexts; for example a
bascenev1.Activityinstance has acontextattribute. You can also use theempty()classmethod to create a reference to no context. Some code such as UI calls may expect to be run with no context set and may complain if you try to use them within a context.Usage¶
Context-refs are generally used with the Python
withstatement, which sets the context they point to as current on entry and resets it to the previous value on exit.Example: Explicitly clear context while working with UI code from gameplay (UI stuff may complain if called within a context):
import bauiv1 as bui def _callback_called_from_gameplay(): # We are probably called with a game context as current, but # this makes UI stuff unhappy. So we clear the context while # doing our thing. with bui.ContextRef.empty(): my_container = bui.containerwidget()
- classmethod empty() ContextRef[source]¶
Return a context-ref pointing to no context.
This is useful when code should be run free of a context. For example, UI code generally insists on being run this way. Otherwise, callbacks set on the UI could inadvertently stop working due to a game activity ending, which would be unintuitive behavior.
- class bascenev1.CoopGameActivity(settings: dict)[source]¶
Bases:
GameActivity,GenericBase class for cooperative-mode games.
- celebrate(duration: float) None[source]¶
Tells all existing player-controlled characters to celebrate.
Can be useful in co-op games when the good guys score or complete a wave. duration is given in seconds.
- on_begin() None[source]¶
Called once the previous activity has finished transitioning out.
At this point the activity’s initial players and teams are filled in and it should begin its actual game logic.
- setup_low_life_warning_sound() None[source]¶
Set up a beeping noise to play when any players are near death.
- spawn_player_spaz(player: PlayerT, position: Sequence[float] = (0.0, 0.0, 0.0), angle: float | None = None) PlayerSpaz[source]¶
Spawn and wire up a standard player spaz.
- classmethod supports_session_type(sessiontype: type[bascenev1.Session]) bool[source]¶
Return whether this game supports the provided session type.
- class bascenev1.CoopSession[source]¶
Bases:
SessionA session which runs cooperative-mode games.
These generally consist of 1-4 players against the computer and include functionality such as high score lists.
- allow_mid_activity_joins = False¶
- campaign: bascenev1.Campaign | None¶
The baclassic.Campaign instance this Session represents, or None if there is no associated Campaign.
- get_current_game_instance() bascenev1.GameActivity[source]¶
Get the game instance currently being played.
Subclasses can override this to provide custom menu entries.
The returned value should be a list of dicts, each containing a ‘label’ and ‘call’ entry, with ‘label’ being the text for the entry and ‘call’ being the callable to trigger if the entry is pressed.
- on_activity_end(activity: bascenev1.Activity, results: Any) None[source]¶
Method override for co-op sessions.
Jumps between co-op games and score screens.
- on_player_leave(sessionplayer: bascenev1.SessionPlayer) None[source]¶
Called when a previously-accepted bascenev1.SessionPlayer leaves.
- should_allow_mid_activity_joins(activity: bascenev1.Activity) bool[source]¶
Ask ourself if we should allow joins during an Activity.
Note that for a join to be allowed, both the session and activity have to be ok with it (via this function and the
bascenev1.Activity.allow_mid_activity_joinsproperty.
- use_team_colors = False¶
Whether players on a team should all adopt the colors of that team instead of their own profile colors. This only applies if
use_teamsis enabled.
- use_teams = True¶
Whether this session groups players into an explicit set of teams. If this is off, a unique team is generated for each player that joins.
- bascenev1.DEFAULT_TEAM_COLORS: tuple = ((0.1, 0.25, 1.0), (1.0, 0.25, 0.2))¶
Default RGB colors for the two teams in a
MultiTeamSession, used when a session doesn’t specify its own.
- bascenev1.DEFAULT_TEAM_NAMES: tuple = ('Blue', 'Red')¶
Default display names for the two teams in a
MultiTeamSession.
- class bascenev1.Data[source]¶
Bases:
objectA reference to a data object.
Use
bascenev1.getdata()to instantiate one.- getvalue() Any[source]¶
Return the data object’s value.
This can consist of anything representable by json (dicts, lists, numbers, bools, None, etc). Note that this call will block if the data has not yet been loaded, so it can be beneficial to plan a short bit of time between when the data object is requested and when it’s value is accessed.
- class bascenev1.DeathType(*values)[source]¶
Bases:
EnumA reason for a death.
- FALL = 'fall'¶
- GENERIC = 'generic'¶
- IMPACT = 'impact'¶
- LEFT_GAME = 'left_game'¶
- OUT_OF_BOUNDS = 'out_of_bounds'¶
- REACHED_GOAL = 'reached_goal'¶
- class bascenev1.DieMessage(immediate: bool = False, how: DeathType = DeathType.GENERIC)[source]¶
Bases:
objectA message telling an object to die.
Most bascenev1.Actor-s respond to this.
- class bascenev1.DisplayTime¶
Like
AppTimebut incremented at frame draw time and in a smooth consistent manner; useful to keep animations smooth and jitter-free.alias of
float
- class bascenev1.DisplayTimer(time: float, call: Callable[[], Any], repeat: bool = False)[source]¶
Bases:
objectTimers are used to run code at later points in time.
This class encapsulates a timer based on display-time. The underlying timer will be destroyed when this object is no longer referenced. If you do not want to worry about keeping a reference to your timer around, use the
displaytimer()function instead to get a one-off timer.Display-time is a time value intended to be used for animation and other visual purposes. It will generally increment by a consistent amount each frame. It will pass at an overall similar rate to AppTime, but trades accuracy for smoothness.
- Parameters:
time – Length of time in seconds that the timer will wait before firing.
call – A callable Python object. Remember that the timer will retain a strong reference to the callable for as long as it exists, so you may want to look into concepts such as
WeakCallif that is not desired.repeat – If True, the timer will fire repeatedly, with each successive firing having the same delay as the first.
Example: Use a Timer object to print repeatedly for a few seconds:
def say_it(): babase.screenmessage('BADGER!') def stop_saying_it(): global g_timer g_timer = None babase.screenmessage('MUSHROOM MUSHROOM!') # Create our timer; it will run as long as we keep its ref alive. g_timer = babase.DisplayTimer(0.3, say_it, repeat=True) # Now fire off a one-shot timer to kill the ref. babase.displaytimer(3.89, stop_saying_it)
- class bascenev1.DropMessage[source]¶
Bases:
objectTells an object that it has dropped what it was holding.
- class bascenev1.DroppedMessage(node: bascenev1.Node)[source]¶
Bases:
objectTells an object that it has been dropped.
- node: bascenev1.Node¶
The bascenev1.Node doing the dropping.
- class bascenev1.DualTeamSession[source]¶
Bases:
MultiTeamSessionbascenev1.Session type for teams mode games.
- use_team_colors = True¶
Whether players on a team should all adopt the colors of that team instead of their own profile colors. This only applies if
use_teamsis enabled.
- use_teams = True¶
Whether this session groups players into an explicit set of teams. If this is off, a unique team is generated for each player that joins.
- class bascenev1.EmptyPlayer[source]¶
Bases:
Player[bascenev1.EmptyTeam]An empty player for use by Activities that don’t need to define one.
bascenev1.Player and bascenev1.Team are ‘Generic’ types, and so passing those top level classes as type arguments when defining a bascenev1.Activity reduces type safety. For example, activity.teams[0].player will have type ‘Any’ in that case. For that reason, it is better to pass EmptyPlayer and EmptyTeam when defining a bascenev1.Activity that does not need custom types of its own.
Note that EmptyPlayer defines its team type as EmptyTeam and vice versa, so if you want to define your own class for one of them you should do so for both.
- class bascenev1.EmptyTeam[source]¶
Bases:
Team[bascenev1.EmptyPlayer]An empty player for use by Activities that don’t define one.
bascenev1.Player and bascenev1.Team are ‘Generic’ types, and so passing those top level classes as type arguments when defining a bascenev1.Activity reduces type safety. For example, activity.teams[0].player will have type ‘Any’ in that case. For that reason, it is better to pass EmptyPlayer and EmptyTeam when defining a bascenev1.Activity that does not need custom types of its own.
Note that EmptyPlayer defines its team type as EmptyTeam and vice versa, so if you want to define your own class for one of them you should do so for both.
- type bascenev1.FeedbackEvent = Literal['join', 'collect', 'grab', 'impact_dealt', 'impact_received', 'death']¶
- class bascenev1.FloatChoiceSetting(name: str, default: float, choices: list[tuple[str, float]])[source]¶
Bases:
ChoiceSettingA float setting with multiple choices.
- class bascenev1.FloatSetting(name: str, default: float, min_value: float = 0.0, max_value: float = 9999.0, increment: float = 1.0)[source]¶
Bases:
SettingA floating point game setting.
- class bascenev1.FreeForAllSession[source]¶
Bases:
MultiTeamSessionbascenev1.Session type for free-for-all mode games.
- get_ffa_point_awards() dict[int, int][source]¶
Return the number of points awarded for different rankings.
This is based on the current number of players.
- use_team_colors = False¶
Whether players on a team should all adopt the colors of that team instead of their own profile colors. This only applies if
use_teamsis enabled.
- use_teams = False¶
Whether this session groups players into an explicit set of teams. If this is off, a unique team is generated for each player that joins.
- class bascenev1.FreezeMessage(time: float = 5.0)[source]¶
Bases:
objectTells an object to become frozen.
As seen in the effects of an ice bascenev1.Bomb.
- class bascenev1.GameActivity(settings: dict)[source]¶
-
Common base class for all game activities.
- allow_kick_idle_players = True¶
Whether idle players can potentially be kicked (should not happen in menus/etc).
- allow_pausing = True¶
Whether scene-time should still progress when in menus/etc.
- available_settings: list[bascenev1.Setting] | None = None¶
- default_music: bascenev1.MusicType | None = None¶
- end(results: Any = None, delay: float = 0.0, force: bool = False) None[source]¶
Commence activity shutdown and delivers results to the session.
‘delay’ is the time delay before the Activity actually ends (in seconds). Further end calls will be ignored up until this time, unless ‘force’ is True, in which case the new results will replace the old.
- end_game() None[source]¶
Tell the game to wrap up and call bascenev1.Activity.end().
This method should be overridden by subclasses. A game should always be prepared to end and deliver results, even if there is no ‘winner’ yet; this way things like the standard time-limit (bascenev1.GameActivity.setup_standard_time_limit()) will work with the game.
- classmethod get_available_settings(sessiontype: type[bascenev1.Session]) list[bascenev1.Setting][source]¶
Return a list of settings relevant to this game type when running under the provided session type.
- classmethod get_description(sessiontype: type[bascenev1.Session]) str[source]¶
Get a str description of this game type.
The default implementation simply returns the ‘description’ class var. Classes which want to change their description depending on the session can override this method.
- classmethod get_description_display_string(sessiontype: type[bascenev1.Session], *, langstr: Literal[False] = False) Lstr[source]¶
- classmethod get_description_display_string(sessiontype: type[bascenev1.Session], *, langstr: Literal[True]) LangStr
Return a translated version of get_description().
Sub-classes should override get_description(); not this.
Pass
langstr=Trueto receive aLangStr. The legacyLstrform goes away when api 9 support ends.
- classmethod get_display_string(settings: dict | None = None, *, langstr: Literal[False] = False) Lstr[source]¶
- classmethod get_display_string(settings: dict | None = None, *, langstr: Literal[True]) LangStr
Return a descriptive name for this game/settings combo.
Subclasses should override getname(); not this.
Pass
langstr=Trueto receive aLangStr(or a plain str for a game we have no entry for, such as a mod’s). The legacyLstrform goes away when api 9 support ends.
- get_instance_description() str | Sequence[source]¶
Return a description for this game instance, in English.
This is shown in the center of the screen below the game name at the start of a game. It should start with a capital letter and end with a period, and can be a bit more verbose than the version returned by get_instance_description_short().
Note that translation is applied by looking up the specific returned value as a key, so the number of returned variations should be limited; ideally just one or two. To include arbitrary values in the description, you can return a sequence of values in the following form instead of just a string:
# This will give us something like ‘Score 3 goals.’ in English # and can properly translate to ‘Anota 3 goles.’ in Spanish. # If we just returned the string ‘Score 3 Goals’ here, there would # have to be a translation entry for each specific number. ew. return [‘Score ${ARG1} goals.’, self.settings_raw[‘Score to Win’]]
This way the first string can be consistently translated, with any arg values then substituted into the result. ${ARG1} will be replaced with the first value, ${ARG2} with the second, etc.
- get_instance_description_short() str | Sequence[source]¶
Return a short description for this game instance in English.
This description is used above the game scoreboard in the corner of the screen, so it should be as concise as possible. It should be lowercase and should not contain periods or other punctuation.
Note that translation is applied by looking up the specific returned value as a key, so the number of returned variations should be limited; ideally just one or two. To include arbitrary values in the description, you can return a sequence of values in the following form instead of just a string:
# This will give us something like ‘score 3 goals’ in English # and can properly translate to ‘anota 3 goles’ in Spanish. # If we just returned the string ‘score 3 goals’ here, there would # have to be a translation entry for each specific number. ew. return [‘score ${ARG1} goals’, self.settings_raw[‘Score to Win’]]
This way the first string can be consistently translated, with any arg values then substituted into the result. ${ARG1} will be replaced with the first value, ${ARG2} with the second, etc.
- get_instance_display_string(*, langstr: Literal[False] = False) Lstr[source]¶
- get_instance_display_string(*, langstr: Literal[True]) LangStr
Return a name for this particular game instance.
Pass
langstr=Trueto receive aLangStr. The legacyLstrform goes away when api 9 support ends.
- get_instance_scoreboard_display_string(*, langstr: Literal[False] = False) Lstr[source]¶
- get_instance_scoreboard_display_string(*, langstr: Literal[True]) LangStr
Return a name for this particular game instance.
This name is used above the game scoreboard in the corner of the screen, so it should be as concise as possible.
Pass
langstr=Trueto receive aLangStr. The legacyLstrform goes away when api 9 support ends.
- classmethod get_settings_display_string(config: dict[str, Any], *, langstr: Literal[False] = False) Lstr[source]¶
- classmethod get_settings_display_string(config: dict[str, Any], *, langstr: Literal[True]) LangStr
Given a game config dict, return a short description for it.
This is used when viewing game-lists or showing what game is up next in a series.
Pass
langstr=Trueto receive aLangStr. The legacyLstrform goes away when api 9 support ends.
- classmethod get_supported_maps(sessiontype: type[bascenev1.Session]) list[str][source]¶
Called by the default bascenev1.GameActivity.create_settings_ui() implementation; should return a list of map names valid for this game-type for the given bascenev1.Session type.
- classmethod get_team_display_string(name: str, *, langstr: Literal[False] = False) Lstr[source]¶
- classmethod get_team_display_string(name: str, *, langstr: Literal[True]) str | LangStr
Given a team name, returns a localized version of it.
Pass
langstr=Trueto receive aLangStr(or a plain str for a custom team name the player typed). The legacyLstrform goes away when api 9 support ends.
- classmethod getname() str[source]¶
Return a str name for this game type.
This default implementation simply returns the ‘name’ class attr.
- classmethod getscoreconfig() bascenev1.ScoreConfig[source]¶
Return info about game scoring setup; can be overridden by games.
- initialplayerinfos: list[bascenev1.PlayerInfo] | None¶
Holds some flattened info about the player set at the point when
on_begin()is called.
- property map: Map¶
The map being used for this game.
Raises a bascenev1.MapNotFoundError if the map does not currently exist.
- on_begin() None[source]¶
Called once the previous activity has finished transitioning out.
At this point the activity’s initial players and teams are filled in and it should begin its actual game logic.
- on_player_join(player: PlayerT) None[source]¶
Called when a player joins the activity.
(including the initial set of players)
- on_transition_in() None[source]¶
Called when the activity is first becoming visible.
Upon this call, the activity should fade in backgrounds, start playing music, etc. It does not yet have access to players or teams, however. They remain owned by the previous activity up until
on_begin()is called.
- respawn_player(player: PlayerT, respawn_time: float | None = None) None[source]¶
Given a bascenev1.Player, sets up a standard respawn timer, along with the standard counter display, etc. At the end of the respawn period spawn_player() will be called if the Player still exists. An explicit ‘respawn_time’ can optionally be provided (in seconds).
- scoreconfig: bascenev1.ScoreConfig | None = None¶
- setup_standard_powerup_drops(enable_tnt: bool = True) None[source]¶
Create standard powerup drops for the current map.
- setup_standard_time_limit(duration: float) None[source]¶
Create a standard game time-limit given the provided duration in seconds. This will be displayed at the top of the screen. If the time-limit expires, end_game() will be called.
- show_kill_points = True¶
- show_zoom_message(message: Lstr | LangStr, *, color: Sequence[float] = (0.9, 0.4, 0.0), scale: float = 0.8, duration: float = 2.0, trail: bool = False) None[source]¶
Zooming text used to announce game names and winners.
- spawn_player(player: PlayerT) bascenev1.Actor[source]¶
Spawn something for the provided player.
The default implementation simply calls
spawn_player_spaz().
- spawn_player_if_exists(player: PlayerT) None[source]¶
A utility method which calls self.spawn_player() only if the bascenev1.Player provided still exists; handy for use in timers and whatnot.
There is no need to override this; just override spawn_player().
- spawn_player_spaz(player: PlayerT, position: Sequence[float] = (0, 0, 0), angle: float | None = None) PlayerSpaz[source]¶
Create and wire up a player-spaz for the provided player.
- classmethod supports_session_type(sessiontype: type[bascenev1.Session]) bool[source]¶
Return whether this game supports the provided session type.
- tips: list[str | bascenev1.GameTip] = []¶
- class bascenev1.GameResults[source]¶
Bases:
objectResults for a completed game.
Upon completion, a game should fill one of these out and pass it to its
end()call.- get_sessionteam_score(sessionteam: bascenev1.SessionTeam) int | None[source]¶
Return the score for a given team.
- get_sessionteam_score_str(sessionteam: bascenev1.SessionTeam, *, langstr: Literal[False] = False) Lstr[source]¶
- get_sessionteam_score_str(sessionteam: bascenev1.SessionTeam, *, langstr: Literal[True]) LangStr
Return the score for the given team as a displayable string.
(properly formatted for the score type.)
Pass
langstr=Trueto receive aLangStr. The legacyLstrform goes away when api 9 support ends.
- has_score_for_sessionteam(sessionteam: bascenev1.SessionTeam) bool[source]¶
Return whether there is a score for a given team.
- property playerinfos: list[bascenev1.PlayerInfo]¶
Get info about the players represented by the results.
- property scoretype: bascenev1.ScoreType¶
The type of score.
- property sessionteams: list[bascenev1.SessionTeam]¶
Return all teams in the results.
- set_game(game: bascenev1.GameActivity) None[source]¶
Set the game instance these results are applying to.
- set_team_score(team: bascenev1.Team, score: int | None) None[source]¶
Set the score for a given team.
This can be a number or None (see the
none_is_winnerarg in the constructor).
- property winnergroups: list[WinnerGroup]¶
The ordered list of winner-groups.
- property winning_sessionteam: bascenev1.SessionTeam | None¶
The winning team if there is exactly one, or else None.
- class bascenev1.GameTip(text: str, icon: bascenev1.Texture | None = None, sound: bascenev1.Sound | None = None)[source]¶
Bases:
objectDefines a tip presentable to the user at the start of a game.
- icon: bascenev1.Texture | None = None¶
- sound: bascenev1.Sound | None = None¶
- class bascenev1.HitMessage(*, srcnode: bascenev1.Node | None = None, pos: Sequence[float] | None = None, velocity: Sequence[float] | None = None, magnitude: float = 1.0, velocity_magnitude: float = 0.0, radius: float = 1.0, source_player: bascenev1.Player | None = None, kick_back: float = 1.0, flat_damage: float | None = None, hit_type: str = 'generic', force_direction: Sequence[float] | None = None, hit_subtype: str = 'default')[source]¶
Bases:
objectTells an object it has been hit in some way.
This is used by punches, explosions, etc to convey their effect to a target.
- class bascenev1.HostInfo(name: str, build_number: int, address: str | None, port: int | None)[source]¶
Bases:
objectInfo about a host.
- class bascenev1.HostProbeOutcome(*values)[source]¶
Bases:
EnumNo-requirements outcomes of
fetch_host_requirements().- LEGACY = 'legacy'¶
The host answered the legacy discovery query reporting a pre-lang-str protocol: a confirmed old host with no requirements to fetch. Connect immediately.
- SILENT = 'silent'¶
Nothing answered anything – the address is unreachable, bogus, or down. The plain connect attempt surfaces the error the user actually cares about.
- UNRESPONSIVE = 'unresponsive'¶
The host proved alive AND lang-str-era (or began the exchange) but never completed the requirements listing despite an extended retry budget. Joining it unprepped could only strand; fail the join like a standard connection failure.
- class bascenev1.HostRequirements(asset_packages: list[str] = <factory>, password_required: bool = False)[source]¶
Bases:
objectEverything a host requires of clients joining it.
Fetched from prospective hosts by the pre-join requirements query (see
connect_to_party()).
- class bascenev1.ImpactDamageMessage(intensity: float)[source]¶
Bases:
objectTells an object that it has been jarred violently.
- class bascenev1.InputDevice[source]¶
Bases:
objectAn input-device such as a gamepad, touchscreen, or keyboard.
- allows_configuring_in_system_settings: bool¶
Whether the input-device can be configured in the system. setings app. This can be used to redirect the user to go there if they attempt to configure the device.
- client_id: int¶
The numeric client-id this device is associated with. This is only meaningful for remote client inputs; for all local devices this will be -1.
- detach_from_player() None[source]¶
Detach the device from any player it is controlling.
This applies both to local players and remote players.
- get_axis_name(axis_id: int) str[source]¶
Given an axis ID, return the name of the axis on this device.
Can return an empty string if the value is not meaningful to humans.
- get_button_name(button_id: int) babase.Lstr[source]¶
Given a button ID, return a human-readable name for that key/button.
Can return an empty string if the value is not meaningful to humans.
- get_classic_purchases() list[str] | None[source]¶
Return classic-inventory purchase legacy-ids owned by this device’s account, as provided by the master server.
Returns
Nonewhen the master server isn’t providing this data — e.g. when this device isn’t connected via a v2-auth handshake, when an older master-server version didn’t send it, or when the account has no classic-inventory record. Callers should treatNoneas ‘unknown’, not as ‘owns nothing’; an empty list is the correct way to represent ‘owns nothing’.(internal)
- get_default_player_name() str[source]¶
(internal)
Returns the default player name for this device. (used for the ‘random’ profile)
- get_v1_account_name(full: bool) str[source]¶
Returns the account name associated with this device.
(can be used to get account names for remote players)
- has_meaningful_button_names: bool¶
Whether button names returned by this instance match labels on the actual device. (Can be used to determine whether to show them in controls-overlays, etc.).
- is_attached_to_player() bool[source]¶
Return whether this device is controlling a player of some sort.
This can mean either a local player or a remote player.
- player: bascenev1.SessionPlayer | None¶
The player associated with this input device.
- class bascenev1.InputType(*values)[source]¶
Bases:
EnumTypes of input a controller can send to the game.
- BOMB_PRESS = 8¶
- BOMB_RELEASE = 9¶
- DOWN_PRESS = 25¶
- DOWN_RELEASE = 26¶
- FLY_PRESS = 13¶
- FLY_RELEASE = 14¶
- HOLD_POSITION_PRESS = 17¶
- HOLD_POSITION_RELEASE = 18¶
- JUMP_PRESS = 4¶
- JUMP_RELEASE = 5¶
- LEFT_PRESS = 19¶
- LEFT_RELEASE = 20¶
- LEFT_RIGHT = 3¶
- PICK_UP_PRESS = 10¶
- PICK_UP_RELEASE = 11¶
- PUNCH_PRESS = 6¶
- PUNCH_RELEASE = 7¶
- RIGHT_PRESS = 21¶
- RIGHT_RELEASE = 22¶
- RUN = 12¶
- START_PRESS = 15¶
- START_RELEASE = 16¶
- UP_DOWN = 2¶
- UP_PRESS = 23¶
- UP_RELEASE = 24¶
- class bascenev1.IntChoiceSetting(name: str, default: int, choices: list[tuple[str, int]])[source]¶
Bases:
ChoiceSettingAn int setting with multiple choices.
- class bascenev1.IntSetting(name: str, default: int, min_value: int = 0, max_value: int = 9999, increment: int = 1)[source]¶
Bases:
SettingAn integer game setting.
- class bascenev1.JoinActivity(settings: dict)[source]¶
Bases:
Activity[EmptyPlayer,EmptyTeam]Standard activity for waiting for players to join.
It shows tips and other info and waits for all players to check ready.
- on_transition_in() None[source]¶
Called when the activity is first becoming visible.
Upon this call, the activity should fade in backgrounds, start playing music, etc. It does not yet have access to players or teams, however. They remain owned by the previous activity up until
on_begin()is called.
- class bascenev1.JoinInfo(lobby: bascenev1.Lobby)[source]¶
Bases:
objectDisplay useful info for joiners.
- class bascenev1.LangStr(json: str, packages: Sequence[str] | None = None, wrap: tuple[int, int | None, int | None] | None = None)[source]¶
Bases:
objectA deferred, language-agnostic complex string (native).
The verified-local counterpart of
bacommon.langstr.LangStrSpec(see the D28 semantic split – holding one of these implies displayability here): holds tokens, not text, and evaluates to a flat string in the client’s locale at display time. Construct from the canonical wire JSON of any language-string form; pass the payload’spackagesmanifest to bind integer-indexed values at parse, and optionally awraptriple (min-lines, max-lines, max-chars-per-line; None = unlimited) as a usage-site override of the string’s definition-time line-wrapping. Immutable, with content equality and hashing. Accepted anywherestr | babase.Lstris accepted for display.- evaluate() str[source]¶
Evaluate to flat display text in the client’s locale.
Fail-visible: structural problems yield a
LANGSTR_ERROR:...sentinel string (with a logged warning) rather than raising.
- classmethod from_text(text: str) babase.LangStr[source]¶
Wrap a plain string as a literal language-string.
The text is shown exactly as given in every locale – any
{or}displays literally, with no substitution. Use this to pass a piece of already-final text (a name a mod supplied, a value with no translation entry) through an API that wants aLangStr. Anything that needs substitutions or translation should be an authored asset-package entry instead, so its arguments are type-checked.
- property spec: bacommon.langstr.LangStrSpec¶
The authoring-spec projection of this verified-local string.
Projecting verified -> spec is always valid (the reverse is deliberately not offered; see the D28 semantic split). Use this when feeding a wrapper string into spec-typed surfaces such as doc-ui models or client-effects. Content-only: any usage-site line-wrap override does not carry into the spec.
- to_resource_json() str[source]¶
Return wire JSON for the self-describing resource-form projection of this language-string (bound indexed nodes convert via the native language tables). For persisting values beyond their payload’s package-index context. Raises ValueError for unbound/unknown indexed nodes.
- class bascenev1.Level(name: str, gametype: type[bascenev1.GameActivity], settings: dict, preview_texture_name: str | None = None, *, displayname: str | None = None, preview_texture: bauiv1.TextureVerifiedSpec | None = None)[source]¶
Bases:
objectAn entry in a
Campaign.- property campaign: bascenev1.Campaign | None¶
The campaign this level is associated with, or None.
- property displayname: bascenev1.Lstr¶
The localized name for this level.
Deprecated since version 1.8.0: Use
displayname_langstr. This property’s type changes toLangStrwhen api 9 support ends.
- property displayname_langstr: LangStr¶
The localized name for this level.
This is the
LangStrflavor ofdisplayname. It exists only for the transition; once api 9 support ends,displaynamereturns this and this property goes away with the removal of api 10.
- property gametype: type[bascenev1.GameActivity]¶
The type of game used for this level.
- get_score_version_string() str[source]¶
Return the score version string for this level.
If a level’s gameplay changes significantly, its version string can be changed to separate its new high score lists/etc. from the old.
- property index: int¶
The zero-based index of this level in its campaign.
Access results in a RuntimeError if the level is not assigned to a campaign.
- property preview_texture: bauiv1.Texture¶
The preview texture for this level.
Level previews are drawn by ui code, so this is a loaded
Texture.Levels are built during app-loading, which is before construct-mode has resolved asset-packages, so the constructor takes the wrapper reference (
someassets.textures.my_level_preview, no.get()) and the texture is loaded here on first access – by which time the ui that wants to draw it exists and the package is registered.
- property preview_texture_name: str | None¶
The preview texture name for this level.
Deprecated since version 1.8.0: Use
preview_texture, and passpreview_textureto the constructor rather thanpreview_texture_name. This returnsNonefor a level constructed the new way, so built-in levels now reportNonehere. Removed when api 9 support ends.
- class bascenev1.Lobby[source]¶
Bases:
objectEnvironment where players can selecting characters, etc.
- add_chooser(sessionplayer: bascenev1.SessionPlayer) None[source]¶
Add a chooser to the lobby for the provided player.
- create_join_info() JoinInfo[source]¶
Create a display of on-screen information for joiners.
(how to switch teams, players, etc.) Intended for use in initial joining-screens.
- remove_all_choosers() None[source]¶
Remove all choosers without kicking players.
This is called after all players check in and enter a game.
- remove_all_choosers_and_kick_players() None[source]¶
Remove all player choosers and kick attached players.
- remove_chooser(player: bascenev1.SessionPlayer) None[source]¶
Remove a single player’s chooser; does not kick them.
This is used when a player enters the game and no longer needs a chooser.
- property sessionteams: list[bascenev1.SessionTeam]¶
The teams available in this lobby.
- class bascenev1.Lstr(*, resource: str, fallback_resource: str = '', fallback_value: str = '', subs: Sequence[tuple[str, str | Lstr]] | None = None)[source]¶
- class bascenev1.Lstr(*, translate: tuple[str, str], subs: Sequence[tuple[str, str | Lstr]] | None = None)
- class bascenev1.Lstr(*, value: str, subs: Sequence[tuple[str, str | Lstr]] | None = None)
Bases:
objectUsed to define strings in a language-independent way.
These should be used whenever possible in place of hard-coded strings so that in-game or UI elements show up correctly on all clients in their currently active language.
To see available resource keys, see the translation pages at legacy.ballistica.net/translate.
- Parameters:
resource – Pass a string to look up a translation by resource key.
translate – Pass a tuple consisting of a translation category and untranslated value. Any matching translation found in that category will be used. Otherwise the untranslated value will be.
value – Pass a regular string value to be used as-is.
subs – A sequence of 2-member tuples consisting of values and replacements. Replacements can be regular strings or other
Lstrvalues.fallback_resource – A resource key that will be used if the main one is not present for the current language instead of falling back to the english value (‘resource’ mode only).
fallback_value – A regular string that will be used if neither the resource nor the fallback resource is found (‘resource’ mode only).
Example 1: Resource path
mynode.text = babase.Lstr(resource='audioSettingsWindow.titleText')
Example 2: Translation
If a translated value is available, it will be used; otherwise the English value will be. To see available translation categories, look under the
translationsresource section.mynode.text = babase.Lstr(translate=('gameDescriptions', 'Defeat all enemies'))
Example 3: Substitutions
Substitutions can be used with
resourceandtranslatemodes as well as thevalueshown here.mynode.text = babase.Lstr(value='${A} / ${B}', subs=[('${A}', str(score)), ('${B}', str(total))])
Example 4: Nesting
Lstrinstances can be nested. This example would display the translated resource at'res_a'but replace any instances of'${NAME}'it contains with the translated resource at'res_b'.mytextnode.text = babase.Lstr( resource='res_a', subs=[('${NAME}', babase.Lstr(resource='res_b'))])
- args¶
Basically just stores the exact args passed. However if Lstr values were passed for subs, they are replaced with that Lstr’s dict.
- evaluate() str[source]¶
Evaluate to a flat string in the current language.
You should avoid doing this as much as possible and instead pass and store
Lstrvalues.
- static from_json(json_string: str) babase.Lstr[source]¶
Given a json string, returns a
Lstr.Does no validation.
- class bascenev1.Map(vr_overlay_offset: Sequence[float] | None = None)[source]¶
Bases:
ActorA game map.
Consists of a collection of terrain nodes, metadata, and other functionality comprising a game map.
- exists() bool[source]¶
Returns whether the actor is still present in a meaningful way.
Note that a dying character should still return True here as long as their corpse is visible; this is about presence, not being ‘alive’ (see
is_alive()for that).If this returns False, it is assumed the actor can be completely deleted without affecting the game; this call is often used when pruning lists of actors, such as with
bascenev1.Actor.autoretain()The default implementation of this method always return True.
Note that the boolean operator for the actor class calls this method, so a simple
if myactortest will conveniently do the right thing even if myactor is set to None.
- get_def_bound_box(name: str) tuple[float, float, float, float, float, float] | None[source]¶
Return a 6 member bounds tuple or None if it is not defined.
- get_def_point(name: str) Sequence[float] | None[source]¶
Return a single defined point or a default value in its absence.
- get_def_points(name: str) list[Sequence[float]][source]¶
Return a list of named points.
Return as many sequential ones are defined (flag1, flag2, flag3), etc. If none are defined, returns an empty list.
- get_ffa_start_position(players: Sequence[bascenev1.Player]) Sequence[float][source]¶
Return a random starting position in one of the FFA spawn areas.
If a list of bascenev1.Player-s is provided; the returned points will be as far from these players as possible.
- get_flag_position(team_index: int | None = None) Sequence[float][source]¶
Return a flag position on the map for the given team index.
Pass
Noneto get the default flag point. (used for things such as king-of-the-hill)
- classmethod get_music_type() bascenev1.MusicType | None[source]¶
Return a music-type string that should be played on this map.
If None is returned, default music will be used.
- classmethod get_preview_texture() bauiv1.Texture | None[source]¶
Return this map’s preview texture, or
Noneif it has none.Map previews are drawn by ui code, so this hands back a loaded
Texture– typically straight off an asset-package wrapper (someassets.textures.my_map_preview.get()). Headless builds can call this too; textures there load as null data rather than being unavailable.
- classmethod get_preview_texture_name() str | None[source]¶
Return the name of the preview texture for this map.
Deprecated since version 1.8.0: Override
get_preview_texture()instead, which hands back the loaded texture rather than a name to look up. Overriding this still works –get_preview_texture()falls back to it – but built-in maps no longer implement it, so calling it on one returnsNone. Removed when api 9 support ends.
- get_start_position(team_index: int) Sequence[float][source]¶
Return a random starting position for the given team index.
- is_point_near_edge(point: Vec3, running: bool = False) bool[source]¶
Return whether the provided point is near an edge of the map.
Simple bot logic uses this call to determine if they are approaching a cliff or wall. If this returns True they will generally not walk/run any farther away from the origin. If ‘running’ is True, the buffer should be a bit larger.
- name = 'Map'¶
- classmethod on_preload() Any[source]¶
Called when the map is being preloaded.
It should return any media/data it requires to operate
- classmethod preload() None[source]¶
Preload map media.
This runs the class’s on_preload() method as needed to prep it to run. Preloading should generally be done in a bascenev1.Activity’s __init__ method. Note that this is a classmethod since it is not operate on map instances but rather on the class itself before instances are made
- class bascenev1.Material(label: str | None = None)[source]¶
Bases:
objectAn entity applied to game objects to modify collision behavior.
A material can affect physical characteristics, generate sounds, or trigger callback functions when collisions occur.
Materials are applied to ‘parts’, which are groups of one or more rigid bodies created as part of a bascenev1.Node. Nodes can have any number of parts, each with its own set of materials. Generally materials are specified as array attributes on the Node. The spaz node, for example, has various attributes such as materials, roller_materials, and punch_materials, which correspond to the various parts it creates.
Use bascenev1.Material to instantiate a blank material, and then use its
bascenev1.Material.add_actions()method to define what the material does.- add_actions(actions: tuple, conditions: tuple | None = None) None[source]¶
Add one or more actions to the material, optionally with conditions.
Conditions¶
Conditions are provided as tuples which can be combined to form boolean logic. A single condition might look like:
('condition_name', cond_arg)Or a more complex nested one might look like:
(('condition1', cond_arg), 'or', ('condition2', cond2_arg))The strings
'and','or', and'xor'can chain together two conditions, as seen above.Available Conditions¶
('they_have_material', material)Does the part we’re hitting have a given
bascenev1.Material?('they_dont_have_material', material)Does the part we’re hitting not have a given
bascenev1.Material?('eval_colliding')Is
'collide'true at this point in material evaluation? (see themodify_part_collisionaction)('eval_not_colliding')Is
collidefalse at this point in material evaluation? (see themodify_part_collisionaction)('we_are_younger_than', age)Is our part younger than
age(in milliseconds)?('we_are_older_than', age)Is our part older than
age(in milliseconds)?('they_are_younger_than', age)Is the part we’re hitting younger than
age(in milliseconds)?('they_are_older_than', age)Is the part we’re hitting older than
age(in milliseconds)?('they_are_same_node_as_us')Does the part we’re hitting belong to the same
bascenev1.Nodeas us?('they_are_different_node_than_us')Does the part we’re hitting belong to a different
bascenev1.Node?
Actions¶
In a similar manner, actions are specified as tuples. Multiple actions can be specified by providing a tuple of tuples.
Available Actions¶
('call', when, callable)Calls the provided callable;
whencan be either'at_connect'or'at_disconnect'.'at_connect'means to fire when the two parts first come in contact;'at_disconnect'means to fire once they cease being in contact.('message', who, when, message_obj)Sends a message object;
whocan be either'our_node'or'their_node',whencan be'at_connect'or'at_disconnect', andmessage_objis the message object to send. This has the same effect as calling the node’sbascenev1.Node.handlemessage()method.('modify_part_collision', attr, value)Changes some characteristic of the physical collision that will occur between our part and their part. This change will remain in effect as long as the two parts remain overlapping. This means if you have a part with a material that turns
'collide'off against parts younger than 100ms, and it touches another part that is 50ms old, it will continue to not collide with that part until they separate, even if the 100ms threshold is passed. Options for attr/value are:'physical'(boolean value; whether a physical response will occur at all),'friction'(float value; how friction-y the physical response will be),'collide'(boolean value; whether any collision will occur at all, including non-physical stuff like callbacks),'use_node_collide'(boolean value; whether to honor modify_node_collision overrides for this collision),'stiffness'(float value, how springy the physical response is),'damping'(float value, how damped the physical response is),'bounce'(float value; how bouncy the physical response is).('modify_node_collision', attr, value)Similar to
modify_part_collision, but operates at a node-level. Collision attributes set here will remain in effect as long as anything from our part’s node and their part’s node overlap. A key use of this functionality is to prevent new nodes from colliding with each other if they appear overlapped; ifmodify_part_collisionis used, only the individual parts that were overlapping would avoid contact, but other parts could still contact leaving the two nodes ‘tangled up’. Usingmodify_node_collisionensures that the nodes must completely separate before they can start colliding. Currently the only attr available here is'collide'(a boolean value).('sound', sound, volume)Plays a
bascenev1.Soundwhen a collision occurs, at a given volume, regardless of the collision speed/etc.('impact_sound', sound, target_impulse, volume)Plays a sound when a collision occurs, based on the speed of impact. Provide a
bascenev1.Sound, a target-impulse, and a volume.('skid_sound', sound, target_impulse, volume)Plays a sound during a collision when parts are ‘scraping’ against each other. Provide a
bascenev1.Sound, a target-impulse, and a volume.('roll_sound', sound, targetImpulse, volume)Plays a sound during a collision when parts are ‘rolling’ against each other. Provide a
bascenev1.Sound, a target-impulse, and a volume.
Examples
Example 1: Create a material that lets us ignore collisions against any nodes we touch in the first 100 ms of our existence; handy for preventing us from exploding outward if we spawn on top of another object:
m = bascenev1.Material() m.add_actions( conditions=(('we_are_younger_than', 100), 'or', ('they_are_younger_than', 100)), actions=('modify_node_collision', 'collide', False))
Example 2: Send a
bascenev1.DieMessageto anything we touch, but cause no physical response. This should cause anybascenev1.Actorto drop dead:m = bascenev1.Material() m.add_actions( actions=( ('modify_part_collision', 'physical', False), ('message', 'their_node', 'at_connect', bascenev1.DieMessage()) ) )
Example 3: Play some sounds when we’re contacting the ground:
m = bascenev1.Material() m.add_actions( conditions=('they_have_material' shared.footing_material), actions=( ('impact_sound', bascenev1.getsound('metalHit'), 2, 5), ('skid_sound', bascenev1.getsound('metalSkid'), 2, 5) ) )
- class bascenev1.Mesh[source]¶
Bases:
objectA reference to a mesh.
Meshes are used for drawing. Use
bascenev1.getmesh()to instantiate one.
- class bascenev1.MeshVerifiedSpec(apverid: str, name: str)[source]¶
Bases:
MeshSpecA mesh reference that can also load the live scene mesh.
- get() bascenev1.Mesh[source]¶
Resolve and return the live scene mesh for this reference.
- ui() bauiv1.MeshVerifiedSpec[source]¶
This same verified reference, in ui form.
Both featuresets’ verified specs assert the same thing – the package was construct-mode-resolved – so converting between them preserves that guarantee; only what
get()loads differs (a ui mesh vs a scene-bound one). Use at a ui boundary consuming scene-authored config, such as a spaz appearance’s icon.There is deliberately no reverse
scene()on the ui types:scene_v1always pulls inui_v1(viaclassic), but a spinoff may includeui_v1with noscene_v1at all.
- class bascenev1.MultiTeamSession[source]¶
Bases:
SessionCommon base for DualTeamSession and FreeForAllSession.
Free-for-all-mode is essentially just teams-mode with each bascenev1.Player having their own bascenev1.Team, so there is much overlap in functionality.
- announce_game_results(activity: bascenev1.GameActivity, results: bascenev1.GameResults, delay: float, announce_winning_team: bool = True) None[source]¶
Show basic game result at the end of a game.
(before transitioning to a score screen). This will include a zoom-text of ‘BLUE WINS’ or whatnot, along with a possible audio announcement of the same.
- get_next_game_description(*, langstr: Literal[False] = False) Lstr[source]¶
- get_next_game_description(*, langstr: Literal[True]) LangStr
Returns a description of the next game on deck.
Pass
langstr=Trueto receive aLangStr. The legacyLstrform goes away when api 9 support ends.
- on_activity_end(activity: bascenev1.Activity, results: Any) None[source]¶
Called when the current activity has ended.
The session should look at the results and start another activity.
- on_team_join(team: bascenev1.SessionTeam) None[source]¶
Called when a new team joins the session.
- class bascenev1.MusicType(*values)[source]¶
Bases:
EnumTypes of music available to play in-game.
These do not correspond to specific pieces of music, but rather to ‘situations’. The actual music played for each type can be overridden by the game or by the user.
- CHAR_SELECT = 'CharSelect'¶
- CHOSEN_ONE = 'Chosen One'¶
- EPIC = 'Epic'¶
- EPIC_RACE = 'Epic Race'¶
- FLAG_CATCHER = 'FlagCatcher'¶
- FLYING = 'Flying'¶
- FOOTBALL = 'Football'¶
- FORWARD_MARCH = 'ForwardMarch'¶
- GRAND_ROMP = 'GrandRomp'¶
- HOCKEY = 'Hockey'¶
- KEEP_AWAY = 'Keep Away'¶
- MARCHING = 'Marching'¶
- MENU = 'Menu'¶
- ONSLAUGHT = 'Onslaught'¶
- RACE = 'Race'¶
- RUN_AWAY = 'RunAway'¶
- SCARY = 'Scary'¶
- SCORES = 'Scores'¶
- SPORTS = 'Sports'¶
- SURVIVAL = 'Survival'¶
- TO_THE_DEATH = 'ToTheDeath'¶
- VICTORY = 'Victory'¶
- class bascenev1.Node[source]¶
Bases:
objectReference to a Node; the low level building block of a game.
At its core, a game is nothing more than a scene of Nodes with attributes getting interconnected or set over time.
A
bascenev1.Nodeinstance should be thought of as a weak-reference to a game node; not the node itself. This means a Node’s lifecycle is completely independent of how many Python references to it exist. To explicitly add a new node to the game, usebascenev1.newnode(), and to explicitly delete one, usebascenev1.Node.delete().bascenev1.Node.exists()can be used to determine if a Node still points to a live node in the game.You can use
bascenev1.Node(None)to instantiate an invalid Node reference (sometimes used as attr values/etc).- add_death_action(action: Callable[[], None]) None[source]¶
Add a callable object to be called upon this node’s death. Note that these actions are run just after the node dies, not before.
- billboard_texture: bascenev1.Texture | None = None¶
Available on spaz node.
- connectattr(srcattr: str, dstnode: Node, dstattr: str) None[source]¶
Connect one of this node’s attributes to an attribute on another node. This will immediately set the target attribute’s value to that of the source attribute, and will continue to do so once per step as long as the two nodes exist. The connection can be severed by setting the target attribute to any value or connecting another node attribute to it.
Example: Create a locator and attach a light to it:
light = bascenev1.newnode('light') loc = bascenev1.newnode('locator', attrs={'position': (0, 10, 0)}) loc.connectattr('position', light, 'position')
- counter_texture: bascenev1.Texture | None = None¶
- delete(ignore_missing: bool = True) None[source]¶
Delete the node. Ignores already-deleted nodes if ignore_missing is True; otherwise a
babase.NodeNotFoundErroris thrown.
- exists() bool[source]¶
Returns whether the Node still exists. Most functionality will fail on a nonexistent Node, so it’s never a bad idea to check this.
Note that you can also use the boolean operator for this same functionality, so a statement such as “if mynode” will do the right thing both for Node objects and values of None.
- extras_material: Sequence[bascenev1.Material] = ()¶
- getdelegate(type: type[T], doraise: Literal[False] = False) T | None[source]¶
- getdelegate(type: type[T], doraise: Literal[True]) T
Return the node’s current delegate object if it matches a certain type.
If the node has no delegate or it is not an instance of the passed type, then None will be returned. If ‘doraise’ is True, then an bascenev1.DelegateNotFoundError will be raised instead.
- getnodetype() str[source]¶
Return the internal type of node referenced by this object as a string. (Note this is different from the Python type which is always
bascenev1.Node)
- handlemessage(*args: Any) None[source]¶
General message handling; can be passed any message object.
All standard message objects are forwarded along to the node’s delegate for handling (generally the
bascenev1.Actorthat made the node).Nodes also support a second form of message; ‘node-messages’. These consist of a string type-name as a first argument along with the args specific to that type name as additional arguments. Node-messages communicate directly with the low-level node layer and are delivered simultaneously on all game clients, acting as an alternative to setting node attributes.
- hold_node: bascenev1.Node | None = None¶
- materials: Sequence[bascenev1.Material] = ()¶
- mesh_opaque: bascenev1.Mesh | None = None¶
- mesh_transparent: bascenev1.Mesh | None = None¶
- mini_billboard_1_texture: bascenev1.Texture | None = None¶
Available on spaz node.
- mini_billboard_2_texture: bascenev1.Texture | None = None¶
Available on spaz node.
- mini_billboard_3_texture: bascenev1.Texture | None = None¶
Available on spaz node.
- pickup_materials: Sequence[bascenev1.Material] = ()¶
- punch_materials: Sequence[bascenev1.Material] = ()¶
- roller_materials: Sequence[bascenev1.Material] = ()¶
- source_player: bascenev1.Player | None = None¶
- text: babase.Lstr | babase.LangStr | str = ''¶
- texture: bascenev1.Texture | None = None¶
- tint_texture: bascenev1.Texture | None = None¶
- class bascenev1.NodeActor(node: bascenev1.Node)[source]¶
Bases:
ActorA simple bascenev1.Actor type that wraps a single bascenev1.Node.
This Actor will delete its Node when told to die, and it’s exists() call will return whether the Node still exists or not.
- exists() bool[source]¶
Returns whether the actor is still present in a meaningful way.
Note that a dying character should still return True here as long as their corpse is visible; this is about presence, not being ‘alive’ (see
is_alive()for that).If this returns False, it is assumed the actor can be completely deleted without affecting the game; this call is often used when pruning lists of actors, such as with
bascenev1.Actor.autoretain()The default implementation of this method always return True.
Note that the boolean operator for the actor class calls this method, so a simple
if myactortest will conveniently do the right thing even if myactor is set to None.
- exception bascenev1.NodeNotFoundError[source]¶
Bases:
NotFoundErrorRaised when an expected node does not exist.
- exception bascenev1.NotFoundError[source]¶
Bases:
ExceptionRaised when a referenced object does not exist.
- class bascenev1.OutOfBoundsMessage[source]¶
Bases:
objectA message telling an object that it is out of bounds.
- class bascenev1.PickUpMessage(node: bascenev1.Node)[source]¶
Bases:
objectTells an object that it has picked something up.
- node: bascenev1.Node¶
The bascenev1.Node that is getting picked up.
- class bascenev1.PickedUpMessage(node: bascenev1.Node)[source]¶
Bases:
objectTells an object that it has been picked up by something.
- node: bascenev1.Node¶
The bascenev1.Node doing the picking up.
- class bascenev1.Player[source]¶
Bases:
GenericA player in a specific bascenev1.Activity.
These correspond to bascenev1.SessionPlayer objects, but are associated with a single bascenev1.Activity instance. This allows activities to specify their own custom bascenev1.Player types.
- actor: bascenev1.Actor | None¶
The bascenev1.Actor associated with the player.
- assigninput(inputtype: InputType | tuple[InputType, ...], call: Callable) None[source]¶
Set the python callable to be run for one or more types of input.
- property customdata: dict¶
Arbitrary values associated with the player. Though it is encouraged that most player values be properly defined on the bascenev1.Player subclass, it may be useful for player-agnostic objects to store values here. This dict is cleared when the player leaves or expires so objects stored here will be disposed of at the expected time, unlike the Player instance itself which may continue to be referenced after it is no longer part of the game.
- exists() bool[source]¶
Whether the underlying player still exists.
This will return False if the underlying bascenev1.SessionPlayer has left the game or if the bascenev1.Activity this player was associated with has ended. Most functionality will fail on a nonexistent player. Note that you can also use the boolean operator for this same functionality, so a statement such as “if player” will do the right thing both for Player objects and values of None.
- get_icon() dict[str, Any][source]¶
Returns the character’s icon (images, colors, etc contained in a dict)
- getname(full: bool = False, icon: bool = True) str[source]¶
Returns the player’s name. If icon is True, the long version of the name may include an icon.
- is_alive() bool[source]¶
Returns True if the player has a bascenev1.Actor assigned and its is_alive() method return True. False is returned otherwise.
- property node: bascenev1.Node¶
A bascenev1.Node of type ‘player’ associated with this Player.
This node can be used to get a generic player position/etc.
- on_expire() None[source]¶
Can be overridden to handle player expiration.
The player expires when the Activity it is a part of expires. Expired players should no longer run any game logic (which will likely error). They should, however, remove any references to players/teams/games/etc. which could prevent them from being freed.
- property position: Vec3¶
The position of the player, as defined by its bascenev1.Actor.
If the player currently has no actor, raises a babase.ActorNotFoundError.
- postinit(sessionplayer: bascenev1.SessionPlayer) None[source]¶
Wire up a newly created player.
(internal)
- send_feedback(*, event: FeedbackEvent = 'impact_received') None[source]¶
Request physical feedback (controller rumble, device vibration) for whoever is controlling this player.
eventsays what happened; each platform decides how strong and how long that should feel, so there is deliberately nothing else to pass. Note a device may render nothing at all for an event its hardware cannot represent well, so don’t rely on any particular one always being felt.
- property sessionplayer: bascenev1.SessionPlayer¶
Return the bascenev1.SessionPlayer corresponding to this Player.
Throws a bascenev1.SessionPlayerNotFoundError if it does not exist.
- property team: TeamT¶
The bascenev1.Team for this player.
- class bascenev1.PlayerDiedMessage(player: bascenev1.Player, was_killed: bool, killerplayer: bascenev1.Player | None, how: DeathType)[source]¶
Bases:
objectA message saying a bascenev1.Player has died.
- getkillerplayer(playertype: type[PlayerT]) PlayerT | None[source]¶
Return the bascenev1.Player responsible for the killing, if any.
Pass the Player type being used by the current game.
- class bascenev1.PlayerInfo(name: str, character: str)[source]¶
Bases:
objectHolds basic info about a player.
- exception bascenev1.PlayerNotFoundError[source]¶
Bases:
NotFoundErrorRaised when an expected player does not exist.
- class bascenev1.PlayerProfilesChangedMessage[source]¶
Bases:
objectSignals player profiles may have changed and should be reloaded.
- class bascenev1.PlayerRecord(name: str, name_full: str, sessionplayer: bascenev1.SessionPlayer, stats: bascenev1.Stats)[source]¶
Bases:
objectStats for an individual player in a bascenev1.Stats object.
This does not necessarily correspond to a bascenev1.Player that is still present (stats may be retained for players that leave mid-game)
- associate_with_sessionplayer(sessionplayer: bascenev1.SessionPlayer) None[source]¶
Associate this entry with a bascenev1.SessionPlayer.
- get_last_sessionplayer() bascenev1.SessionPlayer[source]¶
Return the last bascenev1.Player we were associated with.
- getactivity() bascenev1.Activity | None[source]¶
Return the bascenev1.Activity this instance is associated with.
Returns None if the activity no longer exists.
- property player: bascenev1.SessionPlayer¶
Return the instance’s associated bascenev1.SessionPlayer.
Raises a bascenev1.SessionPlayerNotFoundError if the player no longer exists.
- property team: bascenev1.SessionTeam¶
The bascenev1.SessionTeam the last associated player was last on.
This can still return a valid result even if the player is gone. Raises a bascenev1.SessionTeamNotFoundError if the team no longer exists.
- class bascenev1.PlayerScoredMessage(score: int)[source]¶
Bases:
objectInforms something that a bascenev1.Player scored.
- class bascenev1.Plugin[source]¶
Bases:
objectA plugin to alter app behavior in some way.
Plugins are discoverable by the
MetadataSubsystemsystem and the user can select which ones they want to enable. Enabled plugins are then called at specific times as the app is running in order to modify its behavior in some way.
- class bascenev1.PowerupAcceptMessage[source]¶
Bases:
objectA message informing a bascenev1.Powerup that it was accepted.
This is generally sent in response to a bascenev1.PowerupMessage to inform the box (or whoever granted it) that it can go away.
- class bascenev1.PowerupMessage(poweruptype: str, sourcenode: bascenev1.Node | None = None)[source]¶
Bases:
objectA message telling an object to accept a powerup.
This message is normally received by touching a bascenev1.PowerupBox.
- poweruptype: str¶
The type of powerup to be granted (a string). See bascenev1.Powerup.poweruptype for available type values.
- sourcenode: bascenev1.Node | None = None¶
The node the powerup game from, or None otherwise. If a powerup is accepted, a bascenev1.PowerupAcceptMessage should be sent back to the sourcenode to inform it of the fact. This will generally cause the powerup box to make a sound and disappear or whatnot.
- class bascenev1.ScoreConfig(label: str = 'Score', scoretype: bascenev1.ScoreType = ScoreType.POINTS, lower_is_better: bool = False, none_is_winner: bool = False, version: str = '')[source]¶
Bases:
objectSettings for how a game handles scores.
- none_is_winner: bool = False¶
Whether a value of None is considered better than other scores. By default it is not.
- scoretype: bascenev1.ScoreType = 'p'¶
How the score value should be displayed.
- class bascenev1.ScoreScreenActivity(settings: dict)[source]¶
Bases:
Activity[EmptyPlayer,EmptyTeam]A standard score screen that fades in and shows stuff for a while.
After a specified delay, player input is assigned to end the activity.
- inherits_tint = True¶
Set this to true to inherit screen tint/vignette colors from the previous activity (useful to prevent sudden color changes during transitions).
- inherits_vr_camera_offset = True¶
Set this to true to inherit VR camera offsets from the previous activity (useful for preventing sporadic camera movement during transitions).
- on_begin() None[source]¶
Called once the previous activity has finished transitioning out.
At this point the activity’s initial players and teams are filled in and it should begin its actual game logic.
- on_player_join(player: EmptyPlayer) None[source]¶
Called when a player joins the activity.
(including the initial set of players)
- on_transition_in() None[source]¶
Called when the activity is first becoming visible.
Upon this call, the activity should fade in backgrounds, start playing music, etc. It does not yet have access to players or teams, however. They remain owned by the previous activity up until
on_begin()is called.
- transition_time = 0.5¶
If the activity fades or transitions in, it should set the length of time here so that previous activities will be kept alive for that long (avoiding ‘holes’ in the screen) This value is given in real-time seconds.
- use_fixed_vr_overlay = True¶
In vr mode, this determines whether overlay nodes (text, images, etc) are created at a fixed position in space or one that moves based on the current map. Generally this should be on for games and off for transitions/score-screens/etc. that persist between maps.
- class bascenev1.ScoreType(*values)[source]¶
Bases:
EnumType of scores.
- MILLISECONDS = 'ms'¶
- POINTS = 'p'¶
- SECONDS = 's'¶
- class bascenev1.Session(*, team_names: Sequence[str] | None = None, team_colors: Sequence[Sequence[float]] | None = None, min_players: int = 1, max_players: int = 8, submit_score: bool = True)[source]¶
Bases:
objectWrangles a series of
Activityinstances.Examples of sessions are
bascenev1.FreeForAllSession,bascenev1.DualTeamSession, andbascenev1.CoopSession.A session is responsible for wrangling and transitioning between various activity instances such as mini-games and score-screens, and for maintaining state between them (players, teams, score tallies, etc).
- begin_next_activity() None[source]¶
Called once the previous activity has been totally torn down.
This means we’re ready to begin the next one.
- property context: bascenev1.ContextRef¶
A context-ref pointing at this activity.
- customdata: dict¶
A shared dictionary for objects to use as storage on this session. Ensure that keys here are unique to avoid collisions.
- end() None[source]¶
Initiate an end to the session and a return to the main menu.
Note that this happens asynchronously, allowing the session and its activities to shut down gracefully.
- end_activity(activity: bascenev1.Activity, results: Any, delay: float, force: bool) None[source]¶
Commence shutdown of an activity (if not already occurring).
‘delay’ is the time delay before the activity actually ends (in seconds). Further calls to end the activity will be ignored up until this time, unless ‘force’ is True, in which case the new results will replace the old.
Subclasses can override this to provide custom menu entries.
The returned value should be a list of dicts, each containing a ‘label’ and ‘call’ entry, with ‘label’ being the text for the entry and ‘call’ being the callable to trigger if the entry is pressed.
- getactivity() bascenev1.Activity | None[source]¶
Return the current foreground activity for this session.
- lobby: bascenev1.Lobby¶
The lobby instance where new players go to select a profile/team/etc. before being added to games. Be aware this value may be None if a session does not allow any such selection.
- min_players: int¶
The minimum number of players who must be present for the Session to proceed past the initial joining screen
- on_activity_end(activity: bascenev1.Activity, results: Any) None[source]¶
Called when the current activity has ended.
The session should look at the results and start another activity.
- on_player_leave(sessionplayer: bascenev1.SessionPlayer) None[source]¶
Called when a previously-accepted bascenev1.SessionPlayer leaves.
- on_player_request(player: bascenev1.SessionPlayer) bool[source]¶
Called when a new player wants to join the session.
This should return True or False to accept/reject.
- on_team_join(team: bascenev1.SessionTeam) None[source]¶
Called when a new team joins the session.
- on_team_leave(team: bascenev1.SessionTeam) None[source]¶
Called when a team is leaving the session.
- property sessionglobalsnode: bascenev1.Node¶
The sessionglobals node for the session.
- sessionplayers: list[bascenev1.SessionPlayer]¶
All players in the session. Note that most things should use the list of
Playerinstances found in theActivity; not this. Some players, such as those who have not yet selected a character, will only be found on this list.
- sessionteams: list[bascenev1.SessionTeam]¶
All the teams in the session. Most things will operate on the list of
Teaminstances found in anActivity; not this.
- setactivity(activity: bascenev1.Activity) None[source]¶
Assign a new current activity for the session.
Note that this will not change the current context to the new activity’s. Code must be run in the new activity’s methods (
on_transition_in(), etc) to get it. (so you can’t dosession.setactivity(foo)and thenbascenev1.newnode()to add a node to foo).
- should_allow_mid_activity_joins(activity: bascenev1.Activity) bool[source]¶
Ask ourself if we should allow joins during an Activity.
Note that for a join to be allowed, both the session and activity have to be ok with it (via this function and the
bascenev1.Activity.allow_mid_activity_joinsproperty.
- exception bascenev1.SessionNotFoundError[source]¶
Bases:
NotFoundErrorRaised when an expected session does not exist.
- class bascenev1.SessionPlayer[source]¶
Bases:
objectA reference to a player in a
Session.These are created and managed internally and provided to your
Session/Activityinstances. Be aware that, likeNodeobjects,SessionPlayerobjects are effectively ‘weak’ references under-the-hood; a player can leave the game at any point. For this reason, you should make judicious use of thebascenev1.SessionPlayer.exists()method (or boolean operator) to ensure that aSessionPlayeris still present if retaining references to one for any length of time.- activityplayer: bascenev1.Player | None¶
The current game-specific instance for this player.
- assigninput(type: bascenev1.InputType | tuple[bascenev1.InputType, ...], call: Callable) None[source]¶
Set the python callable to be run for one or more types of input.
- color: Sequence[float]¶
The base color for this player. In team games this will match the team’s color.
- get_account_id() str | None[source]¶
Return the account id this player is signed in under, or None if not available. For players connected via protocol < 36 this will be a V1 account id; for protocol >= 36 it will be a V2 account id. Note that this may require an active internet connection (especially for network-connected players) and may return None for a short while after a player initially joins (while verification occurs).
- get_icon() dict[str, Any][source]¶
Return the character’s icon (images, colors, etc contained in a dict.
- get_v1_account_id() str | None[source]¶
Deprecated since version Use:
get_account_id()instead. This method will be removed when api 9 support ends.Return the account id this player is signed in under, if it can be determined with relative certainty. Returns None otherwise.
- getname(full: bool = False, icon: bool = True) str[source]¶
Returns the player’s name. If
iconis True, the long version of the name may include an icon.
- highlight: Sequence[float]¶
A secondary color for this player. This is used for minor highlights and accents to allow a player to stand apart from his teammates who may all share the same team (primary) color.
- id: int¶
The unique numeric id of the player.
Note that you can also use the boolean operator for this same functionality, so a statement such as
if player:will do the right thing both forSessionPlayerobjects as well as values ofNone.
- in_game: bool¶
This bool value will be True once the player has completed any lobby character/team selection.
- inputdevice: bascenev1.InputDevice¶
The input device associated with the player.
- send_feedback(*, event: str = 'impact_received') None[source]¶
Request physical feedback (controller rumble, device vibration) for whoever is controlling this player.
eventsays what happened, not what it should feel like; each platform renders it however it does that best. Valid values are ‘join’, ‘collect’, ‘grab’, ‘impact_dealt’, ‘impact_received’ and ‘death’. Note a device may render nothing at all for an event its hardware cannot represent well, so don’t rely on any particular one always being felt.Does nothing if the player has already left the game.
- sessionteam: bascenev1.SessionTeam¶
The session-team this session-player is on. If the player is still in its lobby selecting a team/etc. then a
SessionTeamNotFoundErrorwill be raised.
- class bascenev1.SessionTeam(team_id: int = 0, name: str | Lstr | LangStr = '', color: Sequence[float] = (1.0, 1.0, 1.0))[source]¶
Bases:
objectA team of one or more
SessionPlayer.Note that a player will always have a team. in some cases, such as free-for-all
Session, each team consists of just one player.- customdata: dict¶
A dict for use by the current
Sessionfor storing data associated with this team. Unlike customdata, this persists for the duration of the session.
- name: str | babase.LangStr¶
The team’s name.
Built-in default names are
LangStrvalues; names the player typed themselves are plain strings, shown as-is.
- players: list[bascenev1.SessionPlayer]¶
The list of players on the team.
- exception bascenev1.SessionTeamNotFoundError[source]¶
Bases:
NotFoundErrorRaised when an expected session-team does not exist.
- class bascenev1.Setting(name: str, default: Any)[source]¶
Bases:
objectDefines a user-controllable setting for a game or other entity.
- class bascenev1.Sound[source]¶
Bases:
objectA reference to a sound.
Use
bascenev1.getsound()to instantiate one.
- class bascenev1.SoundVerifiedSpec(apverid: str, name: str)[source]¶
Bases:
SoundSpecA sound reference that can also load the live scene sound.
- get() bascenev1.Sound[source]¶
Resolve and return the live scene sound for this reference.
- ui() bauiv1.SoundVerifiedSpec[source]¶
This same verified reference, in ui form.
Both featuresets’ verified specs assert the same thing – the package was construct-mode-resolved – so converting between them preserves that guarantee; only what
get()loads differs (a ui sound vs a scene-bound one). Use at a ui boundary consuming scene-authored config, such as a spaz appearance’s icon.There is deliberately no reverse
scene()on the ui types:scene_v1always pulls inui_v1(viaclassic), but a spinoff may includeui_v1with noscene_v1at all.
- class bascenev1.StandLocation(position: Vec3, angle: float | None = None)[source]¶
Bases:
objectDescribes a point in space and an angle to face.
- class bascenev1.StandMessage(position: Sequence[float] = (0.0, 0.0, 0.0), angle: float = 0.0)[source]¶
Bases:
objectA message telling an object to move to a position in space.
Used when teleporting players to home base, etc.
- class bascenev1.Stats[source]¶
Bases:
objectManages scores and statistics for a bascenev1.Session.
- get_records() dict[str, bascenev1.PlayerRecord][source]¶
Get PlayerRecord corresponding to still-existing players.
- getactivity() bascenev1.Activity | None[source]¶
Get the activity associated with this instance.
May return None.
- orchestrahitsound1: bascenev1.Sound | None¶
- orchestrahitsound2: bascenev1.Sound | None¶
- orchestrahitsound3: bascenev1.Sound | None¶
- orchestrahitsound4: bascenev1.Sound | None¶
- player_scored(player: bascenev1.Player, base_points: int = 1, *, target: Sequence[float] | None = None, kill: bool = False, victim_player: bascenev1.Player | None = None, scale: float = 1.0, color: Sequence[float] | None = None, title: str | babase.Lstr | babase.LangStr | None = None, screenmessage: bool = True, display: bool = True, importance: int = 1, showpoints: bool = True, big_message: bool = False) int[source]¶
Register a score for the player.
Return value is actual score with multipliers and such factored in.
- player_was_killed(player: bascenev1.Player, killed: bool = False, killer: bascenev1.Player | None = None) None[source]¶
Should be called when a player is killed.
- register_sessionplayer(player: bascenev1.SessionPlayer) None[source]¶
Register a bascenev1.SessionPlayer with this score-set.
- setactivity(activity: bascenev1.Activity | None) None[source]¶
Set the current activity for this instance.
- class bascenev1.Team[source]¶
Bases:
GenericA team in a specific
Activity.These correspond to
SessionTeamobjects, but are created per activity so that the activity can use its own custom team subclass.- property customdata: dict¶
Arbitrary values associated with the team. Though it is encouraged that most player values be properly defined on the
Teamsubclass, it may be useful for player-agnostic objects to store values here. This dict is cleared when the team leaves or expires so objects stored here will be disposed of at the expected time, unlike theTeaminstance itself which may continue to be referenced after it is no longer part of the game.
- manual_init(team_id: int, name: str | Lstr | LangStr, color: tuple[float, ...]) None[source]¶
Manually init a team for uses such as bots.
- property sessionteam: SessionTeam¶
The
SessionTeamcorresponding to this team.Throws a
SessionTeamNotFoundErrorif there is none.
- class bascenev1.TeamGameActivity(settings: dict)[source]¶
Bases:
GameActivity,GenericBase class for teams and free-for-all mode games.
(Free-for-all is essentially just a special case where every player has their own team)
- end(results: Any = None, announce_winning_team: bool = True, announce_delay: float = 0.1, force: bool = False) None[source]¶
End the game and announce the single winning team unless ‘announce_winning_team’ is False. (for results without a single most-important winner).
- on_begin() None[source]¶
Called once the previous activity has finished transitioning out.
At this point the activity’s initial players and teams are filled in and it should begin its actual game logic.
- on_transition_in() None[source]¶
Called when the activity is first becoming visible.
Upon this call, the activity should fade in backgrounds, start playing music, etc. It does not yet have access to players or teams, however. They remain owned by the previous activity up until
on_begin()is called.
- spawn_player_spaz(player: PlayerT, position: Sequence[float] | None = None, angle: float | None = None) PlayerSpaz[source]¶
Override to spawn and wire up a standard
PlayerSpazfor aPlayer.If position or angle is not supplied, a default will be chosen based on the
Playerand theirTeam.
- classmethod supports_session_type(sessiontype: type[bascenev1.Session]) bool[source]¶
Return whether this game supports the provided session type.
- class bascenev1.Texture[source]¶
Bases:
objectA reference to a texture.
Use
bascenev1.gettexture()to instantiate one.
- class bascenev1.TextureVerifiedSpec(apverid: str, name: str)[source]¶
Bases:
TextureSpecA texture reference that can also load the live scene texture.
- get() bascenev1.Texture[source]¶
Resolve and return the live scene texture for this reference.
Loads into the current scene context (see module docs).
- ui() bauiv1.TextureVerifiedSpec[source]¶
This same verified reference, in ui form.
Both featuresets’ verified specs assert the same thing – the package was construct-mode-resolved – so converting between them preserves that guarantee; only what
get()loads differs (a ui texture vs a scene-bound one). Use at a ui boundary consuming scene-authored config, such as a spaz appearance’s icon.There is deliberately no reverse
scene()on the ui types:scene_v1always pulls inui_v1(viaclassic), but a spinoff may includeui_v1with noscene_v1at all.
- class bascenev1.Time¶
Monotonic time measurement local to a scene activity — pauses when the activity pauses, resets when the activity ends.
alias of
float
- class bascenev1.Timer(time: float, call: Callable[[], Any], repeat: bool = False)[source]¶
Bases:
objectTimers are used to run code at later points in time.
This class encapsulates a scene-time timer in the current bascenev1.Context. The underlying timer will be destroyed when either this object is no longer referenced or when its Context (Activity, etc.) dies. If you do not want to worry about keeping a reference to your timer around, you should use the bs.timer() function instead.
Scene time maps to local simulation time in bascenev1.Activity or bascenev1.Session Contexts. This means that it may progress slower in slow-motion play modes, stop when the game is paused, etc.
- Parameters:
time – Length of time (in seconds by default) that the timer will wait before firing. Note that the actual delay experienced may vary depending on the timetype. (see below)
call – A callable Python object. Note that the timer will retain a strong reference to the callable for as long as it exists, so you may want to look into concepts such as
WeakCallif that is not desired.repeat – If True, the timer will fire repeatedly, with each successive firing having the same delay as the first.
Example: Use a Timer object to print repeatedly for a few seconds:
import bascenev1 as bs def say_it(): bs.screenmessage('BADGER!') def stop_saying_it(): global g_timer g_timer = None bs.screenmessage('MUSHROOM MUSHROOM!') # Create our timer; it will run as long as we hold its ref. g_timer = bs.Timer(0.3, say_it, repeat=True) # Now fire off a one-shot timer to kill the ref. bs.timer(3.89, stop_saying_it)
- class bascenev1.UIScale(*values)[source]¶
Bases:
EnumThe overall scale the UI is being rendered for. Note that this is independent of pixel resolution. For example, a phone and a desktop PC might render the game at similar pixel resolutions but the size they display content at will vary significantly.
- ‘large’ is used for devices such as desktop PCs where fine details can
be clearly seen. UI elements are generally smaller on the screen and more content can be seen at once.
- ‘medium’ is used for devices such as tablets, TVs, or VR headsets.
This mode strikes a balance between clean readability and amount of content visible.
- ‘small’ is used primarily for phones or other small devices where
content needs to be presented as large and clear in order to remain readable from an average distance.
- LARGE = 2¶
- MEDIUM = 1¶
- SMALL = 0¶
- bascenev1.UNHANDLED: bascenev1._messages._UnhandledType = <bascenev1._messages._UnhandledType object>¶
Gameplay-centric api for classic BombSquad.
- class bascenev1.Vec3[source]¶
- class bascenev1.Vec3(value: float)
- class bascenev1.Vec3(values: Sequence[float])
- class bascenev1.Vec3(x: float, y: float, z: float)
-
A vector of 3 floats.
- These can be created the following ways (checked in this order):
With no args, all values are set to 0.
With a single numeric arg, all values are set to that value.
With a three-member sequence arg, sequence values are copied.
Otherwise assumes individual x/y/z args (positional or keywords).
- class bascenev1.WeakCall(**kwargs)[source]¶
Bases:
objectTransitional alias of
WeakCallPartial.Deprecated — pick
WeakCallPartialorWeakCallStrictexplicitly. The@deprecateddecorator emits the runtime warning and is picked up by type-checkers/IDEs so call sites are flagged statically. TheWeakCallname will return after API 9 support ends but will then aliasWeakCallStrict, so migrating away now avoids a silent behavior change later.
- class bascenev1.WeakCallPartial(call: Any, /, *args: Any, **keywds: Any)[source]¶
Bases:
objectWrap a callable and arguments into a single callable object.
When passed a bound method as the callable, the instance portion of it is weak-referenced, meaning the underlying instance is free to die if all other references to it go away. Should this occur, calling the weak-call is simply a no-op.
Think of this as a handy way to tell an object to do something at some point in the future if it happens to still exist.
EXAMPLE A: This code will create a
FooClassinstance and call itsbar()method 5 seconds later; it will be kept alive even though we overwrite its variable with None because the bound method we pass as a timer callback (foo.bar) strong-references it:foo = FooClass() babase.apptimer(5.0, foo.bar) foo = None
EXAMPLE B: This code will not keep our object alive; it will die when we overwrite it with
Noneand the timer will be a no-op when it fires:foo = FooClass() babase.apptimer(5.0, ba.WeakCall(foo.bar)) foo = None
EXAMPLE C: Wrap a method call with some positional and keyword args:
myweakcall = babase.WeakCall(self.dostuff, argval1, namedarg=argval2) # Now we have a single callable to run that whole mess. # The same as calling myobj.dostuff(argval1, namedarg=argval2) # (provided my_obj still exists; this will do nothing otherwise). myweakcall()
Note: additional args and keywords you provide to the weak-call constructor are stored as regular strong-references; you’ll need to wrap them in weakrefs manually if desired.
- class bascenev1.WeakCallStrict(call: Callable[P, T], /, *args: P.args, **kwargs: P.kwargs)[source]¶
Bases:
Generic[P,T]Like
WeakCallPartial()but disallows extra args at call time.This allows more complete type checking to occur, so this is recommended if you do not need extra args at call time.
- args¶
- kwargs¶
- class bascenev1.WinnerGroup(score: int | None, teams: list[bascenev1.SessionTeam])[source]¶
Bases:
objectWinning team or teams as calculated by a
GameResults.- teams: list[bascenev1.SessionTeam]¶
- bascenev1.animate(node: bascenev1.Node, attr: str, keys: dict[float, float], loop: bool = False, offset: float = 0) bascenev1.Node[source]¶
Animate values on a target bascenev1.Node.
Creates an ‘animcurve’ node with the provided values and time as an input, connect it to the provided attribute, and set it to die with the target. Key values are provided as time:value dictionary pairs. Time values are relative to the current time. By default, times are specified in seconds, but timeformat can also be set to MILLISECONDS to recreate the old behavior (prior to ba 1.5) of taking milliseconds. Returns the animcurve node.
- bascenev1.animate_array(node: bascenev1.Node, attr: str, size: int, keys: dict[float, Sequence[float]], *, loop: bool = False, offset: float = 0) None[source]¶
Animate an array of values on a target bascenev1.Node.
Like bs.animate, but operates on array attributes.
- bascenev1.app: babase._app.App = <babase._app.App object>¶
The
Appsingleton for the current process. Also exposed atbauiv1.app,bascenev1.app, etc. — they all refer to this same object.
- bascenev1.apptime() babase.AppTime[source]¶
Return the current app-time in seconds.
App-time is a monotonic time value; it starts at 0.0 when the app launches and will never jump by large amounts or go backwards, even if the system time changes. Its progression will pause when the app is in a suspended state.
Note that the AppTime returned here is simply float; it just has a unique type in the type-checker’s eyes to help prevent it from being accidentally used with time functionality expecting other time types.
- bascenev1.apptimer(time: float, call: Callable[[], Any]) None[source]¶
Schedule a callable object to run based on app-time.
This function creates a one-off timer which cannot be canceled or modified once created. If you require the ability to do so, or need a repeating timer, use the babase.AppTimer class instead.
- Parameters:
time – Length of time in seconds that the timer will wait before firing.
call – A callable Python object. Note that the timer will retain a strong reference to the callable for as long as the timer exists, so you may want to look into concepts such as
WeakCallif that is not desired.
Example: Print some stuff through time:
import babase babase.screenmessage('hello from now!') babase.apptimer(1.0, babase.Call(babase.screenmessage, 'hello from the future!')) babase.apptimer(2.0, babase.Call(babase.screenmessage, 'hello from the future 2!'))
- bascenev1.basetime() bascenev1.BaseTime[source]¶
Return the base-time in seconds for the current scene-v1 context.
Base-time is a time value that progresses at a constant rate for a scene, even when the scene is sped up, slowed down, or paused. It may, however, speed up or slow down due to replay speed adjustments or may slow down if the cpu is overloaded. Note that the value returned here is simply a float; it just has a unique type in the type-checker’s eyes to help prevent it from being accidentally used with time functionality expecting other time types.
- bascenev1.basetimer(time: float, call: Callable[[], Any], repeat: bool = False) None[source]¶
Schedule a call to run at a later point in scene base-time. Base-time is a value that progresses at a constant rate for a scene, even when the scene is sped up, slowed down, or paused. It may, however, speed up or slow down due to replay speed adjustments or may slow down if the cpu is overloaded.
This function adds a timer to the current scene context. This timer cannot be canceled or modified once created. If you require the ability to do so, use the bascenev1.BaseTimer class instead.
- Parameters:
time – Length of time in seconds that the timer will wait before firing.
call – A callable Python object. Remember that the timer will retain a strong reference to the callable for the duration of the timer, so you may want to look into concepts such as
WeakCallif that is not desired.repeat – If True, the timer will fire repeatedly, with each successive firing having the same delay as the first.
Example: Print some stuff through time:
import bascenev1 as bs bs.screenmessage('hello from now!') bs.basetimer(1.0, bs.Call(bs.screenmessage, 'hello from the future!')) bs.basetimer(2.0, bs.Call(bs.screenmessage, 'hello from the future 2!'))
- bascenev1.broadcastmessage(message: str | babase.Lstr | babase.LangStr, color: Sequence[float] | None = None, top: bool = False, image: dict[str, Any] | None = None, log: bool = False, clients: Sequence[int] | None = None, transient: bool = False) None[source]¶
Broadcast a screen-message to clients in the current session.
If ‘top’ is True, the message will go to the top message area. For ‘top’ messages, ‘image’ must be a dict containing ‘texture’ and ‘tint_texture’ textures and ‘tint_color’ and ‘tint2_color’ colors. This defines an icon to display alongside the message. If ‘log’ is True, the message will also be submitted to the log. ‘clients’ can be a list of client-ids the message should be sent to, or None to specify that everyone should receive it. If ‘transient’ is True, the message will not be included in the game-stream and thus will not show up when viewing replays. Currently the ‘clients’ option only works for transient messages.
- bascenev1.cameraflash(duration: float = 999.0) None[source]¶
Create a strobing camera flash effect.
(as seen when a team wins a game) Duration is in seconds.
- bascenev1.camerashake(intensity: float = 1.0) None[source]¶
Shake the camera.
Note that some cameras and/or platforms (such as VR) may not display camera-shake, so do not rely on this always being visible to the player as a gameplay cue.
- bascenev1.chatmessage(message: str | babase.Lstr | babase.LangStr, clients: Sequence[int] | None = None, sender_override: str | None = None) None[source]¶
(internal)
- bascenev1.connect_to_party(address: str, port: int = 43210, print_progress: bool = True) None[source]¶
Attempt to connect to a party at a given address.
Runs the pre-join requirements exchange first: the prospective host is asked what it requires of joiners (its asset-package listing, etc.) and anything not yet locally available is downloaded – with a cancelable progress dialog – before the actual connection attempt happens. Hosts confirmed (via the legacy discovery query) to predate the requirements protocol get a plain immediate connect; hosts new enough to require the exchange never get an unprepped connect (a failed exchange fails the join).
(internal)
- bascenev1.displaytime() babase.DisplayTime[source]¶
Return the current display-time in seconds.
Display-time is a time value intended to be used for animation and other visual purposes. It will generally increment by a consistent amount each frame. It will pass at an overall similar rate to app-time, but trades accuracy for smoothness.
Note that the value returned here is simply a float; it just has a unique type in the type-checker’s eyes to help prevent it from being accidentally used with time functionality expecting other time types.
- bascenev1.displaytimer(time: float, call: Callable[[], Any]) None[source]¶
Schedule a callable object to run based on display-time.
This function creates a one-off timer which cannot be canceled or modified once created. If you require the ability to do so, or need a repeating timer, use the
DisplayTimerclass instead.Display-time is a time value intended to be used for animation and other visual purposes. It will generally increment by a consistent amount each frame. It will pass at an overall similar rate to app-time, but trades accuracy for smoothness.
- Parameters:
time – Length of time in seconds that the timer will wait before firing.
call – A callable Python object. Note that the timer will retain a strong reference to the callable for as long as the timer exists, so you may want to look into concepts such as
WeakCallif that is not desired.
Example: Print some stuff through time:
babase.screenmessage('hello from now!') babase.displaytimer(1.0, babase.Call(babase.screenmessage, 'hello from the future!')) babase.displaytimer(2.0, babase.Call(babase.screenmessage, 'hello from the future 2!'))
- bascenev1.emitfx(position: Sequence[float], velocity: Sequence[float] | None = None, count: int = 10, scale: float = 1.0, spread: float = 1.0, chunk_type: str = 'rock', emit_type: str = 'chunks', tendril_type: str = 'smoke') None[source]¶
Emit particles, smoke, etc. into the fx sim layer.
The fx sim layer is a secondary dynamics simulation that runs in the background and just looks pretty; it does not affect gameplay. Note that the actual amount emitted may vary depending on graphics settings, exiting element counts, or other factors.
- bascenev1.existing(obj: ExistableT | None) ExistableT | None[source]¶
Convert invalid refs to None for an
Existable.To best support type checking, it is important that invalid references not be passed around and instead get converted to values of None. That way the type checker can properly flag attempts to pass possibly-dead objects (
FooType | None) into functions expecting only live ones (FooType), etc. This call can be used on any ‘existable’ object (one with anexists()method) to convert it toNoneif it does not exist.For more info about the concept of ‘existables’: https://ballistica.net/wiki/Coding-Style-Guide
- bascenev1.fetch_host_requirements(address: str, port: int) HostRequirements | HostProbeOutcome[source]¶
Probe a prospective host for its join requirements.
Fires the paged UDP requirements query and the legacy discovery query together (fragments merge across pages: lists concatenate, scalars are first-seen; the discovery response’s protocol version disambiguates old hosts from packet loss without waiting out timeouts). Blocking (network waits up to a few seconds); call from a background thread.
Returns the host’s
HostRequirements, or aHostProbeOutcomedescribing why there are none.
- bascenev1.filter_playlist(playlist: PlaylistType, sessiontype: type[Session], *, add_resolved_type: bool = False, remove_unowned: bool = True, mark_unowned: bool = False, name: str = '?') PlaylistType[source]¶
Return a filtered version of a playlist.
Strips out or replaces invalid or unowned game types, makes sure all settings are present, and adds in a ‘resolved_type’ which is the actual type.
- bascenev1.get_client_ping(client_id: int) float[source]¶
Return the current ping (RTT in ms) for a connected client. Returns -1.0 if client_id is invalid.
- bascenev1.get_connection_to_host_info_2() bascenev1.HostInfo | None[source]¶
Return info about the host we are currently connected to.
- bascenev1.get_default_free_for_all_playlist() list[dict[str, Any]][source]¶
Return a default playlist for free-for-all mode.
- bascenev1.get_default_powerup_distribution() Sequence[tuple[str, int]][source]¶
Standard set of powerups.
- bascenev1.get_default_teams_playlist() list[dict[str, Any]][source]¶
Return a default playlist for teams mode.
- bascenev1.get_filtered_map_name(name: str) str[source]¶
Filter a map name to account for name changes, etc.
This can be used to support old playlists, etc.
- bascenev1.get_main_ui_input_device() bascenev1.InputDevice | None[source]¶
Return the input-device currently controlling the main ui, or None if there is none.
- bascenev1.get_map_display_string(name: str, *, langstr: Literal[False] = False) Lstr[source]¶
- bascenev1.get_map_display_string(name: str, *, langstr: Literal[True]) LangStr
Return a displayable name for a given map.
Pass
langstr=Trueto receive aLangStr(or a plain str for a map we have no entry for, such as a mod’s). The legacyLstrform goes away when api 9 support ends.
- bascenev1.get_player_colors() list[tuple[float, float, float]][source]¶
Return user-selectable player colors.
- bascenev1.get_player_profile_colors(profilename: str | None, profiles: dict[str, dict[str, Any]] | None = None) tuple[tuple[float, float, float], tuple[float, float, float]][source]¶
Given a profile, return colors for them.
- bascenev1.get_player_profile_icon(profilename: str) str[source]¶
Given a profile name, returns an icon string for it.
(non-account profiles only)
- bascenev1.get_trophy_string(trophy_id: str) str[source]¶
Given a trophy id, returns a string to visualize it.
- bascenev1.getactivity(doraise: Literal[True] = True) bascenev1.Activity[source]¶
- bascenev1.getactivity(doraise: Literal[False]) bascenev1.Activity | None
Return the current bascenev1.Activity instance.
Note that this is based on context_ref; thus code run in a timer generated in Activity ‘foo’ will properly return ‘foo’ here, even if another Activity has since been created or is transitioning in. If there is no current Activity, raises a babase.ActivityNotFoundError. If doraise is False, None will be returned instead in that case.
- bascenev1.getcollisionmesh(name: str) bascenev1.CollisionMesh[source]¶
Return a collision-mesh, loading it if necessary.
Collision-meshes are used in physics calculations for such things as terrain.
Note that this function returns immediately even if the asset has yet to be loaded. Loading will happen in the background or on-demand. To avoid hitches, try to instantiate asset objects a bit earlier than they are actually needed, giving them time to load gracefully in the background.
- bascenev1.getdata(name: str) bascenev1.Data[source]¶
Return a data, loading it if necessary.
Note that this function returns immediately even if the asset has yet to be loaded. Loading will happen in the background or on-demand. To avoid hitches, try to instantiate asset objects a bit earlier than they are actually needed, giving them time to load gracefully in the background.
- bascenev1.getmesh(name: str) bascenev1.Mesh[source]¶
Return a mesh, loading it if necessary.
Note that this function returns immediately even if the asset has yet to be loaded. Loading will happen in the background or on-demand. To avoid hitches, try to instantiate asset objects a bit earlier than they are actually needed, giving them time to load gracefully in the background.
- bascenev1.getsession(doraise: Literal[True] = True) bascenev1.Session[source]¶
- bascenev1.getsession(doraise: Literal[False]) bascenev1.Session | None
Return the session associated with the current context. If there is none, a
SessionNotFoundErroris raised (unlessdoraiseis False, in which caseNoneis returned instead).
- bascenev1.getsound(name: str) bascenev1.Sound[source]¶
Return a sound, loading it if necessary.
Note that this function returns immediately even if the asset has yet to be loaded. Loading will happen in the background or on-demand. To avoid hitches, try to instantiate asset objects a bit earlier than they are actually needed, giving them time to load gracefully in the background.
- bascenev1.gettexture(name: str) bascenev1.Texture[source]¶
Return a texture, loading it if necessary.
Note that this function returns immediately even if the asset has yet to be loaded. Loading will happen in the background or on-demand. To avoid hitches, try to instantiate asset objects a bit earlier than they are actually needed, giving them time to load gracefully in the background.
- bascenev1.launch_replay(file_name: str) None[source]¶
Immediately start a session playing back a replay file.
Assumes the replay’s required asset-packages are already present locally; use
new_replay_session()(orprepare_replay()) to resolve/download them first. This is the raw launch that the prep path hands off to.(internal)
- bascenev1.ls_objects() None[source]¶
Log debugging info about C++ level objects.
This call only functions in debug builds of the game. It prints various info about the current object count, etc.
- bascenev1.new_replay_session(file_name: str) None[source]¶
Prepare and play a replay: resolve content, then start playback.
A one-call convenience combining
prepare_replay()andlaunch_replay()– content not present locally is downloaded (with a cancelable dialog) before playback begins, mirroringconnect_to_party()’s pre-join content prep. A replay whose content is already local (the common case) or which predates asset-package tables starts immediately.(internal)
- bascenev1.newactivity(activity_type: type[bascenev1.Activity], settings: dict | None = None) bascenev1.Activity[source]¶
Instantiates a bascenev1.Activity given a type object.
Activities require special setup and thus cannot be directly instantiated; you must go through this function.
- bascenev1.newnode(type: str, owner: bascenev1.Node | None = None, attrs: dict | None = None, name: str | None = None, delegate: Any = None) bascenev1.Node[source]¶
Add a node of the given type to the game.
If a dict is provided for ‘attributes’, the node’s initial attributes will be set based on them.
‘name’, if provided, will be stored with the node purely for debugging purposes. If no name is provided, an automatic one will be generated such as ‘terrain@foo.py:30’.
If ‘delegate’ is provided, Python messages sent to the node will go to that object’s handlemessage() method. Note that the delegate is stored as a weak-ref, so the node itself will not keep the object alive.
if ‘owner’ is provided, the node will be automatically killed when that object dies. ‘owner’ can be another node or a bascenev1.Actor
- bascenev1.normalized_color(color: Sequence[float]) tuple[float, ...][source]¶
Scale a color so its largest value is 1.0; useful for coloring lights.
- async bascenev1.prepare_replay(file_name: str) bool[source]¶
Resolve a replay’s required asset-packages before playback.
The requirements are read from the replay file’s header (no stream decompression) and anything not present locally is downloaded, with a cancelable progress dialog. Returns True when the replay is ready to play, or False if the user cancelled or a download failed.
Safe to call with the launching UI still visible: on a False result the caller should leave that UI in place (a cancel then just closes the dialog and returns the user to where they were).
(internal)
- bascenev1.print_live_object_warnings(when: Any, ignore_session: bascenev1.Session | None = None, ignore_activity: bascenev1.Activity | None = None) None[source]¶
Print warnings for remaining objects in the current context.
IMPORTANT - don’t call this in production; usage of gc.get_objects() can bork Python. See notes at top of efro.debug module.
- bascenev1.pushcall(call: Callable, from_other_thread: bool = False, suppress_other_thread_warning: bool = False, other_thread_use_fg_context: bool = False, raw: bool = False) None[source]¶
Push a call to the logic-thread’s event loop.
This function expects to be called from the logic thread, and will automatically save and restore the context to behave seamlessly.
To push a call from outside of the logic thread, pass
from_other_thread=True. In that case the call will run with no context set. To instead run in whichever context is currently active on the logic thread, passother_thread_use_fg_context=True. Passingraw=Truewill skip thread checks and context saves/restores altogether.
- bascenev1.reload_hooks() None[source]¶
Reload functions and other objects held by the native layer. Call this if you replace things in a hooks module to get the native layer to see your changes.
- bascenev1.safecolor(color: Sequence[float], target_intensity: float = 0.6) tuple[float, ...][source]¶
Given a color tuple, return a color safe to display as text.
Accepts tuples of length 3 or 4. This will slightly brighten very dark colors, etc.
- bascenev1.screenmessage(message: str | babase.Lstr | babase.LangStr | bacommon.langstr.LangStrSpec, color: Sequence[float] | None = None, log: bool = False, literal: bool = False) None[source]¶
Print a message to the local client’s screen in a given color.
Note that this function is purely for local display. To broadcast screen-messages during gameplay, look for methods such as
bascenev1.broadcastmessage().
- bascenev1.set_internal_music(music: babase.SimpleSound | None, volume: float = 1.0, loop: bool = True) None[source]¶
:meta private:.
- bascenev1.set_max_players_override(max_players: int | None) None[source]¶
Set the override for how many players can join a session
- bascenev1.set_player_rejoin_cooldown(cooldown: float) None[source]¶
Set the cooldown for individual players rejoining after leaving.
- bascenev1.setmusic(musictype: MusicType | None, continuous: bool = False) None[source]¶
Set the app to play (or stop playing) a certain type of music.
This function will handle loading and playing sound assets as necessary, and also supports custom user soundtracks on specific platforms so the user can override particular game music with their own.
Pass
Noneto stop music.if
continuousis True and musictype is the same as what is already playing, the playing track will not be restarted.
- bascenev1.show_damage_count(damage: str, position: Sequence[float], direction: Sequence[float], dead: bool = False) None[source]¶
Pop up a damage count at a position in space.
- bascenev1.storagename(suffix: str | None = None) str[source]¶
Generate a unique name for storing class data in shared places.
This consists of a leading underscore, the module path at the call site with dots replaced by underscores, the containing class’s qualified name, and the provided suffix. When storing data in public places such as ‘customdata’ dicts, this minimizes the chance of collisions with other similarly named classes.
Note that this will function even if called in the class definition.
Example: Generate a unique name for storage purposes:
class MyThingie: # This will give something like # '_mymodule_submodule_mythingie_data'. _STORENAME = babase.storagename('data') # Use that name to store some data in the Activity we were # passed. def __init__(self, activity): activity.customdata[self._STORENAME] = {}
- bascenev1.time() bascenev1.Time[source]¶
Return the current scene time in seconds.
Scene time maps to local simulation time in bascenev1.Activity or bascenev1.Session Contexts. This means that it may progress slower in slow-motion play modes, stop when the game is paused, etc.
Note that the value returned here is simply a float; it just has a unique type in the type-checker’s eyes to help prevent it from being accidentally used with time functionality expecting other time types.
- bascenev1.timer(time: float, call: Callable[[], Any], repeat: bool = False) None[source]¶
Schedule a call to run at a later point in time.
This function adds a scene-time timer to the current
bascenev1.ContextRef. This timer cannot be canceled or modified once created. If you require the ability to do so, use thebascenev1.Timerclass instead.Scene time maps to local simulation time in
bascenev1.Activityorbascenev1.SessionContexts. This means that it may progress slower in slow-motion play modes, stop when the game is paused, etc.- Parameters:
time – Length of scene time in seconds that the timer will wait before firing.
call – A callable Python object. Note that the timer will retain a strong reference to the callable for as long as it exists, so you may want to look into concepts such as
bascenev1.WeakCallif that is not desired.repeat – If True, the timer will fire repeatedly, with each successive firing having the same delay as the first.
Examples
Print some stuff through time:
import bascenev1 as bs bs.screenmessage('hello from now!') bs.timer(1.0, bs.Call(bs.screenmessage, 'hello from the future!')) bs.timer(2.0, bs.Call(bs.screenmessage, 'hello from the future 2!'))
- bascenev1.timestring(timeval: float | int, centi: bool = True, *, langstr: Literal[False] = False) babase.Lstr[source]¶
- bascenev1.timestring(timeval: float | int, centi: bool = True, *, langstr: Literal[True]) babase.LangStr
Generate a localized string for displaying a time value.
Given a time value, returns a localized string with: (hours if > 0 ) : minutes : seconds : (centiseconds if centi=True).
Pass
langstr=Trueto receive aLangStr. The legacyLstrform goes away when api 9 support ends.Warning
the underlying localized-string value is somewhat large, so don’t use this to rapidly update text values for an in-game timer or you may consume significant network bandwidth. For that sort of thing you should use things like ‘timedisplay’ nodes and attribute connections.
Submodules¶
bascenev1.builtinassets module¶
Asset-package wrapper for a-0.babuiltinassets.260730a (bascenev1).
Bare minimum assets always bundled with the engine.
These are loaded at launch and always available in the C++ layer.
- class bascenev1.builtinassets.AudioGroup[source]¶
Bases:
objectSounds needed during engine bootstrap and early UI (clicks, errors, and other always-available effects). See source for the full asset list.
- class bascenev1.builtinassets.MeshesGroup[source]¶
Bases:
objectMeshes needed during engine bootstrap and early UI. See source for the full asset list.
- class bascenev1.builtinassets.StringsAccountGroup[source]¶
Bases:
objectAccount and sign-in vocabulary: status, error, and requirement messages about the player account. See source for the full asset list.
- must_sign_in: LangStr¶
Error screen-message shown to a player who attempts to join a party or server that requires account authentication while they are not signed in to an account. English: "You must sign in to do this."
- class bascenev1.builtinassets.StringsAssetsGroup[source]¶
Bases:
objectAsset-system progress and error strings: boot-time (construct-mode) bring-up, package download/build progress dialogs, and the pre-main-menu sign-in gate. See source for the full asset list.
- access_denied_guidance(*, detail: str | LangStr) LangStr[source]¶
Wraps a server-supplied asset access-denial explanation with guidance for the user; shown on the boot-time asset dialog. English: "{detail} Remove these mods/changes and try again."
- all_assets_requested_quality: LangStr¶
Screen message shown when a resolve finally lands the requested asset quality after previously showing lower-quality fallbacks. Paired with requested_quality_assets_building. English: "All assets are now requested quality."
- authenticating: LangStr¶
Status line in the boot-time asset dialog while waiting for account sign-in so restricted assets can load. English: "Authenticating…"
- building_assets(*, count: int) LangStr[source]¶
Progress-dialog line shown while the server builds assets; updates live as the remaining count drops. Spans every package being built, so it names no package. English: (one) "Building assets (# remaining)…" / (other) "Building assets (# remaining)…"
- building_assets_no_count: LangStr¶
Progress-dialog line shown once asset builds have started but before the total step count is known (some packages have not reported yet). Replaced by the counted line once it is. English: "Building assets…"
- client_too_old: LangStr¶
Error on the boot-time asset dialog when this app build is too old to load current assets (fallback wording when the server didn't supply its own). English: "This app version is too old to load current assets. Please update to continue."
- content_error_guidance(*, detail: str | LangStr) LangStr[source]¶
Wraps a server-supplied asset build-failure explanation with guidance for the package author; shown on the boot-time asset dialog (this state is nearly always seen by the author, since dev/test versions only resolve for them). English: "{detail} Fix the file in the source workspace and try again."
- downloading_assets(*, count: int) LangStr[source]¶
Progress-dialog line shown while asset files download; updates live as the remaining count drops. English: (one) "Downloading assets (# remaining)…" / (other) "Downloading assets (# remaining)…"
- load_error: LangStr¶
Generic error on the boot-time asset dialog when asset loading fails unexpectedly. English: "An error occurred loading assets; see log for details."
- preparing_build: LangStr¶
Progress-dialog line shown while server-side asset builds are being prepared, before per-step progress is known. English: "Preparing to build assets…"
- requested_quality_assets_building: LangStr¶
Screen message shown after a resolve that had to serve lower-quality textures because the requested quality was still being built. Paired with all_assets_requested_quality, which announces the recovery. English: "Requested quality assets are still building; showing lower quality fallbacks."
- sign_in_failed: LangStr¶
Error on the boot-time asset dialog when a required sign-in was not completed (attempted and failed, or timed out); a Retry button sits below it. English: "You must sign in to an account with access to these assets to continue. Retry to sign in, or remove these mods/changes."
- sign_in_needed_browser(*, address: str | LangStr) LangStr[source]¶
Message on the boot-time sign-in dialog when required assets need a signed-in account and a web browser is available; a Sign In button sits below it. English: "Sign-in is required to load these assets. Press the button below, or visit {address}"
- class bascenev1.builtinassets.StringsAudioGroup[source]¶
Bases:
objectAudio-related messages: music/custom-soundtrack playback errors. See source for the full asset list.
- class bascenev1.builtinassets.StringsGroup[source]¶
Bases:
objectNew-format engine strings needed early or accessed from the C++ layer via the builtin-strings API (see ballistica-internal strings-asset-migration decision D22). See source for the full asset list.
- class bascenev1.builtinassets.StringsInputGroup[source]¶
Bases:
objectInput-device strings: device display names and connect/disconnect notices. See source for the full asset list.
- axis(*, number: str | LangStr) LangStr[source]¶
Short lowercase label identifying a numbered joystick axis by index; used inline in axis-name displays such as the controls-configuration UI. The {number} placeholder is the axis index. English: "axis {number}"
- button(*, number: str | LangStr) LangStr[source]¶
Short lowercase label identifying a numbered controller button by index; used inline in button-name displays such as the controls-configuration UI. The {number} placeholder is the button index. English: "button {number}"
- controller_connected(*, controller: str | LangStr) LangStr[source]¶
Transient screen-message shown when a single game controller connects, naming the device (several connecting at once use a separate counted message). English: "{controller} connected."
- controller_detected: LangStr¶
Transient screen-message shown at app startup when exactly one game controller is detected (multiple controllers at startup use a separate counted message). English: "1 controller detected."
- controller_disconnected(*, controller: str | LangStr) LangStr[source]¶
Transient screen-message shown when a single game controller disconnects, naming the device (several disconnecting at once use a separate counted message). English: "{controller} disconnected."
Notice that a controller works only in menus. English: "This controller can not be used to play; only to navigate menus."
- controller_reconnected(*, controller: str | LangStr) LangStr[source]¶
Transient screen-message shown when a previously-connected game controller (e.g. a BombSquad Remote phone client) reconnects, naming the device. English: "{controller} reconnected."
- controllers_connected(*, count: int) LangStr[source]¶
Transient screen-message shown when multiple game controllers connect at the same time (a single controller connecting shows a different message naming that controller). English: (one) "# controller connected." / (other) "# controllers connected."
- controllers_detected(*, count: int) LangStr[source]¶
Transient screen-message shown at app startup when more than one game controller is detected at once (a single controller at startup uses a separate message). English: (one) "# controller detected." / (other) "# controllers detected."
- controllers_disconnected(*, count: int) LangStr[source]¶
Transient screen-message shown when multiple game controllers disconnect at the same time (a single controller disconnecting shows a different message naming that controller). English: (one) "# controller disconnected." / (other) "# controllers disconnected."
- keyboard: LangStr¶
Display name for the keyboard input device; shown in input-device lists, controls-configuration UI, and messages naming the device. English: "Keyboard"
- touch_screen: LangStr¶
Display name for the touch-screen input device; shown in input-device lists, controls-configuration UI, and messages naming the device. English: "TouchScreen"
- touch_screen_join_warning: LangStr¶
Warning screen-message shown when the touchscreen joins the game while physical controllers are already active (touch joins are often accidental then); tells the player how to back out. 'Menu' and 'Leave Game' refer to in-game menu items. English: "You have joined with the touchscreen. If this was a mistake, tap Menu -> Leave Game with it to back out."
- unsupported_controller(*, name: str | LangStr) LangStr[source]¶
Notice that a controller is not supported. English: "Sorry, the {name} controller is not supported."
- class bascenev1.builtinassets.StringsNetGroup[source]¶
Bases:
objectNetworking error messages shown to the player. See source for the full asset list.
- account_rejected: LangStr¶
Error screen-message shown to a player whose attempt to join a party or server was rejected because the host could not validate their account. English: "Your account was rejected. Are you signed in?"
- auth_error: LangStr¶
Generic error screen-message shown to a player whose attempt to join a party or server failed due to an authentication or server error (with no more-specific cause available). English: "An error has occurred."
- connection_failed: LangStr¶
Notice that connecting to a server failed. English: "Connection failed."
- incorrect_password: LangStr¶
Error screen-message shown to a player whose attempt to join a password-protected party or server was rejected for entering the wrong party password. English: "Incorrect password."
- invalid_address: LangStr¶
Error screen-message shown when the player enters a malformed network address trying to connect to a game party. English: "Error: invalid address."
Error shown when something cannot be reached, most likely because there is no internet connection (dialog messages and screen-messages). English: "This is currently unavailable (no internet connection?)"
- class bascenev1.builtinassets.StringsPluginsGroup[source]¶
Bases:
objectMessages about user-installed plugins being detected, removed, or failing to load. See source for the full asset list.
- class_load_error(*, plugin: str | LangStr, error: str | LangStr) LangStr[source]¶
Error message for a plugin class that failed to load. English: "Error loading plugin class '{plugin}': {error}"
- detected: LangStr¶
Notice that new plugins were found. English: "New plugin(s) detected. Restart to activate them, or configure them in settings."
- class bascenev1.builtinassets.StringsReplayGroup[source]¶
Bases:
objectGame-replay playback error messages. See source for the full asset list.
- class bascenev1.builtinassets.StringsScriptsGroup[source]¶
Bases:
objectMessages about scanning user script modules and reporting ones that need updating for the current script API. See source for the full asset list.
- module_needs_update(*, path: str | LangStr, api: str | LangStr) LangStr[source]¶
Notice that one script module is out of date. English: "The module at {path} must be updated for API version {api}."
- class bascenev1.builtinassets.StringsSessionGroup[source]¶
Bases:
objectGameplay-session messages shown by the host: idle-player kick notices and similar. See source for the full asset list.
- kick_idle_kicked(*, name: str | LangStr) LangStr[source]¶
Screen-message shown on the host when a player is removed from the game for being idle too long (the kick-idle-players option). English: "Kicking {name} for being idle."
- kick_idle_warning(*, seconds: int, name: str | LangStr) LangStr[source]¶
Screen-message warning shown on the host shortly before an idle player gets kicked (the kick-idle-players option); followed by the kick_idle_warning_settings note. English: (one) "{name} will be kicked in # second if still idle." / (other) "{name} will be kicked in # seconds if still idle."
- kick_idle_warning_settings: LangStr¶
Parenthesized note shown right after the kick_idle_warning message, pointing at where the kick-idle-players behavior can be disabled. 'Settings' and 'Advanced' refer to the in-game settings menu sections. English: "(you can turn this off in Settings -> Advanced)"
- class bascenev1.builtinassets.StringsStoreGroup[source]¶
Bases:
objectIn-app-purchase and store transaction messages: purchase failures, restores, and availability notices. See source for the full asset list.
Notice that Google Play purchases are unavailable. English: "Google Play purchases are not available. You may need to update your store app."
Notice that Google Play Services is unavailable. English: "Google Play Services is not available. Some app functionality may be disabled."
- purchase_already_in_progress: LangStr¶
Notice that this item is already being purchased. English: "A purchase of this item is already in progress."
- purchase_not_valid(*, email: str | LangStr) LangStr[source]¶
Error message that a purchase was not valid. English: "Purchase not valid. Contact {email} if this is an error."
- purchases_restored: LangStr¶
Confirmation that past purchases were restored. English: "Purchases restored."
- remove_ads_token_offer: LangStr¶
Limited-time offer to remove ads via a token pack. English: "LIMITED TIME OFFER: PURCHASE ANY TOKEN PACK TO REMOVE IN-GAME ADS."
- transaction_in_progress: LangStr¶
Notice that a transaction is already underway. English: "A transaction is in progress; please try again in a moment."
Notice that a store item is not available. English: "Sorry, this is not available."
Notice that something is unavailable for now. English: "This is currently unavailable; please try again later."
- class bascenev1.builtinassets.StringsTimeGroup[source]¶
Bases:
objectCompact unit suffixes and glue for formatted time values (the hours/minutes/seconds pieces babase.timestring assembles). See source for the full asset list.
- suffix_hours(*, count: str | LangStr) LangStr[source]¶
Compact hours suffix used in formatted time values. English: "{count}h"
- class bascenev1.builtinassets.StringsUiGroup[source]¶
Bases:
objectGeneral UI strings: menu-control ownership messages and list-navigation hints. See source for the full asset list.
- arrows_to_exit_list(*, left: str | LangStr, right: str | LangStr) LangStr[source]¶
Lowercase hint shown (with an error sound) when the player hits the edge of a UI list; tells them how to move focus out of it. The two placeholders are substituted with left/right arrow glyph characters. English: "press {left} or {right} to exit list"
- cancel: LangStr¶
Generic Cancel button label (used by e.g. asset-download progress dialogs). English: "Cancel"
- clipboard_not_supported: LangStr¶
Notice that the clipboard is unavailable in this build. English: "Clipboard not supported on this build."
- copied_to_clipboard: LangStr¶
Confirmation that text was copied to the clipboard. English: "Copied to clipboard."
- error: LangStr¶
Generic Error title used on error dialogs (e.g. the boot-time asset-update dialog when a load fails). English: "Error"
Screen-message shown when an input device tries to use a menu another device currently controls; names the controlling device. A timeout suffix (menu_control_time_out or menu_control_will_time_out) is appended after it. English: "{name} has menu control."
Parenthesized suffix appended after the has_menu_control message once the controlling device's ownership is close to expiring; gives the remaining seconds. English: (one) "(times out in # second)" / (other) "(times out in # seconds)"
Parenthesized suffix appended after the has_menu_control message while the controlling device's ownership is not yet close to expiring. English: "(will time out if idle)"
- ok: LangStr¶
Generic label for a button acknowledging/dismissing a message (used by e.g. asset-update error dialogs). English: "OK"
- remote_app_name: LangStr¶
Name label for the remote-control companion app. English: "BombSquad Remote"
- retry: LangStr¶
Generic label for a button that retries a failed operation (used by e.g. the boot-time asset-update dialog). English: "Retry"
- sign_in: LangStr¶
Generic Sign In label used for dialog titles and buttons (e.g. the boot-time asset gate's browser sign-in dialog). English: "Sign In"
- spaced_pair(*, first: str | LangStr, second: str | LangStr) LangStr[source]¶
Pure-formatting template joining two labels with a space; substitution-only. English: "{first} {second}"
- class bascenev1.builtinassets.StringsWorkspaceGroup[source]¶
Bases:
objectMessages about syncing and activating account workspaces. See source for the full asset list.
- activated(*, thing: str | LangStr) LangStr[source]¶
Confirmation that a workspace was activated. English: "{thing} activated."
- class bascenev1.builtinassets.TexturesGroup[source]¶
Bases:
objectTextures needed during engine bootstrap and early UI, including the reflection cube-maps. See source for the full asset list.
- bascenev1.builtinassets.audio: AudioGroup = <bascenev1._assetref.AssetGroup object>¶
The
audiogroup - 20 assets (blank,blip,cash_register,click01,cork_pop, and 15 more). Full list in source.
- bascenev1.builtinassets.meshes: MeshesGroup = <bascenev1._assetref.AssetGroup object>¶
The
meshesgroup - 72 assets (action_button_bottom,action_button_left,action_button_right,action_button_top,arrow_back, and 67 more). Full list in source.
- bascenev1.builtinassets.strings: StringsGroup = <babase._language.LangStrDir object>¶
The
stringsgroup - 87 strings (account,assets,audio,input,net, and 82 more). Full list in source.
- bascenev1.builtinassets.textures: TexturesGroup = <bascenev1._assetref.AssetGroup object>¶
The
texturesgroup - 82 assets (action_buttons,arrow,back_icon,black,bomb_button, and 77 more). Full list in source.
bascenev1.classicassets module¶
Asset-package wrapper for a-0.baclassicassets.260730b (bascenev1).
All assets for classic bombsquad.
- class bascenev1.classicassets.AudioGroup[source]¶
Bases:
objectAll standard game sounds (everything non-bootstrap). See source for the full asset list.
- class bascenev1.classicassets.MeshesGroup[source]¶
Bases:
objectAll standard game meshes (everything non-bootstrap). See source for the full asset list.
- class bascenev1.classicassets.StringsAccountGroup[source]¶
Bases:
objectAccount-management UI: sign-in/out, account creation/linking, progress display, and the player-info viewer. See source for the full asset list.
- achievement_progress(*, complete: str | LangStr, total: str | LangStr) LangStr[source]¶
Display of achievement completion (N out of M). English: "Achievements: {complete} of {total}"
- ban_this_player: LangStr¶
Button to ban the viewed player (admin/host action). English: "Ban This Player"
- campaign_progress(*, progress: str | LangStr) LangStr[source]¶
Display of hard-mode campaign completion percentage. English: "Campaign (Hard): {progress}"
- google_play_games_account_switch: LangStr¶
Instructions for switching Google accounts. English: "If you want to use a different Google account, use the Google Play Games app to switch."
- not_signed_in: LangStr¶
Error shown when an action requires sign-in. English: "You must sign in to do this."
- sign_in_for_codes: LangStr¶
Notice that codes require being signed in. English: "You must sign in to an account for codes to take effect."
- sign_in_info: LangStr¶
Blurb explaining the benefits of signing in. English: "Sign in to collect Tickets, compete online, and share progress across devices."
- sign_in_no_connection: LangStr¶
Error when sign-in fails, likely due to no internet. English: "Unable to sign in. (no internet connection?)"
- sign_in_with(*, service: str | LangStr) LangStr[source]¶
Sign-in button label naming a specific service. English: "Sign In with {service}"
- sign_in_with_device: LangStr¶
Button to sign in with the automatic device-local account. English: "Sign In with Device Account"
- sign_in_with_device_info: LangStr¶
Explanation under the device-account sign-in button. English: "(an automatic account only available from this device)"
- sign_in_with_email: LangStr¶
Button to sign in via an email address. English: "Sign In with an Email Address"
- submitting_code: LangStr¶
Status message while a code is being submitted. English: "Submitting Code..."
- tickets(*, count: str | LangStr) LangStr[source]¶
Display of the ticket balance. English: "Tickets: {count}"
- title: LangStr¶
Title of the account section/window; also labels account buttons. English: "Account"
- trophies_this_season: LangStr¶
Heading for trophies earned this season. English: "Trophies This Season"
- class bascenev1.classicassets.StringsAchievementsBoomGoesTheDynamiteGroup[source]¶
Bases:
objectStrings for the "Boom Goes the Dynamite" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Pro Onslaught". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Kill 3 bad guys with TNT"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Killed 3 bad guys with TNT"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete all objectives on {level}."
- class bascenev1.classicassets.StringsAchievementsBoxerGroup[source]¶
Bases:
objectStrings for the "Boxer" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Onslaught Training". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Win without using any bombs"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Won without using any bombs"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete {level} without using any bombs."
- class bascenev1.classicassets.StringsAchievementsDualWieldingGroup[source]¶
Bases:
objectStrings for the "Dual Wielding" achievement: its name and its descriptions (short/full, unearned/earned). See source for the full asset list.
- description_full: LangStr¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Connect 2 controllers (hardware or app)"
- class bascenev1.classicassets.StringsAchievementsFlawlessVictoryGroup[source]¶
Bases:
objectStrings for the "Flawless Victory" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Rookie Onslaught". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Win without getting hit"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Won without getting hit"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Win {level} without getting hit."
- class bascenev1.classicassets.StringsAchievementsFreeLoaderGroup[source]¶
Bases:
objectStrings for the "Free Loader" achievement: its name and its descriptions (short/full, unearned/earned). See source for the full asset list.
- description_full: LangStr¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Start a Free-For-All game with 2+ players"
- class bascenev1.classicassets.StringsAchievementsGoldMinerGroup[source]¶
Bases:
objectStrings for the "Gold Miner" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Uber Onslaught". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Kill 6 bad guys with land-mines"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Killed 6 bad guys with land-mines"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Kill 6 enemies with landmines on {level}."
- class bascenev1.classicassets.StringsAchievementsGotTheMovesGroup[source]¶
Bases:
objectStrings for the "Got the Moves" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Uber Football". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Win without using punches or bombs"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Won without using punches or bombs"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Win {level} without any punches or bombs."
- class bascenev1.classicassets.StringsAchievementsGroup[source]¶
Bases:
objectAchievement strings: the name of each co-op campaign achievement plus its short and full descriptions, in both unearned and earned (past-tense) forms. See source for the full asset list.
- class bascenev1.classicassets.StringsAchievementsInControlGroup[source]¶
Bases:
objectStrings for the "In Control" achievement: its name and its descriptions (short/full, unearned/earned). See source for the full asset list.
- description_full: LangStr¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Connect a controller (hardware or app)"
- class bascenev1.classicassets.StringsAchievementsLastStandGodGroup[source]¶
Bases:
objectStrings for the "Last Stand God" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "The Last Stand". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Score 1000 points"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Scored 1000 points"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete the mission on {level}."
- class bascenev1.classicassets.StringsAchievementsLastStandMasterGroup[source]¶
Bases:
objectStrings for the "Last Stand Master" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "The Last Stand". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Score 250 points"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Scored 250 points"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete all objectives on {level}."
- class bascenev1.classicassets.StringsAchievementsLastStandWizardGroup[source]¶
Bases:
objectStrings for the "Last Stand Wizard" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "The Last Stand". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Score 500 points"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Scored 500 points"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete {level} to unlock this achievement."
- class bascenev1.classicassets.StringsAchievementsMineGamesGroup[source]¶
Bases:
objectStrings for the "Mine Games" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Rookie Onslaught". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Kill 3 bad guys with land-mines"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Killed 3 bad guys with land-mines"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Kill 3 bad guys with land-mines on {level}"
- class bascenev1.classicassets.StringsAchievementsOffYouGoThenGroup[source]¶
Bases:
objectStrings for the "Off You Go Then" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Onslaught Training". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Toss 3 bad guys off the map"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Tossed 3 bad guys off the map"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete all objectives in {level}."
- class bascenev1.classicassets.StringsAchievementsOnslaughtGodGroup[source]¶
Bases:
objectStrings for the "Onslaught God" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Infinite Onslaught". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Score 5000 points"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Scored 5000 points"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete all objectives on {level}."
- class bascenev1.classicassets.StringsAchievementsOnslaughtMasterGroup[source]¶
Bases:
objectStrings for the "Onslaught Master" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Infinite Onslaught". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Score 500 points"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Scored 500 points"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete all objectives on {level}."
- class bascenev1.classicassets.StringsAchievementsOnslaughtTrainingVictoryGroup[source]¶
Bases:
objectStrings for the "Onslaught Training Victory" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Onslaught Training". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Defeat all waves"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Defeated all waves"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Defeat all waves in {level}."
- class bascenev1.classicassets.StringsAchievementsOnslaughtWizardGroup[source]¶
Bases:
objectStrings for the "Onslaught Wizard" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Infinite Onslaught". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Score 1000 points"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Scored 1000 points"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete all objectives in {level}."
- class bascenev1.classicassets.StringsAchievementsPrecisionBombingGroup[source]¶
Bases:
objectStrings for the "Precision Bombing" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Pro Runaround". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Win without any powerups"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Won without any powerups"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Win {level} without using any power-ups."
- class bascenev1.classicassets.StringsAchievementsProBoxerGroup[source]¶
Bases:
objectStrings for the "Pro Boxer" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Pro Onslaught". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Win without using any bombs"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Won without using any bombs"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete {level} without using any bombs."
- class bascenev1.classicassets.StringsAchievementsProFootballShutoutGroup[source]¶
Bases:
objectStrings for the "Pro Football Shutout" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Pro Football". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Win without letting the bad guys score"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Won without letting the bad guys score"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete {level} without taking any damage."
- class bascenev1.classicassets.StringsAchievementsProFootballVictoryGroup[source]¶
Bases:
objectStrings for the "Pro Football Victory" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Pro Football". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Win the game"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Won the game"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Win the game in {level}."
- class bascenev1.classicassets.StringsAchievementsProOnslaughtVictoryGroup[source]¶
Bases:
objectStrings for the "Pro Onslaught Victory" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Pro Onslaught". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Defeat all waves"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Defeated all waves"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Defeat all waves of {level}."
- class bascenev1.classicassets.StringsAchievementsProRunaroundVictoryGroup[source]¶
Bases:
objectStrings for the "Pro Runaround Victory" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Pro Runaround". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Complete all waves"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Completed all waves"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete all waves on {level}"
- class bascenev1.classicassets.StringsAchievementsRookieFootballShutoutGroup[source]¶
Bases:
objectStrings for the "Rookie Football Shutout" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Rookie Football". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Win without letting the bad guys score"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Won without letting the bad guys score"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Win {level} without letting the opponent score."
- class bascenev1.classicassets.StringsAchievementsRookieFootballVictoryGroup[source]¶
Bases:
objectStrings for the "Rookie Football Victory" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Rookie Football". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Win the game"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Won the game"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Win the game in {level}"
- class bascenev1.classicassets.StringsAchievementsRookieOnslaughtVictoryGroup[source]¶
Bases:
objectStrings for the "Rookie Onslaught Victory" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Rookie Onslaught". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Defeat all waves"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Defeated all waves"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Defeat all waves in {level}."
- class bascenev1.classicassets.StringsAchievementsRunaroundGodGroup[source]¶
Bases:
objectStrings for the "Runaround God" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Infinite Runaround". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Score 2000 points"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Scored 2000 points"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete all objectives on {level}."
- class bascenev1.classicassets.StringsAchievementsRunaroundMasterGroup[source]¶
Bases:
objectStrings for the "Runaround Master" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Infinite Runaround". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Score 500 points"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Scored 500 points"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete all objectives in {level}."
- class bascenev1.classicassets.StringsAchievementsRunaroundWizardGroup[source]¶
Bases:
objectStrings for the "Runaround Wizard" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Infinite Runaround". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Score 1000 points"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Scored 1000 points"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete the objective on {level}."
- class bascenev1.classicassets.StringsAchievementsSharingIsCaringGroup[source]¶
Bases:
objectStrings for the "Sharing is Caring" achievement: its name and its descriptions (short/full, unearned/earned). See source for the full asset list.
- description_full: LangStr¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Successfully share the game with a friend"
- class bascenev1.classicassets.StringsAchievementsStayinAliveGroup[source]¶
Bases:
objectStrings for the "Stayin' Alive" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Uber Runaround". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Win without dying"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Won without dying"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Win {level} without dying."
- class bascenev1.classicassets.StringsAchievementsSuperMegaPunchGroup[source]¶
Bases:
objectStrings for the "Super Mega Punch" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Pro Football". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Inflict 100% damage with one punch"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Inflicted 100% damage with one punch"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Inflict 100% damage with one punch in {level}"
- class bascenev1.classicassets.StringsAchievementsSuperPunchGroup[source]¶
Bases:
objectStrings for the "Super Punch" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Rookie Football". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Inflict 50% damage with one punch"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Inflicted 50% damage with one punch"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete {level} without taking any damage."
- class bascenev1.classicassets.StringsAchievementsTeamPlayerGroup[source]¶
Bases:
objectStrings for the "Team Player" achievement: its name and its descriptions (short/full, unearned/earned). See source for the full asset list.
- description_full: LangStr¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Start a Teams game with 4+ players"
- class bascenev1.classicassets.StringsAchievementsTheGreatWallGroup[source]¶
Bases:
objectStrings for the "The Great Wall" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Uber Runaround". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Stop every single bad guy"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Stopped every single bad guy"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete all objectives in {level}."
- class bascenev1.classicassets.StringsAchievementsTheWallGroup[source]¶
Bases:
objectStrings for the "The Wall" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Pro Runaround". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Stop every single bad guy"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Stopped every single bad guy"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Stop every single bad guy on {level}."
- class bascenev1.classicassets.StringsAchievementsTntTerrorGroup[source]¶
Bases:
objectStrings for the "TNT Terror" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Uber Onslaught". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Kill 6 bad guys with TNT"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Killed 6 bad guys with TNT"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Kill 6 enemies with TNT on {level}."
- class bascenev1.classicassets.StringsAchievementsUberFootballShutoutGroup[source]¶
Bases:
objectStrings for the "Uber Football Shutout" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Uber Football". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Win without letting the bad guys score"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Won without letting the bad guys score"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete {level} without taking any damage."
- class bascenev1.classicassets.StringsAchievementsUberFootballVictoryGroup[source]¶
Bases:
objectStrings for the "Uber Football Victory" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Uber Football". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Win the game"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Won the game"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Win the game in {level}."
- class bascenev1.classicassets.StringsAchievementsUberOnslaughtVictoryGroup[source]¶
Bases:
objectStrings for the "Uber Onslaught Victory" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Uber Onslaught". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Defeat all waves"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Defeated all waves"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Defeat all waves in {level}"
- class bascenev1.classicassets.StringsAchievementsUberRunaroundVictoryGroup[source]¶
Bases:
objectStrings for the "Uber Runaround Victory" achievement: its name and its descriptions (short/full, unearned/earned). It is earned on the campaign level "Uber Runaround". See source for the full asset list.
- description: LangStr¶
Short description of what an achievement requires, shown before it is earned. English: "Complete all waves"
- description_complete: LangStr¶
Short description of an achievement the player has already earned (past tense). English: "Completed all waves"
- description_full(*, level: str | LangStr) LangStr[source]¶
Full description of what an achievement requires, naming the campaign level it applies to. English: "Complete all waves on {level}"
- class bascenev1.classicassets.StringsAppInviteGroup[source]¶
Bases:
objectFriend-invite / promo-code sharing flow. See source for the full asset list.
- friend_has_sent_promo(*, count: int, app_name: str | LangStr, name: str | LangStr) LangStr[source]¶
Header naming a ticket gift from a friend. English: (one) "# {app_name} Ticket from {name}" / (other) "# {app_name} Tickets from {name}"
- friend_promo_award(*, count: int) LangStr[source]¶
Explanation of the ticket reward per redemption. English: (one) "You will receive # Ticket each time it is used." / (other) "You will receive # Tickets each time it is used."
- friend_promo_expire(*, expire_hours: int) LangStr[source]¶
Notice of code expiry for new players only. English: (one) "The code will expire in # hour and only works for new players." / (other) "The code will expire in # hours and only works for new players."
- friend_promo_instructions(*, app_name: str | LangStr) LangStr[source]¶
How to redeem the promo code. English: "To use it, open {app_name} and go to "Settings->Advanced->Send Info". See bombsquadgame.com for download links for all supported platforms."
- friend_promo_redeem_long(*, count: int, max_uses: str | LangStr) LangStr[source]¶
How many free tickets a promo code grants and to how many people. English: (one) "It can be redeemed for # free ticket by up to {max_uses} people." / (other) "It can be redeemed for # free tickets by up to {max_uses} people."
- friend_promo_redeem_short(*, count: int) LangStr[source]¶
Short note of ticket value for a code. English: (one) "It can be redeemed for # Ticket in the game." / (other) "It can be redeemed for # Tickets in the game."
Instruction to share a promo code. English: "Share this code with friends:"
- class bascenev1.classicassets.StringsCharactersGroup[source]¶
Bases:
objectPlayable character display names. Mods can register their own characters; those names are shown untranslated. See source for the full asset list.
- agent_johnson: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. Translate the "Agent" title; keep/transliterate "Johnson". English: "Agent Johnson"
- b9000: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. Robot designation: keep as "B-9000" (transliterate letters/digits only where the script requires). English: "B-9000"
- bernard: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. Invented proper name: keep verbatim in Latin-script locales; transliterate phonetically in non-Latin scripts. Established legacy renames in some locales are intentional and were seeded. English: "Bernard"
- betty: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. A warm, familiar granny-ish given name: keep/adapt "Betty" or use an equivalent common local name. English: "Betty"
- bones: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. Meaningful nickname: playful diminutive/pet-name forms for "bones/skeleton" work well. English: "Bones"
- butch: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. playful given name; transliterate phonetically in non-Latin scripts, or keep an established cowboy-flavored rename. English: "Butch"
- easter_bunny: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. Use each culture's standard Easter-bunny term. English: "Easter Bunny"
- frosty: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. Meaningful name: a frosty/snowy name-like form (playful beats a generic "snowman" where a natural option exists). English: "Frosty"
- gretel: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. invented proper name; transliterate phonetically in non-Latin scripts. English: "Gretel"
- grumbledorf: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. Invented wizardly pun name: "grumble" + a Gandalf/Dumbledore-style suffix. A local grumble-pun in the same shape is ideal; otherwise transliterate. Never a generic "wizard" word alone, and never an actual name from other fiction. English: "Grumbledorf"
- jack_morgan: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. Invented proper name: keep verbatim in Latin-script locales; transliterate phonetically in non-Latin scripts. Established legacy renames in some locales are intentional and were seeded. Use local name order conventions. English: "Jack Morgan"
- kronk: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. Invented proper name: keep verbatim in Latin-script locales; transliterate phonetically in non-Latin scripts. Established legacy renames in some locales are intentional and were seeded. English: "Kronk"
- lee: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. short proper name; transliterate phonetically in non-Latin scripts. English: "Lee"
- lucky: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. Meaningful name ("fortunate"): translate the meaning as a name-like form. English: "Lucky"
- mel: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. Invented proper name: keep verbatim in Latin-script locales; transliterate phonetically in non-Latin scripts. Established legacy renames in some locales are intentional and were seeded. English: "Mel"
- middle_man: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. a compound nickname meaning a neutral intermediary; a fitting localized equivalent works well. English: "Middle-Man"
- pascal: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. Invented proper name: keep verbatim in Latin-script locales; transliterate phonetically in non-Latin scripts. Established legacy renames in some locales are intentional and were seeded. English: "Pascal"
- pixel: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. English puns pixel/pixie. Either keep "Pixel" (transliterated as needed) or use a fairy/sprite word that lands a similar double meaning. English: "Pixel"
- santa_claus: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. Use each culture's traditional gift-bringer name. English: "Santa Claus"
- snake_shadow: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. Descriptive name: translate the meaning (snake + shadow, ninja-flavored). English: "Snake Shadow"
- spaz: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. the default character and series mascot; transliterate phonetically, or keep an established playful rename. English: "Spaz"
- taobao_mascot: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. Chinese locales use the official mascot name 淘公仔; others translate "Taobao Mascot" ("Taobao" stays as the brand). English: "Taobao Mascot"
- todd_mcburton: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. invented proper name; transliterate phonetically in non-Latin scripts. English: "Todd McBurton"
- zoe: LangStr¶
Character display name shown in the store, inventory, character picker, and gameplay UIs. Invented proper name: keep verbatim in Latin-script locales; transliterate phonetically in non-Latin scripts. Established legacy renames in some locales are intentional and were seeded. English: "Zoe"
- class bascenev1.classicassets.StringsChestGroup[source]¶
Bases:
objectChest window: open/reduce-wait controls, slot descriptions, and prize odds. See source for the full asset list.
- open_now_description: LangStr¶
Note that the player can open a chest early. English: "You have enough Tokens to open this now - you don't need to wait."
- slot_description: LangStr¶
Explanation of what a chest slot holds. English: "This slot can hold a chest. Earn chests by playing campaign levels, placing in tournaments, and completing achievements."
- class bascenev1.classicassets.StringsControlsGroup[source]¶
Bases:
objectOn-screen control guidance shown during play: button hints and input-hardware suggestions. See source for the full asset list.
- class bascenev1.classicassets.StringsCoopGroup[source]¶
Bases:
objectCo-op play UI: campaign/custom/tournament tabs, difficulty markers, tournament info/status, and level-lock notices. See source for the full asset list.
- achievements_remaining: LangStr¶
Heading over the list of achievements left to earn. English: "Achievements Remaining:"
- chest_slots_full_warning: LangStr¶
Warning that all chest slots are full so earned chests will be lost. English: "WARNING: All your chest slots are full. Any chests you earn this game will be lost."
- difficulty_hard_only: LangStr¶
Marker that a level is available only in hard mode. English: "Hard Mode Only"
- difficulty_hard_unlock_only: LangStr¶
Confirmation prompt that a level unlocks only in hard mode. English: "This level can only be unlocked in hard mode. Do you think you have what it takes!?!?!"
- level_is_locked(*, level: str | LangStr) LangStr[source]¶
Notice that a named level is locked. English: "{level} is locked."
- level_must_be_completed_first(*, level: str | LangStr) LangStr[source]¶
Notice that a named level must be completed first. English: "{level} must be completed first."
- no_tournaments_in_test_build: LangStr¶
Warning that tournament scores are ignored on test builds. English: "WARNING: Tournament scores from this test build will be ignored."
- of_total(*, total: str | LangStr) LangStr[source]¶
Suffix showing a value out of a total time. English: "of {total}"
- player_count_abbreviated(*, count: str | LangStr) LangStr[source]¶
Abbreviated player-count badge (number + "p" for players). English: "{count}p"
- power_ranking_points(*, number: str | LangStr) LangStr[source]¶
Compact points label for power-ranking scores. English: "{number} pts"
- tournament_checking_state: LangStr¶
Status while loading tournament state. English: "Checking tournament state; please wait..."
- tournament_ended: LangStr¶
Notice that the current tournament has ended. English: "This tournament has ended. A new one will start soon."
- class bascenev1.classicassets.StringsCoopLevelsGroup[source]¶
Bases:
objectNames of the single-player and co-op campaign levels, including the parameterized difficulty variants. See source for the full asset list.
- infinite_onslaught: LangStr¶
Name of the Infinite Onslaught co-op level. English: "Infinite Onslaught"
- infinite_runaround: LangStr¶
Name of the Infinite Runaround co-op level. English: "Infinite Runaround"
- onslaught_training: LangStr¶
Name of the Onslaught Training co-op level. English: "Onslaught Training"
- class bascenev1.classicassets.StringsCoopScoreGroup[source]¶
Bases:
objectCo-op score/results screen: unavailable-scores notices, the best-scores/best-times section headings, and level/tournament proceed messages. See source for the full asset list.
- best_rating(*, rating: str | LangStr) LangStr[source]¶
The player's best rating on this co-op level. English: "Your best rating is {rating}"
- complete_level_to_proceed: LangStr¶
Notice that the level must be completed to proceed. English: "You must complete this level to proceed!"
- current_standing(*, rank: str | LangStr) LangStr[source]¶
The player's current rank on this co-op level. English: "Your current standing is #{rank}"
- final_time: LangStr¶
Label for the finishing time on the co-op results screen. English: "Final Time"
Notice that friend scores could not be loaded. English: "Friend scores unavailable."
- last_games(*, count: str | LangStr) LangStr[source]¶
Note that a rating covers only recent games. English: "(last {count} games)"
- level_unlocked: LangStr¶
Announcement that a new co-op level became available. English: "Level Unlocked!"
- multi_player_count(*, count: str | LangStr) LangStr[source]¶
Player count for a multi-player co-op score entry. English: "{count} players"
- new_personal_best: LangStr¶
Celebration for beating your own previous best. English: "New personal best!"
- not_enough_players_remaining: LangStr¶
Notice that too few players remain to continue. English: "Not enough players remaining; exit and start a new game."
- out_of(*, rank: str | LangStr, all: str | LangStr) LangStr[source]¶
The player's rank among all ranked players. English: "(#{rank} out of {all})"
Notice that the score list could not be loaded. English: "Score list unavailable."
- score_was(*, count: str | LangStr) LangStr[source]¶
The previous best score, shown when it is beaten. English: "(was {count})"
- single_player_count: LangStr¶
Player count for a single-player co-op score entry. English: "1 player"
- tournament_standings: LangStr¶
Heading/button label for the tournament standings. English: "Tournament Standings"
Notice that world scores could not be loaded. English: "World scores unavailable."
- class bascenev1.classicassets.StringsCreditsGroup[source]¶
Bases:
objectCredits-window text: section headings and contributor credit lines. See source for the full asset list.
- additional_audio_art_ideas(*, name: str | LangStr) LangStr[source]¶
Credit line for additional contributors. English: "Additional Audio, Early Artwork, and Ideas by {name}"
- additional_music_from(*, name: str | LangStr) LangStr[source]¶
Credit line for additional music. English: "Additional music from {name}"
- all_my_family: LangStr¶
Credit line thanking friends and family playtesters. English: "All of my friends and family who helped play test"
- coding_graphics_audio(*, name: str | LangStr) LangStr[source]¶
Credit line for the main developer. English: "Coding, Graphics, and Audio by {name}"
- language_translations: LangStr¶
Section heading for translation credits. English: "Language Translations:"
- public_domain_music_via(*, name: str | LangStr) LangStr[source]¶
Credit line for public-domain music. English: "Public-domain music via {name}"
- software_based_on(*, name: str | LangStr) LangStr[source]¶
Credit line for third-party software. English: "This software is based in part on the work of {name}."
- sounds_source(*, source: str | LangStr) LangStr[source]¶
Credit heading naming a sound source. English: "Sounds ({source}):"
- thanks_especially_to(*, name: str | LangStr) LangStr[source]¶
Special-thanks credit line. English: "Special thanks to {name}"
- class bascenev1.classicassets.StringsEconomyGroup[source]¶
Bases:
objectScreen-messages about currency: grants and related notices. See source for the full asset list.
- class bascenev1.classicassets.StringsFileSelectorGroup[source]¶
Bases:
objectFile/folder selector window titles and buttons. See source for the full asset list.
- class bascenev1.classicassets.StringsGameDescriptionsGroup[source]¶
Bases:
objectMinigame objective descriptions shown at match start and on game lists. Mods define their own; those show untranslated. See source for the full asset list.
- be_the_chosen_one_for_a: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Be the chosen one for a length of time to win. Kill the chosen one to become it."
- bomb_as_many_targets_as_you: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Bomb as many targets as you can."
- carry_the_flag_for_a_set: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Carry the flag for a set length of time."
- carry_the_flag_for_seconds(*, arg1: str | LangStr) LangStr[source]¶
Minigame objective description (start-of-match / game lists). English: "Carry the flag for {arg1} seconds."
- carry_the_flag_for_seconds_2(*, arg1: str | LangStr) LangStr[source]¶
Minigame objective description (start-of-match / game lists). English: "Carry the flag for {arg1} seconds"
- crush_of_your_enemies(*, arg1: str | LangStr) LangStr[source]¶
Minigame objective description (start-of-match / game lists). English: "Crush {arg1} of your enemies."
- defeat_all_enemies: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Defeat all enemies."
- dodge_the_falling_bombs: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Dodge the falling bombs."
- final_glorious_epic_slow_motion_battle: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Final glorious epic slow motion battle to the death."
- gather_eggs: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Gather eggs!"
- get_the_flag_to_the_enemy: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Get the flag to the enemy end zone."
- how_fast_can_you_defeat_the: LangStr¶
Minigame objective description (start-of-match / game lists). English: "How fast can you defeat the ninjas?"
- kill_a_set_number_of_enemies: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Kill a set number of enemies to win."
- kill_enemies(*, arg1: str | LangStr) LangStr[source]¶
Minigame objective description (start-of-match / game lists). English: "Defeat {arg1} enemies"
- last_one_standing_wins: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Last one standing wins."
- last_one_standing_wins_2: LangStr¶
Minigame objective description (start-of-match / game lists). English: "last one standing wins"
- last_remaining_alive_wins: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Last remaining alive wins."
- last_team_standing_wins: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Last team standing wins."
- last_team_standing_wins_2: LangStr¶
Minigame objective description (start-of-match / game lists). English: "last team standing wins"
- prevent_enemies_from_reaching_the_exit: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Prevent enemies from reaching the exit."
- reach_the_enemy_flag_to_score: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Reach the enemy flag to score."
- return_1_flag: LangStr¶
Minigame objective description (start-of-match / game lists). English: "return 1 flag"
- return_flags(*, arg1: str | LangStr) LangStr[source]¶
Minigame objective description (start-of-match / game lists). English: "Return {arg1} flags"
- return_the_enemy_flag_to_score: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Return the enemy flag to score."
- run_1_lap: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Run 1 lap."
- run_1_lap_2: LangStr¶
Minigame objective description (start-of-match / game lists). English: "run 1 lap"
- run_1_lap_your_entire_team: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Run 1 lap. Your entire team has to finish."
- run_laps(*, arg1: str | LangStr) LangStr[source]¶
Minigame objective description (start-of-match / game lists). English: "Run {arg1} laps."
- run_laps_2(*, arg1: str | LangStr) LangStr[source]¶
Minigame objective description (start-of-match / game lists). English: "Run {arg1} laps"
- run_laps_your_entire_team_has(*, arg1: str | LangStr) LangStr[source]¶
Minigame objective description (start-of-match / game lists). English: "Run {arg1} laps. Your entire team has to finish."
- run_real_fast: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Run real fast!"
- score_a_goal: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Score a goal."
- score_a_goal_2: LangStr¶
Minigame objective description (start-of-match / game lists). English: "score a goal"
- score_a_touchdown: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Score a touchdown."
- score_a_touchdown_2: LangStr¶
Minigame objective description (start-of-match / game lists). English: "score a touchdown"
- score_goals(*, arg1: str | LangStr) LangStr[source]¶
Minigame objective description (start-of-match / game lists). English: "Score {arg1} goals."
- score_goals_2(*, arg1: str | LangStr) LangStr[source]¶
Minigame objective description (start-of-match / game lists). English: "Score {arg1} goals"
- score_some_goals: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Score some goals."
- score_touchdowns(*, arg1: str | LangStr) LangStr[source]¶
Minigame objective description (start-of-match / game lists). English: "Score {arg1} touchdowns."
- score_touchdowns_2(*, arg1: str | LangStr) LangStr[source]¶
Minigame objective description (start-of-match / game lists). English: "score {arg1} touchdowns"
- secure_all_flags(*, arg1: str | LangStr) LangStr[source]¶
Minigame objective description (start-of-match / game lists). English: "Secure all {arg1} flags."
- secure_all_flags_2(*, arg1: str | LangStr) LangStr[source]¶
Minigame objective description (start-of-match / game lists). English: "Secure all {arg1} flags"
- secure_all_flags_on_the_map: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Secure all flags on the map to win."
- secure_the_flag_for_a_set: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Secure the flag for a set length of time."
- secure_the_flag_for_seconds(*, arg1: str | LangStr) LangStr[source]¶
Minigame objective description (start-of-match / game lists). English: "Secure the flag for {arg1} seconds."
- secure_the_flag_for_seconds_2(*, arg1: str | LangStr) LangStr[source]¶
Minigame objective description (start-of-match / game lists). English: "Secure the flag for {arg1} seconds"
- steal_the_enemy_flag: LangStr¶
Minigame objective description (start-of-match / game lists). English: "Steal the enemy flag."
- steal_the_enemy_flag_times(*, arg1: str | LangStr) LangStr[source]¶
Minigame objective description (start-of-match / game lists). English: "Steal the enemy flag {arg1} times."
- there_can_be_only_one: LangStr¶
Minigame objective description (start-of-match / game lists). English: "There can be only one."
- touch_1_flag: LangStr¶
Minigame objective description (start-of-match / game lists). English: "touch 1 flag"
- touch_flags(*, arg1: str | LangStr) LangStr[source]¶
Minigame objective description (start-of-match / game lists). English: "Touch {arg1} flags"
- class bascenev1.classicassets.StringsGameGroup[source]¶
Bases:
objectGeneric in-game scoreboard and result vocabulary shared across the various gameplay activities (scores, victory/draw banners, wave progress, bonus labels). See source for the full asset list.
- disqualified_player_left(*, team: str | LangStr, player: str | LangStr) LangStr[source]¶
Notice that a team was disqualified when a player left. English: "Team {team} has been disqualified because {player} left the game."
- epic_description_filter(*, description: str | LangStr) LangStr[source]¶
Epic-mode wrapper appended to a game description. English: "{description} In epic slow motion."
- epic_name_filter(*, name: str | LangStr) LangStr[source]¶
Name of the slow-motion variant of a minigame. English: "Epic {name}"
- flawless_wave: LangStr¶
Celebratory banner for clearing a wave flawlessly. English: "Flawless Wave!"
- game_on_map(*, name: str | LangStr, mapname: str | LangStr) LangStr[source]¶
Pure-formatting template pairing a game with its map; substitution-only. English: "{name} @ {mapname}"
- killing_track_skipper(*, name: str | LangStr) LangStr[source]¶
Notice that a racer is killed for cutting the course. English: "Killing {name} for skipping part of the track!"
- lap_number(*, current: str | LangStr, total: str | LangStr) LangStr[source]¶
Progress label for the current lap of a race. English: "Lap {current}/{total}"
- lives_bonus: LangStr¶
Label for the remaining-lives bonus in a co-op score tally. English: "Lives Bonus"
- multi_kill(*, count: int) LangStr[source]¶
Celebratory banner for a kill streak of a given count (six or more). English: (one) "#-KILL!!!" / (other) "#-KILLS!!!"
- name_betrayed(*, name: str | LangStr, victim: str | LangStr) LangStr[source]¶
Death announcement: a player killed a teammate. English: "{name} betrayed {victim}."
- name_died(*, name: str | LangStr) LangStr[source]¶
Death announcement: a player died. English: "{name} died."
- name_killed(*, name: str | LangStr, victim: str | LangStr) LangStr[source]¶
Death announcement: a player killed an opponent. English: "{name} killed {victim}."
- name_scores(*, name: str | LangStr) LangStr[source]¶
Announcement that a named player scores. English: "{name} Scores!"
- name_suicide(*, name: str | LangStr) LangStr[source]¶
Death announcement: a player killed themselves. English: "{name} committed suicide."
- no_valid_maps_error: LangStr¶
Error message when no valid maps exist for a game type. English: "No valid maps found for this game type."
- onslaught_respawn(*, player: str | LangStr, wave: str | LangStr) LangStr[source]¶
Notice of which wave a defeated player returns on. English: "{player} will respawn in wave {wave}"
- own_flag_at_base_warning: LangStr¶
Warning that your own flag must be at your base to score. English: "Your own flag must be at your base to score!"
- perfect_wave: LangStr¶
Celebration shown for completing a wave without damage. English: "Perfect Wave!"
- points_gained(*, points: str | LangStr) LangStr[source]¶
Pure-formatting popup showing points just gained; substitution-only. English: "+{points}"
- points_gained_titled(*, points: str | LangStr, title: str | LangStr) LangStr[source]¶
Pure-formatting popup pairing gained points with an award title; substitution-only. English: "+{points} {title}"
- press_any_button_continue: LangStr¶
Prompt to press any button to continue. English: "Press any button to continue..."
- press_any_button_play_again: LangStr¶
Prompt to press a button to play again. English: "Press any button to play again..."
- press_any_key_button_continue: LangStr¶
Prompt to press any key or button to continue. English: "Press any key/button to continue..."
- press_any_key_button_play_again: LangStr¶
Prompt to press a key or button to play again. English: "Press any key/button to play again..."
- press_jump_to_fly: LangStr¶
Flying-map tip: press jump repeatedly to fly. English: "** Press jump repeatedly to fly **"
- solo_name_filter(*, name: str | LangStr) LangStr[source]¶
Name of the solo variant of a minigame. English: "Solo {name}"
- time_bonus_amount(*, amount: str | LangStr) LangStr[source]¶
Time-bonus label with its current amount, shown on the co-op HUD. English: "Time Bonus: {amount}"
- tournament_time_expired: LangStr¶
Banner shown when the tournament time limit runs out. English: "Tournament Time Expired"
- triple_kill: LangStr¶
Celebratory banner for three kills in quick succession. English: "TRIPLE KILL!!"
- turbo_warning(*, name: str | LangStr) LangStr[source]¶
Warning that button-spamming will knock a player out. English: "Warning {name}: Button-spamming (turbo) will knock you out!"
- class bascenev1.classicassets.StringsGameNamesGroup[source]¶
Bases:
objectNames of the competitive multiplayer minigames. Mods can add their own games; those names are shown untranslated. See source for the full asset list.
- class bascenev1.classicassets.StringsGatherGroup[source]¶
Bases:
objectParty/gather UI strings: hosting-form labels, pre-join prompts, and related networking-flow messages. See source for the full asset list.
- added_to_favorites(*, name: str | LangStr) LangStr[source]¶
Confirmation after saving a favorite party. English: "Added '{name}' to Favorites."
- address_fetch_error: LangStr¶
Placeholder shown when addresses cannot be fetched. English: "<error fetching addresses>"
- copy_code_confirm: LangStr¶
Confirmation after copying a party code. English: "Code copied to clipboard."
- dedicated_server_info: LangStr¶
Tip about setting up a dedicated server. English: "For best results, set up a dedicated server. See bombsquadgame.com/server to learn how."
- delete_confirm_list(*, list: str | LangStr) LangStr[source]¶
Confirmation before deleting a named list. English: "Delete "{list}"?"
- description_short: LangStr¶
Short hint pointing to the gather window. English: "Use the gather window to assemble a party."
- disconnect_clients(*, count: int) LangStr[source]¶
Confirmation before an action disconnects party players. English: (one) "This will disconnect the # player in your party. Are you sure?" / (other) "This will disconnect the # players in your party. Are you sure?"
- discord_friends: LangStr¶
Blurb inviting players to the Discord. English: "Want to look for new people to play with? Join our Discord and find new friends!"
- free_cloud_server_available: LangStr¶
Notice that a free cloud server is available. English: "FREE CLOUD SERVER AVAILABLE!"
- free_cloud_server_available_minutes(*, minutes: str | LangStr) LangStr[source]¶
Countdown to the next free cloud server. English: "Next free cloud server available in {minutes} minutes."
- free_cloud_server_not_available: LangStr¶
Notice that no free cloud servers are free right now. English: "No free cloud servers available."
- get_friend_invite_code: LangStr¶
Button to get a friend invite code. English: "Get Friend Invite Code"
Notice that hosting is unavailable. English: "Hosting Unavailable"
- invalid_address_error: LangStr¶
Error for an invalid server address. English: "Error: invalid address."
- invite_a_friend(*, count: str | LangStr) LangStr[source]¶
Blurb about inviting friends for a ticket reward. English: "Friends don't have the game? Invite them to try it and they'll receive {count} free Tickets."
- joinable_from_internet: LangStr¶
Question label about internet joinability. English: "Are you joinable from the internet?:"
- local_network_description: LangStr¶
Subtitle for the nearby-party tab. English: "Join a Nearby Party (LAN, Bluetooth, etc.)"
- manual_description: LangStr¶
Subtitle for the manual-connect tab. English: "Join a party by address:"
- no_parties_added: LangStr¶
Placeholder when no favorite parties are saved. English: "No Parties Added"
- no_servers_found: LangStr¶
Placeholder when no public servers are found. English: "No servers found."
- party_requires_password: LangStr¶
Description line in the pre-join password prompt dialog, shown above the password entry field when joining a password-protected party. English: "This party requires a password."
- party_server_running: LangStr¶
Status that the party server is running. English: "Your party server is running."
- party_status_checking: LangStr¶
Status shown while checking party status. English: "checking status..."
- party_status_joinable: LangStr¶
Status that the party is joinable. English: "your party is now joinable from the internet"
- party_status_no_connection: LangStr¶
Status that the server is unreachable. English: "unable to connect to server"
- party_status_not_public: LangStr¶
Status that the hosted party is not public. English: "your party is not public"
- password_optional: LangStr¶
Label for the optional party-password entry field in the gather window's public-hosting form. English: "Password (optional)"
- private_party_cloud_description: LangStr¶
Explanation of private cloud parties. English: "Private parties run on dedicated cloud servers; no router configuration required."
- public_host_router_config: LangStr¶
Warning about router config for public hosting. English: "This may require configuring port-forwarding on your router. For an easier option, host a private party."
- router_forwarding(*, port: str | LangStr) LangStr[source]¶
Tip to forward a UDP port on the router. English: "*To fix this, forward UDP port {port} to your local address on your router."
- start_hosting_paid(*, cost: str | LangStr) LangStr[source]¶
Button to start paid hosting for a cost. English: "Host Now For {cost}"
- start_stop_hosting_minutes(*, minutes: int) LangStr[source]¶
Notice of the free start/stop-hosting window in minutes. English: (one) "You can start and stop hosting for free for the next # minute." / (other) "You can start and stop hosting for free for the next # minutes."
- title: LangStr¶
Title of the Gather section, where players meet up and play with others; also labels the main-menu button leading there and gather-related join-screen hints. English: "Gather"
- unable_to_resolve_host: LangStr¶
Error when the host address cannot resolve. English: "Error: unable to resolve host."
- v2_account_required: LangStr¶
Notice that a V2 account is required. English: "This requires a V2 account. Upgrade your account and try again."
- class bascenev1.classicassets.StringsGetRemoteGroup[source]¶
Bases:
objectGet-remote-app window: controller/remote-app info blurb. See source for the full asset list.
- info_short(*, app_name: str | LangStr, remote_app_name: str | LangStr) LangStr[source]¶
Blurb about using controllers or the remote app. English: "{app_name} is most fun when played with family & friends. Connect one or more hardware controllers or install the {remote_app_name} app on phones or tablets to use them as controllers."
- class bascenev1.classicassets.StringsGetTokensGroup[source]¶
Bases:
objectGet-tokens / Gold Pass store window strings. See source for the full asset list.
- not_enough_tokens: LangStr¶
Error when the player lacks enough tokens. English: "Not enough tokens!"
- num_tokens(*, count: int) LangStr[source]¶
A number of tokens. English: (one) "# Token" / (other) "# Tokens"
- purchase_never_available: LangStr¶
Notice that purchases are unavailable here. English: "Sorry, purchases are not available on this build. Try signing into your account on another platform and making purchases from there."
- purchase_not_available: LangStr¶
Notice that a purchase is unavailable. English: "This purchase is not available."
- remove_ads_offer: LangStr¶
Limited-time offer to remove ads via a token pack. English: "LIMITED TIME OFFER: PURCHASE ANY TOKEN PACK TO REMOVE IN-GAME ADS."
- class bascenev1.classicassets.StringsGroup[source]¶
Bases:
objectAll standard game strings (everything non-bootstrap). See source for the full asset list.
- class bascenev1.classicassets.StringsHelpGroup[source]¶
Bases:
objectHelp window: section headings and how-to-play text for controls, controllers, devices, friends, and powerups. See source for the full asset list.
- bomb_info: LangStr¶
How-to text for the Bomb action. English: "- Bomb - Stronger than punches, but can result in grave self-injury. For best results, throw towards enemy before fuse runs out."
- can_help(*, app_name: str | LangStr) LangStr[source]¶
Reassurance that the app can help. English: "{app_name} can help."
- controllers_info(*, app_name: str | LangStr, remote_app_name: str | LangStr) LangStr[source]¶
Body text for the controllers section. English: "You can play {app_name} with friends over a network, or play together on the same device if you have enough controllers. It supports a variety of controllers, and you can even use phones as controllers via the free '{remote_app_name}' app. See Settings > Controllers for more info."
- controls_subtitle(*, app_name: str | LangStr) LangStr[source]¶
Subtitle introducing the basic actions. English: "Your friendly {app_name} character has a few basic actions:"
- devices_info(*, app_name: str | LangStr) LangStr[source]¶
Body text for the devices section. English: "The VR version of {app_name} can be played over the network with the regular version, so whip out your extra phones, tablets, and computers and get your game on. It can even be useful to connect a regular version of the game to the VR version just to allow people outside to watch the action."
- friends_good(*, app_name: str | LangStr) LangStr[source]¶
Two-line message about playing with friends. English: "These are good to have. {app_name} is most fun with several players and can support up to 8 at a time, which leads us to:"
- jump_info: LangStr¶
How-to text for the Jump action. English: "- Jump - Jump to cross small gaps, to throw things higher, and to express feelings of joy."
- or_punching_something: LangStr¶
Continued humorous line about punching. English: "Or punching something, throwing it off a cliff, and blowing it up on the way down with a sticky bomb."
- pick_up_info: LangStr¶
How-to text for the Pick Up action. English: "- Pick Up - Grab flags, enemies, or anything else not bolted to the ground. Press again to throw."
- powerups_subtitle: LangStr¶
Subtitle introducing powerups. English: "Of course, no game is complete without powerups:"
- punch_info: LangStr¶
How-to text for the Punch action. English: "- Punch - Punches do more damage the faster your fists are moving, so run and spin like a madman."
- run_info: LangStr¶
How-to text for the Run action. English: "- Run - Hold ANY button to run. Triggers or shoulder buttons work well if you have them. Running gets you places faster but makes it hard to turn, so watch out for cliffs."
- some_days: LangStr¶
Opening humorous line in the help window. English: "Some days you just feel like punching something. Or blowing something up."
- title(*, app_name: str | LangStr) LangStr[source]¶
Title of the help window. English: "{app_name} Help"
- class bascenev1.classicassets.StringsInGameMenuGroup[source]¶
Bases:
objectIn-game pause-menu strings: resume/end/leave buttons and their confirmation prompts. See source for the full asset list.
- end_game: LangStr¶
Label for the in-game pause menu button that ends the current game and returns to the menu. English: "End Game"
- end_replay: LangStr¶
Label for the in-game pause menu button that stops the replay currently being viewed. English: "End Replay"
- end_test: LangStr¶
Label for the in-game pause menu button that ends the current benchmark/test run (shown in place of the end-game button). English: "End Test"
Confirmation question shown before ending the current game and returning to the main menu. English: "Exit to menu?"
- just_player(*, name: str | LangStr) LangStr[source]¶
Small annotation under the leave-game button clarifying which player would leave (their name substituted in). English: "(Just {name})"
- leave_game: LangStr¶
Label for the in-game pause menu button that removes the pressing player's character from the game (in local multiplayer with several players). English: "Leave Game"
- leave_party: LangStr¶
Label for the in-game pause menu button that disconnects from the party (shown when connected to someone else's game). English: "Leave Party"
- class bascenev1.classicassets.StringsInboxGroup[source]¶
Bases:
objectMessage-inbox window: messages, prizes, expiry labels. See source for the full asset list.
- expired_ago(*, t: str | LangStr) LangStr[source]¶
Label showing how long ago something expired. English: "Expired {t} ago"
- expires_in(*, t: str | LangStr) LangStr[source]¶
Label showing time until a message expires. English: "Expires in {t}"
- class bascenev1.classicassets.StringsInventoryGroup[source]¶
Bases:
objectClient-side inventory window bits: offline/signed-out placeholder variants (the online inventory content itself is server-composed). See source for the full asset list.
- only_available_online: LangStr¶
Inventory placeholder message. English: "Full inventory is only available when online."
- class bascenev1.classicassets.StringsKeyboardGroup[source]¶
Bases:
objectLabels and instructions for the on-screen keyboard used for text entry on touch and controller devices. See source for the full asset list.
- change_instructions: LangStr¶
Instructions for switching on-screen keyboards. English: "Double press space to change keyboards."
- class bascenev1.classicassets.StringsKioskGroup[source]¶
Bases:
objectKiosk/demo-mode menu strings. See source for the full asset list.
Title of the demo/kiosk menu. English: "Demo Menu"
Button to open the full menu (kiosk). English: "Full Menu"
- class bascenev1.classicassets.StringsLeagueGroup[source]¶
Bases:
objectLeague/season UI: ranking labels, season timing notices, bonuses, and the league-president title. See source for the full asset list.
Notice that achievement details are unavailable for past seasons. English: "Sorry, achievement specifics are not available for old seasons."
- current_season(*, number: str | LangStr) LangStr[source]¶
Label for the current season, with its number. English: "Current Season ({number})"
- number_badge(*, number: str | LangStr) LangStr[source]¶
Rank-number badge (hash + number); substitution-only. English: "#{number}"
- power_ranking_points_equals(*, number: str | LangStr) LangStr[source]¶
Badge showing a points equivalence in power ranking. English: "= {number} pts"
- power_ranking_points_mult(*, number: str | LangStr) LangStr[source]¶
Badge showing a points multiplier in power ranking. English: "(x{number} pts)"
- season(*, number: str | LangStr) LangStr[source]¶
Label naming a season by number. English: "Season {number}"
- season_ended_days_ago(*, days: int) LangStr[source]¶
Notice that a season ended a number of days ago. English: (one) "Season ended # day ago." / (other) "Season ended # days ago."
- season_ends_days(*, days: int) LangStr[source]¶
Notice that the season ends in a number of days. English: (one) "Season ends in # day." / (other) "Season ends in # days."
- season_ends_hours(*, hours: int) LangStr[source]¶
Notice that the season ends in a number of hours. English: (one) "Season ends in # hour." / (other) "Season ends in # hours."
- season_ends_minutes(*, minutes: int) LangStr[source]¶
Notice that the season ends in a number of minutes. English: (one) "Season ends in # minute." / (other) "Season ends in # minutes."
- tournament_required(*, name: str | LangStr) LangStr[source]¶
Notice that a higher league is required to enter. English: "You must reach {name} to enter this tournament."
- trophy_counts_reset: LangStr¶
Notice that trophy counts reset each season. English: "Trophy counts will reset next season."
- up_to_date_bonus: LangStr¶
Label for the up-to-date-version score bonus. English: "Up-To-Date Bonus"
- class bascenev1.classicassets.StringsLobbyGroup[source]¶
Bases:
objectJoin-screen (lobby) prompts and labels shown while players are joining, picking profiles, and readying up. See source for the full asset list.
- choosing_player: LangStr¶
Placeholder name while a player is still joining. English: "<choosing player>"
- create_edit_player: LangStr¶
Lobby profile-list entry for creating or editing a profile. English: "<Create/Edit Player>"
- press_any_button_to_join: LangStr¶
Prompt inviting anyone to join by pressing a button. English: "press any button to join..."
- press_punch_to_join: LangStr¶
Prompt to join by pressing the punch button. English: "press PUNCH to join..."
- press_to_override_character(*, buttons: str | LangStr) LangStr[source]¶
Prompt for overriding the profile character in the lobby. English: "press {buttons} to override your character"
- press_to_select_profile(*, buttons: str | LangStr) LangStr[source]¶
Prompt for selecting a player profile in the lobby. English: "press {buttons} to select a player"
- class bascenev1.classicassets.StringsMainMenuGroup[source]¶
Bases:
objectMain-menu strings: menu buttons, build watermarks, and menu-scene status text. See source for the full asset list.
- exit_game: LangStr¶
Label for the main-menu button that exits the app (general wording; the Mac variant uses the 'Quit' string). English: "Exit Game"
Shown to connected clients while the party host is navigating menus (so they know why they are looking at an idle screen). English: "- {host} is navigating menus like a boss -"
- how_to_play: LangStr¶
Label for the main-menu button opening the how-to-play/instructions section. English: "How to Play"
- mode_arcade: LangStr¶
Label for the main-menu button switching the game into Arcade mode (a simplified mode designed for stand-up arcade cabinets). English: "Arcade Mode"
- mode_demo: LangStr¶
Label for the main-menu button switching the game into Demo mode (a simple mode providing a few gameplay examples instead of the full experience). English: "Demo Mode"
- next_achievements: LangStr¶
Heading shown in the main-menu ticker above the player's next unearned achievements. English: "Next Achievements:"
- class bascenev1.classicassets.StringsMapNamesGroup[source]¶
Bases:
objectNames of the play areas (maps) that matches are held in. Mods can add their own maps; those names are shown untranslated. See source for the full asset list.
- class bascenev1.classicassets.StringsMultiTeamGroup[source]¶
Bases:
objectMulti-team series victory and score screens: player-award headings (most valuable/violent/destroyed), the "SERIES!" banner, and the score-table column labels. See source for the full asset list.
- best_of_final(*, count: str | LangStr) LangStr[source]¶
Title for a best-of-N final series. English: "Best-of-{count} Final"
- best_of_series(*, count: int) LangStr[source]¶
Title for a best-of-N series. English: (one) "Best Of # Series:" / (other) "Best Of # Series:"
- deaths_tally(*, count: str | LangStr) LangStr[source]¶
A player's death count in the end-of-series tally. English: "{count} deaths"
- first_to_final(*, count: str | LangStr) LangStr[source]¶
Title for a first-to-N-wins final series. English: "First-to-{count} Final"
- first_to_series(*, count: int) LangStr[source]¶
Title for a first-to-N-wins series. English: (one) "First-To-# Series" / (other) "First-To-# Series"
- game_leaders(*, count: int) LangStr[source]¶
Heading over the leaders of the current game. English: (one) "Game # Leaders" / (other) "Game # Leaders"
- games_to(*, wincount: str | LangStr, losecount: str | LangStr) LangStr[source]¶
Series score line reading as wins-to-losses. English: "{wincount} games to {losecount}"
- kills_tally(*, count: str | LangStr) LangStr[source]¶
A player's kill count in the end-of-series tally. English: "{count} kills"
- most_destroyed_player: LangStr¶
Heading for the most-destroyed-player award. English: "Most Destroyed Player"
- most_valuable_player: LangStr¶
Heading for the most-valuable-player award. English: "Most Valuable Player"
- most_violent_player: LangStr¶
Heading for the most-violent-player award. English: "Most Violent Player"
- must_invite_friends(*, gather: str | LangStr) LangStr[source]¶
Notice explaining how to get more players in. English: "Invite friends via {gather} or connect controllers to play."
- team_label(*, name: str | LangStr) LangStr[source]¶
Score-banner label naming a team. English: "{name}:"
- up_next(*, count: str | LangStr) LangStr[source]¶
Label introducing the next game of a series. English: "Up next in game {count}:"
- class bascenev1.classicassets.StringsPartyGroup[source]¶
Bases:
objectParty window: member list, chat, kick/mute controls. See source for the full asset list.
- class bascenev1.classicassets.StringsPartyQueueGroup[source]¶
Bases:
objectParty-join queue status messages. See source for the full asset list.
- class bascenev1.classicassets.StringsPlayGroup[source]¶
Bases:
objectPlay window: player-count range labels. See source for the full asset list.
- class bascenev1.classicassets.StringsPlayModesGroup[source]¶
Bases:
objectPlay-mode names (Teams, Free-for-All, ...) shared across playlist UIs, session descriptions, and settings. See source for the full asset list.
- free_for_all: LangStr¶
The 'Free-for-All' play mode name (every player for themselves). English: "Free-for-All"
- class bascenev1.classicassets.StringsPlayOptionsGroup[source]¶
Bases:
objectPlaylist play-options: tutorial/shuffle toggles, team names/colors, unlock notices. See source for the full asset list.
- class bascenev1.classicassets.StringsPlaylistGroup[source]¶
Bases:
objectPlaylist browser/editor UI: create/edit/delete/duplicate/share/import playlists and add/remove games. See source for the full asset list.
- cant_delete_default: LangStr¶
Error deleting the default playlist. English: "You can't delete the default playlist."
- cant_edit_default: LangStr¶
Error editing the default playlist. English: "Can't edit the default playlist! Duplicate it or create a new one."
- cant_overwrite_default: LangStr¶
Error overwriting the default playlist. English: "Can't overwrite the default playlist!"
- cant_save_already_exists: LangStr¶
Error when playlist name is taken. English: "A playlist with that name already exists!"
Error sharing the default playlist. English: "You can't share the default playlist."
- customize_title(*, type: str | LangStr) LangStr[source]¶
Title for the customize-playlists window. English: "Customize {type} Playlists"
- default_list_name(*, playmode: str | LangStr) LangStr[source]¶
Name of the built-in default playlist for a play mode. English: "Default {playmode} Playlist"
- default_new_list_name(*, playmode: str | LangStr) LangStr[source]¶
Default name offered for a newly created playlist. English: "My {playmode} Playlist"
- export_success(*, name: str | LangStr) LangStr[source]¶
Confirmation after exporting a named playlist. English: "'{name}' exported."
- import_instructions: LangStr¶
Instructions for importing a playlist by code. English: "Use the following code to import this playlist elsewhere:"
- map_select_title(*, game: str | LangStr) LangStr[source]¶
Title of the map-selection window. English: "{game}: Select a Map"
- class bascenev1.classicassets.StringsProfileGroup[source]¶
Bases:
objectPlayer-profile editor strings: create/edit/delete profiles, the local/global/account profile explanations, and global-name upgrade flow. See source for the full asset list.
- account_profile: LangStr¶
Parenthetical marker labeling the account-based profile. English: "(account profile)"
- account_profile_info(*, icons: str | LangStr) LangStr[source]¶
Explanation of what an account profile is. English: "Uses account details {icons}. Create custom profiles to change."
- available(*, name: str | LangStr) LangStr[source]¶
Status shown when a chosen global name is available. English: "The name {name} is available."
- cant_delete_account_profile: LangStr¶
Error when trying to delete the account profile. English: "You can't delete your account profile."
- checking_availability(*, name: str | LangStr) LangStr[source]¶
Status shown while checking global-name availability. English: "Checking availability for "{name}"..."
- delete_confirm(*, profile: str | LangStr) LangStr[source]¶
Confirmation before deleting a named profile. English: "Delete '{profile}'?"
- get_more_characters: LangStr¶
Button to get more player characters. English: "Get More Characters..."
- global_profile: LangStr¶
Parenthetical marker labeling a global profile. English: "(global profile)"
- global_profile_info: LangStr¶
Explanation of global profiles in the edit window. English: "Global player profiles are guaranteed to have unique names worldwide. They also include custom icons."
- in_game_clipped_name(*, name: str | LangStr) LangStr[source]¶
Preview of how a profile name appears in-game (possibly clipped). English: "In-game: {name}"
- local_profile_info: LangStr¶
Explanation of local profiles in the edit window. English: "Local player profiles have no icons and their names are not guaranteed to be unique. Upgrade to a global profile to reserve a unique name and add a custom icon."
- name_not_empty: LangStr¶
Error when the profile name field is empty. English: "Name cannot be empty!"
- not_enough_tickets: LangStr¶
Error when the player lacks enough tickets for an upgrade. English: "Not enough Tickets!"
- profile_already_exists: LangStr¶
Error when a profile name is already taken. English: "A profile with that name already exists."
Status shown when a chosen global name is taken. English: ""{name}" is unavailable. Try another name."
- class bascenev1.classicassets.StringsProfilesGroup[source]¶
Bases:
objectPlayer-profile management UI: profile lists, creation, and related hints. See source for the full asset list.
- class bascenev1.classicassets.StringsReportGroup[source]¶
Bases:
objectPlayer-report dialog: report reasons and explanation. See source for the full asset list.
- explanation: LangStr¶
Explanation atop the report dialog. English: "Use this email to report cheating, inappropriate language, or other bad behavior. Please describe below:"
- class bascenev1.classicassets.StringsResourceTypeInfoGroup[source]¶
Bases:
objectCurrency info popups (tickets/tokens descriptions). See source for the full asset list.
- class bascenev1.classicassets.StringsScoreTypesGroup[source]¶
Bases:
objectColumn labels naming what a game's score measures (goals, flags, time survived, and so on) on score tables. See source for the full asset list.
- class bascenev1.classicassets.StringsSendInfoGroup[source]¶
Bases:
objectSend-info / promo-code dialog strings. See source for the full asset list.
- class bascenev1.classicassets.StringsServerGroup[source]¶
Bases:
objectBroadcast messages sent to connected players about the hosting server's lifecycle. See source for the full asset list.
- class bascenev1.classicassets.StringsSessionGroup[source]¶
Bases:
objectSession-level player-flow broadcast messages: joins, departures, and player-limit notices. See source for the full asset list.
- not_enough_players(*, count: int) LangStr[source]¶
Warning that more players are needed to start. English: (one) "You need at least # player to start this game!" / (other) "You need at least # players to start this game!"
- player_delayed_join(*, player: str | LangStr) LangStr[source]¶
Notice that a joining player enters next round. English: "{player} will enter at the start of the next round."
- class bascenev1.classicassets.StringsSettingsAdvancedGroup[source]¶
Bases:
objectAdvanced-settings strings: language/translation section and misc toggles. See source for the full asset list.
- always_use_internal_keyboard: LangStr¶
Checkbox forcing the in-game on-screen keyboard for text entry. English: "Always Use Internal Keyboard"
- always_use_internal_keyboard_description: LangStr¶
Explanation under the always-use-internal-keyboard checkbox. English: "(a simple, controller-friendly on-screen keyboard for text editing)"
- disable_camera_gyro: LangStr¶
Checkbox disabling gyroscope-driven camera motion (mobile). English: "Disable Camera Gyroscope Motion"
- disable_camera_shake: LangStr¶
Checkbox disabling camera-shake effects. English: "Disable Camera Shake"
- help_translate(*, app_name: str | LangStr) LangStr[source]¶
Blurb asking for community translation help, above the translation-site link. English: "{app_name}'s non-English translations are a community supported effort. If you'd like to contribute or correct a translation, follow the link below. Thanks in advance!"
- insecure_connections: LangStr¶
Checkbox allowing non-TLS server connections (a network-workaround option). English: "Use Insecure Connections"
- insecure_connections_description: LangStr¶
Explanation under the insecure-connections checkbox. English: "not recommended, but may allow online play from restricted countries or networks"
- send_info: LangStr¶
Button for submitting info/logs to the developer (also used for entering promo codes). English: "Send Info"
- show_demos_when_idle: LangStr¶
Checkbox playing demo games when idle. English: "Show Demos When Idle"
- show_deprecated_login_types: LangStr¶
Checkbox revealing deprecated login options. English: "Show Deprecated Login Types"
- show_in_game_ping: LangStr¶
Checkbox showing network ping during games. English: "Show In-Game Ping"
- title: LangStr¶
Label for the advanced-settings category: language, promo codes, developer options, and other misc settings. English: "Advanced"
- translation_checking: LangStr¶
Status line while the translation status loads. English: "checking translation status..."
- translation_editor(*, app_name: str | LangStr) LangStr[source]¶
Button linking to the web translation editor. English: "{app_name} Translation Editor"
- translation_fetch_error: LangStr¶
Status line when the translation-status query fails. English: "translation status unavailable"
- translation_inform_me: LangStr¶
Checkbox subscribing to translation-update notifications for the user's language. English: "Inform me when my language needs updates"
- class bascenev1.classicassets.StringsSettingsAudioGroup[source]¶
Bases:
objectAudio-settings strings. See source for the full asset list.
- class bascenev1.classicassets.StringsSettingsBenchmarksGroup[source]¶
Bases:
objectBenchmark & stress-test window strings. See source for the full asset list.
- already_running_in_activity: LangStr¶
Error when starting a benchmark while another activity is running one. English: "Already present in another activity."
- playlist_description: LangStr¶
Description heading for the stress-test playlist. English: "Stress Test Playlist"
- class bascenev1.classicassets.StringsSettingsControllersGamepadGroup[source]¶
Bases:
objectGame-controller (gamepad) config-window strings: button assignment prompts and advanced options. See source for the full asset list.
- advanced_title: LangStr¶
Title of the advanced controller-setup window. English: "Advanced Controller Setup"
- analog_stick_dead_zone: LangStr¶
Slider for the analog-stick dead zone. English: "Analog Stick Dead Zone"
- analog_stick_dead_zone_description: LangStr¶
Explanation under the dead-zone slider. English: "(turn this up if your character 'drifts' when you release the stick)"
- applies_to_all: LangStr¶
Note that controller-setup changes apply to every controller of the same type. English: "(applies to all controllers of this type)"
- auto_recalibrate: LangStr¶
Checkbox enabling analog-stick auto-recalibration. English: "Auto-Recalibrate Analog Stick"
- auto_recalibrate_description: LangStr¶
Explanation under the auto-recalibrate checkbox. English: "(enable this if your character does not move at full speed)"
- dpad: LangStr¶
Tiny label for a controller's directional pad in the button diagram. English: "D-Pad"
- dpad_numbered(*, num: int) LangStr[source]¶
Label for a numbered directional pad in the controller-setup diagram (2-in-1 devices have two). English: (one) "dpad #" / (other) "dpad #"
- extra_start_button: LangStr¶
Assignment slot for an additional start button. English: "Extra Start Button"
- if_nothing_try_analog: LangStr¶
Hint shown when a dpad capture gets no input. English: "If nothing happens, try assigning to the analog stick instead."
- if_nothing_try_dpad: LangStr¶
Hint shown when an analog-stick capture gets no input. English: "If nothing happens, try assigning to the d-pad instead."
- ignore_completely: LangStr¶
Checkbox making the game ignore this controller entirely. English: "Ignore Completely"
- ignore_completely_description: LangStr¶
Explanation under the ignore-completely checkbox. English: "(prevent this controller from affecting either the game or menus)"
- ignored_button(*, num: int) LangStr[source]¶
Assignment slot for a numbered button the game should ignore (slots 1-4). English: (one) "Ignored Button #" / (other) "Ignored Button #"
- ignored_button_description: LangStr¶
Explanation under the ignored-button assignments. English: "(use this to prevent 'home' or 'sync' buttons from affecting the UI)"
- press_any_analog_trigger: LangStr¶
Prompt while capturing an analog trigger assignment. English: "Press any analog trigger..."
- press_any_button: LangStr¶
Prompt while capturing which physical button to assign. English: "Press any button..."
- press_any_button_or_dpad: LangStr¶
Prompt while capturing a button or dpad press. English: "Press any button or dpad..."
- press_left_right: LangStr¶
Prompt while capturing a horizontal axis assignment. English: "Press left or right..."
- press_up_down: LangStr¶
Prompt while capturing a vertical axis assignment. English: "Press up or down..."
- run_button(*, num: int) LangStr[source]¶
Assignment slot for a numbered run button (1 or 2). English: (one) "Run Button #" / (other) "Run Button #"
- run_trigger(*, num: int) LangStr[source]¶
Assignment slot for a numbered analog run trigger (1 or 2). English: (one) "Run Trigger #" / (other) "Run Trigger #"
- run_trigger_description: LangStr¶
Explanation under the run-trigger assignments. English: "(analog triggers let you run at variable speeds)"
- second_half: LangStr¶
Explanation of the secondary-controller feature for 2-controllers-in-1 devices. English: "Use this to configure the second half of a 2-controllers-in-1 device that shows up as a single controller."
- secondary: LangStr¶
Section title for the secondary-controller settings. English: "Secondary Controller"
- start_button_activates_default: LangStr¶
Checkbox making the start button activate the default widget. English: "Start Button Activates Default Widget"
- start_button_activates_default_description: LangStr¶
Explanation under the start-button checkbox. English: "(turn this off if your start button is more of a 'menu' button)"
- title: LangStr¶
Title of the controller-setup window (assigning buttons for one controller type). English: "Controller Setup"
- two_in_one_setup: LangStr¶
Button opening the 2-controllers-in-1 setup section. English: "2-in-1 Controller Setup"
- ui_only: LangStr¶
Checkbox limiting this controller to menu navigation. English: "Limit to Menu Use"
- ui_only_description: LangStr¶
Explanation under the menu-use-only checkbox. English: "(prevent this controller from actually joining a game)"
- class bascenev1.classicassets.StringsSettingsControllersGroup[source]¶
Bases:
objectController-settings strings: the category title, hub buttons, and device-config notes; per-device-type config windows live in subdirs. See source for the full asset list.
- android_note: LangStr¶
Note about controller-support variability on Android. English: "Note: controller support varies by device and Android version."
- cant_configure_device(*, device: str | LangStr) LangStr[source]¶
Note shown for input devices that have no configurable options. English: "Sorry, {device} is not configurable."
- configure_controllers: LangStr¶
Button/title for configuring game controllers (controllers settings window and the controller-select window title). English: "Configure Controllers"
- configure_in_system_settings(*, device: str | LangStr) LangStr[source]¶
Note for devices configured via the OS settings app instead of in-game. English: "{device} can be configured in the System Settings app."
- configure_keyboard: LangStr¶
Button leading to keyboard player-1 key configuration. English: "Configure Keyboard"
- configure_keyboard_p2: LangStr¶
Button leading to keyboard player-2 key configuration. English: "Configure Keyboard P2"
- configure_mobile: LangStr¶
Button leading to info about using phones/tablets as controllers. English: "Mobile Devices as Controllers"
- disable_remote_app: LangStr¶
Checkbox disabling incoming remote-app controller connections. English: "Disable Remote-App Connections"
- disable_xinput: LangStr¶
Windows-only checkbox disabling the XInput controller API. English: "Disable XInput"
- disable_xinput_description: LangStr¶
Explanation under the disable-XInput checkbox. English: "Allows more than 4 controllers but may not work as well."
- press_any_button_to_configure: LangStr¶
Prompt in the controller-select window; displays until a button is pressed on the controller to be configured. English: "Press any button on the controller you want to configure..."
- remote_best_results: LangStr¶
Wifi-quality advice in the mobile-devices-as-controllers info window. English: "For best results you'll need a lag-free wifi network. You can reduce wifi lag by turning off other wireless devices, by playing close to your wifi router, and by connecting the game host directly to the network via ethernet."
- remote_configured_in_app(*, remote_app_name: str | LangStr) LangStr[source]¶
Note shown when trying to configure the remote-control phone app as a controller; its settings live in that app. English: "{remote_app_name} is configured in the app itself."
- remote_explanation(*, remote_app_name: str | LangStr, app_name: str | LangStr) LangStr[source]¶
Explanation in the mobile-devices-as-controllers info window; names the remote app and the game. English: "To use a smart-phone or tablet as a wireless controller, install the "{remote_app_name}" app on it. Any number of devices can connect to a {app_name} game over Wi-Fi, and it's free!"
- class bascenev1.classicassets.StringsSettingsControllersKeyboardGroup[source]¶
Bases:
objectKeyboard config-window strings. See source for the full asset list.
- configuring(*, device: str | LangStr) LangStr[source]¶
Title of the keyboard-config window, naming the device being configured. English: "Configuring {device}"
- keyboard2_note: LangStr¶
Note in the second-keyboard-player config about hardware keypress limits. English: "Note: most keyboards can only register a few keypresses at once, so having a second keyboard player may work better if there is a separate keyboard attached for them to use. Note that you'll still need to assign unique keys to the two players even in that case."
- class bascenev1.classicassets.StringsSettingsControllersTouchscreenGroup[source]¶
Bases:
objectTouchscreen config-window strings. See source for the full asset list.
- drag_controls: LangStr¶
Hint that the on-screen controls can be dragged to reposition. English: "< drag controls to reposition them >"
- movement_control_scale: LangStr¶
Slider for movement-control size. English: "Movement Control Scale"
Checkbox hiding the swipe-control icons. English: "Hide Swipe Icons"
- class bascenev1.classicassets.StringsSettingsDevToolsGroup[source]¶
Bases:
objectDev-tools window strings. See source for the full asset list.
- create_user_system_scripts: LangStr¶
Button copying system scripts into the user scripts dir for modding. English: "Create User System Scripts"
- delete_user_system_scripts: LangStr¶
Button deleting the user copy of system scripts. English: "Delete User System Scripts"
- class bascenev1.classicassets.StringsSettingsGraphicsGroup[source]¶
Bases:
objectGraphics-settings strings: the category title and option labels (shared quality words like Low/High live in strings/ui). See source for the full asset list.
- fullscreen_shortcut_format(*, name: str | LangStr, shortcut: str | LangStr) LangStr[source]¶
Format joining the fullscreen checkbox label with its keyboard shortcut; pure substitution. English: "{name} [{shortcut}]"
- class bascenev1.classicassets.StringsSettingsGroup[source]¶
Bases:
objectSettings-section strings: the hub window title and category names (each category name also titles its own sub-window). See source for the full asset list.
- class bascenev1.classicassets.StringsSettingsNetTestingGroup[source]¶
Bases:
objectNetwork-testing window strings. See source for the full asset list.
- class bascenev1.classicassets.StringsSettingsPluginsGroup[source]¶
Bases:
objectPlugin-management strings. See source for the full asset list.
- auto_enable_new: LangStr¶
Checkbox auto-enabling newly-found plugins. English: "Auto Enable New Plugins"
- class bascenev1.classicassets.StringsSettingsTestingGroup[source]¶
Bases:
objectShared strings for the value-testing windows (net/VR testing subclasses). See source for the full asset list.
- class bascenev1.classicassets.StringsSettingsVrTestingGroup[source]¶
Bases:
objectVR-testing window strings. See source for the full asset list.
- class bascenev1.classicassets.StringsSoundtrackGroup[source]¶
Bases:
objectCustom-soundtrack editor strings: soundtrack list/edit/delete, music source picker, and playlist selection. See source for the full asset list.
- cant_delete_default: LangStr¶
Error when trying to delete the default soundtrack. English: "You can't delete the default soundtrack."
- cant_edit_default: LangStr¶
Error when trying to edit the default soundtrack. English: "Can't edit default soundtrack. Duplicate it or create a new one."
- cant_overwrite_default: LangStr¶
Error when trying to overwrite the default soundtrack. English: "Can't overwrite default soundtrack"
- cant_save_already_exists: LangStr¶
Error when saving a soundtrack whose name is already taken. English: "A soundtrack with that name already exists!"
- copy_of(*, name: str | LangStr) LangStr[source]¶
Auto-generated name for a duplicated soundtrack. English: "{name} Copy"
- default_game_music: LangStr¶
Placeholder label for an entry that plays the game's default music. English: "<default game music>"
- default_soundtrack_name: LangStr¶
Name of the built-in default soundtrack. English: "Default Soundtrack"
- delete_confirm(*, name: str | LangStr) LangStr[source]¶
Confirmation prompt before deleting a named soundtrack. English: "Delete soundtrack '{name}'?"
- delete_soundtrack: LangStr¶
Two-line button label to delete a soundtrack. English: "Delete Soundtrack"
- duplicate_soundtrack: LangStr¶
Two-line button label to duplicate a soundtrack. English: "Duplicate Soundtrack"
- error_playing_music(*, music: str | LangStr) LangStr[source]¶
Error message that a music file would not play. English: "Error playing music: {music}"
- fetching_itunes: LangStr¶
Status while loading Music-app playlists. English: "fetching Music App playlists..."
- music_volume_zero_warning: LangStr¶
Warning shown in the editor when music volume is muted. English: "Warning: music volume is set to 0"
- new_soundtrack: LangStr¶
Two-line button label to create a new soundtrack. English: "New Soundtrack"
- new_soundtrack_name(*, count: str | LangStr) LangStr[source]¶
Auto-generated default name for a newly-created soundtrack. English: "My Soundtrack {count}"
- no_music_files_in_folder: LangStr¶
Notice that a chosen folder holds no music. English: "Folder contains no music files."
- title: LangStr¶
Title of the soundtracks section; also labels the button leading there. English: "Soundtracks"
- use_default_game_music: LangStr¶
Music-source option: the built-in game music. English: "Default Game Music"
- use_itunes_playlist: LangStr¶
Music-source option: a playlist from the system Music app. English: "Music App Playlist"
- class bascenev1.classicassets.StringsStoreGroup[source]¶
Bases:
objectStore item name labels and shop entry points. See source for the full asset list.
- class bascenev1.classicassets.StringsTeamsGroup[source]¶
Bases:
objectDefault team names. Players can rename their teams, so these are the built-in defaults only; custom names are shown as-is and untranslated. See source for the full asset list.
- class bascenev1.classicassets.StringsTournamentEntryGroup[source]¶
Bases:
objectTournament-entry dialog: entry cost and watch-ad options. See source for the full asset list.
- class bascenev1.classicassets.StringsTournamentScoresGroup[source]¶
Bases:
objectTournament standings window strings. See source for the full asset list.
- class bascenev1.classicassets.StringsTutorialGroup[source]¶
Bases:
objectTutorial narration lines (the coach's spoken tips as you learn the controls) plus the skip-tutorial UI strings. See source for the full asset list.
- cpu_benchmark: LangStr¶
Notice shown while running the CPU-benchmark tutorial. English: "Running tutorial at ludicrous-speed (primarily tests CPU speed)"
- phrase02(*, app_name: str | LangStr) LangStr[source]¶
Tutorial: welcome line. English: "Welcome to {app_name}!"
- phrase03: LangStr¶
Tutorial: intro to control tips. English: "Here's a few tips for controlling your character:"
- phrase04(*, app_name: str | LangStr) LangStr[source]¶
Tutorial: physics intro. English: "Many things in {app_name} are PHYSICS based."
- phrase06: LangStr¶
Tutorial: punch damage explanation. English: "..damage is based on the speed of your fists."
- phrase07(*, name: str | LangStr) LangStr[source]¶
Tutorial: weak-punch explanation. English: "See? We weren't moving, so that barely hurt {name}."
- phrase08: LangStr¶
Tutorial: jump-and-spin tip. English: "Now let's jump and spin to get more speed."
- phrase12: LangStr¶
Tutorial: combined-move tip. English: "For extra-awesome punches, try running AND spinning."
- phrase13(*, name: str | LangStr) LangStr[source]¶
Tutorial: apology after a hard hit. English: "Whoops; sorry 'bout that {name}."
- phrase14(*, name: str | LangStr) LangStr[source]¶
Tutorial: pick-up-and-throw tip. English: "You can pick up and throw things such as flags.. or {name}."
- phrase20: LangStr¶
Tutorial: whiplash-throw tip. English: ""Whiplash" your bombs for even longer throws."
- phrase23: LangStr¶
Tutorial: cook-off-the-fuse tip. English: "Try "cooking off" the fuse for a second or two."
- phrase27: LangStr¶
Tutorial: parting motivational line. English: "Remember your training, and you WILL come back alive!"
- skip_confirm: LangStr¶
Confirmation prompt before skipping the tutorial. English: "Really skip the tutorial? Tap or press to confirm."
- skip_vote_count(*, count: str | LangStr, total: str | LangStr) LangStr[source]¶
Tutorial: skip-vote tally. English: "{count}/{total} skip votes"
- class bascenev1.classicassets.StringsUiGroup[source]¶
Bases:
objectGeneric UI vocabulary: short labels (buttons, dialog titles, joiners) shared across many UIs. Purpose-specific wording belongs elsewhere - see each entry's docs for what it is and is not. See source for the full asset list.
- exit_app_confirm(*, app_name: str | LangStr) LangStr[source]¶
Confirmation question for exiting the app. English: "Exit {app_name}?"
- game_center: LangStr¶
The Apple "Game Center" service name; byte-identical in every language. English: "Game Center"
- google_play: LangStr¶
The "Google Play" service name; byte-identical in every language. English: "Google Play"
- play: LangStr¶
General 'Play' action label; used for the main-menu Play button and the tournament-entry play button. English: "Play"
- quit_app_confirm(*, app_name: str | LangStr) LangStr[source]¶
Confirmation question for quitting the app (Mac wording). English: "Quit {app_name}?"
- class bascenev1.classicassets.StringsV2UpgradeGroup[source]¶
Bases:
objectDevice-account -> V2-account upgrade prompt. See source for the full asset list.
- class bascenev1.classicassets.StringsWatchGroup[source]¶
Bases:
objectWatch-section strings: replay browsing and playback UI. See source for the full asset list.
- delete_confirm(*, replay: str | LangStr) LangStr[source]¶
Confirmation before deleting a named replay. English: "Delete "{replay}"?"
- playback_speed(*, speed: str | LangStr) LangStr[source]¶
Label showing the current replay playback-speed multiplier (in-game replay controls and the watch section). English: "Playback Speed: {speed}"
- rename_replay(*, replay: str | LangStr) LangStr[source]¶
Prompt to rename a named replay. English: "Rename "{replay}" to:"
- rename_warning(*, replay: str | LangStr) LangStr[source]¶
Warning to rename a replay so it is not overwritten. English: "Rename "{replay}" after a game to keep it; otherwise it will be overwritten."
- replay_rename_error_already_exists: LangStr¶
Error message that a replay name is taken. English: "A replay with that name already exists."
- replay_rename_error_invalid: LangStr¶
Error when a replay rename name is bad. English: "Can't rename replay; invalid name."
- class bascenev1.classicassets.TexturesGroup[source]¶
Bases:
objectAll standard game textures (everything non-bootstrap). See source for the full asset list.
- bascenev1.classicassets.audio: AudioGroup = <bascenev1._assetref.AssetGroup object>¶
The
audiogroup - 412 assets (achievement,action_hero1,action_hero2,action_hero3,action_hero4, and 407 more). Full list in source.
- bascenev1.classicassets.meshes: MeshesGroup = <bascenev1._assetref.AssetGroup object>¶
The
meshesgroup - 390 assets (achievement_outline,action_hero_fore_arm,action_hero_hand,action_hero_head,action_hero_lower_leg, and 385 more). Full list in source.
- bascenev1.classicassets.strings: StringsGroup = <babase._language.LangStrDir object>¶
The
stringsgroup - 1036 strings (account,achievements,app_invite,characters,chest, and 1031 more). Full list in source.
- bascenev1.classicassets.textures: TexturesGroup = <bascenev1._assetref.AssetGroup object>¶
The
texturesgroup - 313 assets (achievement_boxer,achievement_cross_hair,achievement_dual_wielding,achievement_empty,achievement_flawless_victory, and 308 more). Full list in source.