From 643ac51a08a3c304f1a21a53465f3cbd6ae7a9af Mon Sep 17 00:00:00 2001 From: "Mr.Paradox" Date: Thu, 11 Jun 2026 20:23:25 +0530 Subject: [PATCH 1/4] Update vanishing_tiles.py --- plugins/minigames/vanishing_tiles.py | 63 ++++++++++++++-------------- 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/plugins/minigames/vanishing_tiles.py b/plugins/minigames/vanishing_tiles.py index 5a02884f..d17867b0 100644 --- a/plugins/minigames/vanishing_tiles.py +++ b/plugins/minigames/vanishing_tiles.py @@ -1,10 +1,5 @@ # ba_meta require api 9 from __future__ import annotations -from bascenev1lib.gameutils import SharedObjects -import bascenev1 as bs -import babase -import random -from typing import Optional, List, Dict, Any # Vanishing Tiles - BombSquad Minigame # Tiles disappear one by one. Survive all rounds to win. @@ -15,12 +10,18 @@ description="Tiles disappear gradually. Survive each round to continue. Last player standing wins!", external_url="https://discord.gg/sQGDsztQcy", authors=[ - {"name": "Mr.ghosty", "email": "", "discord": "gaurangbroyo"}, + {"name": "Mr.Paradox", "email": "", "discord": "gaurangbroyo"}, {"name": "senchx", "email": "", "discord": "senchx0"}, ], - version="2.1.0", + version="2.1.1", ) +from typing import Optional, List, Dict, Any +import random +import babase +import bascenev1 as bs +from bascenev1lib.gameutils import SharedObjects + class Player(bs.Player['Team']): def __init__(self) -> None: @@ -35,7 +36,7 @@ class Team(bs.Team[Player]): # ba_meta export bascenev1.GameActivity class VanishingTilesGame(bs.TeamGameActivity[Player, Team]): - name = 'Vanishing Tiles' + name = 'Vanishing Tiles' description = 'Tiles disappear one by one. Be the last one standing!' scoreconfig = bs.ScoreConfig(label='Survived', scoretype=bs.ScoreType.MILLISECONDS) announce_player_deaths = True @@ -57,17 +58,17 @@ def get_supported_maps(cls, sessiontype: type[bs.Session]) -> list[str]: def __init__(self, settings: dict) -> None: super().__init__(settings) - self._epic_mode: bool = bool(settings.get('Epic Mode', False)) - self._show_credits: bool = bool(settings.get('Show Credits', True)) + self._epic_mode: bool = bool(settings.get('Epic Mode', False)) + self._show_credits: bool = bool(settings.get('Show Credits', True)) self.default_music = bs.MusicType.EPIC if self._epic_mode else bs.MusicType.SURVIVAL - self._round: int = 1 - self._removing: bool = False + self._round: int = 1 + self._removing: bool = False self._game_start_time: Optional[float] = None self._tile_nodes: Dict[int, bs.Node] = {} self._region_nodes: Dict[int, bs.Node] = {} - self._present_tile_ids: set[int] = set() + self._present_tile_ids: set[int] = set() self._remove_speed: float = 1.8 @@ -77,8 +78,8 @@ def __init__(self, settings: dict) -> None: self._no_collide_mat.add_actions(actions=(('modify_part_collision', 'collide', False),)) self._default_tex = bs.gettexture('powerupHealth') - self._warn_tex = bs.gettexture('powerupCurse') - self._final_tex = bs.gettexture('powerupPunch') + self._warn_tex = bs.gettexture('powerupCurse') + self._final_tex = bs.gettexture('powerupPunch') self._hud_round: Optional[bs.Node] = None self._hud_players: Optional[bs.Node] = None @@ -103,7 +104,7 @@ def on_begin(self) -> None: if self._show_credits: self._credit_node = bs.newnode('text', attrs={ - 'text': 'Made by Mr.Ghosty', + 'text': 'Made by Mr.Paradox', 'scale': 0.7, 'position': (0, 8), 'shadow': 0.8, 'flatness': 1.0, 'color': (1.0, 0.3, 0.8, 1.0), 'h_align': 'center', 'v_attach': 'bottom', }) @@ -162,7 +163,7 @@ def _refresh_hud(self) -> None: self._hud_players.text = f'Players alive: {alive}' if self._hud_tiles: self._hud_tiles.color = (1.0, 0.3, 0.3, 1) if urgent else (0.5, 1.0, 0.5, 1) - self._hud_tiles.text = f'Tiles left: {tiles}' + self._hud_tiles.text = f'Tiles left: {tiles}' def _show_round_banner(self) -> None: node = bs.newnode('text', attrs={ @@ -194,7 +195,7 @@ def _spawn_all_tiles(self) -> None: (-1.5, 2, -9), (-1.5, 2, -6), (-1.5, 2, -3), (-1.5, 2, 0), (-4.5, 2, -9), (-4.5, 2, -6), (-4.5, 2, -3), (-4.5, 2, 0), ] - model = bs.getmesh('buttonSquareOpaque') + model = bs.getmesh('buttonSquareOpaque') shared = SharedObjects.get() for i, pos in enumerate(positions): tile = bs.newnode('prop', attrs={ @@ -207,7 +208,7 @@ def _spawn_all_tiles(self) -> None: 'position': pos, 'scale': (3.5, 0.1, 3.5), 'type': 'box', 'materials': [self._collide_mat, shared.footing_material], }) - self._tile_nodes[i] = tile + self._tile_nodes[i] = tile self._region_nodes[i] = region self._present_tile_ids.add(i) self._refresh_hud() @@ -220,7 +221,7 @@ def _start_removal(self) -> None: def _make_final_tile(self) -> None: try: tile_id = list(self._present_tile_ids)[0] - tile = self._tile_nodes.get(tile_id) + tile = self._tile_nodes.get(tile_id) if tile and tile.exists(): tile.color_texture = self._final_tex except Exception: @@ -247,7 +248,7 @@ def _remove_next_tile(self) -> None: bs.timer(self._remove_speed, self._remove_next_tile) def _remove_tile(self, tile_id: int) -> None: - tile = self._tile_nodes.get(tile_id) + tile = self._tile_nodes.get(tile_id) region = self._region_nodes.get(tile_id) if tile is None or not tile.exists(): self._present_tile_ids.discard(tile_id) @@ -344,12 +345,12 @@ def end_game(self) -> None: if self.has_ended(): return cur_time = bs.time() - start = self._game_start_time or cur_time - results = bs.GameResults() + start = self._game_start_time or cur_time + results = bs.GameResults() for team in self.teams: longest = 0.0 for p in team.players: - death = p.death_time or (cur_time + 1) + death = p.death_time or (cur_time + 1) longest = max(longest, death - start) results.set_team_score(team, int(longest * 1000)) @@ -377,7 +378,7 @@ def _cleanup_tiles(self) -> None: class VanishingTilesMapDefs: points = {'spawn1': (0, 3, -5)} - boxes = { + boxes = { 'area_of_interest_bounds': (0, 4, -5, 0, 0, 0, 16, 8, 16), 'map_bounds': (0, 4, -5, 0, 0, 0, 30, 14, 30), } @@ -403,14 +404,12 @@ def __init__(self) -> None: }) -bs._map.register_map(VanishingTilesMap) +try: + bs._map.register_map(VanishingTilesMap) +except Exception: + pass # ba_meta export babase.Plugin class Main(babase.Plugin): - def __init__(self) -> None: - babase.app.classic.add_coop_practice_level(bs.Level( - name='Vanishing Tiles', displayname='Vanishing Tiles', - gametype=VanishingTilesGame, settings={}, - preview_texture_name='powerupHealth', - )) + pass From b8dee8f224334113ca1ce48682e9a09a8f370348 Mon Sep 17 00:00:00 2001 From: "Mr.Paradox" Date: Thu, 11 Jun 2026 20:43:39 +0530 Subject: [PATCH 2/4] Update vanishing_tiles.py --- plugins/minigames/vanishing_tiles.py | 45 ++++++++++++++-------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/plugins/minigames/vanishing_tiles.py b/plugins/minigames/vanishing_tiles.py index d17867b0..5a75efeb 100644 --- a/plugins/minigames/vanishing_tiles.py +++ b/plugins/minigames/vanishing_tiles.py @@ -1,5 +1,10 @@ # ba_meta require api 9 from __future__ import annotations +from bascenev1lib.gameutils import SharedObjects +import bascenev1 as bs +import babase +import random +from typing import Optional, List, Dict, Any # Vanishing Tiles - BombSquad Minigame # Tiles disappear one by one. Survive all rounds to win. @@ -16,12 +21,6 @@ version="2.1.1", ) -from typing import Optional, List, Dict, Any -import random -import babase -import bascenev1 as bs -from bascenev1lib.gameutils import SharedObjects - class Player(bs.Player['Team']): def __init__(self) -> None: @@ -36,7 +35,7 @@ class Team(bs.Team[Player]): # ba_meta export bascenev1.GameActivity class VanishingTilesGame(bs.TeamGameActivity[Player, Team]): - name = 'Vanishing Tiles' + name = 'Vanishing Tiles' description = 'Tiles disappear one by one. Be the last one standing!' scoreconfig = bs.ScoreConfig(label='Survived', scoretype=bs.ScoreType.MILLISECONDS) announce_player_deaths = True @@ -58,17 +57,17 @@ def get_supported_maps(cls, sessiontype: type[bs.Session]) -> list[str]: def __init__(self, settings: dict) -> None: super().__init__(settings) - self._epic_mode: bool = bool(settings.get('Epic Mode', False)) - self._show_credits: bool = bool(settings.get('Show Credits', True)) + self._epic_mode: bool = bool(settings.get('Epic Mode', False)) + self._show_credits: bool = bool(settings.get('Show Credits', True)) self.default_music = bs.MusicType.EPIC if self._epic_mode else bs.MusicType.SURVIVAL - self._round: int = 1 - self._removing: bool = False + self._round: int = 1 + self._removing: bool = False self._game_start_time: Optional[float] = None self._tile_nodes: Dict[int, bs.Node] = {} self._region_nodes: Dict[int, bs.Node] = {} - self._present_tile_ids: set[int] = set() + self._present_tile_ids: set[int] = set() self._remove_speed: float = 1.8 @@ -78,8 +77,8 @@ def __init__(self, settings: dict) -> None: self._no_collide_mat.add_actions(actions=(('modify_part_collision', 'collide', False),)) self._default_tex = bs.gettexture('powerupHealth') - self._warn_tex = bs.gettexture('powerupCurse') - self._final_tex = bs.gettexture('powerupPunch') + self._warn_tex = bs.gettexture('powerupCurse') + self._final_tex = bs.gettexture('powerupPunch') self._hud_round: Optional[bs.Node] = None self._hud_players: Optional[bs.Node] = None @@ -163,7 +162,7 @@ def _refresh_hud(self) -> None: self._hud_players.text = f'Players alive: {alive}' if self._hud_tiles: self._hud_tiles.color = (1.0, 0.3, 0.3, 1) if urgent else (0.5, 1.0, 0.5, 1) - self._hud_tiles.text = f'Tiles left: {tiles}' + self._hud_tiles.text = f'Tiles left: {tiles}' def _show_round_banner(self) -> None: node = bs.newnode('text', attrs={ @@ -195,7 +194,7 @@ def _spawn_all_tiles(self) -> None: (-1.5, 2, -9), (-1.5, 2, -6), (-1.5, 2, -3), (-1.5, 2, 0), (-4.5, 2, -9), (-4.5, 2, -6), (-4.5, 2, -3), (-4.5, 2, 0), ] - model = bs.getmesh('buttonSquareOpaque') + model = bs.getmesh('buttonSquareOpaque') shared = SharedObjects.get() for i, pos in enumerate(positions): tile = bs.newnode('prop', attrs={ @@ -208,7 +207,7 @@ def _spawn_all_tiles(self) -> None: 'position': pos, 'scale': (3.5, 0.1, 3.5), 'type': 'box', 'materials': [self._collide_mat, shared.footing_material], }) - self._tile_nodes[i] = tile + self._tile_nodes[i] = tile self._region_nodes[i] = region self._present_tile_ids.add(i) self._refresh_hud() @@ -221,7 +220,7 @@ def _start_removal(self) -> None: def _make_final_tile(self) -> None: try: tile_id = list(self._present_tile_ids)[0] - tile = self._tile_nodes.get(tile_id) + tile = self._tile_nodes.get(tile_id) if tile and tile.exists(): tile.color_texture = self._final_tex except Exception: @@ -248,7 +247,7 @@ def _remove_next_tile(self) -> None: bs.timer(self._remove_speed, self._remove_next_tile) def _remove_tile(self, tile_id: int) -> None: - tile = self._tile_nodes.get(tile_id) + tile = self._tile_nodes.get(tile_id) region = self._region_nodes.get(tile_id) if tile is None or not tile.exists(): self._present_tile_ids.discard(tile_id) @@ -345,12 +344,12 @@ def end_game(self) -> None: if self.has_ended(): return cur_time = bs.time() - start = self._game_start_time or cur_time - results = bs.GameResults() + start = self._game_start_time or cur_time + results = bs.GameResults() for team in self.teams: longest = 0.0 for p in team.players: - death = p.death_time or (cur_time + 1) + death = p.death_time or (cur_time + 1) longest = max(longest, death - start) results.set_team_score(team, int(longest * 1000)) @@ -378,7 +377,7 @@ def _cleanup_tiles(self) -> None: class VanishingTilesMapDefs: points = {'spawn1': (0, 3, -5)} - boxes = { + boxes = { 'area_of_interest_bounds': (0, 4, -5, 0, 0, 0, 16, 8, 16), 'map_bounds': (0, 4, -5, 0, 0, 0, 30, 14, 30), } From 5d7d22245bd02765fcc422ee6a0abe240565379e Mon Sep 17 00:00:00 2001 From: MrParadox1691 <292215964+MrParadox1691@users.noreply.github.com> Date: Thu, 11 Jun 2026 15:16:42 +0000 Subject: [PATCH 3/4] [ci] apply-plugin-metadata-and-formatting --- plugins/minigames.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/minigames.json b/plugins/minigames.json index b574ae31..05c0c8e2 100644 --- a/plugins/minigames.json +++ b/plugins/minigames.json @@ -1694,7 +1694,7 @@ "external_url": "https://discord.gg/sQGDsztQcy", "authors": [ { - "name": "Mr.ghosty", + "name": "Mr.Paradox", "email": "", "discord": "gaurangbroyo" }, @@ -1705,6 +1705,7 @@ } ], "versions": { + "2.1.1": null, "2.1.0": { "api_version": 9, "commit_sha": "0749053", @@ -1714,4 +1715,4 @@ } } } -} +} \ No newline at end of file From f1c02ae85a17d531e9004373d445825b1f719c31 Mon Sep 17 00:00:00 2001 From: MrParadox1691 <292215964+MrParadox1691@users.noreply.github.com> Date: Thu, 11 Jun 2026 15:16:45 +0000 Subject: [PATCH 4/4] [ci] apply-version-metadata --- plugins/minigames.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/plugins/minigames.json b/plugins/minigames.json index 05c0c8e2..932471cb 100644 --- a/plugins/minigames.json +++ b/plugins/minigames.json @@ -1705,7 +1705,12 @@ } ], "versions": { - "2.1.1": null, + "2.1.1": { + "api_version": 9, + "commit_sha": "5d7d222", + "released_on": "11-06-2026", + "md5sum": "d71b9615872ba3655a83166dd211ecd2" + }, "2.1.0": { "api_version": 9, "commit_sha": "0749053",