Example #1
0
    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
Example #2
0
    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()
Example #3
0
    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
Example #4
0
    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)
Example #5
0
 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()