diff --git a/plugins/minigames/memory_game.py b/plugins/minigames/memory_game.py index db2297e..c5c0204 100644 --- a/plugins/minigames/memory_game.py +++ b/plugins/minigames/memory_game.py @@ -12,41 +12,42 @@ from __future__ import annotations # (& some improvements) - - - - # incase someone is wondering how is map floating. Check out # def spawnAllMap(self) - # ba_meta require api 7 from typing import TYPE_CHECKING, overload -import _ba,ba,random +import _ba +import ba +import random from bastd.gameutils import SharedObjects if TYPE_CHECKING: from typing import Any, Sequence, Optional, List, Dict, Type, Union, Any, Literal - - class OnTimer(ba.Actor): """Timer which counts but doesn't show on-screen""" + def __init__(self) -> None: super().__init__() self._starttime_ms: Optional[int] = None - self.node = 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, -70), 'scale': 0, 'text': ''}) - self.inputnode = ba.newnode('timedisplay', attrs={ 'timemin': 0, 'showsubseconds': True }) + self.node = 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, -70), 'scale': 0, 'text': ''}) + self.inputnode = ba.newnode('timedisplay', attrs={ + 'timemin': 0, 'showsubseconds': True}) self.inputnode.connectattr('output', self.node, 'text') + def start(self) -> None: tval = ba.time(timeformat=ba.TimeFormat.MILLISECONDS) assert isinstance(tval, int) self._starttime_ms = tval self.inputnode.time1 = self._starttime_ms ba.getactivity().globalsnode.connectattr('time', self.inputnode, 'time2') + def has_started(self) -> bool: return self._starttime_ms is not None + def stop(self, endtime: Union[int, float] = None, timeformat: ba.TimeFormat = ba.TimeFormat.SECONDS) -> None: @@ -67,13 +68,16 @@ class OnTimer(ba.Actor): self.inputnode.timemax = endtime_ms - self._starttime_ms # Overloads so type checker knows our exact return type based in args. + @overload def getstarttime(self, timeformat: Literal[ba.TimeFormat.SECONDS] = ba.TimeFormat.SECONDS) -> float: ... + @overload def getstarttime(self, timeformat: Literal[ba.TimeFormat.MILLISECONDS]) -> int: ... + def getstarttime( self, timeformat: ba.TimeFormat = ba.TimeFormat.SECONDS @@ -108,8 +112,6 @@ class OnTimer(ba.Actor): self.node.delete() - - class Player(ba.Player['Team']): """Our player type for this game.""" @@ -127,7 +129,8 @@ class MGgame(ba.TeamGameActivity[Player, Team]): name = 'Memory Game' description = 'Memories tiles and survive till the end!' - available_settings = [ba.BoolSetting('Epic Mode', default=False), ba.BoolSetting('Enable Bottom Credits', True)] + available_settings = [ba.BoolSetting( + 'Epic Mode', default=False), ba.BoolSetting('Enable Bottom Credits', True)] scoreconfig = ba.ScoreConfig(label='Survived', scoretype=ba.ScoreType.MILLISECONDS, version='B') # Print messages when players die (since its meaningful in this game). @@ -159,9 +162,9 @@ class MGgame(ba.TeamGameActivity[Player, Team]): if self._epic_mode: self.slow_motion = True shared = SharedObjects.get() - self._collide_with_player=ba.Material() + self._collide_with_player = ba.Material() self._collide_with_player.add_actions(actions=(('modify_part_collision', 'collide', True))) - self.dont_collide=ba.Material() + self.dont_collide = ba.Material() self.dont_collide.add_actions(actions=(('modify_part_collision', 'collide', False))) self._levelStage = 0 @@ -184,7 +187,7 @@ class MGgame(ba.TeamGameActivity[Player, Team]): self._mapFGSpaz = ba.gettexture('neoSpazIcon') self._mapFGZoe = ba.gettexture('zoeIcon') self._mapFGSnake = ba.gettexture('ninjaIcon') - self._mapFGKronk= ba.gettexture('kronkIcon') + self._mapFGKronk = ba.gettexture('kronkIcon') self._mapFGMel = ba.gettexture('melIcon') self._mapFGJack = ba.gettexture('jackIcon') self._mapFGSanta = ba.gettexture('santaIcon') @@ -202,59 +205,58 @@ class MGgame(ba.TeamGameActivity[Player, Team]): self._circleTex = ba.gettexture('circleShadow') self._image = ba.newnode('image', - attrs={'texture': self._imageTextDefault, - 'position':(0,-100), - 'scale':(100,100), - 'opacity': 0.0, - 'attach':'topCenter'}) + attrs={'texture': self._imageTextDefault, + 'position': (0, -100), + 'scale': (100, 100), + 'opacity': 0.0, + 'attach': 'topCenter'}) self._textCounter = ba.newnode('text', - attrs={'text': '10', - 'position': (0, -100), - 'scale': 2.3, - 'shadow': 1.0, - 'flatness': 1.0, - 'opacity': 0.0, - 'v_attach': 'top', - 'h_attach': 'center', - 'h_align': 'center', - 'v_align': 'center'}) + attrs={'text': '10', + 'position': (0, -100), + 'scale': 2.3, + 'shadow': 1.0, + 'flatness': 1.0, + 'opacity': 0.0, + 'v_attach': 'top', + 'h_attach': 'center', + 'h_align': 'center', + 'v_align': 'center'}) self._textLevel = ba.newnode('text', - attrs={'text': 'Level ' + str(self._levelStage), - 'position': (0, -28), - 'scale': 1.3, - 'shadow': 1.0, - 'flatness': 1.0, - 'color': (1.0, 0.0, 1.0), - 'opacity': 0.0, - 'v_attach': 'top', - 'h_attach': 'center', - 'h_align': 'center', - 'v_align': 'center'}) + attrs={'text': 'Level ' + str(self._levelStage), + 'position': (0, -28), + 'scale': 1.3, + 'shadow': 1.0, + 'flatness': 1.0, + 'color': (1.0, 0.0, 1.0), + 'opacity': 0.0, + 'v_attach': 'top', + 'h_attach': 'center', + 'h_align': 'center', + 'v_align': 'center'}) self._imageCircle = ba.newnode('image', - attrs={'texture': self._circleTex, - 'position': (75, -75), - 'scale': (20,20), - 'color': (0.2, 0.2, 0.2), - 'opacity': 0.0, - 'attach': 'topCenter'}) + attrs={'texture': self._circleTex, + 'position': (75, -75), + 'scale': (20, 20), + 'color': (0.2, 0.2, 0.2), + 'opacity': 0.0, + 'attach': 'topCenter'}) self._imageCircle2 = ba.newnode('image', - attrs={'texture': self._circleTex, - 'position': (75, -100), - 'scale': (20,20), - 'color': (0.2, 0.2, 0.2), - 'opacity': 0.0, - 'attach': 'topCenter'}) + attrs={'texture': self._circleTex, + 'position': (75, -100), + 'scale': (20, 20), + 'color': (0.2, 0.2, 0.2), + 'opacity': 0.0, + 'attach': 'topCenter'}) self._imageCircle3 = ba.newnode('image', - attrs={'texture': self._circleTex, - 'position': (75, -125), - 'scale': (20,20), - 'color': (0.2, 0.2, 0.2), - 'opacity': 0.0, - 'attach': 'topCenter'}) - + attrs={'texture': self._circleTex, + 'position': (75, -125), + 'scale': (20, 20), + 'color': (0.2, 0.2, 0.2), + 'opacity': 0.0, + 'attach': 'topCenter'}) def on_transition_in(self) -> None: super().on_transition_in() @@ -307,14 +309,14 @@ class MGgame(ba.TeamGameActivity[Player, Team]): self.coldel16 = True if self.credit_text: t = ba.newnode('text', - attrs={ 'text':"Made by Freaku\nOriginally for 1.4: byANG3L", ## Disable 'Enable Bottom Credits' when making playlist, No need to edit this lovely... - 'scale':0.7, - 'position':(0,0), - 'shadow':0.5, - 'flatness':1.2, - 'color':(1, 1, 1), - 'h_align':'center', - 'v_attach':'bottom'}) + attrs={'text': "Made by Freaku\nOriginally for 1.4: byANG3L", # Disable 'Enable Bottom Credits' when making playlist, No need to edit this lovely... + 'scale': 0.7, + 'position': (0, 0), + 'shadow': 0.5, + 'flatness': 1.2, + 'color': (1, 1, 1), + 'h_align': 'center', + 'v_attach': 'bottom'}) self.spawnAllMap() self.flashHide() @@ -325,6 +327,7 @@ class MGgame(ba.TeamGameActivity[Player, Team]): def startCounter(self): self._textCounter.text = '10' + def count9(): def count8(): def count7(): @@ -374,7 +377,7 @@ class MGgame(ba.TeamGameActivity[Player, Team]): ba.screenmessage( ba.Lstr(resource='playerDelayedJoinText', subs=[('${PLAYER}', player.getname(full=True))]), - color=(0, 1, 0),transient=True,clients=[player.sessionplayer.inputdevice.client_id]) + color=(0, 1, 0), transient=True, clients=[player.sessionplayer.inputdevice.client_id]) # For score purposes, mark them as having died right as the # game started. assert self._timer is not None @@ -392,7 +395,8 @@ class MGgame(ba.TeamGameActivity[Player, Team]): # overriding the default character spawning.. def spawn_player(self, player: Player) -> ba.Actor: spaz = self.spawn_player_spaz(player) - pos = (self._spawnCenter[0] + random.uniform(-1.5, 2.5), self._spawnCenter[1], self._spawnCenter[2] + random.uniform(-2.5, 1.5)) + pos = (self._spawnCenter[0] + random.uniform(-1.5, 2.5), + self._spawnCenter[1], self._spawnCenter[2] + random.uniform(-2.5, 1.5)) spaz.connect_controls_to_player(enable_punch=False, enable_bomb=False, enable_pickup=False) spaz.handlemessage(ba.StandMessage(pos)) return spaz @@ -400,49 +404,50 @@ class MGgame(ba.TeamGameActivity[Player, Team]): def _randomSelect(self): if self._levelStage == 1: self._textureSelected = random.choice([self._mapFGMinesTex, - self._mapFGStickyTex]) + self._mapFGStickyTex]) self._image.texture = self._textureSelected elif self._levelStage == 2: self._textureSelected = random.choice([self._mapFGIceTex, - self._mapFGShieldTex]) + self._mapFGShieldTex]) self._image.texture = self._textureSelected - elif self._levelStage in [3,4,5]: + elif self._levelStage in [3, 4, 5]: self._textureSelected = random.choice([self._mapFGStickyTex, - self._mapFGIceTex, - self._mapFGImpactTex, - self._mapFGMinesTex]) + self._mapFGIceTex, + self._mapFGImpactTex, + self._mapFGMinesTex]) self._image.texture = self._textureSelected - elif self._levelStage in [6,7,8,9]: + elif self._levelStage in [6, 7, 8, 9]: self._textureSelected = random.choice([self._mapFGCurseTex, - self._mapFGHealthTex, - self._mapFGIceTex, - self._mapFGImpactTex, - self._mapFGMinesTex, - self._mapFGPunchTex, - self._mapFGShieldTex]) + self._mapFGHealthTex, + self._mapFGIceTex, + self._mapFGImpactTex, + self._mapFGMinesTex, + self._mapFGPunchTex, + self._mapFGShieldTex]) self._image.texture = self._textureSelected elif self._levelStage >= 10: self._textureSelected = random.choice([self._mapFGSpaz, - self._mapFGZoe, - self._mapFGSnake, - self._mapFGKronk, - self._mapFGMel, - self._mapFGJack, - self._mapFGSanta, - self._mapFGFrosty, - self._mapFGBones, - self._mapFGBernard, - self._mapFGPascal, - self._mapFGAli, - self._mapFGRobot, - self._mapFGAgent, - self._mapFGGrumbledorf, - self._mapFGPixel]) + self._mapFGZoe, + self._mapFGSnake, + self._mapFGKronk, + self._mapFGMel, + self._mapFGJack, + self._mapFGSanta, + self._mapFGFrosty, + self._mapFGBones, + self._mapFGBernard, + self._mapFGPascal, + self._mapFGAli, + self._mapFGRobot, + self._mapFGAgent, + self._mapFGGrumbledorf, + self._mapFGPixel]) self._image.texture = self._textureSelected return self._textureSelected def _stop(self): self._textureSelected = self._randomSelect() + def circle(): def circle2(): def circle3(): @@ -462,100 +467,100 @@ class MGgame(ba.TeamGameActivity[Player, Team]): def _randomPlatform(self): if self._levelStage == 1: - randomTexture=[self._mapFGMinesTex, - self._mapFGMinesTex, - self._mapFGMinesTex, - self._mapFGMinesTex, - self._mapFGMinesTex, - self._mapFGMinesTex, - self._mapFGMinesTex, - self._mapFGMinesTex, - self._mapFGStickyTex, - self._mapFGStickyTex, - self._mapFGStickyTex, - self._mapFGStickyTex, - self._mapFGStickyTex, - self._mapFGStickyTex, - self._mapFGStickyTex, - self._mapFGStickyTex] + randomTexture = [self._mapFGMinesTex, + self._mapFGMinesTex, + self._mapFGMinesTex, + self._mapFGMinesTex, + self._mapFGMinesTex, + self._mapFGMinesTex, + self._mapFGMinesTex, + self._mapFGMinesTex, + self._mapFGStickyTex, + self._mapFGStickyTex, + self._mapFGStickyTex, + self._mapFGStickyTex, + self._mapFGStickyTex, + self._mapFGStickyTex, + self._mapFGStickyTex, + self._mapFGStickyTex] elif self._levelStage == 2: - randomTexture=[self._mapFGIceTex, - self._mapFGIceTex, - self._mapFGIceTex, - self._mapFGIceTex, - self._mapFGIceTex, - self._mapFGIceTex, - self._mapFGIceTex, - self._mapFGIceTex, - self._mapFGShieldTex, - self._mapFGShieldTex, - self._mapFGShieldTex, - self._mapFGShieldTex, - self._mapFGShieldTex, - self._mapFGShieldTex, - self._mapFGShieldTex, - self._mapFGShieldTex] - elif self._levelStage in [3,4,5]: - randomTexture=[self._mapFGStickyTex, - self._mapFGStickyTex, - self._mapFGStickyTex, - self._mapFGStickyTex, - self._mapFGIceTex, - self._mapFGIceTex, - self._mapFGIceTex, - self._mapFGIceTex, - self._mapFGImpactTex, - self._mapFGImpactTex, - self._mapFGImpactTex, - self._mapFGImpactTex, - self._mapFGMinesTex, - self._mapFGMinesTex, - self._mapFGMinesTex, - self._mapFGMinesTex] - elif self._levelStage in [6,7,8,9]: - randomTexture=[self._mapFGHealthTex, - self._mapFGShieldTex, - self._mapFGCurseTex, - self._mapFGCurseTex, - self._mapFGHealthTex, - self._mapFGHealthTex, - self._mapFGIceTex, - self._mapFGIceTex, - self._mapFGImpactTex, - self._mapFGImpactTex, - self._mapFGMinesTex, - self._mapFGMinesTex, - self._mapFGPunchTex, - self._mapFGPunchTex, - self._mapFGShieldTex, - self._mapFGShieldTex] + randomTexture = [self._mapFGIceTex, + self._mapFGIceTex, + self._mapFGIceTex, + self._mapFGIceTex, + self._mapFGIceTex, + self._mapFGIceTex, + self._mapFGIceTex, + self._mapFGIceTex, + self._mapFGShieldTex, + self._mapFGShieldTex, + self._mapFGShieldTex, + self._mapFGShieldTex, + self._mapFGShieldTex, + self._mapFGShieldTex, + self._mapFGShieldTex, + self._mapFGShieldTex] + elif self._levelStage in [3, 4, 5]: + randomTexture = [self._mapFGStickyTex, + self._mapFGStickyTex, + self._mapFGStickyTex, + self._mapFGStickyTex, + self._mapFGIceTex, + self._mapFGIceTex, + self._mapFGIceTex, + self._mapFGIceTex, + self._mapFGImpactTex, + self._mapFGImpactTex, + self._mapFGImpactTex, + self._mapFGImpactTex, + self._mapFGMinesTex, + self._mapFGMinesTex, + self._mapFGMinesTex, + self._mapFGMinesTex] + elif self._levelStage in [6, 7, 8, 9]: + randomTexture = [self._mapFGHealthTex, + self._mapFGShieldTex, + self._mapFGCurseTex, + self._mapFGCurseTex, + self._mapFGHealthTex, + self._mapFGHealthTex, + self._mapFGIceTex, + self._mapFGIceTex, + self._mapFGImpactTex, + self._mapFGImpactTex, + self._mapFGMinesTex, + self._mapFGMinesTex, + self._mapFGPunchTex, + self._mapFGPunchTex, + self._mapFGShieldTex, + self._mapFGShieldTex] elif self._levelStage >= 10: - randomTexture=[self._mapFGSpaz, - self._mapFGZoe, - self._mapFGSnake, - self._mapFGKronk, - self._mapFGMel, - self._mapFGJack, - self._mapFGSanta, - self._mapFGFrosty, - self._mapFGBones, - self._mapFGBernard, - self._mapFGPascal, - self._mapFGAli, - self._mapFGRobot, - self._mapFGAgent, - self._mapFGGrumbledorf, - self._mapFGPixel] + randomTexture = [self._mapFGSpaz, + self._mapFGZoe, + self._mapFGSnake, + self._mapFGKronk, + self._mapFGMel, + self._mapFGJack, + self._mapFGSanta, + self._mapFGFrosty, + self._mapFGBones, + self._mapFGBernard, + self._mapFGPascal, + self._mapFGAli, + self._mapFGRobot, + self._mapFGAgent, + self._mapFGGrumbledorf, + self._mapFGPixel] (self.mapFGPTex, self.mapFGP2Tex, self.mapFGP3Tex, self.mapFGP4Tex, - self.mapFGP5Tex, self.mapFGP6Tex, - self.mapFGP7Tex, self.mapFGP8Tex, - self.mapFGP9Tex,self.mapFGP10Tex, - self.mapFGP11Tex, self.mapFGP12Tex, - self.mapFGP13Tex, self.mapFGP14Tex, - self.mapFGP15Tex, self.mapFGP16Tex) = ( - random.sample(randomTexture, 16)) + self.mapFGP5Tex, self.mapFGP6Tex, + self.mapFGP7Tex, self.mapFGP8Tex, + self.mapFGP9Tex, self.mapFGP10Tex, + self.mapFGP11Tex, self.mapFGP12Tex, + self.mapFGP13Tex, self.mapFGP14Tex, + self.mapFGP15Tex, self.mapFGP16Tex) = ( + random.sample(randomTexture, 16)) self._mixPlatform() def _mixPlatform(self): @@ -692,114 +697,130 @@ class MGgame(ba.TeamGameActivity[Player, Team]): shared = SharedObjects.get() if self.coldel: self.mapFGP = ba.newnode('prop', - attrs={'body': 'puck', 'position': (3,2,-9), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale':0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) + attrs={'body': 'puck', 'position': (3, 2, -9), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale': 0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) self.mapFGPTex = None - self.mapFGPcol = ba.newnode('region',attrs={'position': (3,2,-9),'scale': (3.5,0.1,3.5),'type': 'box','materials': (self._collide_with_player, shared.footing_material)}) + self.mapFGPcol = ba.newnode('region', attrs={'position': (3, 2, -9), 'scale': ( + 3.5, 0.1, 3.5), 'type': 'box', 'materials': (self._collide_with_player, shared.footing_material)}) self.coldel = False if self.coldel2: - self.mapFGP2 = ba.newnode('prop', - attrs={'body': 'puck', 'position': (3,2,-6), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale':0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) + self.mapFGP2 = ba.newnode('prop', + attrs={'body': 'puck', 'position': (3, 2, -6), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale': 0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) self.mapFGP2Tex = None - self.mapFGP2col = ba.newnode('region',attrs={'position': (3,2,-6),'scale': (3.5,0.1,3.5),'type': 'box','materials': (self._collide_with_player, shared.footing_material)}) + self.mapFGP2col = ba.newnode('region', attrs={'position': (3, 2, -6), 'scale': ( + 3.5, 0.1, 3.5), 'type': 'box', 'materials': (self._collide_with_player, shared.footing_material)}) self.coldel2 = False if self.coldel3: - self.mapFGP3 = ba.newnode('prop', - attrs={'body': 'puck', 'position': (3,2,-3), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale':0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) + self.mapFGP3 = ba.newnode('prop', + attrs={'body': 'puck', 'position': (3, 2, -3), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale': 0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) self.mapFGP3Tex = None - self.mapFGP3col = ba.newnode('region',attrs={'position': (3,2,-3),'scale': (3.5,0.1,3.5),'type': 'box','materials': (self._collide_with_player, shared.footing_material)}) + self.mapFGP3col = ba.newnode('region', attrs={'position': (3, 2, -3), 'scale': ( + 3.5, 0.1, 3.5), 'type': 'box', 'materials': (self._collide_with_player, shared.footing_material)}) self.coldel3 = False if self.coldel4: - self.mapFGP4 = ba.newnode('prop', - attrs={'body': 'puck', 'position': (3,2,0), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale':0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) + self.mapFGP4 = ba.newnode('prop', + attrs={'body': 'puck', 'position': (3, 2, 0), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale': 0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) self.mapFGP4Tex = None - self.mapFGP4col = ba.newnode('region',attrs={'position': (3,2,0),'scale': (3.5,0.1,3.5),'type': 'box','materials': (self._collide_with_player, shared.footing_material)}) + self.mapFGP4col = ba.newnode('region', attrs={'position': (3, 2, 0), 'scale': ( + 3.5, 0.1, 3.5), 'type': 'box', 'materials': (self._collide_with_player, shared.footing_material)}) self.coldel4 = False if self.coldel5: - self.mapFGP5 = ba.newnode('prop', - attrs={'body': 'puck', 'position': (0,2,-9), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale':0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) + self.mapFGP5 = ba.newnode('prop', + attrs={'body': 'puck', 'position': (0, 2, -9), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale': 0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) self.mapFGP5Tex = None - self.mapFGP5col = ba.newnode('region',attrs={'position': (0,2,-9),'scale': (3.5,0.1,3.5),'type': 'box','materials': (self._collide_with_player, shared.footing_material)}) + self.mapFGP5col = ba.newnode('region', attrs={'position': (0, 2, -9), 'scale': ( + 3.5, 0.1, 3.5), 'type': 'box', 'materials': (self._collide_with_player, shared.footing_material)}) self.coldel5 = False if self.coldel6: - self.mapFGP6 = ba.newnode('prop', - attrs={'body': 'puck', 'position': (0,2,-6), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale':0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) + self.mapFGP6 = ba.newnode('prop', + attrs={'body': 'puck', 'position': (0, 2, -6), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale': 0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) self.mapFGP6Tex = None - self.mapFGP6col = ba.newnode('region',attrs={'position': (0,2,-6),'scale': (3.5,0.1,3.5),'type': 'box','materials': (self._collide_with_player, shared.footing_material)}) + self.mapFGP6col = ba.newnode('region', attrs={'position': (0, 2, -6), 'scale': ( + 3.5, 0.1, 3.5), 'type': 'box', 'materials': (self._collide_with_player, shared.footing_material)}) self.coldel6 = False if self.coldel7: - self.mapFGP7 = ba.newnode('prop', - attrs={'body': 'puck', 'position': (0,2,-3), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale':0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) + self.mapFGP7 = ba.newnode('prop', + attrs={'body': 'puck', 'position': (0, 2, -3), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale': 0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) self.mapFGP7Tex = None - self.mapFGP7col = ba.newnode('region',attrs={'position': (0,2,-3),'scale': (3.5,0.1,3.5),'type': 'box','materials': (self._collide_with_player, shared.footing_material)}) + self.mapFGP7col = ba.newnode('region', attrs={'position': (0, 2, -3), 'scale': ( + 3.5, 0.1, 3.5), 'type': 'box', 'materials': (self._collide_with_player, shared.footing_material)}) self.coldel7 = False if self.coldel8: - self.mapFGP8 = ba.newnode('prop', - attrs={'body': 'puck', 'position': (0,2,0), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale':0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) + self.mapFGP8 = ba.newnode('prop', + attrs={'body': 'puck', 'position': (0, 2, 0), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale': 0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) self.mapFGP8Tex = None - self.mapFGP8col = ba.newnode('region',attrs={'position': (0,2,0),'scale': (3.5,0.1,3.5),'type': 'box','materials': (self._collide_with_player, shared.footing_material)}) + self.mapFGP8col = ba.newnode('region', attrs={'position': (0, 2, 0), 'scale': ( + 3.5, 0.1, 3.5), 'type': 'box', 'materials': (self._collide_with_player, shared.footing_material)}) self.coldel8 = False if self.coldel9: - self.mapFGP9 = ba.newnode('prop', - attrs={'body': 'puck', 'position': (-3,2,-9), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale':0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) + self.mapFGP9 = ba.newnode('prop', + attrs={'body': 'puck', 'position': (-3, 2, -9), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale': 0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) self.mapFGP9Tex = None - self.mapFGP9col = ba.newnode('region',attrs={'position': (-3,2,-9),'scale': (3.5,0.1,3.5),'type': 'box','materials': (self._collide_with_player, shared.footing_material)}) + self.mapFGP9col = ba.newnode('region', attrs={'position': (-3, 2, -9), 'scale': ( + 3.5, 0.1, 3.5), 'type': 'box', 'materials': (self._collide_with_player, shared.footing_material)}) self.coldel9 = False if self.coldel10: - self.mapFGP10 = ba.newnode('prop', - attrs={'body': 'puck', 'position': (-3,2,-6), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale':0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) + self.mapFGP10 = ba.newnode('prop', + attrs={'body': 'puck', 'position': (-3, 2, -6), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale': 0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) self.mapFGP10Tex = None - self.mapFGP10col = ba.newnode('region',attrs={'position': (-3,2,-6),'scale': (3.5,0.1,3.5),'type': 'box','materials': (self._collide_with_player, shared.footing_material)}) + self.mapFGP10col = ba.newnode('region', attrs={'position': (-3, 2, -6), 'scale': ( + 3.5, 0.1, 3.5), 'type': 'box', 'materials': (self._collide_with_player, shared.footing_material)}) self.coldel10 = False if self.coldel11: - self.mapFGP11 = ba.newnode('prop', - attrs={'body': 'puck', 'position': (-3,2,-3), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale':0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) + self.mapFGP11 = ba.newnode('prop', + attrs={'body': 'puck', 'position': (-3, 2, -3), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale': 0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) self.mapFGP11Tex = None - self.mapFGP11col = ba.newnode('region',attrs={'position': (-3,2,-3),'scale': (3.5,0.1,3.5),'type': 'box','materials': (self._collide_with_player, shared.footing_material)}) + self.mapFGP11col = ba.newnode('region', attrs={'position': (-3, 2, -3), 'scale': ( + 3.5, 0.1, 3.5), 'type': 'box', 'materials': (self._collide_with_player, shared.footing_material)}) self.coldel11 = False if self.coldel12: - self.mapFGP12 = ba.newnode('prop', - attrs={'body': 'puck', 'position': (-3,2,0), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale':0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) + self.mapFGP12 = ba.newnode('prop', + attrs={'body': 'puck', 'position': (-3, 2, 0), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale': 0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) self.mapFGP12Tex = None - self.mapFGP12col = ba.newnode('region',attrs={'position': (-3,2,0),'scale': (3.5,0.1,3.5),'type': 'box','materials': (self._collide_with_player, shared.footing_material)}) + self.mapFGP12col = ba.newnode('region', attrs={'position': (-3, 2, 0), 'scale': ( + 3.5, 0.1, 3.5), 'type': 'box', 'materials': (self._collide_with_player, shared.footing_material)}) self.coldel12 = False if self.coldel13: - self.mapFGP13 = ba.newnode('prop', - attrs={'body': 'puck', 'position': (-6,2,-9), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale':0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) + self.mapFGP13 = ba.newnode('prop', + attrs={'body': 'puck', 'position': (-6, 2, -9), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale': 0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) self.mapFGP13Tex = None - self.mapFGP13col = ba.newnode('region',attrs={'position': (-6,2,-9),'scale': (3.5,0.1,3.5),'type': 'box','materials': (self._collide_with_player, shared.footing_material)}) + self.mapFGP13col = ba.newnode('region', attrs={'position': (-6, 2, -9), 'scale': ( + 3.5, 0.1, 3.5), 'type': 'box', 'materials': (self._collide_with_player, shared.footing_material)}) self.coldel13 = False if self.coldel14: - self.mapFGP14 = ba.newnode('prop', - attrs={'body': 'puck', 'position': (-6,2,-6), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale':0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) + self.mapFGP14 = ba.newnode('prop', + attrs={'body': 'puck', 'position': (-6, 2, -6), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale': 0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) self.mapFGP14Tex = None - self.mapFGP14col = ba.newnode('region',attrs={'position': (-6,2,-6),'scale': (3.5,0.1,3.5),'type': 'box','materials': (self._collide_with_player, shared.footing_material)}) + self.mapFGP14col = ba.newnode('region', attrs={'position': (-6, 2, -6), 'scale': ( + 3.5, 0.1, 3.5), 'type': 'box', 'materials': (self._collide_with_player, shared.footing_material)}) self.coldel14 = False if self.coldel15: - self.mapFGP15 = ba.newnode('prop', - attrs={'body': 'puck', 'position': (-6,2,-3), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale':0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) + self.mapFGP15 = ba.newnode('prop', + attrs={'body': 'puck', 'position': (-6, 2, -3), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale': 0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) self.mapFGP15Tex = None - self.mapFGP15col = ba.newnode('region',attrs={'position': (-6,2,-3),'scale': (3.5,0.1,3.5),'type': 'box','materials': (self._collide_with_player, shared.footing_material)}) + self.mapFGP15col = ba.newnode('region', attrs={'position': (-6, 2, -3), 'scale': ( + 3.5, 0.1, 3.5), 'type': 'box', 'materials': (self._collide_with_player, shared.footing_material)}) self.coldel15 = False if self.coldel16: - self.mapFGP16 = ba.newnode('prop', - attrs={'body': 'puck', 'position': (-6,2,0), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale':0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) + self.mapFGP16 = ba.newnode('prop', + attrs={'body': 'puck', 'position': (-6, 2, 0), 'model': self._mapFGPModel, 'model_scale': 3.8, 'body_scale': 3.8, 'shadow_size': 0.5, 'gravity_scale': 0.0, 'color_texture': self._mapFGPDefaultTex, 'reflection': 'soft', 'reflection_scale': [1.0], 'is_area_of_interest': True, 'materials': [self.dont_collide]}) self.mapFGP16Tex = None - self.mapFGP16col = ba.newnode('region',attrs={'position': (-6,2,0),'scale': (3.5,0.1,3.5),'type': 'box','materials': (self._collide_with_player, shared.footing_material)}) + self.mapFGP16col = ba.newnode('region', attrs={'position': (-6, 2, 0), 'scale': ( + 3.5, 0.1, 3.5), 'type': 'box', 'materials': (self._collide_with_player, shared.footing_material)}) self.coldel16 = False def _platformTexDefault(self): @@ -883,7 +904,6 @@ class MGgame(ba.TeamGameActivity[Player, Team]): if living_team_count <= 1: self.end_game() - def end_game(self) -> None: cur_time = ba.time() assert self._timer is not None @@ -936,18 +956,14 @@ class MGgame(ba.TeamGameActivity[Player, Team]): self.end(results=results) - - - - - - - class MGdefs(): points = {} boxes = {} - boxes['area_of_interest_bounds'] = (0.3544110667, 4.493562578, -2.518391331) + (0.0, 0.0, 0.0) + (16.64754831, 8.06138989, 18.5029888) - boxes['map_bounds'] = (0.2608783669, 4.899663734, -3.543675157) + (0.0, 0.0, 0.0) + (29.23565494, 14.19991443, 29.92689344) + boxes['area_of_interest_bounds'] = ( + 0.3544110667, 4.493562578, -2.518391331) + (0.0, 0.0, 0.0) + (16.64754831, 8.06138989, 18.5029888) + boxes['map_bounds'] = (0.2608783669, 4.899663734, -3.543675157) + \ + (0.0, 0.0, 0.0) + (29.23565494, 14.19991443, 29.92689344) + class MGmap(ba.Map): defs = MGdefs() @@ -990,16 +1006,12 @@ class MGmap(ba.Map): gnode.vr_near_clip = 0.5 - - - ba._map.register_map(MGmap) - - # ba_meta export plugin class byFreaku(ba.Plugin): def __init__(self): ## Campaign support ## - ba.app.add_coop_practice_level(ba.Level(name='Memory Game', displayname='${GAME}', gametype=MGgame, settings={}, preview_texture_name='achievementOffYouGo')) \ No newline at end of file + ba.app.add_coop_practice_level(ba.Level(name='Memory Game', displayname='${GAME}', gametype=MGgame, settings={ + }, preview_texture_name='achievementOffYouGo')) diff --git a/plugins/minigames/musical_flags.py b/plugins/minigames/musical_flags.py index ab5e04e..fbe9d2e 100644 --- a/plugins/minigames/musical_flags.py +++ b/plugins/minigames/musical_flags.py @@ -1,30 +1,31 @@ -## Made by MattZ45986 on GitHub -## Ported by: Freaku / @[Just] Freak#4999 +# Made by MattZ45986 on GitHub +# Ported by: Freaku / @[Just] Freak#4999 -#Bug Fixes & Improvements as well... +# Bug Fixes & Improvements as well... -#Join BCS: +# Join BCS: # https://discord.gg/ucyaesh - - from __future__ import annotations from typing import TYPE_CHECKING -import _ba,ba,random,math -from bastd.actor.flag import Flag,FlagPickedUpMessage +import _ba +import ba +import random +import math +from bastd.actor.flag import Flag, FlagPickedUpMessage from bastd.actor.playerspaz import PlayerSpaz if TYPE_CHECKING: from typing import Any, Type, List, Dict, Tuple, Union, Sequence, Optional - class Player(ba.Player['Team']): def __init__(self) -> None: self.done: bool = False self.survived: bool = True + class Team(ba.Team[Player]): def __init__(self) -> None: self.score = 0 @@ -79,17 +80,17 @@ class MFGame(ba.TeamGameActivity[Player, Team]): self.is_run = bool(settings['Enable Running']) self._textRound = ba.newnode('text', - attrs={'text': '', - 'position': (0, -38), - 'scale': 1, - 'shadow': 1.0, - 'flatness': 1.0, - 'color': (1.0, 0.0, 1.0), - 'opacity': 1, - 'v_attach': 'top', - 'h_attach': 'center', - 'h_align': 'center', - 'v_align': 'center'}) + attrs={'text': '', + 'position': (0, -38), + 'scale': 1, + 'shadow': 1.0, + 'flatness': 1.0, + 'color': (1.0, 0.0, 1.0), + 'opacity': 1, + 'v_attach': 'top', + 'h_attach': 'center', + 'h_align': 'center', + 'v_align': 'center'}) self.slow_motion = self._epic_mode # A cool music, matching our gamemode theme @@ -106,7 +107,7 @@ class MFGame(ba.TeamGameActivity[Player, Team]): ba.screenmessage( ba.Lstr(resource='playerDelayedJoinText', subs=[('${PLAYER}', player.getname(full=True))]), - color=(0, 1, 0),transient=True) + color=(0, 1, 0), transient=True) player.survived = False return self.spawn_player(player) @@ -126,61 +127,70 @@ class MFGame(ba.TeamGameActivity[Player, Team]): self.setup_standard_time_limit(self._time_limit) if self.credit_text: t = ba.newnode('text', - attrs={ 'text':"Ported by Freaku\nMade by MattZ45986", ## Disable 'Enable Bottom Credits' when making playlist, No need to edit this lovely... - 'scale':0.7, - 'position':(0,0), - 'shadow':0.5, - 'flatness':1.2, - 'color':(1, 1, 1), - 'h_align':'center', - 'v_attach':'bottom'}) + attrs={'text': "Ported by Freaku\nMade by MattZ45986", # Disable 'Enable Bottom Credits' when making playlist, No need to edit this lovely... + 'scale': 0.7, + 'position': (0, 0), + 'shadow': 0.5, + 'flatness': 1.2, + 'color': (1, 1, 1), + 'h_align': 'center', + 'v_attach': 'bottom'}) self.makeRound() self._textRound.text = 'Round ' + str(self.roundNum) ba.timer(5, self.checkEnd) def makeRound(self): for player in self.players: - if player.survived: player.team.score += 1 + if player.survived: + player.team.score += 1 self.roundNum += 1 self._textRound.text = 'Round ' + str(self.roundNum) self.flags = [] self.spawned = [] - angle = random.randint(0,359) - c=0 + angle = random.randint(0, 359) + c = 0 for player in self.players: - if player.survived: c+=1 + if player.survived: + c += 1 spacing = 10 for player in self.players: player.done = False if player.survived: if not player.is_alive(): - self.spawn_player(player,(.5,5,-4)) + self.spawn_player(player, (.5, 5, -4)) self.spawned.append(player) - try: spacing = 360 // (c) - except: self.checkEnd() - colors = [(1,0,0),(0,1,0),(0,0,1),(1,1,0),(1,0,1),(0,1,1),(0,0,0),(0.5,0.8,0),(0,0.8,0.5),(0.8,0.25,0.7),(0,0.27,0.55),(2,2,0.6),(0.4,3,0.85)] + try: + spacing = 360 // (c) + except: + self.checkEnd() + colors = [(1, 0, 0), (0, 1, 0), (0, 0, 1), (1, 1, 0), (1, 0, 1), (0, 1, 1), (0, 0, 0), + (0.5, 0.8, 0), (0, 0.8, 0.5), (0.8, 0.25, 0.7), (0, 0.27, 0.55), (2, 2, 0.6), (0.4, 3, 0.85)] # Smart Mathematics: # All Flags spawn same distance from the players for i in range(c-1): angle += spacing angle %= 360 - x=6 * math.sin(math.degrees(angle)) - z=6 * math.cos(math.degrees(angle)) - flag = Flag(position=(x+.5,5,z-4), color=colors[i]).autoretain() + x = 6 * math.sin(math.degrees(angle)) + z = 6 * math.cos(math.degrees(angle)) + flag = Flag(position=(x+.5, 5, z-4), color=colors[i]).autoretain() self.flags.append(flag) def killRound(self): self.numPickedUp = 0 for player in self.players: - if player.is_alive(): player.actor.handlemessage(ba.DieMessage()) - for flag in self.flags: flag.node.delete() - for light in self.nodes: light.delete() + if player.is_alive(): + player.actor.handlemessage(ba.DieMessage()) + for flag in self.flags: + flag.node.delete() + for light in self.nodes: + light.delete() - def spawn_player(self, player: Player, pos: tuple = (0,0,0)) -> ba.Actor: + def spawn_player(self, player: Player, pos: tuple = (0, 0, 0)) -> ba.Actor: spaz = self.spawn_player_spaz(player) - if pos == (0,0,0): - pos = (-.5+random.random()*2,3+random.random()*2,-5+random.random()*2) - spaz.connect_controls_to_player(enable_punch=self.is_punch, enable_bomb=False, enable_run=self.is_run) + if pos == (0, 0, 0): + pos = (-.5+random.random()*2, 3+random.random()*2, -5+random.random()*2) + spaz.connect_controls_to_player(enable_punch=self.is_punch, + enable_bomb=False, enable_run=self.is_run) spaz.handlemessage(ba.StandMessage(pos)) return spaz @@ -199,10 +209,10 @@ class MFGame(ba.TeamGameActivity[Player, Team]): self.numPickedUp += 1 msg.node.getdelegate(PlayerSpaz, True).getplayer(Player, True).done = True l = ba.newnode('light', - owner=None, - attrs={'color':msg.node.color, - 'position':(msg.node.position_center), - 'intensity':1}) + owner=None, + attrs={'color': msg.node.color, + 'position': (msg.node.position_center), + 'intensity': 1}) self.nodes.append(l) msg.flag.handlemessage(ba.DieMessage()) msg.node.handlemessage(ba.DieMessage()) @@ -213,12 +223,13 @@ class MFGame(ba.TeamGameActivity[Player, Team]): try: player.survived = False ba.screenmessage("No Flag? "+player.getname()) - player.actor.handlemessage(ba.StandMessage((0,3,-2))) - ba.timer(0.5,ba.Call(player.actor.handlemessage, ba.FreezeMessage())) - ba.timer(3,ba.Call(player.actor.handlemessage, ba.ShouldShatterMessage())) - except: pass - ba.timer(3.5,self.killRound) - ba.timer(3.55,self.makeRound) + player.actor.handlemessage(ba.StandMessage((0, 3, -2))) + ba.timer(0.5, ba.Call(player.actor.handlemessage, ba.FreezeMessage())) + ba.timer(3, ba.Call(player.actor.handlemessage, ba.ShouldShatterMessage())) + except: + pass + ba.timer(3.5, self.killRound) + ba.timer(3.55, self.makeRound) else: return super().handlemessage(msg) return None @@ -227,7 +238,7 @@ class MFGame(ba.TeamGameActivity[Player, Team]): i = 0 for player in self.players: if player.survived: - i+=1 + i += 1 if i <= 1: for player in self.players: if player.survived: diff --git a/plugins/utilities/floater.py b/plugins/utilities/floater.py index 3ac19c1..9106117 100644 --- a/plugins/utilities/floater.py +++ b/plugins/utilities/floater.py @@ -1,18 +1,20 @@ -#Ported by: Freaku / @[Just] Freak#4999 +# Ported by: Freaku / @[Just] Freak#4999 -#Join BCS: +# Join BCS: # https://discord.gg/ucyaesh -#My GitHub: +# My GitHub: # https://github.com/Freaku17/BombSquad-Mods-byFreaku - # ba_meta require api 7 from __future__ import annotations from typing import TYPE_CHECKING -import _ba,ba,random,math +import _ba +import ba +import random +import math from bastd.gameutils import SharedObjects from bastd.actor.bomb import Bomb from bastd.actor.popuptext import PopupText @@ -107,7 +109,8 @@ class Floater(ba.Actor): }) self.node.connectattr('position', self.node2, 'position') - def pop(self): PopupText(text="Ported by \ue048Freaku", scale=1.3, position=(self.node.position[0],self.node.position[1]-1,self.node.position[2]), color=(0,1,1)).autoretain() #Edit = YouNoob... + def pop(self): PopupText(text="Ported by \ue048Freaku", scale=1.3, position=( + self.node.position[0], self.node.position[1]-1, self.node.position[2]), color=(0, 1, 1)).autoretain() # Edit = YouNoob... def checkCanControl(self): if not self.node.exists(): @@ -183,7 +186,8 @@ class Floater(ba.Actor): np = self.node.position except: np = (0, 0, 0) - self.b = Bomb(bomb_type=random.choice(['normal', 'ice', 'sticky', 'impact', 'land_mine', 'tnt']), source_player=self.source_player, position=(np[0], np[1] - 1, np[2]), velocity=(0, -1, 0)).autoretain() + self.b = Bomb(bomb_type=random.choice(['normal', 'ice', 'sticky', 'impact', 'land_mine', 'tnt']), + source_player=self.source_player, position=(np[0], np[1] - 1, np[2]), velocity=(0, -1, 0)).autoretain() if self.b.bomb_type in ['impact', 'land_mine']: self.b.arm() @@ -208,21 +212,21 @@ class Floater(ba.Actor): super().handlemessage(msg) - - - - def assignFloInputs(clientID: int): with ba.Context(_ba.get_foreground_host_activity()): activity = ba.getactivity() if not hasattr(activity, 'flo') or not activity.flo.node.exists(): - try: activity.flo = Floater(activity.map.get_def_bound_box('map_bounds')) - except: return #Perhaps using in main-menu/score-screen + try: + activity.flo = Floater(activity.map.get_def_bound_box('map_bounds')) + except: + return # Perhaps using in main-menu/score-screen floater = activity.flo if floater.controlled: - ba.screenmessage('Floater is already being controlled', color=(1, 0, 0), transient=True, clients=[clientID]) + ba.screenmessage('Floater is already being controlled', + color=(1, 0, 0), transient=True, clients=[clientID]) return - ba.screenmessage('You Gained Control Over The Floater!\n Press Bomb to Throw Bombs and Punch to leave!', clients=[clientID], transient=True, color=(0, 1, 1)) + ba.screenmessage('You Gained Control Over The Floater!\n Press Bomb to Throw Bombs and Punch to leave!', clients=[ + clientID], transient=True, color=(0, 1, 1)) for i in _ba.get_foreground_host_activity().players: if i.sessionplayer.inputdevice.client_id == clientID: @@ -251,16 +255,22 @@ def assignFloInputs(clientID: int): i.assigninput(ba.InputType.LEFT_RIGHT, floater.leftright) - - old_fcm = _ba.chatmessage + + def new_chat_message(msg: Union[str, ba.Lstr], clients: Sequence[int] = None, sender_override: str = None): old_fcm(msg, clients, sender_override) if msg == '/floater': - try: assignFloInputs(-1) - except: pass + try: + assignFloInputs(-1) + except: + pass + + _ba.chatmessage = new_chat_message # ba_meta export plugin + + class byFreaku(ba.Plugin): - def __init__(self): pass \ No newline at end of file + def __init__(self): pass