mirror of
https://github.com/bombsquad-community/plugin-manager.git
synced 2025-10-08 14:54:36 +00:00
[ci] auto-format
This commit is contained in:
parent
4af785998d
commit
2ac90c8677
10 changed files with 1225 additions and 1214 deletions
|
|
@ -1,10 +1,9 @@
|
|||
#Ported by: Freaku / @[Just] Freak#4999
|
||||
# Ported by: Freaku / @[Just] Freak#4999
|
||||
|
||||
#Join BCS:
|
||||
# Join BCS:
|
||||
# https://discord.gg/ucyaesh
|
||||
|
||||
|
||||
|
||||
# ba_meta require api 7
|
||||
|
||||
from __future__ import annotations
|
||||
|
|
@ -18,7 +17,6 @@ if TYPE_CHECKING:
|
|||
from typing import Any, Type, List, Dict, Tuple, Union, Sequence, Optional
|
||||
|
||||
|
||||
|
||||
class State:
|
||||
def __init__(self, bomb=None, grab=False, punch=False, curse=False, required=False, final=False, name=''):
|
||||
self.bomb = bomb
|
||||
|
|
@ -35,8 +33,8 @@ class State:
|
|||
def apply(self, spaz):
|
||||
spaz.disconnect_controls_from_player()
|
||||
spaz.connect_controls_to_player(enable_punch=self.punch,
|
||||
enable_bomb=self.bomb,
|
||||
enable_pickup=self.grab)
|
||||
enable_bomb=self.bomb,
|
||||
enable_pickup=self.grab)
|
||||
if self.curse:
|
||||
spaz.curse_time = -1
|
||||
spaz.curse()
|
||||
|
|
@ -48,16 +46,18 @@ class State:
|
|||
return (self.name)
|
||||
|
||||
|
||||
states = [ State(bomb='normal', name='Basic Bombs'),
|
||||
State(bomb='ice', name='Frozen Bombs'),
|
||||
State(bomb='sticky', name='Sticky Bombs'),
|
||||
State(bomb='impact', name='Impact Bombs'),
|
||||
State(grab=True, name='Grabbing only'),
|
||||
State(punch=True, name='Punching only'),
|
||||
State(curse=True, name='Cursed', final=True) ]
|
||||
states = [State(bomb='normal', name='Basic Bombs'),
|
||||
State(bomb='ice', name='Frozen Bombs'),
|
||||
State(bomb='sticky', name='Sticky Bombs'),
|
||||
State(bomb='impact', name='Impact Bombs'),
|
||||
State(grab=True, name='Grabbing only'),
|
||||
State(punch=True, name='Punching only'),
|
||||
State(curse=True, name='Cursed', final=True)]
|
||||
|
||||
|
||||
class Player(ba.Player['Team']):
|
||||
"""Our player type for this game."""
|
||||
|
||||
def __init__(self):
|
||||
self.state = None
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -225,7 +225,6 @@ class InvicibleOneGame(ba.TeamGameActivity[Player, Team]):
|
|||
scoring_team.time_remaining = max(
|
||||
0, scoring_team.time_remaining - 1)
|
||||
|
||||
|
||||
self._update_scoreboard()
|
||||
|
||||
# announce numbers we have sounds for
|
||||
|
|
@ -286,7 +285,8 @@ class InvicibleOneGame(ba.TeamGameActivity[Player, Team]):
|
|||
self._invicible_one_player = player
|
||||
|
||||
if self._invicible_one_is_lazy:
|
||||
player.actor.connect_controls_to_player(enable_punch = False, enable_pickup = False, enable_bomb = False)
|
||||
player.actor.connect_controls_to_player(
|
||||
enable_punch=False, enable_pickup=False, enable_bomb=False)
|
||||
if player.actor.node.torso_model != None:
|
||||
player.actor.node.color_mask_texture = None
|
||||
player.actor.node.color_texture = None
|
||||
|
|
@ -307,9 +307,8 @@ class InvicibleOneGame(ba.TeamGameActivity[Player, Team]):
|
|||
player.actor.pickup_sounds = invi_sound
|
||||
player.actor.death_sounds = invi_sound
|
||||
player.actor.fall_sounds = invi_sound
|
||||
|
||||
player.actor.node.name = ''
|
||||
|
||||
player.actor.node.name = ''
|
||||
|
||||
def handlemessage(self, msg: Any) -> Any:
|
||||
if isinstance(msg, ba.PlayerDiedMessage):
|
||||
|
|
|
|||
|
|
@ -1,38 +1,45 @@
|
|||
# ba_meta require api 7
|
||||
from typing import Sequence
|
||||
import ba, _ba, random
|
||||
import ba
|
||||
import _ba
|
||||
import random
|
||||
from bastd.actor.spaz import Spaz
|
||||
from bastd.actor.scoreboard import Scoreboard
|
||||
|
||||
|
||||
class Player(ba.Player['Team']):
|
||||
"""Our player type for this game."""
|
||||
"""Our player type for this game."""
|
||||
|
||||
|
||||
class Team(ba.Team[Player]):
|
||||
"""Our team type for this game."""
|
||||
"""Our team type for this game."""
|
||||
|
||||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
self.score = 1
|
||||
|
||||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
self.score = 1
|
||||
|
||||
class ChooseingSpazHitMessage:
|
||||
def __init__(self, hitter:Player) -> None:
|
||||
self.hitter = hitter
|
||||
def __init__(self, hitter: Player) -> None:
|
||||
self.hitter = hitter
|
||||
|
||||
|
||||
class ChooseingSpazDieMessage:
|
||||
def __init__(self, killer:Player) -> None:
|
||||
self.killer = killer
|
||||
def __init__(self, killer: Player) -> None:
|
||||
self.killer = killer
|
||||
|
||||
|
||||
class ChooseingSpaz(Spaz):
|
||||
def __init__(
|
||||
self,
|
||||
pos:Sequence[float],
|
||||
color: Sequence[float] = (1.0, 1.0, 1.0),
|
||||
highlight: Sequence[float] = (0.5, 0.5, 0.5),
|
||||
):
|
||||
super().__init__(color, highlight, "Spaz", None, True, True, False, False)
|
||||
self.last_player_attacked_by = None
|
||||
self.stand(pos)
|
||||
self.loc = ba.newnode(
|
||||
def __init__(
|
||||
self,
|
||||
pos: Sequence[float],
|
||||
color: Sequence[float] = (1.0, 1.0, 1.0),
|
||||
highlight: Sequence[float] = (0.5, 0.5, 0.5),
|
||||
):
|
||||
super().__init__(color, highlight, "Spaz", None, True, True, False, False)
|
||||
self.last_player_attacked_by = None
|
||||
self.stand(pos)
|
||||
self.loc = ba.newnode(
|
||||
'locator',
|
||||
attrs={
|
||||
'shape': 'circleOutline',
|
||||
|
|
@ -43,221 +50,223 @@ class ChooseingSpaz(Spaz):
|
|||
'additive': True,
|
||||
},
|
||||
)
|
||||
self.node.connectattr("position", self.loc, "position")
|
||||
ba.animate_array(self.loc, "size", 1, keys={0:[0.5,], 1:[2,], 1.5:[0.5]}, loop=True)
|
||||
self.node.connectattr("position", self.loc, "position")
|
||||
ba.animate_array(self.loc, "size", 1, keys={0: [0.5,], 1: [2,], 1.5: [0.5]}, loop=True)
|
||||
|
||||
def handlemessage(self, msg):
|
||||
if isinstance(msg, ba.FreezeMessage):
|
||||
return
|
||||
def handlemessage(self, msg):
|
||||
if isinstance(msg, ba.FreezeMessage):
|
||||
return
|
||||
|
||||
if isinstance(msg, ba.PowerupMessage):
|
||||
if not(msg.poweruptype == "health"):
|
||||
return
|
||||
if isinstance(msg, ba.PowerupMessage):
|
||||
if not (msg.poweruptype == "health"):
|
||||
return
|
||||
|
||||
super().handlemessage(msg)
|
||||
super().handlemessage(msg)
|
||||
|
||||
if isinstance(msg, ba.HitMessage):
|
||||
self.handlemessage(ba.PowerupMessage("health"))
|
||||
if isinstance(msg, ba.HitMessage):
|
||||
self.handlemessage(ba.PowerupMessage("health"))
|
||||
|
||||
player = msg.get_source_player(Player)
|
||||
if self.is_alive():
|
||||
self.activity.handlemessage(ChooseingSpazHitMessage(player))
|
||||
self.last_player_attacked_by = player
|
||||
player = msg.get_source_player(Player)
|
||||
if self.is_alive():
|
||||
self.activity.handlemessage(ChooseingSpazHitMessage(player))
|
||||
self.last_player_attacked_by = player
|
||||
|
||||
elif isinstance(msg, ba.DieMessage):
|
||||
player = self.last_player_attacked_by
|
||||
|
||||
elif isinstance(msg, ba.DieMessage):
|
||||
player = self.last_player_attacked_by
|
||||
if msg.how.value != ba.DeathType.GENERIC.value:
|
||||
self._dead = True
|
||||
self.activity.handlemessage(ChooseingSpazDieMessage(player))
|
||||
|
||||
if msg.how.value != ba.DeathType.GENERIC.value:
|
||||
self._dead = True
|
||||
self.activity.handlemessage(ChooseingSpazDieMessage(player))
|
||||
self.loc.delete()
|
||||
|
||||
self.loc.delete()
|
||||
def stand(self, pos=(0, 0, 0), angle=0):
|
||||
self.handlemessage(ba.StandMessage(pos, angle))
|
||||
|
||||
def recolor(self, color, highlight=(1, 1, 1)):
|
||||
self.node.color = color
|
||||
self.node.highlight = highlight
|
||||
self.loc.color = color
|
||||
|
||||
|
||||
def stand(self, pos = (0,0,0), angle = 0):
|
||||
self.handlemessage(ba.StandMessage(pos,angle))
|
||||
|
||||
def recolor(self, color, highlight = (1,1,1)):
|
||||
self.node.color = color
|
||||
self.node.highlight = highlight
|
||||
self.loc.color = color
|
||||
|
||||
class ChooseBilbord(ba.Actor):
|
||||
def __init__(self, player:Player, delay = 0.1) -> None:
|
||||
super().__init__()
|
||||
def __init__(self, player: Player, delay=0.1) -> None:
|
||||
super().__init__()
|
||||
|
||||
icon = player.get_icon()
|
||||
self.scale = 100
|
||||
icon = player.get_icon()
|
||||
self.scale = 100
|
||||
|
||||
self.node = ba.newnode(
|
||||
'image',
|
||||
delegate=self,
|
||||
attrs={
|
||||
"position":(60,-125),
|
||||
'texture': icon['texture'],
|
||||
'tint_texture': icon['tint_texture'],
|
||||
'tint_color': icon['tint_color'],
|
||||
'tint2_color': icon['tint2_color'],
|
||||
'opacity': 1.0,
|
||||
'absolute_scale': True,
|
||||
'attach': "topLeft"
|
||||
},
|
||||
)
|
||||
self.node = ba.newnode(
|
||||
'image',
|
||||
delegate=self,
|
||||
attrs={
|
||||
"position": (60, -125),
|
||||
'texture': icon['texture'],
|
||||
'tint_texture': icon['tint_texture'],
|
||||
'tint_color': icon['tint_color'],
|
||||
'tint2_color': icon['tint2_color'],
|
||||
'opacity': 1.0,
|
||||
'absolute_scale': True,
|
||||
'attach': "topLeft"
|
||||
},
|
||||
)
|
||||
|
||||
self.name_node = ba.newnode(
|
||||
'text',
|
||||
owner=self.node,
|
||||
attrs={
|
||||
'position': (60,-185),
|
||||
'text': ba.Lstr(value=player.getname()),
|
||||
'color': ba.safecolor(player.team.color),
|
||||
'h_align': 'center',
|
||||
'v_align': 'center',
|
||||
'vr_depth': 410,
|
||||
'flatness': 1.0,
|
||||
'h_attach': 'left',
|
||||
'v_attach': 'top',
|
||||
'maxwidth':self.scale
|
||||
},
|
||||
)
|
||||
|
||||
ba.animate_array(self.node, "scale", keys={0 + delay:[0,0], 0.05 + delay:[self.scale, self.scale]}, size=1)
|
||||
ba.animate(self.name_node, "scale", {0 + delay:0, 0.07 + delay:1})
|
||||
self.name_node = ba.newnode(
|
||||
'text',
|
||||
owner=self.node,
|
||||
attrs={
|
||||
'position': (60, -185),
|
||||
'text': ba.Lstr(value=player.getname()),
|
||||
'color': ba.safecolor(player.team.color),
|
||||
'h_align': 'center',
|
||||
'v_align': 'center',
|
||||
'vr_depth': 410,
|
||||
'flatness': 1.0,
|
||||
'h_attach': 'left',
|
||||
'v_attach': 'top',
|
||||
'maxwidth': self.scale
|
||||
},
|
||||
)
|
||||
|
||||
def handlemessage(self, msg):
|
||||
super().handlemessage(msg)
|
||||
if isinstance(msg, ba.DieMessage):
|
||||
ba.animate_array(self.node, "scale", keys={0:self.node.scale, 0.05:[0,0]}, size=1)
|
||||
ba.animate(self.name_node, "scale", {0:self.name_node.scale, 0.07:0})
|
||||
ba.animate_array(self.node, "scale", keys={
|
||||
0 + delay: [0, 0], 0.05 + delay: [self.scale, self.scale]}, size=1)
|
||||
ba.animate(self.name_node, "scale", {0 + delay: 0, 0.07 + delay: 1})
|
||||
|
||||
def __delete():
|
||||
self.node.delete()
|
||||
self.name_node.delete()
|
||||
|
||||
ba.timer(0.2, __delete)
|
||||
def handlemessage(self, msg):
|
||||
super().handlemessage(msg)
|
||||
if isinstance(msg, ba.DieMessage):
|
||||
ba.animate_array(self.node, "scale", keys={0: self.node.scale, 0.05: [0, 0]}, size=1)
|
||||
ba.animate(self.name_node, "scale", {0: self.name_node.scale, 0.07: 0})
|
||||
|
||||
def __delete():
|
||||
self.node.delete()
|
||||
self.name_node.delete()
|
||||
|
||||
ba.timer(0.2, __delete)
|
||||
|
||||
# ba_meta export game
|
||||
|
||||
|
||||
class LastPunchStand(ba.TeamGameActivity[Player, Team]):
|
||||
name = "Last Punch Stand"
|
||||
description = "Last one punchs the choosing spaz wins"
|
||||
tips = [
|
||||
'keep punching the choosing spaz to be last punched player at times up!',
|
||||
'you can not frezz the choosing spaz',
|
||||
"evry time you punch the choosing spaz, you will get one point",
|
||||
]
|
||||
name = "Last Punch Stand"
|
||||
description = "Last one punchs the choosing spaz wins"
|
||||
tips = [
|
||||
'keep punching the choosing spaz to be last punched player at times up!',
|
||||
'you can not frezz the choosing spaz',
|
||||
"evry time you punch the choosing spaz, you will get one point",
|
||||
]
|
||||
|
||||
default_music = ba.MusicType.TO_THE_DEATH
|
||||
default_music = ba.MusicType.TO_THE_DEATH
|
||||
|
||||
available_settings = [
|
||||
ba.FloatSetting("min time limit (in seconds)", 50.0, min_value=30.0),
|
||||
ba.FloatSetting("max time limit (in seconds)", 160.0, 60),
|
||||
available_settings = [
|
||||
ba.FloatSetting("min time limit (in seconds)", 50.0, min_value=30.0),
|
||||
ba.FloatSetting("max time limit (in seconds)", 160.0, 60),
|
||||
|
||||
]
|
||||
]
|
||||
|
||||
def __init__(self, settings: dict):
|
||||
super().__init__(settings)
|
||||
self._min_timelimit = settings["min time limit (in seconds)"]
|
||||
self._max_timelimit = settings["max time limit (in seconds)"]
|
||||
if (self._min_timelimit > self._max_timelimit):
|
||||
self._max_timelimit = self._min_timelimit
|
||||
def __init__(self, settings: dict):
|
||||
super().__init__(settings)
|
||||
self._min_timelimit = settings["min time limit (in seconds)"]
|
||||
self._max_timelimit = settings["max time limit (in seconds)"]
|
||||
if (self._min_timelimit > self._max_timelimit):
|
||||
self._max_timelimit = self._min_timelimit
|
||||
|
||||
self._choosing_spaz_defcolor = (0.5,0.5,0.5)
|
||||
self.choosing_spaz = None
|
||||
self.choosed_player = None
|
||||
self.times_uped = False
|
||||
self.scoreboard = Scoreboard()
|
||||
self._choosing_spaz_defcolor = (0.5, 0.5, 0.5)
|
||||
self.choosing_spaz = None
|
||||
self.choosed_player = None
|
||||
self.times_uped = False
|
||||
self.scoreboard = Scoreboard()
|
||||
|
||||
def times_up(self):
|
||||
self.times_uped = True
|
||||
def times_up(self):
|
||||
self.times_uped = True
|
||||
|
||||
for player in self.players:
|
||||
if self.choosed_player and (player.team.id != self.choosed_player.team.id):
|
||||
player.actor._cursed = True
|
||||
player.actor.curse_explode()
|
||||
for player in self.players:
|
||||
if self.choosed_player and (player.team.id != self.choosed_player.team.id):
|
||||
player.actor._cursed = True
|
||||
player.actor.curse_explode()
|
||||
|
||||
self.end_game()
|
||||
self.end_game()
|
||||
|
||||
def __get_spaz_bot_spawn_point(self):
|
||||
if len(self.map.tnt_points) > 0:
|
||||
return self.map.tnt_points[random.randint(0, len(self.map.tnt_points)-1)]
|
||||
else:
|
||||
return (0, 6, 0)
|
||||
def __get_spaz_bot_spawn_point(self):
|
||||
if len(self.map.tnt_points) > 0:
|
||||
return self.map.tnt_points[random.randint(0, len(self.map.tnt_points)-1)]
|
||||
else:
|
||||
return (0, 6, 0)
|
||||
|
||||
def spaw_bot(self):
|
||||
"spawns a choosing bot"
|
||||
def spaw_bot(self):
|
||||
"spawns a choosing bot"
|
||||
|
||||
self.choosing_spaz = ChooseingSpaz(self.__get_spaz_bot_spawn_point())
|
||||
self.choose_bilbord = None
|
||||
self.choosing_spaz = ChooseingSpaz(self.__get_spaz_bot_spawn_point())
|
||||
self.choose_bilbord = None
|
||||
|
||||
def on_begin(self) -> None:
|
||||
super().on_begin()
|
||||
time_limit = random.randint(self._min_timelimit, self._max_timelimit)
|
||||
self.spaw_bot()
|
||||
ba.timer(time_limit, self.times_up)
|
||||
def on_begin(self) -> None:
|
||||
super().on_begin()
|
||||
time_limit = random.randint(self._min_timelimit, self._max_timelimit)
|
||||
self.spaw_bot()
|
||||
ba.timer(time_limit, self.times_up)
|
||||
|
||||
self.setup_standard_powerup_drops(False)
|
||||
self.setup_standard_powerup_drops(False)
|
||||
|
||||
def end_game(self) -> None:
|
||||
results = ba.GameResults()
|
||||
for team in self.teams:
|
||||
if self.choosed_player and (team.id == self.choosed_player.team.id): team.score += 100
|
||||
results.set_team_score(team, team.score)
|
||||
self.end(results=results)
|
||||
def end_game(self) -> None:
|
||||
results = ba.GameResults()
|
||||
for team in self.teams:
|
||||
if self.choosed_player and (team.id == self.choosed_player.team.id):
|
||||
team.score += 100
|
||||
results.set_team_score(team, team.score)
|
||||
self.end(results=results)
|
||||
|
||||
def change_choosed_player(self, hitter:Player):
|
||||
if hitter:
|
||||
self.choosing_spaz.recolor(hitter.color, hitter.highlight)
|
||||
self.choosed_player = hitter
|
||||
hitter.team.score += 1
|
||||
self.choose_bilbord = ChooseBilbord(hitter)
|
||||
self.hide_score_board()
|
||||
else:
|
||||
self.choosing_spaz.recolor(self._choosing_spaz_defcolor)
|
||||
self.choosed_player = None
|
||||
self.choose_bilbord = None
|
||||
self.show_score_board()
|
||||
def change_choosed_player(self, hitter: Player):
|
||||
if hitter:
|
||||
self.choosing_spaz.recolor(hitter.color, hitter.highlight)
|
||||
self.choosed_player = hitter
|
||||
hitter.team.score += 1
|
||||
self.choose_bilbord = ChooseBilbord(hitter)
|
||||
self.hide_score_board()
|
||||
else:
|
||||
self.choosing_spaz.recolor(self._choosing_spaz_defcolor)
|
||||
self.choosed_player = None
|
||||
self.choose_bilbord = None
|
||||
self.show_score_board()
|
||||
|
||||
def show_score_board(self):
|
||||
self.scoreboard = Scoreboard()
|
||||
for team in self.teams:
|
||||
self.scoreboard.set_team_value(team, team.score)
|
||||
|
||||
def hide_score_board(self):
|
||||
self.scoreboard = None
|
||||
def show_score_board(self):
|
||||
self.scoreboard = Scoreboard()
|
||||
for team in self.teams:
|
||||
self.scoreboard.set_team_value(team, team.score)
|
||||
|
||||
def _watch_dog_(self):
|
||||
"checks if choosing spaz exists"
|
||||
#choosing spaz wont respawn if death type if generic
|
||||
#this becuse we dont want to keep respawn him when he dies because of losing referce
|
||||
#but sometimes "choosing spaz" dies naturaly and his death type is generic! so it wont respawn back again
|
||||
#thats why we have this function; to check if spaz exits in the case that he didnt respawned
|
||||
|
||||
if self.choosing_spaz:
|
||||
if self.choosing_spaz._dead:
|
||||
self.spaw_bot()
|
||||
else:
|
||||
self.spaw_bot()
|
||||
def hide_score_board(self):
|
||||
self.scoreboard = None
|
||||
|
||||
def handlemessage(self, msg):
|
||||
super().handlemessage(msg)
|
||||
def _watch_dog_(self):
|
||||
"checks if choosing spaz exists"
|
||||
# choosing spaz wont respawn if death type if generic
|
||||
# this becuse we dont want to keep respawn him when he dies because of losing referce
|
||||
# but sometimes "choosing spaz" dies naturaly and his death type is generic! so it wont respawn back again
|
||||
# thats why we have this function; to check if spaz exits in the case that he didnt respawned
|
||||
|
||||
if isinstance(msg, ChooseingSpazHitMessage):
|
||||
hitter = msg.hitter
|
||||
if self.choosing_spaz.node and hitter:
|
||||
self.change_choosed_player(hitter)
|
||||
if self.choosing_spaz:
|
||||
if self.choosing_spaz._dead:
|
||||
self.spaw_bot()
|
||||
else:
|
||||
self.spaw_bot()
|
||||
|
||||
elif isinstance(msg, ChooseingSpazDieMessage):
|
||||
self.spaw_bot()
|
||||
self.change_choosed_player(None)
|
||||
|
||||
elif isinstance(msg, ba.PlayerDiedMessage):
|
||||
player = msg.getplayer(Player)
|
||||
if not (self.has_ended() or self.times_uped):
|
||||
self.respawn_player(player, 0)
|
||||
|
||||
if self.choosed_player and (player.getname(True) == self.choosed_player.getname(True)):
|
||||
self.change_choosed_player(None)
|
||||
def handlemessage(self, msg):
|
||||
super().handlemessage(msg)
|
||||
|
||||
self._watch_dog_()
|
||||
if isinstance(msg, ChooseingSpazHitMessage):
|
||||
hitter = msg.hitter
|
||||
if self.choosing_spaz.node and hitter:
|
||||
self.change_choosed_player(hitter)
|
||||
|
||||
elif isinstance(msg, ChooseingSpazDieMessage):
|
||||
self.spaw_bot()
|
||||
self.change_choosed_player(None)
|
||||
|
||||
elif isinstance(msg, ba.PlayerDiedMessage):
|
||||
player = msg.getplayer(Player)
|
||||
if not (self.has_ended() or self.times_uped):
|
||||
self.respawn_player(player, 0)
|
||||
|
||||
if self.choosed_player and (player.getname(True) == self.choosed_player.getname(True)):
|
||||
self.change_choosed_player(None)
|
||||
|
||||
self._watch_dog_()
|
||||
|
|
|
|||
|
|
@ -6,16 +6,17 @@ from typing import TYPE_CHECKING
|
|||
|
||||
import random
|
||||
import enum
|
||||
import ba, _ba
|
||||
import ba
|
||||
import _ba
|
||||
|
||||
from bastd.actor.scoreboard import Scoreboard
|
||||
from bastd.actor.powerupbox import PowerupBox
|
||||
from bastd.gameutils import SharedObjects
|
||||
|
||||
#from rocket
|
||||
# from rocket
|
||||
from bastd.actor.bomb import Blast
|
||||
|
||||
#from railgun
|
||||
# from railgun
|
||||
from bastd.actor.playerspaz import PlayerSpaz
|
||||
from bastd.actor.spaz import Spaz
|
||||
|
||||
|
|
@ -27,7 +28,7 @@ if TYPE_CHECKING:
|
|||
STORAGE_ATTR_NAME = f'_shared_{__name__}_factory'
|
||||
|
||||
|
||||
#+++++++++++++++++++Rocket++++++++++++++++++++++++
|
||||
# +++++++++++++++++++Rocket++++++++++++++++++++++++
|
||||
class RocketFactory:
|
||||
"""Quake Rocket factory"""
|
||||
|
||||
|
|
@ -182,10 +183,10 @@ class Rocket(ba.Actor):
|
|||
elif isinstance(msg, ba.OutOfBoundsMessage):
|
||||
self.handlemessage(ba.DieMessage())
|
||||
|
||||
#-------------------Rocket--------------------------
|
||||
# -------------------Rocket--------------------------
|
||||
|
||||
|
||||
#++++++++++++++++++Railgun++++++++++++++++++++++++++
|
||||
# ++++++++++++++++++Railgun++++++++++++++++++++++++++
|
||||
class Railgun:
|
||||
"""Very dangerous weapon"""
|
||||
|
||||
|
|
@ -298,7 +299,8 @@ class RailBullet(ba.Actor):
|
|||
elif isinstance(msg, ba.OutOfBoundsMessage):
|
||||
self.handlemessage(ba.DieMessage())
|
||||
|
||||
#------------------Railgun-------------------------
|
||||
# ------------------Railgun-------------------------
|
||||
|
||||
|
||||
class Player(ba.Player['Team']):
|
||||
"""Our player"""
|
||||
|
|
@ -306,6 +308,7 @@ class Player(ba.Player['Team']):
|
|||
|
||||
class Team(ba.Team[Player]):
|
||||
"""Our team"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.score = 0
|
||||
|
||||
|
|
@ -618,10 +621,10 @@ class Obstacle(ba.Actor):
|
|||
'color_texture':
|
||||
ba.gettexture('bunnyColor'),
|
||||
'materials': [SharedObjects.get().footing_material]
|
||||
if mirror else [
|
||||
SharedObjects.get().object_material,
|
||||
SharedObjects.get().footing_material
|
||||
]
|
||||
if mirror else [
|
||||
SharedObjects.get().object_material,
|
||||
SharedObjects.get().footing_material
|
||||
]
|
||||
})
|
||||
|
||||
def handlemessage(self, msg: Any) -> Any:
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Released under the MIT License. See LICENSE for details.
|
||||
# y me (: itsre3
|
||||
# =>2<=
|
||||
#BCS RULES
|
||||
# BCS RULES
|
||||
#
|
||||
"""Defines Race mini-game."""
|
||||
|
||||
|
|
@ -14,7 +14,8 @@ import random
|
|||
from typing import TYPE_CHECKING
|
||||
from dataclasses import dataclass
|
||||
|
||||
import ba, _ba
|
||||
import ba
|
||||
import _ba
|
||||
from bastd.actor.bomb import Bomb
|
||||
from bastd.actor.playerspaz import PlayerSpaz
|
||||
from bastd.actor.scoreboard import Scoreboard
|
||||
|
|
@ -215,7 +216,7 @@ class SleepRaceGame(ba.TeamGameActivity[Player, Team]):
|
|||
('modify_part_collision', 'physical', False),
|
||||
('call', 'at_connect',
|
||||
self._handle_race_point_collide),
|
||||
))
|
||||
))
|
||||
for rpt in pts:
|
||||
self._regions.append(RaceRegion(rpt, len(self._regions)))
|
||||
|
||||
|
|
@ -263,7 +264,7 @@ class SleepRaceGame(ba.TeamGameActivity[Player, Team]):
|
|||
translate=('statements', 'Killing ${NAME} for'
|
||||
' skipping part of the track!'),
|
||||
subs=[('${NAME}', player.getname(full=True))]),
|
||||
color=(1, 0, 0))
|
||||
color=(1, 0, 0))
|
||||
else:
|
||||
# If this player is in first, note that this is the
|
||||
# front-most race-point.
|
||||
|
|
@ -378,7 +379,7 @@ class SleepRaceGame(ba.TeamGameActivity[Player, Team]):
|
|||
'${TEAM} is disqualified because ${PLAYER} left'),
|
||||
subs=[('${TEAM}', player.team.name),
|
||||
('${PLAYER}', player.getname(full=True))]),
|
||||
color=(1, 1, 0))
|
||||
color=(1, 1, 0))
|
||||
player.team.finished = True
|
||||
player.team.time = None
|
||||
player.team.lap = 0
|
||||
|
|
@ -435,7 +436,6 @@ class SleepRaceGame(ba.TeamGameActivity[Player, Team]):
|
|||
'text': 'By itsre3'
|
||||
}))
|
||||
|
||||
|
||||
# Throw a timer up on-screen.
|
||||
self._time_text = ba.NodeActor(
|
||||
ba.newnode('text',
|
||||
|
|
@ -543,35 +543,34 @@ class SleepRaceGame(ba.TeamGameActivity[Player, Team]):
|
|||
self._spawn_bomb,
|
||||
repeat=True)
|
||||
|
||||
|
||||
def knock_players():
|
||||
activity = _ba.get_foreground_host_activity()
|
||||
gnode = ba.getactivity().globalsnode
|
||||
for players in activity.players:
|
||||
gnode.tint = (0.5,0.5,0.5)
|
||||
gnode.tint = (0.5, 0.5, 0.5)
|
||||
node = players.actor.node
|
||||
node.handlemessage('knockout', 600.0)
|
||||
self.text_offset = ba.newnode('math',
|
||||
owner=node,
|
||||
attrs={'input1': (-0.5, 0.5, 0.25),
|
||||
'operation': 'add'})
|
||||
owner=node,
|
||||
attrs={'input1': (-0.5, 0.5, 0.25),
|
||||
'operation': 'add'})
|
||||
node.connectattr(
|
||||
'torso_position',
|
||||
self.text_offset,
|
||||
'input2')
|
||||
'torso_position',
|
||||
self.text_offset,
|
||||
'input2')
|
||||
self.text = ba.newnode('text',
|
||||
owner=node,
|
||||
attrs={
|
||||
'h_align': 'right',
|
||||
'color': (1.0, 1.0, 1.0),
|
||||
'shadow': 1.0,
|
||||
'text': 'z z',
|
||||
'scale': 0.01,
|
||||
'in_world': True})
|
||||
owner=node,
|
||||
attrs={
|
||||
'h_align': 'right',
|
||||
'color': (1.0, 1.0, 1.0),
|
||||
'shadow': 1.0,
|
||||
'text': 'z z',
|
||||
'scale': 0.01,
|
||||
'in_world': True})
|
||||
self.text_offset.connectattr(
|
||||
'output',
|
||||
self.text,
|
||||
'position')
|
||||
'output',
|
||||
self.text,
|
||||
'position')
|
||||
ba.animate(self.text, 'scale', {0: 0.0, 1.0: 0.01})
|
||||
ba.timer(2, self.text.delete)
|
||||
|
||||
|
|
@ -580,9 +579,8 @@ class SleepRaceGame(ba.TeamGameActivity[Player, Team]):
|
|||
self._knockout_timer = ba.Timer(knock_time,
|
||||
knock_players,
|
||||
repeat=True)
|
||||
|
||||
self._race_started = True
|
||||
|
||||
self._race_started = True
|
||||
|
||||
def _update_player_order(self) -> None:
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#snake
|
||||
# snake
|
||||
# Released under the MIT License. See LICENSE for details.
|
||||
#
|
||||
"""Snake game by SEBASTIAN2059"""
|
||||
|
|
@ -18,50 +18,61 @@ from bastd.actor import bomb as stdbomb
|
|||
if TYPE_CHECKING:
|
||||
from typing import Any, Type, List, Dict, Tuple, Union, Sequence, Optional
|
||||
|
||||
|
||||
class ScoreMessage:
|
||||
"""It will help us with the scores."""
|
||||
def __init__(self,player: Player):
|
||||
|
||||
def __init__(self, player: Player):
|
||||
self.player = player
|
||||
|
||||
|
||||
def getplayer(self):
|
||||
return self.player
|
||||
|
||||
|
||||
class Player(ba.Player['Team']):
|
||||
"""Our player type for this game."""
|
||||
|
||||
def __init__(self) -> None:
|
||||
|
||||
|
||||
self.mines = []
|
||||
self.actived = None
|
||||
|
||||
|
||||
class Team(ba.Team[Player]):
|
||||
"""Our team type for this game."""
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.score = 0
|
||||
|
||||
|
||||
lang = ba.app.lang.language
|
||||
if lang == 'Spanish':
|
||||
description = 'Sobrevive a un número determinado de minas para ganar.'
|
||||
join_description = 'Corre y no te dejes matar.'
|
||||
view_description = 'sobrevive ${ARG1} minas'
|
||||
|
||||
|
||||
else:
|
||||
description = 'Survive a set number of mines to win.'
|
||||
join_description = "Run and don't get killed."
|
||||
view_description = 'survive ${ARG1} mines'
|
||||
|
||||
|
||||
class Custom_Mine(stdbomb.Bomb):
|
||||
"""Custom a mine :)"""
|
||||
def __init__(self,position,source_player):
|
||||
stdbomb.Bomb.__init__(self,position=position,bomb_type='land_mine',source_player=source_player)
|
||||
|
||||
def handlemessage(self,msg: Any) -> Any:
|
||||
|
||||
def __init__(self, position, source_player):
|
||||
stdbomb.Bomb.__init__(self, position=position, bomb_type='land_mine',
|
||||
source_player=source_player)
|
||||
|
||||
def handlemessage(self, msg: Any) -> Any:
|
||||
if isinstance(msg, ba.HitMessage):
|
||||
return
|
||||
else:
|
||||
super().handlemessage(msg)
|
||||
|
||||
# ba_meta export game
|
||||
|
||||
|
||||
class SnakeGame(ba.TeamGameActivity[Player, Team]):
|
||||
"""A game type based on acquiring kills."""
|
||||
|
||||
|
|
@ -122,17 +133,17 @@ class SnakeGame(ba.TeamGameActivity[Player, Team]):
|
|||
self._scoreboard = Scoreboard()
|
||||
self._score_to_win: Optional[int] = None
|
||||
self._dingsound = ba.getsound('dingSmall')
|
||||
|
||||
|
||||
self._beep_1_sound = ba.getsound('raceBeep1')
|
||||
self._beep_2_sound = ba.getsound('raceBeep2')
|
||||
|
||||
|
||||
self._epic_mode = bool(settings['Epic Mode'])
|
||||
self._kills_to_win_per_player = int(
|
||||
settings['Score to Win'])
|
||||
self._time_limit = float(settings['Time Limit'])
|
||||
|
||||
|
||||
self._started = False
|
||||
|
||||
|
||||
# Base class overrides.
|
||||
self.slow_motion = self._epic_mode
|
||||
self.default_music = (ba.MusicType.EPIC if self._epic_mode else
|
||||
|
|
@ -151,14 +162,13 @@ class SnakeGame(ba.TeamGameActivity[Player, Team]):
|
|||
def on_begin(self) -> None:
|
||||
super().on_begin()
|
||||
self.setup_standard_time_limit(self._time_limit)
|
||||
#self.setup_standard_powerup_drops()
|
||||
# self.setup_standard_powerup_drops()
|
||||
|
||||
# Base kills needed to win on the size of the largest team.
|
||||
self._score_to_win = (self._kills_to_win_per_player *
|
||||
max(1, max(len(t.players) for t in self.teams)))
|
||||
self._update_scoreboard()
|
||||
|
||||
|
||||
|
||||
if self.slow_motion:
|
||||
t_scale = 0.4
|
||||
light_y = 50
|
||||
|
|
@ -220,10 +230,10 @@ class SnakeGame(ba.TeamGameActivity[Player, Team]):
|
|||
ba.playsound(self._beep_2_sound)
|
||||
|
||||
self._started = True
|
||||
|
||||
|
||||
for player in self.players:
|
||||
self.generate_mines(player)
|
||||
|
||||
|
||||
# overriding the default character spawning..
|
||||
def spawn_player(self, player: Player) -> ba.Actor:
|
||||
spaz = self.spawn_player_spaz(player)
|
||||
|
|
@ -239,33 +249,30 @@ class SnakeGame(ba.TeamGameActivity[Player, Team]):
|
|||
if self._started:
|
||||
self.generate_mines(player)
|
||||
return spaz
|
||||
|
||||
|
||||
def generate_mines(self,player: Player):
|
||||
|
||||
def generate_mines(self, player: Player):
|
||||
try:
|
||||
player.actived = ba.Timer(0.5,ba.Call(self.spawn_mine, player),repeat=True)
|
||||
player.actived = ba.Timer(0.5, ba.Call(self.spawn_mine, player), repeat=True)
|
||||
except Exception as e:
|
||||
print('Exception -> '+ str(e))
|
||||
|
||||
|
||||
|
||||
def spawn_mine(self,player: Player):
|
||||
print('Exception -> ' + str(e))
|
||||
|
||||
def spawn_mine(self, player: Player):
|
||||
if player.team.score >= self._score_to_win:
|
||||
return
|
||||
pos = player.actor.node.position
|
||||
# mine = stdbomb.Bomb(position=(pos[0], pos[1] + 2.0, pos[2]),
|
||||
# velocity=(0, 0, 0),
|
||||
# bomb_type='land_mine',
|
||||
# #blast_radius=,
|
||||
# source_player=player.actor.source_player,
|
||||
# owner=player.actor.node).autoretain()
|
||||
# velocity=(0, 0, 0),
|
||||
# bomb_type='land_mine',
|
||||
# #blast_radius=,
|
||||
# source_player=player.actor.source_player,
|
||||
# owner=player.actor.node).autoretain()
|
||||
mine = Custom_Mine(position=(pos[0], pos[1] + 2.0, pos[2]),
|
||||
source_player=player.actor.source_player)
|
||||
|
||||
source_player=player.actor.source_player)
|
||||
|
||||
def arm():
|
||||
mine.arm()
|
||||
ba.timer(0.5,arm)
|
||||
|
||||
ba.timer(0.5, arm)
|
||||
|
||||
player.mines.append(mine)
|
||||
if len(player.mines) > 15:
|
||||
for m in player.mines:
|
||||
|
|
@ -275,9 +282,9 @@ class SnakeGame(ba.TeamGameActivity[Player, Team]):
|
|||
pass
|
||||
player.mines.remove(m)
|
||||
break
|
||||
|
||||
|
||||
self.handlemessage(ScoreMessage(player))
|
||||
|
||||
|
||||
def handlemessage(self, msg: Any) -> Any:
|
||||
if isinstance(msg, ba.PlayerDiedMessage):
|
||||
|
||||
|
|
@ -286,18 +293,18 @@ class SnakeGame(ba.TeamGameActivity[Player, Team]):
|
|||
|
||||
player = msg.getplayer(Player)
|
||||
self.respawn_player(player)
|
||||
|
||||
|
||||
player.actived = None
|
||||
|
||||
|
||||
elif isinstance(msg, ScoreMessage):
|
||||
player = msg.getplayer()
|
||||
|
||||
|
||||
player.team.score += 1
|
||||
self._update_scoreboard()
|
||||
|
||||
|
||||
assert self._score_to_win is not None
|
||||
if any(team.score >= self._score_to_win for team in self.teams):
|
||||
self.end_game() #ba.timer(0.5, self.end_game)
|
||||
self.end_game() # ba.timer(0.5, self.end_game)
|
||||
else:
|
||||
return super().handlemessage(msg)
|
||||
return None
|
||||
|
|
|
|||
|
|
@ -15,7 +15,8 @@ from __future__ import annotations
|
|||
|
||||
import random
|
||||
from typing import TYPE_CHECKING
|
||||
import ba, _ba
|
||||
import ba
|
||||
import _ba
|
||||
from bastd.actor.playerspaz import PlayerSpaz
|
||||
from bastd.actor.spaz import Spaz
|
||||
from bastd.actor.bomb import Blast, Bomb
|
||||
|
|
@ -56,8 +57,6 @@ class RoboBot(StickyBot):
|
|||
highlight = (3, 3, 3)
|
||||
|
||||
|
||||
|
||||
|
||||
class UFO(ba.Actor):
|
||||
"""
|
||||
New AI for Boss
|
||||
|
|
@ -252,8 +251,8 @@ class UFO(ba.Actor):
|
|||
1.0 + i,
|
||||
lambda: self._bots.spawn_bot(
|
||||
RoboBot, pos=(self.node.position[0],
|
||||
self.node.position[1] - 1,
|
||||
self.node.position[2]), spawn_time=0.0
|
||||
self.node.position[1] - 1,
|
||||
self.node.position[2]), spawn_time=0.0
|
||||
),
|
||||
)
|
||||
else:
|
||||
|
|
@ -299,7 +298,6 @@ class UFO(ba.Actor):
|
|||
node.position[2], 0, 5, 0, 3, 10, 0,
|
||||
0, 0, 5, 0)
|
||||
|
||||
|
||||
except:
|
||||
pass
|
||||
|
||||
|
|
@ -314,7 +312,6 @@ class UFO(ba.Actor):
|
|||
if not self.node:
|
||||
return None
|
||||
|
||||
|
||||
damage = abs(msg.magnitude)
|
||||
if msg.hit_type == 'explosion':
|
||||
damage /= 20
|
||||
|
|
@ -326,7 +323,7 @@ class UFO(ba.Actor):
|
|||
self.handlemessage(ba.DieMessage())
|
||||
|
||||
def _get_target_player_pt(self) -> tuple[
|
||||
ba.Vec3 | None, ba.Vec3 | None]:
|
||||
ba.Vec3 | None, ba.Vec3 | None]:
|
||||
"""Returns the position and velocity of our target.
|
||||
|
||||
Both values will be None in the case of no target.
|
||||
|
|
@ -519,7 +516,6 @@ class UFO(ba.Actor):
|
|||
{0: self.shield_deco.color, 0.2: (5, 0.2, 0.2)})
|
||||
self.bot_count = 6
|
||||
|
||||
|
||||
def update_ai(self) -> None:
|
||||
"""Should be called periodically to update the spaz' AI."""
|
||||
# pylint: disable=too-many-branches
|
||||
|
|
@ -572,9 +568,9 @@ class UFO(ba.Actor):
|
|||
self.to_target.y,
|
||||
self.to_target.z * self.xz_pos))
|
||||
setattr(self.node, 'extra_acceleration',
|
||||
(self.to_target.x * self.xz_pos ,
|
||||
(self.to_target.x * self.xz_pos,
|
||||
self.to_target.y * 80 + 70,
|
||||
self.to_target.z * self.xz_pos))
|
||||
self.to_target.z * self.xz_pos))
|
||||
|
||||
def on_expire(self) -> None:
|
||||
super().on_expire()
|
||||
|
|
@ -656,7 +652,6 @@ class UFO(ba.Actor):
|
|||
self.xz_pos = 0.01
|
||||
self.node.reflection_scale = [2]
|
||||
|
||||
|
||||
def unfrozen():
|
||||
self.frozen = False
|
||||
if self.bot_dur_froze:
|
||||
|
|
@ -666,7 +661,6 @@ class UFO(ba.Actor):
|
|||
self.xz_pos = 1
|
||||
self.node.reflection_scale = [0.25]
|
||||
|
||||
|
||||
ba.timer(5.0, unfrozen)
|
||||
|
||||
else:
|
||||
|
|
@ -710,8 +704,8 @@ class UFOSet:
|
|||
+ str(self._ufo_bot_lists[self._ufo_bot_update_list])
|
||||
)
|
||||
self._bot_update_list = (
|
||||
self._ufo_bot_update_list + 1
|
||||
) % self._ufo_bot_list_count
|
||||
self._ufo_bot_update_list + 1
|
||||
) % self._ufo_bot_list_count
|
||||
|
||||
# Update our list of player points for the bots to use.
|
||||
player_pts = []
|
||||
|
|
@ -784,7 +778,7 @@ class UFOSet:
|
|||
"""Add a ba.SpazBot instance to the set."""
|
||||
self._ufo_bot_lists[self._ufo_bot_add_list].append(bot)
|
||||
self._ufo_bot_add_list = (
|
||||
self._ufo_bot_add_list + 1) % self._ufo_bot_list_count
|
||||
self._ufo_bot_add_list + 1) % self._ufo_bot_list_count
|
||||
|
||||
def have_living_bots(self) -> bool:
|
||||
"""Return whether any bots in the set are alive or spawning."""
|
||||
|
|
@ -859,18 +853,16 @@ class UFOightGame(ba.TeamGameActivity[Player, Team]):
|
|||
self._bots = UFOSet()
|
||||
self._preset = str(settings['preset'])
|
||||
self._credit = ba.newnode('text',
|
||||
attrs={
|
||||
'v_attach': 'bottom',
|
||||
'h_align': 'center',
|
||||
'color': (0.4, 0.4, 0.4),
|
||||
'flatness': 0.5,
|
||||
'shadow': 0.5,
|
||||
'position': (0, 20),
|
||||
'scale': 0.7,
|
||||
'text': 'By Cross Joy'
|
||||
})
|
||||
|
||||
|
||||
attrs={
|
||||
'v_attach': 'bottom',
|
||||
'h_align': 'center',
|
||||
'color': (0.4, 0.4, 0.4),
|
||||
'flatness': 0.5,
|
||||
'shadow': 0.5,
|
||||
'position': (0, 20),
|
||||
'scale': 0.7,
|
||||
'text': 'By Cross Joy'
|
||||
})
|
||||
|
||||
def on_transition_in(self) -> None:
|
||||
super().on_transition_in()
|
||||
|
|
@ -882,8 +874,6 @@ class UFOightGame(ba.TeamGameActivity[Player, Team]):
|
|||
super().on_begin()
|
||||
self.setup_standard_powerup_drops()
|
||||
|
||||
|
||||
|
||||
# In pro mode there's no powerups.
|
||||
|
||||
# Make our on-screen timer and start it roughly when our bots appear.
|
||||
|
|
@ -991,4 +981,3 @@ class MyUFOFightLevel(ba.Plugin):
|
|||
preview_texture_name='footballStadiumPreview',
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#Made by your friend: @[Just] Freak#4999
|
||||
# Made by your friend: @[Just] Freak#4999
|
||||
|
||||
# ba_meta require api 7
|
||||
from __future__ import annotations
|
||||
|
|
@ -116,34 +116,36 @@ class BoxingGame(ba.TeamGameActivity[Player, Team]):
|
|||
def on_team_join(self, team: Team) -> None:
|
||||
if self.has_begun():
|
||||
self._update_scoreboard()
|
||||
|
||||
def getRandomPowerupPoint(self) -> None:
|
||||
myMap = self.map.getname()
|
||||
if myMap == 'Doom Shroom':
|
||||
while True:
|
||||
x = random.uniform(-1.0,1.0)
|
||||
y = random.uniform(-1.0,1.0)
|
||||
if x*x+y*y < 1.0: break
|
||||
return ((8.0*x,2.5,-3.5+5.0*y))
|
||||
x = random.uniform(-1.0, 1.0)
|
||||
y = random.uniform(-1.0, 1.0)
|
||||
if x*x+y*y < 1.0:
|
||||
break
|
||||
return ((8.0*x, 2.5, -3.5+5.0*y))
|
||||
elif myMap == 'Rampage':
|
||||
x = random.uniform(-6.0,7.0)
|
||||
y = random.uniform(-6.0,-2.5)
|
||||
x = random.uniform(-6.0, 7.0)
|
||||
y = random.uniform(-6.0, -2.5)
|
||||
return ((x, 5.2, y))
|
||||
else:
|
||||
x = random.uniform(-5.0,5.0)
|
||||
y = random.uniform(-6.0,0.0)
|
||||
x = random.uniform(-5.0, 5.0)
|
||||
y = random.uniform(-6.0, 0.0)
|
||||
return ((x, 8.0, y))
|
||||
|
||||
def on_begin(self) -> None:
|
||||
super().on_begin()
|
||||
ba.screenmessage("start Yeeting",color = (0.2,1,1))
|
||||
ba.screenmessage("start Yeeting", color=(0.2, 1, 1))
|
||||
self.setup_standard_time_limit(self._time_limit)
|
||||
# Base kills needed to win on the size of the largest team.
|
||||
self._score_to_win = (self._kills_to_win_per_player *
|
||||
max(1, max(len(t.players) for t in self.teams)))
|
||||
self._update_scoreboard()
|
||||
|
||||
|
||||
def spawn_player(self, player: Player) -> ba.Actor:
|
||||
|
||||
|
||||
spaz = self.spawn_player_spaz(player)
|
||||
|
||||
# Let's reconnect this player's controls to this
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue