cleaning up score screen names

This commit is contained in:
Eric Froemling 2020-04-15 00:52:54 -07:00
parent 71b77be103
commit b11bb26f51
46 changed files with 706 additions and 298 deletions

View File

@ -330,7 +330,9 @@
<w>cooldown</w>
<w>cooldowns</w>
<w>coopgame</w>
<w>coopjoin</w>
<w>coopjoinscreen</w>
<w>coopscore</w>
<w>coopscorescreen</w>
<w>coopsession</w>
<w>coords</w>
@ -447,6 +449,7 @@
<w>downmix</w>
<w>dpad</w>
<w>dpath</w>
<w>drawscore</w>
<w>drawscreen</w>
<w>dripity</w>
<w>dropbox</w>
@ -469,7 +472,9 @@
<w>dstvar</w>
<w>dtest</w>
<w>dtime</w>
<w>dualteamscore</w>
<w>dualteamscorescreen</w>
<w>dualteamsession</w>
<w>duckdns</w>
<w>dummymodule</w>
<w>dummyname</w>
@ -637,6 +642,7 @@
<w>freefly</w>
<w>freeforallendscreen</w>
<w>freeforallsession</w>
<w>freeforallvictory</w>
<w>freepik</w>
<w>freesound</w>
<w>froemling</w>
@ -1088,7 +1094,11 @@
<w>multiline</w>
<w>multiplayer</w>
<w>multiteamendscreen</w>
<w>multiteamjoin</w>
<w>multiteamjoinscreen</w>
<w>multiteamscore</w>
<w>multiteamsession</w>
<w>multiteamvictory</w>
<w>multithreaded</w>
<w>musicinfo</w>
<w>musicinfos</w>

View File

@ -16,6 +16,7 @@
"ba_data/python/ba/__pycache__/_coopgame.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_coopsession.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_dependency.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_dualteamsession.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_enums.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_error.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_freeforallsession.cpython-37.opt-1.pyc",
@ -33,6 +34,7 @@
"ba_data/python/ba/__pycache__/_messages.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_meta.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_modutils.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_multiteamsession.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_music.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_netutils.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_nodeactor.cpython-37.opt-1.pyc",
@ -44,9 +46,7 @@
"ba_data/python/ba/__pycache__/_stats.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_store.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_team.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_teambasesession.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_teamgame.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_teamssession.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_tips.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/_tournament.cpython-37.opt-1.pyc",
"ba_data/python/ba/__pycache__/deprecated.cpython-37.opt-1.pyc",
@ -66,6 +66,7 @@
"ba_data/python/ba/_coopgame.py",
"ba_data/python/ba/_coopsession.py",
"ba_data/python/ba/_dependency.py",
"ba_data/python/ba/_dualteamsession.py",
"ba_data/python/ba/_enums.py",
"ba_data/python/ba/_error.py",
"ba_data/python/ba/_freeforallsession.py",
@ -83,6 +84,7 @@
"ba_data/python/ba/_messages.py",
"ba_data/python/ba/_meta.py",
"ba_data/python/ba/_modutils.py",
"ba_data/python/ba/_multiteamsession.py",
"ba_data/python/ba/_music.py",
"ba_data/python/ba/_netutils.py",
"ba_data/python/ba/_nodeactor.py",
@ -94,9 +96,7 @@
"ba_data/python/ba/_stats.py",
"ba_data/python/ba/_store.py",
"ba_data/python/ba/_team.py",
"ba_data/python/ba/_teambasesession.py",
"ba_data/python/ba/_teamgame.py",
"ba_data/python/ba/_teamssession.py",
"ba_data/python/ba/_tips.py",
"ba_data/python/ba/_tournament.py",
"ba_data/python/ba/deprecated.py",
@ -118,22 +118,22 @@
"ba_data/python/bastd/__pycache__/tutorial.cpython-37.opt-1.pyc",
"ba_data/python/bastd/activity/__init__.py",
"ba_data/python/bastd/activity/__pycache__/__init__.cpython-37.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/coopjoinscreen.cpython-37.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/coopscorescreen.cpython-37.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/drawscreen.cpython-37.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/dualteamscorescreen.cpython-37.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/freeforallendscreen.cpython-37.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/multiteamendscreen.cpython-37.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/multiteamjoinscreen.cpython-37.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/teamsscorescreen.cpython-37.opt-1.pyc",
"ba_data/python/bastd/activity/coopjoinscreen.py",
"ba_data/python/bastd/activity/coopscorescreen.py",
"ba_data/python/bastd/activity/drawscreen.py",
"ba_data/python/bastd/activity/dualteamscorescreen.py",
"ba_data/python/bastd/activity/freeforallendscreen.py",
"ba_data/python/bastd/activity/multiteamendscreen.py",
"ba_data/python/bastd/activity/multiteamjoinscreen.py",
"ba_data/python/bastd/activity/teamsscorescreen.py",
"ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-37.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/coopscore.cpython-37.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/drawscore.cpython-37.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-37.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-37.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-37.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-37.opt-1.pyc",
"ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-37.opt-1.pyc",
"ba_data/python/bastd/activity/coopjoin.py",
"ba_data/python/bastd/activity/coopscore.py",
"ba_data/python/bastd/activity/drawscore.py",
"ba_data/python/bastd/activity/dualteamscore.py",
"ba_data/python/bastd/activity/freeforallvictory.py",
"ba_data/python/bastd/activity/multiteamjoin.py",
"ba_data/python/bastd/activity/multiteamscore.py",
"ba_data/python/bastd/activity/multiteamvictory.py",
"ba_data/python/bastd/actor/__init__.py",
"ba_data/python/bastd/actor/__pycache__/__init__.cpython-37.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/background.cpython-37.opt-1.pyc",
@ -141,6 +141,7 @@
"ba_data/python/bastd/actor/__pycache__/controlsguide.cpython-37.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/flag.cpython-37.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/image.cpython-37.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/multiteamvictory.cpython-37.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/onscreencountdown.cpython-37.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/onscreentimer.cpython-37.opt-1.pyc",
"ba_data/python/bastd/actor/__pycache__/playerspaz.cpython-37.opt-1.pyc",
@ -161,6 +162,7 @@
"ba_data/python/bastd/actor/controlsguide.py",
"ba_data/python/bastd/actor/flag.py",
"ba_data/python/bastd/actor/image.py",
"ba_data/python/bastd/actor/multiteamvictory.py",
"ba_data/python/bastd/actor/onscreencountdown.py",
"ba_data/python/bastd/actor/onscreentimer.py",
"ba_data/python/bastd/actor/playerspaz.py",

View File

