def __init__(self, settings: Dict[str, Any]): settings['map'] = 'Football Stadium' super().__init__(settings) self._preset = self.settings.get('preset', 'rookie') # Load some media we need. self._cheer_sound = ba.getsound('cheer') self._boo_sound = ba.getsound('boo') self._chant_sound = ba.getsound('crowdChant') self._score_sound = ba.getsound('score') self._swipsound = ba.getsound('swip') self._whistle_sound = ba.getsound('refWhistle') self._score_to_win = 21 self._score_region_material = ba.Material() self._score_region_material.add_actions( conditions=('they_have_material', stdflag.get_factory().flagmaterial), actions=(('modify_part_collision', 'collide', True), ('modify_part_collision', 'physical', False), ('call', 'at_connect', self._handle_score))) self._powerup_center = (0, 2, 0) self._powerup_spread = (10, 5.5) self._player_has_dropped_bomb = False self._player_has_punched = False self._scoreboard: Optional[Scoreboard] = None self._flag_spawn_pos: Optional[Sequence[float]] = None self.score_regions: List[ba.NodeActor] = [] self._exclude_powerups: List[str] = [] self._have_tnt = False self._bot_types_initial: Optional[List[Type[spazbot.SpazBot]]] = None self._bot_types_7: Optional[List[Type[spazbot.SpazBot]]] = None self._bot_types_14: Optional[List[Type[spazbot.SpazBot]]] = None self._bot_team: Optional[ba.Team] = None self._starttime_ms: Optional[int] = None self._time_text: Optional[ba.NodeActor] = None self._time_text_input: Optional[ba.NodeActor] = None self._tntspawner: Optional[stdbomb.TNTSpawner] = None self._bots = spazbot.BotSet() self._bot_spawn_timer: Optional[ba.Timer] = None self._powerup_drop_timer: Optional[ba.Timer] = None self.scoring_team: Optional[ba.Team] = None self._final_time_ms: Optional[int] = None self._time_text_timer: Optional[ba.Timer] = None self._flag_respawn_light: Optional[ba.Actor] = None self._flag: Optional[FootballFlag] = None
def on_begin(self) -> None: from bastd.maps import TowerD # There's a player-wall on the tower-d level to prevent # players from getting up on the stairs.. we wanna kill that. gamemap = self.map assert isinstance(gamemap, TowerD) gamemap.player_wall.delete() super().on_begin() self._update_scoreboard() self._update_timer = ba.Timer(0.25, self._update, repeat=True) self._countdown = OnScreenCountdown(60, endcall=self.end_game) ba.timer(4.0, self._countdown.start) self._bots = spazbot.BotSet() # Spawn evil bunny in co-op only. if isinstance(self.session, ba.CoopSession) and self._pro_mode: self._spawn_evil_bunny()
def __init__(self, settings: Dict[str, Any]): settings['map'] = 'Rampage' super().__init__(settings) # Show messages when players die since it matters here. self.announce_player_deaths = True # And of course the most important part. self.slow_motion = True self._new_wave_sound = ba.getsound('scoreHit01') self._winsound = ba.getsound('score') self._cashregistersound = ba.getsound('cashRegister') self._spawn_center = (0, 5.5, -4.14) self._tntspawnpos = (0, 5.5, -6) self._powerup_center = (0, 7, -4.14) self._powerup_spread = (7, 2) self._preset = self.settings_raw.get('preset', 'default') self._excludepowerups: List[str] = [] self._scoreboard: Optional[Scoreboard] = None self._score = 0 self._bots = spazbot.BotSet() self._dingsound = ba.getsound('dingSmall') self._dingsoundhigh = ba.getsound('dingSmallHigh') self._tntspawner: Optional[TNTSpawner] = None self._bot_update_interval: Optional[float] = None self._bot_update_timer: Optional[ba.Timer] = None self._powerup_drop_timer = None # For each bot type: [spawn-rate, increase, d_increase] self._bot_spawn_types = { spazbot.BomberBot: [1.00, 0.00, 0.000], spazbot.BomberBotPro: [0.00, 0.05, 0.001], spazbot.BomberBotProShielded: [0.00, 0.02, 0.002], spazbot.BrawlerBot: [1.00, 0.00, 0.000], spazbot.BrawlerBotPro: [0.00, 0.05, 0.001], spazbot.BrawlerBotProShielded: [0.00, 0.02, 0.002], spazbot.TriggerBot: [0.30, 0.00, 0.000], spazbot.TriggerBotPro: [0.00, 0.05, 0.001], spazbot.TriggerBotProShielded: [0.00, 0.02, 0.002], spazbot.ChargerBot: [0.30, 0.05, 0.000], spazbot.StickyBot: [0.10, 0.03, 0.001], spazbot.ExplodeyBot: [0.05, 0.02, 0.002] } # yapf: disable
def on_begin(self) -> None: # FIXME: Split this up a bit. # pylint: disable=too-many-statements from bastd.actor import controlsguide super().on_begin() # Show controls help in kiosk mode. if ba.app.kiosk_mode: controlsguide.ControlsGuide(delay=3.0, lifespan=10.0, bright=True).autoretain() assert self.initial_player_info is not None abot: Type[spazbot.SpazBot] bbot: Type[spazbot.SpazBot] cbot: Type[spazbot.SpazBot] if self._preset in ['rookie', 'rookie_easy']: self._exclude_powerups = ['curse'] self._have_tnt = False abot = (spazbot.BrawlerBotLite if self._preset == 'rookie_easy' else spazbot.BrawlerBot) self._bot_types_initial = [abot] * len(self.initial_player_info) bbot = (spazbot.BomberBotLite if self._preset == 'rookie_easy' else spazbot.BomberBot) self._bot_types_7 = ( [bbot] * (1 if len(self.initial_player_info) < 3 else 2)) cbot = (spazbot.BomberBot if self._preset == 'rookie_easy' else spazbot.TriggerBot) self._bot_types_14 = ( [cbot] * (1 if len(self.initial_player_info) < 3 else 2)) elif self._preset == 'tournament': self._exclude_powerups = [] self._have_tnt = True self._bot_types_initial = ( [spazbot.BrawlerBot] * (1 if len(self.initial_player_info) < 2 else 2)) self._bot_types_7 = ( [spazbot.TriggerBot] * (1 if len(self.initial_player_info) < 3 else 2)) self._bot_types_14 = ( [spazbot.ChargerBot] * (1 if len(self.initial_player_info) < 4 else 2)) elif self._preset in ['pro', 'pro_easy', 'tournament_pro']: self._exclude_powerups = ['curse'] self._have_tnt = True self._bot_types_initial = [spazbot.ChargerBot] * len( self.initial_player_info) abot = (spazbot.BrawlerBot if self._preset == 'pro' else spazbot.BrawlerBotLite) typed_bot_list: List[Type[spazbot.SpazBot]] = [] self._bot_types_7 = ( typed_bot_list + [abot] + [spazbot.BomberBot] * (1 if len(self.initial_player_info) < 3 else 2)) bbot = (spazbot.TriggerBotPro if self._preset == 'pro' else spazbot.TriggerBot) self._bot_types_14 = ( [bbot] * (1 if len(self.initial_player_info) < 3 else 2)) elif self._preset in ['uber', 'uber_easy']: self._exclude_powerups = [] self._have_tnt = True abot = (spazbot.BrawlerBotPro if self._preset == 'uber' else spazbot.BrawlerBot) bbot = (spazbot.TriggerBotPro if self._preset == 'uber' else spazbot.TriggerBot) typed_bot_list_2: List[Type[spazbot.SpazBot]] = [] self._bot_types_initial = (typed_bot_list_2 + [spazbot.StickyBot] + [abot] * len(self.initial_player_info)) self._bot_types_7 = ( [bbot] * (1 if len(self.initial_player_info) < 3 else 2)) self._bot_types_14 = ( [spazbot.ExplodeyBot] * (1 if len(self.initial_player_info) < 3 else 2)) else: raise Exception() self.setup_low_life_warning_sound() self._drop_powerups(standard_points=True) ba.timer(4.0, self._start_powerup_drops) # Make a bogus team for our bots. bad_team_name = self.get_team_display_string('Bad Guys') self._bot_team = ba.Team(1, bad_team_name, (0.5, 0.4, 0.4)) for team in [self.teams[0], self._bot_team]: team.gamedata['score'] = 0 self.update_scores() # Time display. starttime_ms = ba.time(timeformat=ba.TimeFormat.MILLISECONDS) assert isinstance(starttime_ms, int) self._starttime_ms = starttime_ms self._time_text = ba.NodeActor( ba.newnode('text', attrs={ 'v_attach': 'top', 'h_attach': 'center', 'h_align': 'center', 'color': (1, 1, 0.5, 1), 'flatness': 0.5, 'shadow': 0.5, 'position': (0, -50), 'scale': 1.3, 'text': '' })) self._time_text_input = ba.NodeActor( ba.newnode('timedisplay', attrs={'showsubseconds': True})) ba.sharedobj('globals').connectattr('time', self._time_text_input.node, 'time2') assert self._time_text_input.node assert self._time_text.node self._time_text_input.node.connectattr('output', self._time_text.node, 'text') # Our TNT spawner (if applicable). if self._have_tnt: self._tntspawner = stdbomb.TNTSpawner(position=(0, 1, -1)) self._bots = spazbot.BotSet() self._bot_spawn_timer = ba.Timer(1.0, self._update_bots, repeat=True) for bottype in self._bot_types_initial: self._spawn_bot(bottype)
def __init__(self, settings: Dict[str, Any]): super().__init__(settings) self._winsound = ba.getsound('score') self._won = False self._timer: Optional[onscreentimer.OnScreenTimer] = None self._bots = spazbot.BotSet()