From b11bb26f51576cc45f01584f0c9a7ed0b2252ba3 Mon Sep 17 00:00:00 2001 From: Eric Froemling Date: Wed, 15 Apr 2020 00:52:54 -0700 Subject: [PATCH] cleaning up score screen names --- .idea/dictionaries/ericf.xml | 10 + assets/.asset_manifest_1.json | 42 +- assets/Makefile | 117 +++--- assets/src/ba_data/python/ba/__init__.py | 4 +- .../src/ba_data/python/ba/_activitytypes.py | 2 +- assets/src/ba_data/python/ba/_benchmark.py | 5 +- assets/src/ba_data/python/ba/_coopsession.py | 15 +- .../{_teamssession.py => _dualteamsession.py} | 26 +- .../ba_data/python/ba/_freeforallsession.py | 10 +- assets/src/ba_data/python/ba/_gameactivity.py | 8 +- ...eambasesession.py => _multiteamsession.py} | 13 +- assets/src/ba_data/python/ba/_server.py | 4 +- assets/src/ba_data/python/ba/_session.py | 2 +- assets/src/ba_data/python/ba/_teamgame.py | 14 +- assets/src/ba_data/python/ba/internal.py | 4 +- .../{coopjoinscreen.py => coopjoin.py} | 4 +- .../{coopscorescreen.py => coopscore.py} | 0 .../activity/{drawscreen.py => drawscore.py} | 4 +- ...ualteamscorescreen.py => dualteamscore.py} | 6 +- ...orallendscreen.py => freeforallvictory.py} | 6 +- ...ultiteamjoinscreen.py => multiteamjoin.py} | 10 +- ...{teamsscorescreen.py => multiteamscore.py} | 6 +- ...titeamendscreen.py => multiteamvictory.py} | 6 +- .../python/bastd/actor/multiteamvictory.py | 392 ++++++++++++++++++ .../ba_data/python/bastd/actor/respawnicon.py | 2 +- .../src/ba_data/python/bastd/game/assault.py | 2 +- .../python/bastd/game/capturetheflag.py | 2 +- .../src/ba_data/python/bastd/game/conquest.py | 2 +- .../ba_data/python/bastd/game/deathmatch.py | 2 +- .../python/bastd/game/easteregghunt.py | 2 +- .../ba_data/python/bastd/game/elimination.py | 10 +- .../src/ba_data/python/bastd/game/football.py | 2 +- .../src/ba_data/python/bastd/game/hockey.py | 2 +- .../src/ba_data/python/bastd/game/keepaway.py | 2 +- .../python/bastd/game/kingofthehill.py | 2 +- .../ba_data/python/bastd/game/meteorshower.py | 2 +- assets/src/ba_data/python/bastd/game/race.py | 18 +- .../python/bastd/game/targetpractice.py | 2 +- assets/src/ba_data/python/bastd/mainmenu.py | 2 +- assets/src/ba_data/python/bastd/ui/kiosk.py | 2 +- assets/src/ba_data/python/bastd/ui/play.py | 2 +- .../python/bastd/ui/playlist/__init__.py | 6 +- .../python/bastd/ui/playlist/browser.py | 4 +- .../ba_data/python/bastd/ui/playoptions.py | 6 +- .../src/ba_data/python/bastd/ui/store/item.py | 2 +- docs/ba_module.md | 218 +++++----- 46 files changed, 706 insertions(+), 298 deletions(-) rename assets/src/ba_data/python/ba/{_teamssession.py => _dualteamsession.py} (77%) rename assets/src/ba_data/python/ba/{_teambasesession.py => _multiteamsession.py} (97%) rename assets/src/ba_data/python/bastd/activity/{coopjoinscreen.py => coopjoin.py} (99%) rename assets/src/ba_data/python/bastd/activity/{coopscorescreen.py => coopscore.py} (100%) rename assets/src/ba_data/python/bastd/activity/{drawscreen.py => drawscore.py} (94%) rename assets/src/ba_data/python/bastd/activity/{dualteamscorescreen.py => dualteamscore.py} (96%) rename assets/src/ba_data/python/bastd/activity/{freeforallendscreen.py => freeforallvictory.py} (98%) rename assets/src/ba_data/python/bastd/activity/{multiteamjoinscreen.py => multiteamjoin.py} (94%) rename assets/src/ba_data/python/bastd/activity/{teamsscorescreen.py => multiteamscore.py} (98%) rename assets/src/ba_data/python/bastd/activity/{multiteamendscreen.py => multiteamvictory.py} (98%) create mode 100644 assets/src/ba_data/python/bastd/actor/multiteamvictory.py diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml index 4e4b6cf0..b0417386 100644 --- a/.idea/dictionaries/ericf.xml +++ b/.idea/dictionaries/ericf.xml @@ -330,7 +330,9 @@ cooldown cooldowns coopgame + coopjoin coopjoinscreen + coopscore coopscorescreen coopsession coords @@ -447,6 +449,7 @@ downmix dpad dpath + drawscore drawscreen dripity dropbox @@ -469,7 +472,9 @@ dstvar dtest dtime + dualteamscore dualteamscorescreen + dualteamsession duckdns dummymodule dummyname @@ -637,6 +642,7 @@ freefly freeforallendscreen freeforallsession + freeforallvictory freepik freesound froemling @@ -1088,7 +1094,11 @@ multiline multiplayer multiteamendscreen + multiteamjoin multiteamjoinscreen + multiteamscore + multiteamsession + multiteamvictory multithreaded musicinfo musicinfos diff --git a/assets/.asset_manifest_1.json b/assets/.asset_manifest_1.json index cd9617eb..f1195b8f 100644 --- a/assets/.asset_manifest_1.json +++ b/assets/.asset_manifest_1.json @@ -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", diff --git a/assets/Makefile b/assets/Makefile index 9e176757..71aceae7 100644 --- a/assets/Makefile +++ b/assets/Makefile @@ -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: $^ diff --git a/assets/src/ba_data/python/ba/__init__.py b/assets/src/ba_data/python/ba/__init__.py index 1f5b4455..0b312e1b 100644 --- a/assets/src/ba_data/python/ba/__init__.py +++ b/assets/src/ba_data/python/ba/__init__.py @@ -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 diff --git a/assets/src/ba_data/python/ba/_activitytypes.py b/assets/src/ba_data/python/ba/_activitytypes.py index 3fb87912..b6530e24 100644 --- a/assets/src/ba_data/python/ba/_activitytypes.py +++ b/assets/src/ba_data/python/ba/_activitytypes.py @@ -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. diff --git a/assets/src/ba_data/python/ba/_benchmark.py b/assets/src/ba_data/python/ba/_benchmark.py index c5a5aa08..93634e47 100644 --- a/assets/src/ba_data/python/ba/_benchmark.py +++ b/assets/src/ba_data/python/ba/_benchmark.py @@ -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'] diff --git a/assets/src/ba_data/python/ba/_coopsession.py b/assets/src/ba_data/python/ba/_coopsession.py index 7e3967c2..205a6c87 100644 --- a/assets/src/ba_data/python/ba/_coopsession.py +++ b/assets/src/ba_data/python/ba/_coopsession.py @@ -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: diff --git a/assets/src/ba_data/python/ba/_teamssession.py b/assets/src/ba_data/python/ba/_dualteamsession.py similarity index 77% rename from assets/src/ba_data/python/ba/_teamssession.py rename to assets/src/ba_data/python/ba/_dualteamsession.py index 4b274e41..a011e678 100644 --- a/assets/src/ba_data/python/ba/_teamssession.py +++ b/assets/src/ba_data/python/ba/_dualteamsession.py @@ -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})) diff --git a/assets/src/ba_data/python/ba/_freeforallsession.py b/assets/src/ba_data/python/ba/_freeforallsession.py index eb9db6b8..89c5c5c1 100644 --- a/assets/src/ba_data/python/ba/_freeforallsession.py +++ b/assets/src/ba_data/python/ba/_freeforallsession.py @@ -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() diff --git a/assets/src/ba_data/python/ba/_gameactivity.py b/assets/src/ba_data/python/ba/_gameactivity.py index f5a7f7f6..4ee3342c 100644 --- a/assets/src/ba_data/python/ba/_gameactivity.py +++ b/assets/src/ba_data/python/ba/_gameactivity.py @@ -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: diff --git a/assets/src/ba_data/python/ba/_teambasesession.py b/assets/src/ba_data/python/ba/_multiteamsession.py similarity index 97% rename from assets/src/ba_data/python/ba/_teambasesession.py rename to assets/src/ba_data/python/ba/_multiteamsession.py index c01b995c..fe8545fe 100644 --- a/assets/src/ba_data/python/ba/_teambasesession.py +++ b/assets/src/ba_data/python/ba/_multiteamsession.py @@ -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. diff --git a/assets/src/ba_data/python/ba/_server.py b/assets/src/ba_data/python/ba/_server.py index b2c8f8f8..0a72caa9 100644 --- a/assets/src/ba_data/python/ba/_server.py +++ b/assets/src/ba_data/python/ba/_server.py @@ -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) diff --git a/assets/src/ba_data/python/ba/_session.py b/assets/src/ba_data/python/ba/_session.py index 0b620ccf..2c379a7e 100644 --- a/assets/src/ba_data/python/ba/_session.py +++ b/assets/src/ba_data/python/ba/_session.py @@ -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 diff --git a/assets/src/ba_data/python/ba/_teamgame.py b/assets/src/ba_data/python/ba/_teamgame.py index 427edf12..344e22f9 100644 --- a/assets/src/ba_data/python/ba/_teamgame.py +++ b/assets/src/ba_data/python/ba/_teamgame.py @@ -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, diff --git a/assets/src/ba_data/python/ba/internal.py b/assets/src/ba_data/python/ba/internal.py index 2bb83a15..6ff81f15 100644 --- a/assets/src/ba_data/python/ba/internal.py +++ b/assets/src/ba_data/python/ba/internal.py @@ -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, diff --git a/assets/src/ba_data/python/bastd/activity/coopjoinscreen.py b/assets/src/ba_data/python/bastd/activity/coopjoin.py similarity index 99% rename from assets/src/ba_data/python/bastd/activity/coopjoinscreen.py rename to assets/src/ba_data/python/bastd/activity/coopjoin.py index e703bff2..232354e0 100644 --- a/assets/src/ba_data/python/bastd/activity/coopjoinscreen.py +++ b/assets/src/ba_data/python/bastd/activity/coopjoin.py @@ -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]): diff --git a/assets/src/ba_data/python/bastd/activity/coopscorescreen.py b/assets/src/ba_data/python/bastd/activity/coopscore.py similarity index 100% rename from assets/src/ba_data/python/bastd/activity/coopscorescreen.py rename to assets/src/ba_data/python/bastd/activity/coopscore.py diff --git a/assets/src/ba_data/python/bastd/activity/drawscreen.py b/assets/src/ba_data/python/bastd/activity/drawscore.py similarity index 94% rename from assets/src/ba_data/python/bastd/activity/drawscreen.py rename to assets/src/ba_data/python/bastd/activity/drawscore.py index e97ac08c..e2fc96cd 100644 --- a/assets/src/ba_data/python/bastd/activity/drawscreen.py +++ b/assets/src/ba_data/python/bastd/activity/drawscore.py @@ -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]): diff --git a/assets/src/ba_data/python/bastd/activity/dualteamscorescreen.py b/assets/src/ba_data/python/bastd/activity/dualteamscore.py similarity index 96% rename from assets/src/ba_data/python/bastd/activity/dualteamscorescreen.py rename to assets/src/ba_data/python/bastd/activity/dualteamscore.py index 851e98c3..24387dad 100644 --- a/assets/src/ba_data/python/bastd/activity/dualteamscorescreen.py +++ b/assets/src/ba_data/python/bastd/activity/dualteamscore.py @@ -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}', diff --git a/assets/src/ba_data/python/bastd/activity/freeforallendscreen.py b/assets/src/ba_data/python/bastd/activity/freeforallvictory.py similarity index 98% rename from assets/src/ba_data/python/bastd/activity/freeforallendscreen.py rename to assets/src/ba_data/python/bastd/activity/freeforallvictory.py index 0c870ae7..d20481e1 100644 --- a/assets/src/ba_data/python/bastd/activity/freeforallendscreen.py +++ b/assets/src/ba_data/python/bastd/activity/freeforallvictory.py @@ -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) diff --git a/assets/src/ba_data/python/bastd/activity/multiteamjoinscreen.py b/assets/src/ba_data/python/bastd/activity/multiteamjoin.py similarity index 94% rename from assets/src/ba_data/python/bastd/activity/multiteamjoinscreen.py rename to assets/src/ba_data/python/bastd/activity/multiteamjoin.py index 1725892b..08b10b71 100644 --- a/assets/src/ba_data/python/bastd/activity/multiteamjoinscreen.py +++ b/assets/src/ba_data/python/bastd/activity/multiteamjoin.py @@ -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 diff --git a/assets/src/ba_data/python/bastd/activity/teamsscorescreen.py b/assets/src/ba_data/python/bastd/activity/multiteamscore.py similarity index 98% rename from assets/src/ba_data/python/bastd/activity/teamsscorescreen.py rename to assets/src/ba_data/python/bastd/activity/multiteamscore.py index 93e46152..d32cedfe 100644 --- a/assets/src/ba_data/python/bastd/activity/teamsscorescreen.py +++ b/assets/src/ba_data/python/bastd/activity/multiteamscore.py @@ -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, diff --git a/assets/src/ba_data/python/bastd/activity/multiteamendscreen.py b/assets/src/ba_data/python/bastd/activity/multiteamvictory.py similarity index 98% rename from assets/src/ba_data/python/bastd/activity/multiteamendscreen.py rename to assets/src/ba_data/python/bastd/activity/multiteamvictory.py index f3f399c9..74874dee 100644 --- a/assets/src/ba_data/python/bastd/activity/multiteamendscreen.py +++ b/assets/src/ba_data/python/bastd/activity/multiteamvictory.py @@ -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'. diff --git a/assets/src/ba_data/python/bastd/actor/multiteamvictory.py b/assets/src/ba_data/python/bastd/actor/multiteamvictory.py new file mode 100644 index 00000000..74874dee --- /dev/null +++ b/assets/src/ba_data/python/bastd/actor/multiteamvictory.py @@ -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() diff --git a/assets/src/ba_data/python/bastd/actor/respawnicon.py b/assets/src/ba_data/python/bastd/actor/respawnicon.py index b755a025..a6d91b74 100644 --- a/assets/src/ba_data/python/bastd/actor/respawnicon.py +++ b/assets/src/ba_data/python/bastd/actor/respawnicon.py @@ -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. diff --git a/assets/src/ba_data/python/bastd/game/assault.py b/assets/src/ba_data/python/bastd/game/assault.py index 4863759d..110417e3 100644 --- a/assets/src/ba_data/python/bastd/game/assault.py +++ b/assets/src/ba_data/python/bastd/game/assault.py @@ -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]: diff --git a/assets/src/ba_data/python/bastd/game/capturetheflag.py b/assets/src/ba_data/python/bastd/game/capturetheflag.py index c123eaa7..1c53c554 100644 --- a/assets/src/ba_data/python/bastd/game/capturetheflag.py +++ b/assets/src/ba_data/python/bastd/game/capturetheflag.py @@ -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]: diff --git a/assets/src/ba_data/python/bastd/game/conquest.py b/assets/src/ba_data/python/bastd/game/conquest.py index f7430357..79b86368 100644 --- a/assets/src/ba_data/python/bastd/game/conquest.py +++ b/assets/src/ba_data/python/bastd/game/conquest.py @@ -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]: diff --git a/assets/src/ba_data/python/bastd/game/deathmatch.py b/assets/src/ba_data/python/bastd/game/deathmatch.py index 17d6a148..d1c677c4 100644 --- a/assets/src/ba_data/python/bastd/game/deathmatch.py +++ b/assets/src/ba_data/python/bastd/game/deathmatch.py @@ -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 diff --git a/assets/src/ba_data/python/bastd/game/easteregghunt.py b/assets/src/ba_data/python/bastd/game/easteregghunt.py index 9f1ce390..7407dec3 100644 --- a/assets/src/ba_data/python/bastd/game/easteregghunt.py +++ b/assets/src/ba_data/python/bastd/game/easteregghunt.py @@ -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 diff --git a/assets/src/ba_data/python/bastd/game/elimination.py b/assets/src/ba_data/python/bastd/game/elimination.py index 58c4cf8d..e04382dc 100644 --- a/assets/src/ba_data/python/bastd/game/elimination.py +++ b/assets/src/ba_data/python/bastd/game/elimination.py @@ -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( diff --git a/assets/src/ba_data/python/bastd/game/football.py b/assets/src/ba_data/python/bastd/game/football.py index a7a9361d..1d0bb698 100644 --- a/assets/src/ba_data/python/bastd/game/football.py +++ b/assets/src/ba_data/python/bastd/game/football.py @@ -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: diff --git a/assets/src/ba_data/python/bastd/game/hockey.py b/assets/src/ba_data/python/bastd/game/hockey.py index 95705d6d..3af62b0f 100644 --- a/assets/src/ba_data/python/bastd/game/hockey.py +++ b/assets/src/ba_data/python/bastd/game/hockey.py @@ -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]: diff --git a/assets/src/ba_data/python/bastd/game/keepaway.py b/assets/src/ba_data/python/bastd/game/keepaway.py index f39667eb..56bd5f73 100644 --- a/assets/src/ba_data/python/bastd/game/keepaway.py +++ b/assets/src/ba_data/python/bastd/game/keepaway.py @@ -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 diff --git a/assets/src/ba_data/python/bastd/game/kingofthehill.py b/assets/src/ba_data/python/bastd/game/kingofthehill.py index fe9ada72..76b0e7b8 100644 --- a/assets/src/ba_data/python/bastd/game/kingofthehill.py +++ b/assets/src/ba_data/python/bastd/game/kingofthehill.py @@ -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]: diff --git a/assets/src/ba_data/python/bastd/game/meteorshower.py b/assets/src/ba_data/python/bastd/game/meteorshower.py index 2b1dd8c4..9ec11f81 100644 --- a/assets/src/ba_data/python/bastd/game/meteorshower.py +++ b/assets/src/ba_data/python/bastd/game/meteorshower.py @@ -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)) diff --git a/assets/src/ba_data/python/bastd/game/race.py b/assets/src/ba_data/python/bastd/game/race.py index f4331510..0f755a93 100644 --- a/assets/src/ba_data/python/bastd/game/race.py +++ b/assets/src/ba_data/python/bastd/game/race.py @@ -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): diff --git a/assets/src/ba_data/python/bastd/game/targetpractice.py b/assets/src/ba_data/python/bastd/game/targetpractice.py index ba51108a..348f555d 100644 --- a/assets/src/ba_data/python/bastd/game/targetpractice.py +++ b/assets/src/ba_data/python/bastd/game/targetpractice.py @@ -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( diff --git a/assets/src/ba_data/python/bastd/mainmenu.py b/assets/src/ba_data/python/bastd/mainmenu.py index 8939cddf..5e1ea7c2 100644 --- a/assets/src/ba_data/python/bastd/mainmenu.py +++ b/assets/src/ba_data/python/bastd/mainmenu.py @@ -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 diff --git a/assets/src/ba_data/python/bastd/ui/kiosk.py b/assets/src/ba_data/python/bastd/ui/kiosk.py index 262ef871..724113d3 100644 --- a/assets/src/ba_data/python/bastd/ui/kiosk.py +++ b/assets/src/ba_data/python/bastd/ui/kiosk.py @@ -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 diff --git a/assets/src/ba_data/python/bastd/ui/play.py b/assets/src/ba_data/python/bastd/ui/play.py index 6700c5be..294ed725 100644 --- a/assets/src/ba_data/python/bastd/ui/play.py +++ b/assets/src/ba_data/python/bastd/ui/play.py @@ -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 diff --git a/assets/src/ba_data/python/bastd/ui/playlist/__init__.py b/assets/src/ba_data/python/bastd/ui/playlist/__init__.py index 6bfe3c5a..e232156f 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/__init__.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/__init__.py @@ -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') diff --git a/assets/src/ba_data/python/bastd/ui/playlist/browser.py b/assets/src/ba_data/python/bastd/ui/playlist/browser.py index 97ac5f8b..f453b778 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/browser.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/browser.py @@ -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: " + diff --git a/assets/src/ba_data/python/bastd/ui/playoptions.py b/assets/src/ba_data/python/bastd/ui/playoptions.py index 2c3460cf..2c0ec134 100644 --- a/assets/src/ba_data/python/bastd/ui/playoptions.py +++ b/assets/src/ba_data/python/bastd/ui/playoptions.py @@ -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, diff --git a/assets/src/ba_data/python/bastd/ui/store/item.py b/assets/src/ba_data/python/bastd/ui/store/item.py index 994d2039..795e1018 100644 --- a/assets/src/ba_data/python/bastd/ui/store/item.py +++ b/assets/src/ba_data/python/bastd/ui/store/item.py @@ -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')) diff --git a/docs/ba_module.md b/docs/ba_module.md index 945ea8d0..b854e25f 100644 --- a/docs/ba_module.md +++ b/docs/ba_module.md @@ -1,5 +1,5 @@ -

last updated on 2020-04-14 for Ballistica version 1.5.0 build 20001

+

last updated on 2020-04-15 for Ballistica version 1.5.0 build 20001

This page documents the Python classes and functions in the 'ba' module, which are the ones most relevant to modding in Ballistica. If you come across something you feel should be included here or could be better explained, please let me know. Happy modding!


@@ -30,10 +30,10 @@
  • ba.Session
  • ba.Stats
  • @@ -1843,11 +1843,32 @@ its time with lingering corpses, sound effects, etc.

    <constructor>

    ba.DroppedMessage(node: ba.Node)

    +
    + +
    +

    ba.DualTeamSession

    +

    inherits from: ba.MultiTeamSession, ba.Session

    +

    ba.Session type for teams mode games.

    + +

    Category: Gameplay Classes +

    + +

    Attributes Inherited:

    +
    campaign, lobby, max_players, min_players, players, teams
    +

    Methods Inherited:

    +
    announce_game_results(), begin_next_activity(), end(), end_activity(), get_custom_menu_entries(), get_ffa_series_length(), get_game_number(), get_max_players(), get_next_game_description(), get_series_length(), getactivity(), handlemessage(), launch_end_session_activity(), on_activity_end(), on_player_leave(), on_player_request(), on_team_join(), on_team_leave(), set_activity()
    +

    Methods Defined or Overridden:

    +
    +

    <constructor>

    +

    ba.DualTeamSession()

    + +

    Set up playlists and launches a ba.Activity to accept joiners.

    +

    ba.FreeForAllSession

    -

    inherits from: ba.TeamBaseSession, ba.Session

    +

    inherits from: ba.MultiTeamSession, ba.Session

    ba.Session type for free-for-all mode games.

    Category: Gameplay Classes @@ -1856,7 +1877,7 @@ its time with lingering corpses, sound effects, etc.

    Attributes Inherited:

    campaign, lobby, max_players, min_players, players, teams

    Methods Inherited:

    -
    announce_game_results(), begin_next_activity(), end(), end_activity(), get_custom_menu_entries(), get_ffa_series_length(), get_game_number(), get_max_players(), get_next_game_description(), get_series_length(), getactivity(), handlemessage(), launch_end_session_activity(), on_activity_end(), on_player_leave(), on_player_request(), on_team_join(), on_team_leave(), set_activity()
    +
    announce_game_results(), begin_next_activity(), end(), end_activity(), get_custom_menu_entries(), get_ffa_series_length(), get_game_number(), get_max_players(), get_next_game_description(), get_series_length(), getactivity(), handlemessage(), launch_end_session_activity(), on_activity_end(), on_player_leave(), on_player_request(), on_team_join(), on_team_leave(), set_activity()

    Methods Defined or Overridden:

    <constructor>, get_ffa_point_awards()
    @@ -3130,6 +3151,87 @@ m.add_actions(conditions=('they_have_material',

    Models are used for drawing. Use ba.getmodel() to instantiate one.

    +
    +

    ba.MultiTeamSession

    +

    inherits from: ba.Session

    +

    Common base class for ba.DualTeamSession and ba.FreeForAllSession.

    + +

    Category: Gameplay Classes

    + +

    Free-for-all-mode is essentially just teams-mode with each ba.Player having + their own ba.Team, so there is much overlap in functionality. +

    + +

    Attributes Inherited:

    +
    campaign, lobby, max_players, min_players, players, teams
    +

    Methods Inherited:

    +
    begin_next_activity(), end(), end_activity(), get_custom_menu_entries(), getactivity(), handlemessage(), launch_end_session_activity(), on_player_leave(), on_player_request(), on_team_leave(), set_activity()
    +

    Methods Defined or Overridden:

    +
    <constructor>, announce_game_results(), get_ffa_series_length(), get_game_number(), get_max_players(), get_next_game_description(), get_series_length(), on_activity_end(), on_team_join()
    +
    +

    <constructor>

    +

    ba.MultiTeamSession()

    + +

    Set up playlists and launches a ba.Activity to accept joiners.

    + +
    +

    announce_game_results()

    +

    announce_game_results(self, activity: ba.GameActivity, results: ba.TeamGameResults, delay: float, announce_winning_team: bool = True) -> None

    + +

    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_ffa_series_length()

    +

    get_ffa_series_length(self) -> int

    + +

    Return free-for-all series length.

    + +
    +

    get_game_number()

    +

    get_game_number(self) -> int

    + +

    Returns which game in the series is currently being played.

    + +
    +

    get_max_players()

    +

    get_max_players(self) -> int

    + +

    Return max number of ba.Players allowed to join the game at once.

    + +
    +

    get_next_game_description()

    +

    get_next_game_description(self) -> ba.Lstr

    + +

    Returns a description of the next game on deck.

    + +
    +

    get_series_length()

    +

    get_series_length(self) -> int

    + +

    Return teams series length.

    + +
    +

    on_activity_end()

    +

    on_activity_end(self, activity: ba.Activity, results: Any) -> None

    + +

    Called when the current ba.Activity has ended.

    + +

    The ba.Session should look at the results and start +another ba.Activity.

    + +
    +

    on_team_join()

    +

    on_team_join(self, team: ba.Team) -> None

    + +

    Called when a new ba.Team joins the session.

    + +
    +

    ba.MusicPlayer

    <top level class> @@ -3874,7 +3976,7 @@ cause the powerup box to make a sound and disappear or whatnot.

    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 @@ -4339,87 +4441,6 @@ of the session.

    Returns the numeric team ID.

    - -
    -
    -

    ba.TeamBaseSession

    -

    inherits from: ba.Session

    -

    Common base class for ba.TeamsSession and ba.FreeForAllSession.

    - -

    Category: Gameplay Classes

    - -

    Free-for-all-mode is essentially just teams-mode with each ba.Player having - their own ba.Team, so there is much overlap in functionality. -

    - -

    Attributes Inherited:

    -
    campaign, lobby, max_players, min_players, players, teams
    -

    Methods Inherited:

    -
    begin_next_activity(), end(), end_activity(), get_custom_menu_entries(), getactivity(), handlemessage(), launch_end_session_activity(), on_player_leave(), on_player_request(), on_team_leave(), set_activity()
    -

    Methods Defined or Overridden:

    -
    <constructor>, announce_game_results(), get_ffa_series_length(), get_game_number(), get_max_players(), get_next_game_description(), get_series_length(), on_activity_end(), on_team_join()
    -
    -

    <constructor>

    -

    ba.TeamBaseSession()

    - -

    Set up playlists and launches a ba.Activity to accept joiners.

    - -
    -

    announce_game_results()

    -

    announce_game_results(self, activity: ba.GameActivity, results: ba.TeamGameResults, delay: float, announce_winning_team: bool = True) -> None

    - -

    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_ffa_series_length()

    -

    get_ffa_series_length(self) -> int

    - -

    Return free-for-all series length.

    - -
    -

    get_game_number()

    -

    get_game_number(self) -> int

    - -

    Returns which game in the series is currently being played.

    - -
    -

    get_max_players()

    -

    get_max_players(self) -> int

    - -

    Return max number of ba.Players allowed to join the game at once.

    - -
    -

    get_next_game_description()

    -

    get_next_game_description(self) -> ba.Lstr

    - -

    Returns a description of the next game on deck.

    - -
    -

    get_series_length()

    -

    get_series_length(self) -> int

    - -

    Return teams series length.

    - -
    -

    on_activity_end()

    -

    on_activity_end(self, activity: ba.Activity, results: Any) -> None

    - -

    Called when the current ba.Activity has ended.

    - -

    The ba.Session should look at the results and start -another ba.Activity.

    - -
    -

    on_team_join()

    -

    on_team_join(self, team: ba.Team) -> None

    - -

    Called when a new ba.Team joins the session.

    -

    @@ -4514,7 +4535,7 @@ on the ba.Player and their ba.Session]) -> bool

    Class method override; -returns True for ba.TeamsSessions and ba.FreeForAllSessions; +returns True for ba.DualTeamSessions and ba.FreeForAllSessions; False otherwise.

    @@ -4629,27 +4650,6 @@ Results for a completed ba.TeamGameActivity

    Methods:

    <all methods inherited from ba.NotFoundError>


    -

    ba.TeamsSession

    -

    inherits from: ba.TeamBaseSession, ba.Session

    -

    ba.Session type for teams mode games.

    - -

    Category: Gameplay Classes -

    - -

    Attributes Inherited:

    -
    campaign, lobby, max_players, min_players, players, teams
    -

    Methods Inherited:

    -
    announce_game_results(), begin_next_activity(), end(), end_activity(), get_custom_menu_entries(), get_ffa_series_length(), get_game_number(), get_max_players(), get_next_game_description(), get_series_length(), getactivity(), handlemessage(), launch_end_session_activity(), on_activity_end(), on_player_leave(), on_player_request(), on_team_join(), on_team_leave(), set_activity()
    -

    Methods Defined or Overridden:

    -
    -

    <constructor>

    -

    ba.TeamsSession()

    - -

    Set up playlists and launches a ba.Activity to accept joiners.

    - -
    -
    -

    ba.Texture

    <top level class>