@ -158,6 +158,7 @@ SCRIPT_TARGETS_PY_1 = \
build/ba_data/python/bacommon/__init__.py \
build/ba_data/python/bacommon/assets.py \
build/ba_data/python/bacommon/err.py \
build/ba_data/python/ba/_dualteamsession.py \
build/ba_data/python/ba/_gameactivity.py \
build/ba_data/python/ba/_apputils.py \
build/ba_data/python/ba/_coopsession.py \
@ -172,7 +173,6 @@ SCRIPT_TARGETS_PY_1 = \
build/ba_data/python/ba/_error.py \
build/ba_data/python/ba/_achievement.py \
build/ba_data/python/ba/_map.py \
build/ba_data/python/ba/_teambasesession.py \
build/ba_data/python/ba/_gameutils.py \
build/ba_data/python/ba/_activity.py \
build/ba_data/python/ba/deprecated.py \
@ -190,10 +190,10 @@ SCRIPT_TARGETS_PY_1 = \
build/ba_data/python/ba/_benchmark.py \
build/ba_data/python/ba/_tournament.py \
build/ba_data/python/ba/_messages.py \
build/ba_data/python/ba/_teamssession.py \
build/ba_data/python/ba/_freeforallsession.py \
build/ba_data/python/ba/_playlist.py \
build/ba_data/python/ba/_team.py \
build/ba_data/python/ba/_multiteamsession.py \
build/ba_data/python/ba/_actor.py \
build/ba_data/python/ba/_powerup.py \
build/ba_data/python/ba/_campaign.py \
@ -310,15 +310,15 @@ SCRIPT_TARGETS_PY_1 = \
build/ba_data/python/bastd/ui/store/browser.py \
build/ba_data/python/bastd/ui/store/button.py \
build/ba_data/python/bastd/ui/store/item.py \
build/ba_data/python/bastd/activity/freeforallendscreen.py \
build/ba_data/python/bastd/activity/coopjoin.py \
build/ba_data/python/bastd/activity/multiteamvictory.py \
build/ba_data/python/bastd/activity/dualteamscore.py \
build/ba_data/python/bastd/activity/drawscore.py \
build/ba_data/python/bastd/activity/__init__.py \
build/ba_data/python/bastd/activity/coopscorescreen.py \
build/ba_data/python/bastd/activity/dualteamscorescreen.py \
build/ba_data/python/bastd/activity/coopjoinscreen.py \
build/ba_data/python/bastd/activity/multiteamendscreen.py \
build/ba_data/python/bastd/activity/teamsscorescreen.py \
build/ba_data/python/bastd/activity/multiteamjoinscreen.py \
build/ba_data/python/bastd/activity/drawscreen.py \
build/ba_data/python/bastd/activity/freeforallvictory.py \
build/ba_data/python/bastd/activity/coopscore.py \
build/ba_data/python/bastd/activity/multiteamjoin.py \
build/ba_data/python/bastd/activity/multiteamscore.py \
build/ba_data/python/bastd/game/capturetheflag.py \
build/ba_data/python/bastd/game/targetpractice.py \
build/ba_data/python/bastd/game/ninjafight.py \
@ -362,6 +362,7 @@ SCRIPT_TARGETS_PY_1 = \
build/ba_data/python/bastd/actor/flag.py \
build/ba_data/python/bastd/actor/scoreboard.py \
build/ba_data/python/bastd/actor/popuptext.py \
build/ba_data/python/bastd/actor/multiteamvictory.py \
build/ba_data/python/bastd/actor/background.py \
build/ba_data/python/bastd/actor/__init__.py \
build/ba_data/python/bastd/actor/zoomtext.py \
@ -396,6 +397,7 @@ SCRIPT_TARGETS_PYC_1 = \
build/ba_data/python/bacommon/__pycache__/__init__.cpython-37.opt-1.pyc \
build/ba_data/python/bacommon/__pycache__/assets.cpython-37.opt-1.pyc \
build/ba_data/python/bacommon/__pycache__/err.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_dualteamsession.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_gameactivity.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_apputils.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_coopsession.cpython-37.opt-1.pyc \
@ -410,7 +412,6 @@ SCRIPT_TARGETS_PYC_1 = \
build/ba_data/python/ba/__pycache__/_error.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_achievement.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_map.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_teambasesession.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_gameutils.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_activity.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/deprecated.cpython-37.opt-1.pyc \
@ -428,10 +429,10 @@ SCRIPT_TARGETS_PYC_1 = \
build/ba_data/python/ba/__pycache__/_benchmark.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_tournament.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_messages.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_teamssession.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_freeforallsession.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_playlist.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_team.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_multiteamsession.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_actor.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_powerup.cpython-37.opt-1.pyc \
build/ba_data/python/ba/__pycache__/_campaign.cpython-37.opt-1.pyc \
@ -548,15 +549,15 @@ SCRIPT_TARGETS_PYC_1 = \
build/ba_data/python/bastd/ui/store/__pycache__/browser.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/ui/store/__pycache__/button.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/ui/store/__pycache__/item.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/activity/__pycache__/freeforallendscreen.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/activity/__pycache__/drawscore.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/activity/__pycache__/__init__.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/activity/__pycache__/coopscorescreen.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/activity/__pycache__/dualteamscorescreen.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/activity/__pycache__/coopjoinscreen.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/activity/__pycache__/multiteamendscreen.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/activity/__pycache__/teamsscorescreen.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/activity/__pycache__/multiteamjoinscreen.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/activity/__pycache__/drawscreen.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/activity/__pycache__/coopscore.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/game/__pycache__/capturetheflag.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/game/__pycache__/targetpractice.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/game/__pycache__/ninjafight.cpython-37.opt-1.pyc \
@ -600,6 +601,7 @@ SCRIPT_TARGETS_PYC_1 = \
build/ba_data/python/bastd/actor/__pycache__/flag.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/actor/__pycache__/scoreboard.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/actor/__pycache__/popuptext.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/actor/__pycache__/multiteamvictory.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/actor/__pycache__/background.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/actor/__pycache__/__init__.cpython-37.opt-1.pyc \
build/ba_data/python/bastd/actor/__pycache__/zoomtext.cpython-37.opt-1.pyc \
@ -710,6 +712,11 @@ build/ba_data/python/bacommon/__pycache__/err.cpython-37.opt-1.pyc: \
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/ba/__pycache__/_dualteamsession.cpython-37.opt-1.pyc: \
build/ba_data/python/ba/_dualteamsession.py
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/ba/__pycache__/_gameactivity.cpython-37.opt-1.pyc: \
build/ba_data/python/ba/_gameactivity.py
@echo Compiling script: $^
@ -780,11 +787,6 @@ build/ba_data/python/ba/__pycache__/_map.cpython-37.opt-1.pyc: \
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/ba/__pycache__/_teambasesession.cpython-37.opt-1.pyc: \
build/ba_data/python/ba/_teambasesession.py
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/ba/__pycache__/_gameutils.cpython-37.opt-1.pyc: \
build/ba_data/python/ba/_gameutils.py
@echo Compiling script: $^
@ -870,11 +872,6 @@ build/ba_data/python/ba/__pycache__/_messages.cpython-37.opt-1.pyc: \
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/ba/__pycache__/_teamssession.cpython-37.opt-1.pyc: \
build/ba_data/python/ba/_teamssession.py
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/ba/__pycache__/_freeforallsession.cpython-37.opt-1.pyc: \
build/ba_data/python/ba/_freeforallsession.py
@echo Compiling script: $^
@ -890,6 +887,11 @@ build/ba_data/python/ba/__pycache__/_team.cpython-37.opt-1.pyc: \
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/ba/__pycache__/_multiteamsession.cpython-37.opt-1.pyc: \
build/ba_data/python/ba/_multiteamsession.py
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/ba/__pycache__/_actor.cpython-37.opt-1.pyc: \
build/ba_data/python/ba/_actor.py
@echo Compiling script: $^
@ -1470,8 +1472,23 @@ build/ba_data/python/bastd/ui/store/__pycache__/item.cpython-37.opt-1.pyc: \
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/bastd/activity/__pycache__/freeforallendscreen.cpython-37.opt-1.pyc: \
build/ba_data/python/bastd/activity/freeforallendscreen.py
build/ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-37.opt-1.pyc: \
build/ba_data/python/bastd/activity/coopjoin.py
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-37.opt-1.pyc: \
build/ba_data/python/bastd/activity/multiteamvictory.py
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-37.opt-1.pyc: \
build/ba_data/python/bastd/activity/dualteamscore.py
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/bastd/activity/__pycache__/drawscore.cpython-37.opt-1.pyc: \
build/ba_data/python/bastd/activity/drawscore.py
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
@ -1480,38 +1497,23 @@ build/ba_data/python/bastd/activity/__pycache__/__init__.cpython-37.opt-1.pyc: \
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/bastd/activity/__pycache__/coopscorescreen.cpython-37.opt-1.pyc: \
build/ba_data/python/bastd/activity/coopscorescreen.py
build/ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-37.opt-1.pyc: \
build/ba_data/python/bastd/activity/freeforallvictory.py
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/bastd/activity/__pycache__/dualteamscorescreen.cpython-37.opt-1.pyc: \
build/ba_data/python/bastd/activity/dualteamscorescreen.py
build/ba_data/python/bastd/activity/__pycache__/coopscore.cpython-37.opt-1.pyc: \
build/ba_data/python/bastd/activity/coopscore.py
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/bastd/activity/__pycache__/coopjoinscreen.cpython-37.opt-1.pyc: \
build/ba_data/python/bastd/activity/coopjoinscreen.py
build/ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-37.opt-1.pyc: \
build/ba_data/python/bastd/activity/multiteamjoin.py
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/bastd/activity/__pycache__/multiteamendscreen.cpython-37.opt-1.pyc: \
build/ba_data/python/bastd/activity/multiteamendscreen.py
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/bastd/activity/__pycache__/teamsscorescreen.cpython-37.opt-1.pyc: \
build/ba_data/python/bastd/activity/teamsscorescreen.py
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/bastd/activity/__pycache__/multiteamjoinscreen.cpython-37.opt-1.pyc: \
build/ba_data/python/bastd/activity/multiteamjoinscreen.py
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/bastd/activity/__pycache__/drawscreen.cpython-37.opt-1.pyc: \
build/ba_data/python/bastd/activity/drawscreen.py
build/ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-37.opt-1.pyc: \
build/ba_data/python/bastd/activity/multiteamscore.py
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
@ -1730,6 +1732,11 @@ build/ba_data/python/bastd/actor/__pycache__/popuptext.cpython-37.opt-1.pyc: \
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/bastd/actor/__pycache__/multiteamvictory.cpython-37.opt-1.pyc: \
build/ba_data/python/bastd/actor/multiteamvictory.py
@echo Compiling script: $^
@rm -rf $@ && $(TOOLS_DIR)/snippets compile_python_files $^ && chmod 444 $@
build/ba_data/python/bastd/actor/__pycache__/background.cpython-37.opt-1.pyc: \
build/ba_data/python/bastd/actor/background.py
@echo Compiling script: $^

View File

@ -62,7 +62,7 @@ from ba._session import Session
from ba._stats import PlayerScoredMessage, PlayerRecord, Stats
from ba._team import Team
from ba._teamgame import TeamGameActivity
from ba._teamssession import TeamsSession
from ba._dualteamsession import DualTeamSession
from ba._achievement import Achievement
from ba._appconfig import AppConfig
from ba._appdelegate import AppDelegate
@ -82,7 +82,7 @@ from ba._messages import (OutOfBoundsMessage, DeathType, DieMessage,
CelebrateMessage)
from ba._music import setmusic, MusicPlayer, MusicType, MusicPlayMode
from ba._powerup import PowerupMessage, PowerupAcceptMessage
from ba._teambasesession import TeamBaseSession
from ba._multiteamsession import MultiTeamSession
from ba.ui import Window, UIController, uicleanupcheck
app: App

View File

@ -62,7 +62,7 @@ class EndSessionActivity(Activity):
call_after_ad(Call(_ba.new_host_session, MainMenuSession))
class JoiningActivity(Activity):
class JoinActivity(Activity):
"""Standard activity for waiting for players to join.
It shows tips and other info and waits for all players to check ready.

View File

@ -109,7 +109,7 @@ def stop_stress_test() -> None:
def start_stress_test(args: Dict[str, Any]) -> None:
"""(internal)"""
from ba._general import Call
from ba._teamssession import TeamsSession
from ba._dualteamsession import DualTeamSession
from ba._freeforallsession import FreeForAllSession
from ba._enums import TimeType, TimeFormat
bs_config = _ba.app.config
@ -125,7 +125,8 @@ def start_stress_test(args: Dict[str, Any]) -> None:
bs_config['Team Tournament Playlist Selection'] = args['playlist_name']
bs_config['Team Tournament Playlist Randomize'] = 1
_ba.timer(1.0,
Call(_ba.pushcall, Call(_ba.new_host_session, TeamsSession)),
Call(_ba.pushcall, Call(_ba.new_host_session,
DualTeamSession)),
timetype=TimeType.REAL)
else:
bs_config['Free-for-All Playlist Selection'] = args['playlist_name']

View File

@ -48,7 +48,7 @@ class CoopSession(Session):
"""Instantiate a co-op mode session."""
# pylint: disable=cyclic-import
from ba._campaign import get_campaign
from bastd.activity.coopjoinscreen import CoopJoiningActivity
from bastd.activity.coopjoin import CoopJoinActivity
_ba.increment_analytics_count('Co-op session start')
@ -100,7 +100,7 @@ class CoopSession(Session):
self._custom_menu_ui: List[Dict[str, Any]] = []
# Start our joining screen.
self.set_activity(_ba.new_activity(CoopJoiningActivity))
self.set_activity(_ba.new_activity(CoopJoinActivity))
self._next_game_instance: Optional[ba.GameActivity] = None
self._next_game_name: Optional[str] = None
@ -249,13 +249,13 @@ class CoopSession(Session):
# pylint: disable=too-many-locals
# pylint: disable=too-many-statements
# pylint: disable=cyclic-import
from ba._activitytypes import JoiningActivity, TransitionActivity
from ba._activitytypes import JoinActivity, TransitionActivity
from ba._lang import Lstr
from ba._general import WeakCall
from ba._coopgame import CoopGameActivity
from ba._gameresults import TeamGameResults
from bastd.tutorial import TutorialActivity
from bastd.activity.coopscorescreen import CoopScoreScreen
from bastd.activity.coopscore import CoopScoreScreen
app = _ba.app
@ -279,9 +279,8 @@ class CoopSession(Session):
# If we're in a between-round activity or a restart-activity,
# hop into a round.
if (isinstance(
activity,
(JoiningActivity, CoopScoreScreen, TransitionActivity))):
if (isinstance(activity,
(JoinActivity, CoopScoreScreen, TransitionActivity))):
if outcome == 'next_level':
if self._next_game_instance is None:
@ -295,7 +294,7 @@ class CoopSession(Session):
# Special case: if we're coming from a joining-activity
# and will be going into onslaught-training, show the
# tutorial first.
if (isinstance(activity, JoiningActivity)
if (isinstance(activity, JoinActivity)
and self.campaign_state['level'] == 'Onslaught Training'
and not app.kiosk_mode):
if self._tutorial_activity is None:

View File

@ -24,13 +24,13 @@ from __future__ import annotations
from typing import TYPE_CHECKING
import _ba
from ba import _teambasesession
from ba import _multiteamsession
if TYPE_CHECKING:
import ba
class TeamsSession(_teambasesession.TeamBaseSession):
class DualTeamSession(_multiteamsession.MultiTeamSession):
"""ba.Session type for teams mode games.
Category: Gameplay Classes
@ -46,15 +46,16 @@ class TeamsSession(_teambasesession.TeamBaseSession):
def _switch_to_score_screen(self, results: ba.TeamGameResults) -> None:
# pylint: disable=cyclic-import
from bastd.activity import drawscreen
from bastd.activity import dualteamscorescreen
from bastd.activity import multiteamendscreen
from bastd.activity.drawscore import DrawScoreScreenActivity
from bastd.activity.dualteamscore import (
TeamVictoryScoreScreenActivity)
from bastd.activity.multiteamvictory import (
TeamSeriesVictoryScoreScreenActivity)
winners = results.get_winners()
# If everyone has the same score, call it a draw.
if len(winners) < 2:
self.set_activity(
_ba.new_activity(drawscreen.DrawScoreScreenActivity))
self.set_activity(_ba.new_activity(DrawScoreScreenActivity))
else:
winner = winners[0].teams[0]
winner.sessiondata['score'] += 1
@ -63,12 +64,9 @@ class TeamsSession(_teambasesession.TeamBaseSession):
if winner.sessiondata['score'] >= (self._series_length -
1) / 2 + 1:
self.set_activity(
_ba.new_activity(
multiteamendscreen.
TeamSeriesVictoryScoreScreenActivity,
{'winner': winner}))
_ba.new_activity(TeamSeriesVictoryScoreScreenActivity,
{'winner': winner}))
else:
self.set_activity(
_ba.new_activity(
dualteamscorescreen.TeamVictoryScoreScreenActivity,
{'winner': winner}))
_ba.new_activity(TeamVictoryScoreScreenActivity,
{'winner': winner}))

View File

@ -25,14 +25,14 @@ from __future__ import annotations
from typing import TYPE_CHECKING
import _ba
from ba._teambasesession import TeamBaseSession
from ba._multiteamsession import MultiTeamSession
if TYPE_CHECKING:
from typing import Dict
import ba
class FreeForAllSession(TeamBaseSession):
class FreeForAllSession(MultiTeamSession):
"""ba.Session type for free-for-all mode games.
Category: Gameplay Classes
@ -70,10 +70,10 @@ class FreeForAllSession(TeamBaseSession):
def _switch_to_score_screen(self, results: ba.TeamGameResults) -> None:
# pylint: disable=cyclic-import
from bastd.activity.drawscreen import DrawScoreScreenActivity
from bastd.activity.multiteamendscreen import (
from bastd.activity.drawscore import DrawScoreScreenActivity
from bastd.activity.multiteamvictory import (
TeamSeriesVictoryScoreScreenActivity)
from bastd.activity.freeforallendscreen import (
from bastd.activity.freeforallvictory import (
FreeForAllVictoryScoreScreenActivity)
winners = results.get_winners()

View File

@ -289,10 +289,10 @@ class GameActivity(Activity):
@classmethod
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
"""Return whether this game supports the provided Session type."""
from ba._teambasesession import TeamBaseSession
from ba._multiteamsession import MultiTeamSession
# By default, games support any versus mode
return issubclass(sessiontype, TeamBaseSession)
return issubclass(sessiontype, MultiTeamSession)
def __init__(self, settings: Dict[str, Any]):
"""Instantiate the Activity."""
@ -550,7 +550,7 @@ class GameActivity(Activity):
def _game_begin_analytics(self) -> None:
"""Update analytics events for the start of the game."""
# pylint: disable=too-many-branches
from ba._teamssession import TeamsSession
from ba._dualteamsession import DualTeamSession
from ba._freeforallsession import FreeForAllSession
from ba._coopsession import CoopSession
session = self.session
@ -573,7 +573,7 @@ class GameActivity(Activity):
elif len(self.players) >= 4:
_ba.increment_analytics_count(
'Co-op round start 4+ human players')
elif isinstance(session, TeamsSession):
elif isinstance(session, DualTeamSession):
_ba.set_analytics_screen('Teams Game: ' + self.get_name())
_ba.increment_analytics_count('Teams round start')
if len(self.players) == 1:

View File

@ -36,8 +36,8 @@ DEFAULT_TEAM_COLORS = ((0.1, 0.25, 1.0), (1.0, 0.25, 0.2))
DEFAULT_TEAM_NAMES = ("Blue", "Red")
class TeamBaseSession(Session):
"""Common base class for ba.TeamsSession and ba.FreeForAllSession.
class MultiTeamSession(Session):
"""Common base class for ba.DualTeamSession and ba.FreeForAllSession.
Category: Gameplay Classes
@ -54,7 +54,7 @@ class TeamBaseSession(Session):
"""Set up playlists and launches a ba.Activity to accept joiners."""
# pylint: disable=cyclic-import
from ba import _playlist
from bastd.activity import multiteamjoinscreen
from bastd.activity.multiteamjoin import MultiTeamJoinActivity
app = _ba.app
cfg = app.config
@ -133,8 +133,7 @@ class TeamBaseSession(Session):
self._instantiate_next_game()
# Start in our custom join screen.
self.set_activity(
_ba.new_activity(multiteamjoinscreen.TeamJoiningActivity))
self.set_activity(_ba.new_activity(MultiTeamJoinActivity))
def get_ffa_series_length(self) -> int:
"""Return free-for-all series length."""
@ -174,7 +173,7 @@ class TeamBaseSession(Session):
# pylint: disable=cyclic-import
from ba import _error
from bastd.tutorial import TutorialActivity
from bastd.activity.multiteamendscreen import (
from bastd.activity.multiteamvictory import (
TeamSeriesVictoryScoreScreenActivity)
from ba import _activitytypes
@ -195,7 +194,7 @@ class TeamBaseSession(Session):
# into a round.
elif isinstance(
activity,
(_activitytypes.JoiningActivity, _activitytypes.TransitionActivity,
(_activitytypes.JoinActivity, _activitytypes.TransitionActivity,
_activitytypes.ScoreScreenActivity)):
# If we're coming from a series-end activity, reset scores.

View File

@ -143,7 +143,7 @@ def launch_server_session() -> None:
"""Kick off a host-session based on the current server config."""
from ba._netutils import serverget
from ba import _freeforallsession
from ba import _teamssession
from ba import _dualteamsession
app = _ba.app
servercfg = copy.deepcopy(app.server_config)
appcfg = app.config
@ -155,7 +155,7 @@ def launch_server_session() -> None:
if session_type_name == 'ffa':
sessiontype = _freeforallsession.FreeForAllSession
elif session_type_name == 'teams':
sessiontype = _teamssession.TeamsSession
sessiontype = _dualteamsession.DualTeamSession
else:
raise Exception('invalid session_type value: ' + session_type_name)

View File

@ -38,7 +38,7 @@ class Session:
category: Gameplay Classes
Examples of sessions are ba.FreeForAllSession, ba.TeamsSession, and
Examples of sessions are ba.FreeForAllSession, ba.DualTeamSession, and
ba.CoopSession.
A Session is responsible for wrangling and transitioning between various

View File

@ -28,7 +28,7 @@ import _ba
from ba._freeforallsession import FreeForAllSession
from ba._gameactivity import GameActivity
from ba._gameresults import TeamGameResults
from ba._teamssession import TeamsSession
from ba._dualteamsession import DualTeamSession
if TYPE_CHECKING:
from typing import Any, Dict, Type, Sequence
@ -49,10 +49,10 @@ class TeamGameActivity(GameActivity):
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
"""
Class method override;
returns True for ba.TeamsSessions and ba.FreeForAllSessions;
returns True for ba.DualTeamSessions and ba.FreeForAllSessions;
False otherwise.
"""
return (issubclass(sessiontype, TeamsSession)
return (issubclass(sessiontype, DualTeamSession)
or issubclass(sessiontype, FreeForAllSession))
def __init__(self, settings: Dict[str, Any]):
@ -95,7 +95,7 @@ class TeamGameActivity(GameActivity):
if len(self.players) >= 2:
from ba import _achievement
_achievement.award_local_achievement('Free Loader')
elif isinstance(self.session, TeamsSession):
elif isinstance(self.session, DualTeamSession):
if len(self.players) >= 4:
from ba import _achievement
_achievement.award_local_achievement('Team Player')
@ -116,7 +116,7 @@ class TeamGameActivity(GameActivity):
"""
if position is None:
# In teams-mode get our team-start-location.
if isinstance(self.session, TeamsSession):
if isinstance(self.session, DualTeamSession):
position = (self.map.get_start_position(player.team.get_id()))
else:
# Otherwise do free-for-all spawn locations.
@ -137,7 +137,7 @@ class TeamGameActivity(GameActivity):
"""
# pylint: disable=arguments-differ
from ba._coopsession import CoopSession
from ba._teambasesession import TeamBaseSession
from ba._multiteamsession import MultiTeamSession
from ba._general import Call
# Announce win (but only for the first finish() call)
@ -148,7 +148,7 @@ class TeamGameActivity(GameActivity):
super().end(results, delay=2.0 + announce_delay, force=force)
# Need to do this *after* end end call so that results is valid.
assert isinstance(results, TeamGameResults)
if do_announce and isinstance(session, TeamBaseSession):
if do_announce and isinstance(session, MultiTeamSession):
session.announce_game_results(
self,
results,

View File

@ -40,7 +40,7 @@ from ba._account import (on_account_state_changed,
ensure_have_account_player_profile,
get_purchased_icons, get_cached_league_rank_data,
get_league_rank_points, cache_league_rank_data)
from ba._activitytypes import JoiningActivity, ScoreScreenActivity
from ba._activitytypes import JoinActivity, ScoreScreenActivity
from ba._achievement import (get_achievement, set_completed_achievements,
display_achievement_banner,
get_achievements_for_coop_level)
@ -52,7 +52,7 @@ from ba._campaign import get_campaign
from ba._messages import PlayerProfilesChangedMessage
from ba._meta import get_game_types
from ba._modutils import show_user_scripts
from ba._teambasesession import DEFAULT_TEAM_COLORS, DEFAULT_TEAM_NAMES
from ba._multiteamsession import DEFAULT_TEAM_COLORS, DEFAULT_TEAM_NAMES
from ba._music import (have_music_player, music_volume_changed, do_play_music,
get_soundtrack_entry_name, get_soundtrack_entry_type,
get_music_player, set_music_play_mode,

View File

@ -26,13 +26,13 @@ from typing import TYPE_CHECKING
import _ba
import ba
from ba.internal import JoiningActivity
from ba.internal import JoinActivity
if TYPE_CHECKING:
from typing import Any, Dict, List, Optional, Sequence, Union
class CoopJoiningActivity(JoiningActivity):
class CoopJoinActivity(JoinActivity):
"""Join-screen for co-op mode."""
def __init__(self, settings: Dict[str, Any]):

View File

@ -25,13 +25,13 @@ from __future__ import annotations
from typing import TYPE_CHECKING
import ba
from bastd.activity.teamsscorescreen import TeamsScoreScreenActivity
from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity
if TYPE_CHECKING:
from typing import Any, Dict
class DrawScoreScreenActivity(TeamsScoreScreenActivity):
class DrawScoreScreenActivity(MultiTeamScoreScreenActivity):
"""Score screen shown after a draw."""
def __init__(self, settings: Dict[str, Any]):

View File

@ -25,14 +25,14 @@ from __future__ import annotations
from typing import TYPE_CHECKING
import ba
from bastd.activity.teamsscorescreen import TeamsScoreScreenActivity
from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity
from bastd.actor.zoomtext import ZoomText
if TYPE_CHECKING:
from typing import Any, Dict
class TeamVictoryScoreScreenActivity(TeamsScoreScreenActivity):
class TeamVictoryScoreScreenActivity(MultiTeamScoreScreenActivity):
"""Scorescreen between rounds of a dual-team session."""
def __init__(self, settings: Dict[str, Any]):
@ -52,7 +52,7 @@ class TeamVictoryScoreScreenActivity(TeamsScoreScreenActivity):
# Usually we say 'Best of 7', but if the language prefers we can say
# 'First to 4'.
session = self.session
assert isinstance(session, ba.TeamBaseSession)
assert isinstance(session, ba.MultiTeamSession)
if get_resource('bestOfUseFirstToInstead'):
best_txt = ba.Lstr(resource='firstToSeriesText',
subs=[('${COUNT}',

View File

@ -25,14 +25,14 @@ from __future__ import annotations
from typing import TYPE_CHECKING
import ba
from bastd.activity.teamsscorescreen import TeamsScoreScreenActivity
from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity
if TYPE_CHECKING:
from typing import Any, Dict, Optional, Set
class FreeForAllVictoryScoreScreenActivity(TeamsScoreScreenActivity):
"""Score screen shown at the end of a free-for-all series."""
class FreeForAllVictoryScoreScreenActivity(MultiTeamScoreScreenActivity):
"""Score screen shown at after free-for-all rounds."""
def __init__(self, settings: Dict[str, Any]):
super().__init__(settings=settings)

View File

@ -25,14 +25,14 @@ from __future__ import annotations
from typing import TYPE_CHECKING
import ba
from ba.internal import JoiningActivity
from ba.internal import JoinActivity
from bastd.actor.text import Text
if TYPE_CHECKING:
from typing import Any, Dict, Optional
class TeamJoiningActivity(JoiningActivity):
class MultiTeamJoinActivity(JoinActivity):
"""Join screen for teams sessions."""
def __init__(self, settings: Dict[str, Any]):
@ -41,12 +41,12 @@ class TeamJoiningActivity(JoiningActivity):
def on_transition_in(self) -> None:
from bastd.actor.controlsguide import ControlsGuide
from ba import TeamsSession
from ba import DualTeamSession
super().on_transition_in()
ControlsGuide(delay=1.0).autoretain()
session = self.session
assert isinstance(session, ba.TeamBaseSession)
assert isinstance(session, ba.MultiTeamSession)
# Show info about the next up game.
self._next_up_text = Text(ba.Lstr(
@ -65,7 +65,7 @@ class TeamJoiningActivity(JoiningActivity):
# In teams mode, show our two team names.
# FIXME: Lobby should handle this.
if isinstance(ba.getsession(), TeamsSession):
if isinstance(ba.getsession(), DualTeamSession):
team_names = [team.name for team in ba.getsession().teams]
team_colors = [
tuple(team.color) + (0.5, ) for team in ba.getsession().teams

View File

@ -32,7 +32,7 @@ if TYPE_CHECKING:
from ba import PlayerRecord
class TeamsScoreScreenActivity(ScoreScreenActivity):
class MultiTeamScoreScreenActivity(ScoreScreenActivity):
"""Base class for score screens."""
def __init__(self, settings: Dict[str, Any]):
@ -46,7 +46,7 @@ class TeamsScoreScreenActivity(ScoreScreenActivity):
from bastd.actor.text import Text
super().on_begin()
session = self.session
if self._show_up_next and isinstance(session, ba.TeamBaseSession):
if self._show_up_next and isinstance(session, ba.MultiTeamSession):
txt = ba.Lstr(value='${A} ${B}',
subs=[
('${A}',
@ -165,7 +165,7 @@ class TeamsScoreScreenActivity(ScoreScreenActivity):
transition_delay=tdelay).autoretain()
session = self.session
assert isinstance(session, ba.TeamBaseSession)
assert isinstance(session, ba.MultiTeamSession)
tval = ba.Lstr(resource='gameLeadersText',
subs=[('${COUNT}', str(session.get_game_number()))])
_txt(180,

View File

@ -25,13 +25,13 @@ from __future__ import annotations
from typing import TYPE_CHECKING
import ba
from bastd.activity.teamsscorescreen import TeamsScoreScreenActivity
from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity
if TYPE_CHECKING:
from typing import Any, Dict, List, Tuple, Optional
class TeamSeriesVictoryScoreScreenActivity(TeamsScoreScreenActivity):
class TeamSeriesVictoryScoreScreenActivity(MultiTeamScoreScreenActivity):
"""Final score screen for a team series."""
def __init__(self, settings: Dict[str, Any]):
@ -104,7 +104,7 @@ class TeamSeriesVictoryScoreScreenActivity(TeamsScoreScreenActivity):
str(session.get_ffa_series_length()))]))
])
else:
assert isinstance(session, ba.TeamBaseSession)
assert isinstance(session, ba.MultiTeamSession)
# Some languages may prefer to always show 'first to X' instead of
# 'best of X'.

View File

@ -0,0 +1,392 @@
# Copyright (c) 2011-2020 Eric Froemling
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
# -----------------------------------------------------------------------------
"""Functionality related to the final screen in multi-teams sessions."""
from __future__ import annotations
from typing import TYPE_CHECKING
import ba
from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity
if TYPE_CHECKING:
from typing import Any, Dict, List, Tuple, Optional
class TeamSeriesVictoryScoreScreenActivity(MultiTeamScoreScreenActivity):
"""Final score screen for a team series."""
def __init__(self, settings: Dict[str, Any]):
super().__init__(settings=settings)
self._min_view_time = 15.0
self._is_ffa = isinstance(self.session, ba.FreeForAllSession)
self._allow_server_restart = True
self._tips_text = None
def on_transition_in(self) -> None:
# We don't yet want music and whatnot...
self.default_music = None
self._default_show_tips = False
super().on_transition_in()
def on_begin(self) -> None:
# pylint: disable=too-many-branches
# pylint: disable=too-many-locals
# pylint: disable=too-many-statements
from bastd.actor.text import Text
from bastd.actor.image import Image
from ba.deprecated import get_resource
ba.set_analytics_screen('FreeForAll Series Victory Screen' if self.
_is_ffa else 'Teams Series Victory Screen')
if ba.app.interface_type == 'large':
sval = ba.Lstr(resource='pressAnyKeyButtonPlayAgainText')
else:
sval = ba.Lstr(resource='pressAnyButtonPlayAgainText')
self._show_up_next = False
self._custom_continue_message = sval
super().on_begin()
winning_team = self.settings['winner']
# Pause a moment before playing victory music.
ba.timer(0.6, ba.WeakCall(self._play_victory_music))
ba.timer(4.4, ba.WeakCall(self._show_winner, self.settings['winner']))
ba.timer(4.6, ba.Call(ba.playsound, self._score_display_sound))
# Score / Name / Player-record.
player_entries: List[Tuple[int, str, ba.PlayerRecord]] = []
# Note: for ffa, exclude players who haven't entered the game yet.
if self._is_ffa:
for _pkey, prec in self.stats.get_records().items():
if prec.player.in_game:
player_entries.append(
(prec.player.team.sessiondata['score'],
prec.get_name(full=True), prec))
player_entries.sort(reverse=True, key=lambda x: x[0])
else:
for _pkey, prec in self.stats.get_records().items():
player_entries.append((prec.score, prec.name_full, prec))
player_entries.sort(reverse=True, key=lambda x: x[0])
ts_height = 300.0
ts_h_offs = -390.0
tval = 6.4
t_incr = 0.12
always_use_first_to = get_resource('bestOfUseFirstToInstead')
session = self.session
if self._is_ffa:
assert isinstance(session, ba.FreeForAllSession)
txt = ba.Lstr(
value='${A}:',
subs=[('${A}',
ba.Lstr(resource='firstToFinalText',
subs=[('${COUNT}',
str(session.get_ffa_series_length()))]))
])
else:
assert isinstance(session, ba.MultiTeamSession)
# Some languages may prefer to always show 'first to X' instead of
# 'best of X'.
# FIXME: This will affect all clients connected to us even if
# they're not using this language. Should try to come up
# with a wording that works everywhere.
if always_use_first_to:
txt = ba.Lstr(
value='${A}:',
subs=[
('${A}',
ba.Lstr(resource='firstToFinalText',
subs=[
('${COUNT}',
str(session.get_series_length() / 2 + 1))
]))
])
else:
txt = ba.Lstr(
value='${A}:',
subs=[('${A}',
ba.Lstr(resource='bestOfFinalText',
subs=[('${COUNT}',
str(session.get_series_length()))]))
])
Text(txt,
v_align=Text.VAlign.CENTER,
maxwidth=300,
color=(0.5, 0.5, 0.5, 1.0),
position=(0, 220),
scale=1.2,
transition=Text.Transition.IN_TOP_SLOW,
h_align=Text.HAlign.CENTER,
transition_delay=t_incr * 4).autoretain()
win_score = (session.get_series_length() - 1) / 2 + 1
lose_score = 0
for team in self.teams:
if team.sessiondata['score'] != win_score:
lose_score = team.sessiondata['score']
if not self._is_ffa:
Text(ba.Lstr(resource='gamesToText',
subs=[('${WINCOUNT}', str(win_score)),
('${LOSECOUNT}', str(lose_score))]),
color=(0.5, 0.5, 0.5, 1.0),
maxwidth=160,
v_align=Text.VAlign.CENTER,
position=(0, -215),
scale=1.8,
transition=Text.Transition.IN_LEFT,
h_align=Text.HAlign.CENTER,
transition_delay=4.8 + t_incr * 4).autoretain()
if self._is_ffa:
v_extra = 120
else:
v_extra = 0
mvp: Optional[ba.PlayerRecord] = None
mvp_name: Optional[str] = None
# Show game MVP.
if not self._is_ffa:
mvp, mvp_name = None, None
for entry in player_entries:
if entry[2].team == winning_team:
mvp = entry[2]
mvp_name = entry[1]
break
if mvp is not None:
Text(ba.Lstr(resource='mostValuablePlayerText'),
color=(0.5, 0.5, 0.5, 1.0),
v_align=Text.VAlign.CENTER,
maxwidth=300,
position=(180, ts_height / 2 + 15),
transition=Text.Transition.IN_LEFT,
h_align=Text.HAlign.LEFT,
transition_delay=tval).autoretain()
tval += 4 * t_incr
Image(mvp.get_icon(),
position=(230, ts_height / 2 - 55 + 14 - 5),
scale=(70, 70),
transition=Image.Transition.IN_LEFT,
transition_delay=tval).autoretain()
Text(ba.Lstr(value=mvp_name),
position=(280, ts_height / 2 - 55 + 15 - 5),
h_align=Text.HAlign.LEFT,
v_align=Text.VAlign.CENTER,
maxwidth=170,
scale=1.3,
color=ba.safecolor(mvp.team.color + (1, )),
transition=Text.Transition.IN_LEFT,
transition_delay=tval).autoretain()
tval += 4 * t_incr
# Most violent.
most_kills = 0
for entry in player_entries:
if entry[2].kill_count >= most_kills:
mvp = entry[2]
mvp_name = entry[1]
most_kills = entry[2].kill_count
if mvp is not None:
Text(ba.Lstr(resource='mostViolentPlayerText'),
color=(0.5, 0.5, 0.5, 1.0),
v_align=Text.VAlign.CENTER,
maxwidth=300,
position=(180, ts_height / 2 - 150 + v_extra + 15),
transition=Text.Transition.IN_LEFT,
h_align=Text.HAlign.LEFT,
transition_delay=tval).autoretain()
Text(ba.Lstr(value='(${A})',
subs=[('${A}',
ba.Lstr(resource='killsTallyText',
subs=[('${COUNT}', str(most_kills))]))
]),
position=(260, ts_height / 2 - 150 - 15 + v_extra),
color=(0.3, 0.3, 0.3, 1.0),
scale=0.6,
h_align=Text.HAlign.LEFT,
transition=Text.Transition.IN_LEFT,
transition_delay=tval).autoretain()
tval += 4 * t_incr
Image(mvp.get_icon(),
position=(233, ts_height / 2 - 150 - 30 - 46 + 25 + v_extra),
scale=(50, 50),
transition=Image.Transition.IN_LEFT,
transition_delay=tval).autoretain()
Text(ba.Lstr(value=mvp_name),
position=(270, ts_height / 2 - 150 - 30 - 36 + v_extra + 15),
h_align=Text.HAlign.LEFT,
v_align=Text.VAlign.CENTER,
maxwidth=180,
color=ba.safecolor(mvp.team.color + (1, )),
transition=Text.Transition.IN_LEFT,
transition_delay=tval).autoretain()
tval += 4 * t_incr
# Most killed.
most_killed = 0
mkp, mkp_name = None, None
for entry in player_entries:
if entry[2].killed_count >= most_killed:
mkp = entry[2]
mkp_name = entry[1]
most_killed = entry[2].killed_count
if mkp is not None:
Text(ba.Lstr(resource='mostViolatedPlayerText'),
color=(0.5, 0.5, 0.5, 1.0),
v_align=Text.VAlign.CENTER,
maxwidth=300,
position=(180, ts_height / 2 - 300 + v_extra + 15),
transition=Text.Transition.IN_LEFT,
h_align=Text.HAlign.LEFT,
transition_delay=tval).autoretain()
Text(ba.Lstr(value='(${A})',
subs=[('${A}',
ba.Lstr(resource='deathsTallyText',
subs=[('${COUNT}', str(most_killed))]))
]),
position=(260, ts_height / 2 - 300 - 15 + v_extra),
h_align=Text.HAlign.LEFT,
scale=0.6,
color=(0.3, 0.3, 0.3, 1.0),
transition=Text.Transition.IN_LEFT,
transition_delay=tval).autoretain()
tval += 4 * t_incr
Image(mkp.get_icon(),
position=(233, ts_height / 2 - 300 - 30 - 46 + 25 + v_extra),
scale=(50, 50),
transition=Image.Transition.IN_LEFT,
transition_delay=tval).autoretain()
Text(ba.Lstr(value=mkp_name),
position=(270, ts_height / 2 - 300 - 30 - 36 + v_extra + 15),
h_align=Text.HAlign.LEFT,
v_align=Text.VAlign.CENTER,
color=ba.safecolor(mkp.team.color + (1, )),
maxwidth=180,
transition=Text.Transition.IN_LEFT,
transition_delay=tval).autoretain()
tval += 4 * t_incr
# Now show individual scores.
tdelay = tval
Text(ba.Lstr(resource='finalScoresText'),
color=(0.5, 0.5, 0.5, 1.0),
position=(ts_h_offs, ts_height / 2),
transition=Text.Transition.IN_RIGHT,
transition_delay=tdelay).autoretain()
tdelay += 4 * t_incr
v_offs = 0.0
tdelay += len(player_entries) * 8 * t_incr
for _score, name, prec in player_entries:
tdelay -= 4 * t_incr
v_offs -= 40
Text(str(prec.team.sessiondata['score'])
if self._is_ffa else str(prec.score),
color=(0.5, 0.5, 0.5, 1.0),
position=(ts_h_offs + 230, ts_height / 2 + v_offs),
h_align=Text.HAlign.RIGHT,
transition=Text.Transition.IN_RIGHT,
transition_delay=tdelay).autoretain()
tdelay -= 4 * t_incr
Image(prec.get_icon(),
position=(ts_h_offs - 72, ts_height / 2 + v_offs + 15),
scale=(30, 30),
transition=Image.Transition.IN_LEFT,
transition_delay=tdelay).autoretain()
Text(ba.Lstr(value=name),
position=(ts_h_offs - 50, ts_height / 2 + v_offs + 15),
h_align=Text.HAlign.LEFT,
v_align=Text.VAlign.CENTER,
maxwidth=180,
color=ba.safecolor(prec.team.color + (1, )),
transition=Text.Transition.IN_RIGHT,
transition_delay=tdelay).autoretain()
ba.timer(15.0, ba.WeakCall(self._show_tips))
def _show_tips(self) -> None:
from bastd.actor.tipstext import TipsText
self._tips_text = TipsText(offs_y=70)
def _play_victory_music(self) -> None:
# Make sure we don't stomp on the next activity's music choice.
if not self.is_transitioning_out():
ba.setmusic(ba.MusicType.VICTORY)
def _show_winner(self, team: ba.Team) -> None:
from bastd.actor.image import Image
from bastd.actor.zoomtext import ZoomText
if not self._is_ffa:
offs_v = 0.0
ZoomText(team.name,
position=(0, 97),
color=team.color,
scale=1.15,
jitter=1.0,
maxwidth=250).autoretain()
else:
offs_v = -80.0
if len(team.players) == 1:
i = Image(team.players[0].get_icon(),
position=(0, 143),
scale=(100, 100)).autoretain()
assert i.node
ba.animate(i.node, 'opacity', {0.0: 0.0, 0.25: 1.0})
ZoomText(ba.Lstr(
value=team.players[0].get_name(full=True, icon=False)),
position=(0, 97 + offs_v),
color=team.color,
scale=1.15,
jitter=1.0,
maxwidth=250).autoretain()
s_extra = 1.0 if self._is_ffa else 1.0
# Some languages say "FOO WINS" differently for teams vs players.
if isinstance(self.session, ba.FreeForAllSession):
wins_resource = 'seriesWinLine1PlayerText'
else:
wins_resource = 'seriesWinLine1TeamText'
wins_text = ba.Lstr(resource=wins_resource)
# Temp - if these come up as the english default, fall-back to the
# unified old form which is more likely to be translated.
ZoomText(wins_text,
position=(0, -10 + offs_v),
color=team.color,
scale=0.65 * s_extra,
jitter=1.0,
maxwidth=250).autoretain()
ZoomText(ba.Lstr(resource='seriesWinLine2Text'),
position=(0, -110 + offs_v),
scale=1.0 * s_extra,
color=team.color,
jitter=1.0,
maxwidth=250).autoretain()

View File

@ -135,7 +135,7 @@ class RespawnIcon:
def _get_context(self, player: ba.Player) -> Tuple[bool, float, Dict]:
"""Return info on where we should be shown and stored."""
activity = ba.getactivity()
if isinstance(ba.getsession(), ba.TeamsSession):
if isinstance(ba.getsession(), ba.DualTeamSession):
on_right = player.team.get_id() % 2 == 1
# Store a list of icons in the team.

View File

@ -49,7 +49,7 @@ class AssaultGame(ba.TeamGameActivity):
@classmethod
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
return issubclass(sessiontype, ba.TeamsSession)
return issubclass(sessiontype, ba.DualTeamSession)
@classmethod
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:

View File

@ -91,7 +91,7 @@ class CaptureTheFlagGame(ba.TeamGameActivity):
@classmethod
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
return issubclass(sessiontype, ba.TeamsSession)
return issubclass(sessiontype, ba.DualTeamSession)
@classmethod
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:

View File

@ -71,7 +71,7 @@ class ConquestGame(ba.TeamGameActivity):
@classmethod
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
return issubclass(sessiontype, ba.TeamsSession)
return issubclass(sessiontype, ba.DualTeamSession)
@classmethod
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:

View File

@ -48,7 +48,7 @@ class DeathMatchGame(ba.TeamGameActivity):
@classmethod
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
return (issubclass(sessiontype, ba.TeamsSession)
return (issubclass(sessiontype, ba.DualTeamSession)
or issubclass(sessiontype, ba.FreeForAllSession))
@classmethod

View File

@ -63,7 +63,7 @@ class EasterEggHuntGame(ba.TeamGameActivity):
@classmethod
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
return (issubclass(sessiontype, ba.CoopSession)
or issubclass(sessiontype, ba.TeamsSession)
or issubclass(sessiontype, ba.DualTeamSession)
or issubclass(sessiontype, ba.FreeForAllSession))
@classmethod

View File

@ -185,7 +185,7 @@ class EliminationGame(ba.TeamGameActivity):
@classmethod
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
return (issubclass(sessiontype, ba.TeamsSession)
return (issubclass(sessiontype, ba.DualTeamSession)
or issubclass(sessiontype, ba.FreeForAllSession))
@classmethod
@ -214,7 +214,7 @@ class EliminationGame(ba.TeamGameActivity):
}),
("Epic Mode", {'default': False})] # yapf: disable
if issubclass(sessiontype, ba.TeamsSession):
if issubclass(sessiontype, ba.DualTeamSession):
settings.append(("Solo Mode", {'default': False}))
settings.append(("Balance Total Lives", {'default': False}))
@ -237,11 +237,11 @@ class EliminationGame(ba.TeamGameActivity):
def get_instance_description(self) -> Union[str, Sequence]:
return 'Last team standing wins.' if isinstance(
self.session, ba.TeamsSession) else 'Last one standing wins.'
self.session, ba.DualTeamSession) else 'Last one standing wins.'
def get_instance_scoreboard_description(self) -> Union[str, Sequence]:
return 'last team standing wins' if isinstance(
self.session, ba.TeamsSession) else 'last one standing wins'
self.session, ba.DualTeamSession) else 'last one standing wins'
def on_transition_in(self) -> None:
self.default_music = (ba.MusicType.EPIC if self.settings['Epic Mode']
@ -463,7 +463,7 @@ class EliminationGame(ba.TeamGameActivity):
# If balance-team-lives is on, add lives to the smaller team until
# total lives match.
if (isinstance(self.session, ba.TeamsSession)
if (isinstance(self.session, ba.DualTeamSession)
and self.settings['Balance Total Lives']
and self.teams[0].players and self.teams[1].players):
if self._get_total_team_lives(

View File

@ -77,7 +77,7 @@ class FootballTeamGame(ba.TeamGameActivity):
@classmethod
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
# We only support two-team play.
return issubclass(sessiontype, ba.TeamsSession)
return issubclass(sessiontype, ba.DualTeamSession)
@classmethod
def get_description(cls, sessiontype: Type[ba.Session]) -> str:

View File

@ -120,7 +120,7 @@ class HockeyGame(ba.TeamGameActivity):
@classmethod
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
return issubclass(sessiontype, ba.TeamsSession)
return issubclass(sessiontype, ba.DualTeamSession)
@classmethod
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:

View File

@ -59,7 +59,7 @@ class KeepAwayGame(ba.TeamGameActivity):
@classmethod
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
return (issubclass(sessiontype, ba.TeamsSession)
return (issubclass(sessiontype, ba.DualTeamSession)
or issubclass(sessiontype, ba.FreeForAllSession))
@classmethod

View File

@ -61,7 +61,7 @@ class KingOfTheHillGame(ba.TeamGameActivity):
@classmethod
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
return issubclass(sessiontype, ba.TeamBaseSession)
return issubclass(sessiontype, ba.MultiTeamSession)
@classmethod
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:

View File

@ -71,7 +71,7 @@ class MeteorShowerGame(ba.TeamGameActivity):
# We support teams, free-for-all, and co-op sessions.
@classmethod
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
return (issubclass(sessiontype, ba.TeamsSession)
return (issubclass(sessiontype, ba.DualTeamSession)
or issubclass(sessiontype, ba.FreeForAllSession)
or issubclass(sessiontype, ba.CoopSession))

View File

@ -88,7 +88,7 @@ class RaceGame(ba.TeamGameActivity):
@classmethod
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
return issubclass(sessiontype, ba.TeamBaseSession)
return issubclass(sessiontype, ba.MultiTeamSession)
@classmethod
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
@ -125,7 +125,7 @@ class RaceGame(ba.TeamGameActivity):
'default': False
})] # yapf: disable
if issubclass(sessiontype, ba.TeamsSession):
if issubclass(sessiontype, ba.DualTeamSession):
settings.append(('Entire Team Must Finish', {'default': False}))
return settings
@ -156,7 +156,7 @@ class RaceGame(ba.TeamGameActivity):
self._bomb_spawn_timer: Optional[ba.Timer] = None
def get_instance_description(self) -> Union[str, Sequence]:
if isinstance(self.session, ba.TeamsSession) and self.settings.get(
if isinstance(self.session, ba.DualTeamSession) and self.settings.get(
'Entire Team Must Finish', False):
t_str = ' Your entire team has to finish.'
else:
@ -252,7 +252,7 @@ class RaceGame(ba.TeamGameActivity):
# value is the min of all team players.
# Otherwise its the max.
if isinstance(self.session,
ba.TeamsSession) and self.settings.get(
ba.DualTeamSession) and self.settings.get(
'Entire Team Must Finish'):
team.gamedata['lap'] = min(
[p.gamedata['lap'] for p in team.players])
@ -265,7 +265,7 @@ class RaceGame(ba.TeamGameActivity):
# In teams mode, hand out points based on the order
# players come in.
if isinstance(self.session, ba.TeamsSession):
if isinstance(self.session, ba.DualTeamSession):
assert self._team_finish_pts is not None
if self._team_finish_pts > 0:
self.stats.player_scored(player,
@ -364,7 +364,7 @@ class RaceGame(ba.TeamGameActivity):
# A player leaving disqualifies the team if 'Entire Team Must Finish'
# is on (otherwise in teams mode everyone could just leave except the
# leading player to win).
if (isinstance(self.session, ba.TeamsSession)
if (isinstance(self.session, ba.DualTeamSession)
and self.settings.get('Entire Team Must Finish')):
ba.screenmessage(ba.Lstr(
translate=('statements',
@ -396,7 +396,7 @@ class RaceGame(ba.TeamGameActivity):
if not distances:
teams_dist = 0
else:
if (isinstance(self.session, ba.TeamsSession)
if (isinstance(self.session, ba.DualTeamSession)
and self.settings.get('Entire Team Must Finish')):
teams_dist = min(distances)
else:
@ -690,7 +690,7 @@ class RaceGame(ba.TeamGameActivity):
# In teams mode its over as soon as any team finishes the race
# FIXME: The get_ffa_point_awards code looks dangerous.
if isinstance(session, ba.TeamsSession):
if isinstance(session, ba.DualTeamSession):
self.end_game()
else:
# In ffa we keep the race going while there's still any points
@ -729,7 +729,7 @@ class RaceGame(ba.TeamGameActivity):
# odd to be announcing that now.
self.end(results=results,
announce_winning_team=isinstance(self.session,
ba.TeamsSession))
ba.DualTeamSession))
def handlemessage(self, msg: Any) -> Any:
if isinstance(msg, PlayerSpazDeathMessage):

View File

@ -57,7 +57,7 @@ class TargetPracticeGame(ba.TeamGameActivity):
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
# We support any teams or versus sessions.
return (issubclass(sessiontype, ba.CoopSession)
or issubclass(sessiontype, ba.TeamBaseSession))
or issubclass(sessiontype, ba.MultiTeamSession))
@classmethod
def get_settings(

View File

@ -434,7 +434,7 @@ class MainMenuActivity(ba.Activity):
from bastd.ui.playlist.browser import (
PlaylistBrowserWindow)
ba.app.main_menu_window = PlaylistBrowserWindow(
sessiontype=ba.TeamsSession,
sessiontype=ba.DualTeamSession,
transition=None).get_root_widget()
elif main_window == 'Free-for-All Game Select':
# pylint: disable=cyclic-import

View File

@ -450,7 +450,7 @@ class KioskWindow(ba.Window):
endcall=ba.Call(
ba.pushcall,
ba.Call(_ba.new_host_session,
ba.TeamsSession)))
ba.DualTeamSession)))
ba.containerwidget(edit=self._root_widget, transition='out_left')
return

View File

@ -438,7 +438,7 @@ class PlayWindow(ba.Window):
ba.containerwidget(edit=self._root_widget, transition='out_left')
ba.app.main_menu_window = (browser.PlaylistBrowserWindow(
origin_widget=self._teams_button,
sessiontype=ba.TeamsSession).get_root_widget())
sessiontype=ba.DualTeamSession).get_root_widget())
def _free_for_all(self) -> None:
# pylint: disable=cyclic-import

View File

@ -38,15 +38,15 @@ class PlaylistTypeVars:
from ba.internal import (get_default_teams_playlist,
get_default_free_for_all_playlist)
self.sessiontype: Type[ba.Session]
if issubclass(sessiontype, ba.TeamsSession):
if issubclass(sessiontype, ba.DualTeamSession):
play_mode_name = ba.Lstr(resource='playModes.teamsText',
fallback_resource='teamsText')
self.get_default_list_call = get_default_teams_playlist
self.session_type_name = 'ba.TeamsSession'
self.session_type_name = 'ba.DualTeamSession'
self.config_name = 'Team Tournament'
self.window_title_name = ba.Lstr(resource='playModes.teamsText',
fallback_resource='teamsText')
self.sessiontype = ba.TeamsSession
self.sessiontype = ba.DualTeamSession
elif issubclass(sessiontype, ba.FreeForAllSession):
play_mode_name = ba.Lstr(resource='playModes.freeForAllText',
fallback_resource='freeForAllText')

View File

@ -55,7 +55,7 @@ class PlaylistBrowserWindow(ba.Window):
scale_origin = None
# Store state for when we exit the next game.
if issubclass(sessiontype, ba.TeamsSession):
if issubclass(sessiontype, ba.DualTeamSession):
ba.app.main_window = "Team Game Select"
ba.set_analytics_screen('Teams Window')
elif issubclass(sessiontype, ba.FreeForAllSession):
@ -412,7 +412,7 @@ class PlaylistBrowserWindow(ba.Window):
if name == '__default__':
if self._sessiontype is ba.FreeForAllSession:
playlist = (get_default_free_for_all_playlist())
elif self._sessiontype is ba.TeamsSession:
elif self._sessiontype is ba.DualTeamSession:
playlist = get_default_teams_playlist()
else:
raise Exception("unrecognized session-type: " +

View File

@ -66,7 +66,7 @@ class PlayOptionsWindow(popup.PopupWindow):
self._height = 330.0 - 50.0
# In teams games, show the custom names/colors button.
if self._sessiontype is ba.TeamsSession:
if self._sessiontype is ba.DualTeamSession:
self._height += 50.0
self._row_height = 45.0
@ -90,7 +90,7 @@ class PlayOptionsWindow(popup.PopupWindow):
if name == '__default__':
if self._sessiontype is ba.FreeForAllSession:
plst = get_default_free_for_all_playlist()
elif self._sessiontype is ba.TeamsSession:
elif self._sessiontype is ba.DualTeamSession:
plst = get_default_teams_playlist()
else:
raise Exception("unrecognized session-type: " +
@ -262,7 +262,7 @@ class PlayOptionsWindow(popup.PopupWindow):
# Team names/colors.
self._custom_colors_names_button: Optional[ba.Widget]
if self._sessiontype is ba.TeamsSession:
if self._sessiontype is ba.DualTeamSession:
y_offs = 50 if show_shuffle_check_box else 0
self._custom_colors_names_button = ba.buttonwidget(
parent=self.root_widget,

View File

@ -111,7 +111,7 @@ def instantiate_store_item_display(item_name: str,
modes_l = []
if gametype.supports_session_type(ba.CoopSession):
modes_l.append(ba.Lstr(resource='playModes.coopText'))
if gametype.supports_session_type(ba.TeamsSession):
if gametype.supports_session_type(ba.DualTeamSession):
modes_l.append(ba.Lstr(resource='playModes.teamsText'))
if gametype.supports_session_type(ba.FreeForAllSession):
modes_l.append(ba.Lstr(resource='playModes.freeForAllText'))

View File

@ -1,5 +1,5 @@
<!-- THIS FILE IS AUTO GENERATED; DO NOT EDIT BY HAND -->
<h4><em>last updated on 2020-04-14 for Ballistica version 1.5.0 build 20001</em></h4>
<h4><em>last updated on 2020-04-15 for Ballistica version 1.5.0 build 20001</em></h4>
<p>This page documents the Python classes and functions in the 'ba' module,
which are the ones most relevant to modding in Ballistica. If you come across something you feel should be included here or could be better explained, please <a href="mailto:support@froemling.net">let me know</a>. Happy modding!</p>
<hr>
@ -30,10 +30,10 @@
<li><a href="#class_ba_Session">ba.Session</a></li>
<ul>
<li><a href="#class_ba_CoopSession">ba.CoopSession</a></li>
<li><a href="#class_ba_TeamBaseSession">ba.TeamBaseSession</a></li>
<li><a href="#class_ba_MultiTeamSession">ba.MultiTeamSession</a></li>
<ul>
<li><a href="#class_ba_DualTeamSession">ba.DualTeamSession</a></li>
<li><a href="#class_ba_FreeForAllSession">ba.FreeForAllSession</a></li>
<li><a href="#class_ba_TeamsSession">ba.TeamsSession</a></li>
</ul>
</ul>
<li><a href="#class_ba_Stats">ba.Stats</a></li>
@ -1843,11 +1843,32 @@ its time with lingering corpses, sound effects, etc.</p>
<dt><h4><a name="method_ba_DroppedMessage____init__">&lt;constructor&gt;</a></dt></h4><dd>
<p><span>ba.DroppedMessage(node: <a href="#class_ba_Node">ba.Node</a>)</span></p>
</dd>
</dl>
<hr>
<h2><strong><a name="class_ba_DualTeamSession">ba.DualTeamSession</a></strong></h3>
<p>inherits from: <a href="#class_ba_MultiTeamSession">ba.MultiTeamSession</a>, <a href="#class_ba_Session">ba.Session</a></p>
<p><a href="#class_ba_Session">ba.Session</a> type for teams mode games.</p>
<p>Category: <a href="#class_category_Gameplay_Classes">Gameplay Classes</a>
</p>
<h3>Attributes Inherited:</h3>
<h5><a href="#attr_ba_Session__campaign">campaign</a>, <a href="#attr_ba_Session__lobby">lobby</a>, <a href="#attr_ba_Session__max_players">max_players</a>, <a href="#attr_ba_Session__min_players">min_players</a>, <a href="#attr_ba_Session__players">players</a>, <a href="#attr_ba_Session__teams">teams</a></h5>
<h3>Methods Inherited:</h3>
<h5><a href="#method_ba_MultiTeamSession__announce_game_results">announce_game_results()</a>, <a href="#method_ba_MultiTeamSession__begin_next_activity">begin_next_activity()</a>, <a href="#method_ba_MultiTeamSession__end">end()</a>, <a href="#method_ba_MultiTeamSession__end_activity">end_activity()</a>, <a href="#method_ba_MultiTeamSession__get_custom_menu_entries">get_custom_menu_entries()</a>, <a href="#method_ba_MultiTeamSession__get_ffa_series_length">get_ffa_series_length()</a>, <a href="#method_ba_MultiTeamSession__get_game_number">get_game_number()</a>, <a href="#method_ba_MultiTeamSession__get_max_players">get_max_players()</a>, <a href="#method_ba_MultiTeamSession__get_next_game_description">get_next_game_description()</a>, <a href="#method_ba_MultiTeamSession__get_series_length">get_series_length()</a>, <a href="#method_ba_MultiTeamSession__getactivity">getactivity()</a>, <a href="#method_ba_MultiTeamSession__handlemessage">handlemessage()</a>, <a href="#method_ba_MultiTeamSession__launch_end_session_activity">launch_end_session_activity()</a>, <a href="#method_ba_MultiTeamSession__on_activity_end">on_activity_end()</a>, <a href="#method_ba_MultiTeamSession__on_player_leave">on_player_leave()</a>, <a href="#method_ba_MultiTeamSession__on_player_request">on_player_request()</a>, <a href="#method_ba_MultiTeamSession__on_team_join">on_team_join()</a>, <a href="#method_ba_MultiTeamSession__on_team_leave">on_team_leave()</a>, <a href="#method_ba_MultiTeamSession__set_activity">set_activity()</a></h5>
<h3>Methods Defined or Overridden:</h3>
<dl>
<dt><h4><a name="method_ba_DualTeamSession____init__">&lt;constructor&gt;</a></dt></h4><dd>
<p><span>ba.DualTeamSession()</span></p>
<p>Set up playlists and launches a <a href="#class_ba_Activity">ba.Activity</a> to accept joiners.</p>
</dd>
</dl>
<hr>
<h2><strong><a name="class_ba_FreeForAllSession">ba.FreeForAllSession</a></strong></h3>
<p>inherits from: <a href="#class_ba_TeamBaseSession">ba.TeamBaseSession</a>, <a href="#class_ba_Session">ba.Session</a></p>
<p>inherits from: <a href="#class_ba_MultiTeamSession">ba.MultiTeamSession</a>, <a href="#class_ba_Session">ba.Session</a></p>
<p><a href="#class_ba_Session">ba.Session</a> type for free-for-all mode games.</p>
<p>Category: <a href="#class_category_Gameplay_Classes">Gameplay Classes</a>
@ -1856,7 +1877,7 @@ its time with lingering corpses, sound effects, etc.</p>
<h3>Attributes Inherited:</h3>
<h5><a href="#attr_ba_Session__campaign">campaign</a>, <a href="#attr_ba_Session__lobby">lobby</a>, <a href="#attr_ba_Session__max_players">max_players</a>, <a href="#attr_ba_Session__min_players">min_players</a>, <a href="#attr_ba_Session__players">players</a>, <a href="#attr_ba_Session__teams">teams</a></h5>
<h3>Methods Inherited:</h3>
<h5><a href="#method_ba_TeamBaseSession__announce_game_results">announce_game_results()</a>, <a href="#method_ba_TeamBaseSession__begin_next_activity">begin_next_activity()</a>, <a href="#method_ba_TeamBaseSession__end">end()</a>, <a href="#method_ba_TeamBaseSession__end_activity">end_activity()</a>, <a href="#method_ba_TeamBaseSession__get_custom_menu_entries">get_custom_menu_entries()</a>, <a href="#method_ba_TeamBaseSession__get_ffa_series_length">get_ffa_series_length()</a>, <a href="#method_ba_TeamBaseSession__get_game_number">get_game_number()</a>, <a href="#method_ba_TeamBaseSession__get_max_players">get_max_players()</a>, <a href="#method_ba_TeamBaseSession__get_next_game_description">get_next_game_description()</a>, <a href="#method_ba_TeamBaseSession__get_series_length">get_series_length()</a>, <a href="#method_ba_TeamBaseSession__getactivity">getactivity()</a>, <a href="#method_ba_TeamBaseSession__handlemessage">handlemessage()</a>, <a href="#method_ba_TeamBaseSession__launch_end_session_activity">launch_end_session_activity()</a>, <a href="#method_ba_TeamBaseSession__on_activity_end">on_activity_end()</a>, <a href="#method_ba_TeamBaseSession__on_player_leave">on_player_leave()</a>, <a href="#method_ba_TeamBaseSession__on_player_request">on_player_request()</a>, <a href="#method_ba_TeamBaseSession__on_team_join">on_team_join()</a>, <a href="#method_ba_TeamBaseSession__on_team_leave">on_team_leave()</a>, <a href="#method_ba_TeamBaseSession__set_activity">set_activity()</a></h5>
<h5><a href="#method_ba_MultiTeamSession__announce_game_results">announce_game_results()</a>, <a href="#method_ba_MultiTeamSession__begin_next_activity">begin_next_activity()</a>, <a href="#method_ba_MultiTeamSession__end">end()</a>, <a href="#method_ba_MultiTeamSession__end_activity">end_activity()</a>, <a href="#method_ba_MultiTeamSession__get_custom_menu_entries">get_custom_menu_entries()</a>, <a href="#method_ba_MultiTeamSession__get_ffa_series_length">get_ffa_series_length()</a>, <a href="#method_ba_MultiTeamSession__get_game_number">get_game_number()</a>, <a href="#method_ba_MultiTeamSession__get_max_players">get_max_players()</a>, <a href="#method_ba_MultiTeamSession__get_next_game_description">get_next_game_description()</a>, <a href="#method_ba_MultiTeamSession__get_series_length">get_series_length()</a>, <a href="#method_ba_MultiTeamSession__getactivity">getactivity()</a>, <a href="#method_ba_MultiTeamSession__handlemessage">handlemessage()</a>, <a href="#method_ba_MultiTeamSession__launch_end_session_activity">launch_end_session_activity()</a>, <a href="#method_ba_MultiTeamSession__on_activity_end">on_activity_end()</a>, <a href="#method_ba_MultiTeamSession__on_player_leave">on_player_leave()</a>, <a href="#method_ba_MultiTeamSession__on_player_request">on_player_request()</a>, <a href="#method_ba_MultiTeamSession__on_team_join">on_team_join()</a>, <a href="#method_ba_MultiTeamSession__on_team_leave">on_team_leave()</a>, <a href="#method_ba_MultiTeamSession__set_activity">set_activity()</a></h5>
<h3>Methods Defined or Overridden:</h3>
<h5><a href="#method_ba_FreeForAllSession____init__">&lt;constructor&gt;</a>, <a href="#method_ba_FreeForAllSession__get_ffa_point_awards">get_ffa_point_awards()</a></h5>
<dl>
@ -3130,6 +3151,87 @@ m.add_actions(conditions=('they_have_material',
<p>Models are used for drawing.
Use <a href="#function_ba_getmodel">ba.getmodel</a>() to instantiate one.</p>
<hr>
<h2><strong><a name="class_ba_MultiTeamSession">ba.MultiTeamSession</a></strong></h3>
<p>inherits from: <a href="#class_ba_Session">ba.Session</a></p>
<p>Common base class for <a href="#class_ba_DualTeamSession">ba.DualTeamSession</a> and <a href="#class_ba_FreeForAllSession">ba.FreeForAllSession</a>.</p>
<p>Category: <a href="#class_category_Gameplay_Classes">Gameplay Classes</a></p>
<p> Free-for-all-mode is essentially just teams-mode with each <a href="#class_ba_Player">ba.Player</a> having
their own <a href="#class_ba_Team">ba.Team</a>, so there is much overlap in functionality.
</p>
<h3>Attributes Inherited:</h3>
<h5><a href="#attr_ba_Session__campaign">campaign</a>, <a href="#attr_ba_Session__lobby">lobby</a>, <a href="#attr_ba_Session__max_players">max_players</a>, <a href="#attr_ba_Session__min_players">min_players</a>, <a href="#attr_ba_Session__players">players</a>, <a href="#attr_ba_Session__teams">teams</a></h5>
<h3>Methods Inherited:</h3>
<h5><a href="#method_ba_Session__begin_next_activity">begin_next_activity()</a>, <a href="#method_ba_Session__end">end()</a>, <a href="#method_ba_Session__end_activity">end_activity()</a>, <a href="#method_ba_Session__get_custom_menu_entries">get_custom_menu_entries()</a>, <a href="#method_ba_Session__getactivity">getactivity()</a>, <a href="#method_ba_Session__handlemessage">handlemessage()</a>, <a href="#method_ba_Session__launch_end_session_activity">launch_end_session_activity()</a>, <a href="#method_ba_Session__on_player_leave">on_player_leave()</a>, <a href="#method_ba_Session__on_player_request">on_player_request()</a>, <a href="#method_ba_Session__on_team_leave">on_team_leave()</a>, <a href="#method_ba_Session__set_activity">set_activity()</a></h5>
<h3>Methods Defined or Overridden:</h3>
<h5><a href="#method_ba_MultiTeamSession____init__">&lt;constructor&gt;</a>, <a href="#method_ba_MultiTeamSession__announce_game_results">announce_game_results()</a>, <a href="#method_ba_MultiTeamSession__get_ffa_series_length">get_ffa_series_length()</a>, <a href="#method_ba_MultiTeamSession__get_game_number">get_game_number()</a>, <a href="#method_ba_MultiTeamSession__get_max_players">get_max_players()</a>, <a href="#method_ba_MultiTeamSession__get_next_game_description">get_next_game_description()</a>, <a href="#method_ba_MultiTeamSession__get_series_length">get_series_length()</a>, <a href="#method_ba_MultiTeamSession__on_activity_end">on_activity_end()</a>, <a href="#method_ba_MultiTeamSession__on_team_join">on_team_join()</a></h5>
<dl>
<dt><h4><a name="method_ba_MultiTeamSession____init__">&lt;constructor&gt;</a></dt></h4><dd>
<p><span>ba.MultiTeamSession()</span></p>
<p>Set up playlists and launches a <a href="#class_ba_Activity">ba.Activity</a> to accept joiners.</p>
</dd>
<dt><h4><a name="method_ba_MultiTeamSession__announce_game_results">announce_game_results()</a></dt></h4><dd>
<p><span>announce_game_results(self, activity: <a href="#class_ba_GameActivity">ba.GameActivity</a>, results: <a href="#class_ba_TeamGameResults">ba.TeamGameResults</a>, delay: float, announce_winning_team: bool = True) -&gt; None</span></p>
<p>Show basic game result at the end of a game.</p>
<p>(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.</p>
</dd>
<dt><h4><a name="method_ba_MultiTeamSession__get_ffa_series_length">get_ffa_series_length()</a></dt></h4><dd>
<p><span>get_ffa_series_length(self) -&gt; int</span></p>
<p>Return free-for-all series length.</p>
</dd>
<dt><h4><a name="method_ba_MultiTeamSession__get_game_number">get_game_number()</a></dt></h4><dd>
<p><span>get_game_number(self) -&gt; int</span></p>
<p>Returns which game in the series is currently being played.</p>
</dd>
<dt><h4><a name="method_ba_MultiTeamSession__get_max_players">get_max_players()</a></dt></h4><dd>
<p><span>get_max_players(self) -&gt; int</span></p>
<p>Return max number of <a href="#class_ba_Player">ba.Players</a> allowed to join the game at once.</p>
</dd>
<dt><h4><a name="method_ba_MultiTeamSession__get_next_game_description">get_next_game_description()</a></dt></h4><dd>
<p><span>get_next_game_description(self) -&gt; <a href="#class_ba_Lstr">ba.Lstr</a></span></p>
<p>Returns a description of the next game on deck.</p>
</dd>
<dt><h4><a name="method_ba_MultiTeamSession__get_series_length">get_series_length()</a></dt></h4><dd>
<p><span>get_series_length(self) -&gt; int</span></p>
<p>Return teams series length.</p>
</dd>
<dt><h4><a name="method_ba_MultiTeamSession__on_activity_end">on_activity_end()</a></dt></h4><dd>
<p><span>on_activity_end(self, activity: <a href="#class_ba_Activity">ba.Activity</a>, results: Any) -&gt; None</span></p>
<p>Called when the current <a href="#class_ba_Activity">ba.Activity</a> has ended.</p>
<p>The <a href="#class_ba_Session">ba.Session</a> should look at the results and start
another <a href="#class_ba_Activity">ba.Activity</a>.</p>
</dd>
<dt><h4><a name="method_ba_MultiTeamSession__on_team_join">on_team_join()</a></dt></h4><dd>
<p><span>on_team_join(self, team: <a href="#class_ba_Team">ba.Team</a>) -&gt; None</span></p>
<p>Called when a new <a href="#class_ba_Team">ba.Team</a> joins the session.</p>
</dd>
</dl>
<hr>
<h2><strong><a name="class_ba_MusicPlayer">ba.MusicPlayer</a></strong></h3>
<p><em>&lt;top level class&gt;</em>
@ -3874,7 +3976,7 @@ cause the powerup box to make a sound and disappear or whatnot.</p>
<p>Category: <a href="#class_category_Gameplay_Classes">Gameplay Classes</a></p>
<p> Examples of sessions are <a href="#class_ba_FreeForAllSession">ba.FreeForAllSession</a>, <a href="#class_ba_TeamsSession">ba.TeamsSession</a>, and
<p> Examples of sessions are <a href="#class_ba_FreeForAllSession">ba.FreeForAllSession</a>, <a href="#class_ba_DualTeamSession">ba.DualTeamSession</a>, and
<a href="#class_ba_CoopSession">ba.CoopSession</a>.</p>
<p> A Session is responsible for wrangling and transitioning between various
@ -4339,87 +4441,6 @@ of the session.</p>
<p>Returns the numeric team ID.</p>
</dd>
</dl>
<hr>
<h2><strong><a name="class_ba_TeamBaseSession">ba.TeamBaseSession</a></strong></h3>
<p>inherits from: <a href="#class_ba_Session">ba.Session</a></p>
<p>Common base class for <a href="#class_ba_TeamsSession">ba.TeamsSession</a> and <a href="#class_ba_FreeForAllSession">ba.FreeForAllSession</a>.</p>
<p>Category: <a href="#class_category_Gameplay_Classes">Gameplay Classes</a></p>
<p> Free-for-all-mode is essentially just teams-mode with each <a href="#class_ba_Player">ba.Player</a> having
their own <a href="#class_ba_Team">ba.Team</a>, so there is much overlap in functionality.
</p>
<h3>Attributes Inherited:</h3>
<h5><a href="#attr_ba_Session__campaign">campaign</a>, <a href="#attr_ba_Session__lobby">lobby</a>, <a href="#attr_ba_Session__max_players">max_players</a>, <a href="#attr_ba_Session__min_players">min_players</a>, <a href="#attr_ba_Session__players">players</a>, <a href="#attr_ba_Session__teams">teams</a></h5>
<h3>Methods Inherited:</h3>
<h5><a href="#method_ba_Session__begin_next_activity">begin_next_activity()</a>, <a href="#method_ba_Session__end">end()</a>, <a href="#method_ba_Session__end_activity">end_activity()</a>, <a href="#method_ba_Session__get_custom_menu_entries">get_custom_menu_entries()</a>, <a href="#method_ba_Session__getactivity">getactivity()</a>, <a href="#method_ba_Session__handlemessage">handlemessage()</a>, <a href="#method_ba_Session__launch_end_session_activity">launch_end_session_activity()</a>, <a href="#method_ba_Session__on_player_leave">on_player_leave()</a>, <a href="#method_ba_Session__on_player_request">on_player_request()</a>, <a href="#method_ba_Session__on_team_leave">on_team_leave()</a>, <a href="#method_ba_Session__set_activity">set_activity()</a></h5>
<h3>Methods Defined or Overridden:</h3>
<h5><a href="#method_ba_TeamBaseSession____init__">&lt;constructor&gt;</a>, <a href="#method_ba_TeamBaseSession__announce_game_results">announce_game_results()</a>, <a href="#method_ba_TeamBaseSession__get_ffa_series_length">get_ffa_series_length()</a>, <a href="#method_ba_TeamBaseSession__get_game_number">get_game_number()</a>, <a href="#method_ba_TeamBaseSession__get_max_players">get_max_players()</a>, <a href="#method_ba_TeamBaseSession__get_next_game_description">get_next_game_description()</a>, <a href="#method_ba_TeamBaseSession__get_series_length">get_series_length()</a>, <a href="#method_ba_TeamBaseSession__on_activity_end">on_activity_end()</a>, <a href="#method_ba_TeamBaseSession__on_team_join">on_team_join()</a></h5>
<dl>
<dt><h4><a name="method_ba_TeamBaseSession____init__">&lt;constructor&gt;</a></dt></h4><dd>
<p><span>ba.TeamBaseSession()</span></p>
<p>Set up playlists and launches a <a href="#class_ba_Activity">ba.Activity</a> to accept joiners.</p>
</dd>
<dt><h4><a name="method_ba_TeamBaseSession__announce_game_results">announce_game_results()</a></dt></h4><dd>
<p><span>announce_game_results(self, activity: <a href="#class_ba_GameActivity">ba.GameActivity</a>, results: <a href="#class_ba_TeamGameResults">ba.TeamGameResults</a>, delay: float, announce_winning_team: bool = True) -&gt; None</span></p>
<p>Show basic game result at the end of a game.</p>
<p>(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.</p>
</dd>
<dt><h4><a name="method_ba_TeamBaseSession__get_ffa_series_length">get_ffa_series_length()</a></dt></h4><dd>
<p><span>get_ffa_series_length(self) -&gt; int</span></p>
<p>Return free-for-all series length.</p>
</dd>
<dt><h4><a name="method_ba_TeamBaseSession__get_game_number">get_game_number()</a></dt></h4><dd>
<p><span>get_game_number(self) -&gt; int</span></p>
<p>Returns which game in the series is currently being played.</p>
</dd>
<dt><h4><a name="method_ba_TeamBaseSession__get_max_players">get_max_players()</a></dt></h4><dd>
<p><span>get_max_players(self) -&gt; int</span></p>
<p>Return max number of <a href="#class_ba_Player">ba.Players</a> allowed to join the game at once.</p>
</dd>
<dt><h4><a name="method_ba_TeamBaseSession__get_next_game_description">get_next_game_description()</a></dt></h4><dd>
<p><span>get_next_game_description(self) -&gt; <a href="#class_ba_Lstr">ba.Lstr</a></span></p>
<p>Returns a description of the next game on deck.</p>
</dd>
<dt><h4><a name="method_ba_TeamBaseSession__get_series_length">get_series_length()</a></dt></h4><dd>
<p><span>get_series_length(self) -&gt; int</span></p>
<p>Return teams series length.</p>
</dd>
<dt><h4><a name="method_ba_TeamBaseSession__on_activity_end">on_activity_end()</a></dt></h4><dd>
<p><span>on_activity_end(self, activity: <a href="#class_ba_Activity">ba.Activity</a>, results: Any) -&gt; None</span></p>
<p>Called when the current <a href="#class_ba_Activity">ba.Activity</a> has ended.</p>
<p>The <a href="#class_ba_Session">ba.Session</a> should look at the results and start
another <a href="#class_ba_Activity">ba.Activity</a>.</p>
</dd>
<dt><h4><a name="method_ba_TeamBaseSession__on_team_join">on_team_join()</a></dt></h4><dd>
<p><span>on_team_join(self, team: <a href="#class_ba_Team">ba.Team</a>) -&gt; None</span></p>
<p>Called when a new <a href="#class_ba_Team">ba.Team</a> joins the session.</p>
</dd>
</dl>
<hr>
@ -4514,7 +4535,7 @@ on the <a href="#class_ba_Player">ba.Player</a> and their <a href="#class_ba_Tea
<p><span>supports_session_type(sessiontype: Type[<a href="#class_ba_Session">ba.Session</a>]) -&gt; bool </span></p>
<p>Class method override;
returns True for <a href="#class_ba_TeamsSession">ba.TeamsSessions</a> and <a href="#class_ba_FreeForAllSession">ba.FreeForAllSessions</a>;
returns True for <a href="#class_ba_DualTeamSession">ba.DualTeamSessions</a> and <a href="#class_ba_FreeForAllSession">ba.FreeForAllSessions</a>;
False otherwise.</p>
</dd>
@ -4629,27 +4650,6 @@ Results for a completed <a href="#class_ba_TeamGameActivity">ba.TeamGameActivity
<h3>Methods:</h3>
<p>&lt;all methods inherited from <a href="#class_ba_NotFoundError">ba.NotFoundError</a>&gt;</p>
<hr>
<h2><strong><a name="class_ba_TeamsSession">ba.TeamsSession</a></strong></h3>
<p>inherits from: <a href="#class_ba_TeamBaseSession">ba.TeamBaseSession</a>, <a href="#class_ba_Session">ba.Session</a></p>
<p><a href="#class_ba_Session">ba.Session</a> type for teams mode games.</p>
<p>Category: <a href="#class_category_Gameplay_Classes">Gameplay Classes</a>
</p>
<h3>Attributes Inherited:</h3>
<h5><a href="#attr_ba_Session__campaign">campaign</a>, <a href="#attr_ba_Session__lobby">lobby</a>, <a href="#attr_ba_Session__max_players">max_players</a>, <a href="#attr_ba_Session__min_players">min_players</a>, <a href="#attr_ba_Session__players">players</a>, <a href="#attr_ba_Session__teams">teams</a></h5>
<h3>Methods Inherited:</h3>
<h5><a href="#method_ba_TeamBaseSession__announce_game_results">announce_game_results()</a>, <a href="#method_ba_TeamBaseSession__begin_next_activity">begin_next_activity()</a>, <a href="#method_ba_TeamBaseSession__end">end()</a>, <a href="#method_ba_TeamBaseSession__end_activity">end_activity()</a>, <a href="#method_ba_TeamBaseSession__get_custom_menu_entries">get_custom_menu_entries()</a>, <a href="#method_ba_TeamBaseSession__get_ffa_series_length">get_ffa_series_length()</a>, <a href="#method_ba_TeamBaseSession__get_game_number">get_game_number()</a>, <a href="#method_ba_TeamBaseSession__get_max_players">get_max_players()</a>, <a href="#method_ba_TeamBaseSession__get_next_game_description">get_next_game_description()</a>, <a href="#method_ba_TeamBaseSession__get_series_length">get_series_length()</a>, <a href="#method_ba_TeamBaseSession__getactivity">getactivity()</a>, <a href="#method_ba_TeamBaseSession__handlemessage">handlemessage()</a>, <a href="#method_ba_TeamBaseSession__launch_end_session_activity">launch_end_session_activity()</a>, <a href="#method_ba_TeamBaseSession__on_activity_end">on_activity_end()</a>, <a href="#method_ba_TeamBaseSession__on_player_leave">on_player_leave()</a>, <a href="#method_ba_TeamBaseSession__on_player_request">on_player_request()</a>, <a href="#method_ba_TeamBaseSession__on_team_join">on_team_join()</a>, <a href="#method_ba_TeamBaseSession__on_team_leave">on_team_leave()</a>, <a href="#method_ba_TeamBaseSession__set_activity">set_activity()</a></h5>
<h3>Methods Defined or Overridden:</h3>
<dl>
<dt><h4><a name="method_ba_TeamsSession____init__">&lt;constructor&gt;</a></dt></h4><dd>
<p><span>ba.TeamsSession()</span></p>
<p>Set up playlists and launches a <a href="#class_ba_Activity">ba.Activity</a> to accept joiners.</p>
</dd>
</dl>
<hr>
<h2><strong><a name="class_ba_Texture">ba.Texture</a></strong></h3>
<p><em>&lt;top level class&gt;</em>
</p>