From 66b88ba48098623944bc2b5957d539bb2f05ceb2 Mon Sep 17 00:00:00 2001 From: Anthony Samms Date: Mon, 10 Nov 2025 11:31:37 -0500 Subject: [PATCH] mystery feature #50 --- PyTaiko.py | 8 ++++++++ libs/background.py | 3 ++- libs/bg_collabs/__init__.py | 1 + libs/bg_collabs/practice.py | 17 +++++++++++++++++ scenes/entry.py | 3 ++- scenes/practice/game.py | 16 ++++++++++++++++ scenes/practice/song_select.py | 16 ++++++++++++++++ 7 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 libs/bg_collabs/practice.py create mode 100644 scenes/practice/game.py create mode 100644 scenes/practice/song_select.py diff --git a/PyTaiko.py b/PyTaiko.py index d9a2884..dbae0b0 100644 --- a/PyTaiko.py +++ b/PyTaiko.py @@ -24,6 +24,8 @@ from scenes.devtest import DevScreen from scenes.entry import EntryScreen from scenes.game import GameScreen from scenes.dan.game_dan import DanGameScreen +from scenes.practice.game import PracticeGameScreen +from scenes.practice.song_select import PracticeSongSelectScreen from scenes.two_player.game import TwoPlayerGameScreen from scenes.two_player.result import TwoPlayerResultScreen from scenes.loading import LoadScreen @@ -50,6 +52,8 @@ class Screens: DAN_SELECT = "DAN_SELECT" GAME_DAN = "GAME_DAN" DAN_RESULT = "DAN_RESULT" + PRACTICE_SELECT = "PRACTICE_SELECT" + GAME_PRACTICE = "GAME_PRACTICE" SETTINGS = "SETTINGS" DEV_MENU = "DEV_MENU" LOADING = "LOADING" @@ -160,6 +164,8 @@ def main(): load_screen = LoadScreen('loading') game_screen = GameScreen('game') game_screen_2p = TwoPlayerGameScreen('game') + game_screen_practice = PracticeGameScreen('game') + practice_select_screen = PracticeSongSelectScreen('song_select') result_screen = ResultScreen('result') result_screen_2p = TwoPlayerResultScreen('result') settings_screen = SettingsScreen('settings') @@ -173,8 +179,10 @@ def main(): Screens.TITLE: title_screen, Screens.SONG_SELECT: song_select_screen, Screens.SONG_SELECT_2P: song_select_screen_2p, + Screens.PRACTICE_SELECT: practice_select_screen, Screens.GAME: game_screen, Screens.GAME_2P: game_screen_2p, + Screens.GAME_PRACTICE: game_screen_practice, Screens.RESULT: result_screen, Screens.RESULT_2P: result_screen_2p, Screens.SETTINGS: settings_screen, diff --git a/libs/background.py b/libs/background.py index ca5fc45..72c7982 100644 --- a/libs/background.py +++ b/libs/background.py @@ -25,7 +25,8 @@ class Background: "IMAS_CG": (libs.bg_collabs.imas.Background, 'background/collab/imas_cg', 3), "IMAS_ML": (libs.bg_collabs.imas.Background, 'background/collab/imas_ml', 3), "IMAS_SIDEM": (libs.bg_collabs.imas_sidem.Background, 'background/collab/imas_sidem', 3), - "DAN": (libs.bg_collabs.dan.Background, 'background/collab/dan', 1) + "DAN": (libs.bg_collabs.dan.Background, 'background/collab/dan', 1), + "PRACTICE": (libs.bg_collabs.practice.Background, 'background/collab/practice', 1) } def __init__(self, player_num: int, bpm: float, scene_preset: str = ''): diff --git a/libs/bg_collabs/__init__.py b/libs/bg_collabs/__init__.py index 08c1d93..a805137 100644 --- a/libs/bg_collabs/__init__.py +++ b/libs/bg_collabs/__init__.py @@ -5,3 +5,4 @@ from . import oshiri from . import imas from . import dan from . import imas_sidem +from . import practice diff --git a/libs/bg_collabs/practice.py b/libs/bg_collabs/practice.py new file mode 100644 index 0000000..b0427f5 --- /dev/null +++ b/libs/bg_collabs/practice.py @@ -0,0 +1,17 @@ +from libs.bg_objects.bg_normal import BGNormalBase +from libs.texture import TextureWrapper +from libs.bg_objects.don_bg import DonBG1 + + +class Background: + def __init__(self, tex: TextureWrapper, player_num: int, bpm: float, path: str, max_dancers: int): + self.tex_wrapper = tex + self.max_dancers = max_dancers + self.don_bg = DonBG1(self.tex_wrapper, 0, 1, path) + self.bg_normal = BGNormalBase(self.tex_wrapper, 0, path) + self.bg_fever = None + self.footer = None + self.fever = None + self.dancer = None + self.renda = None + self.chibi = None diff --git a/scenes/entry.py b/scenes/entry.py index 55e4f3b..5f4b541 100644 --- a/scenes/entry.py +++ b/scenes/entry.py @@ -438,8 +438,9 @@ class BoxManager: def __init__(self): self.box_titles: list[OutlinedText] = [ OutlinedText('演奏ゲーム', 50, ray.WHITE, outline_thickness=5, vertical=True), + OutlinedText('特訓モード', 50, ray.WHITE, outline_thickness=5, vertical=True), OutlinedText('ゲーム設定', 50, ray.WHITE, outline_thickness=5, vertical=True)] - self.box_locations = ["SONG_SELECT", "SETTINGS"] + self.box_locations = ["SONG_SELECT", "PRACTICE_SELECT", "SETTINGS"] self.num_boxes = len(self.box_titles) self.boxes = [Box(self.box_titles[i], self.box_locations[i]) for i in range(len(self.box_titles))] self.selected_box_index = 0 diff --git a/scenes/practice/game.py b/scenes/practice/game.py new file mode 100644 index 0000000..5e7140e --- /dev/null +++ b/scenes/practice/game.py @@ -0,0 +1,16 @@ +import logging +from pathlib import Path + +from libs.background import Background +from scenes.game import GameScreen, JudgeCounter + +logger = logging.getLogger(__name__) + +class PracticeGameScreen(GameScreen): + def on_screen_start(self): + super().on_screen_start() + self.background = Background(1, self.bpm, scene_preset='PRACTICE') + + def init_tja(self, song: Path): + super().init_tja(song) + self.player_1.judge_counter = JudgeCounter() diff --git a/scenes/practice/song_select.py b/scenes/practice/song_select.py new file mode 100644 index 0000000..b71c333 --- /dev/null +++ b/scenes/practice/song_select.py @@ -0,0 +1,16 @@ +import logging + +from scenes.song_select import SongSelectScreen + +logger = logging.getLogger(__name__) + +class PracticeSongSelectScreen(SongSelectScreen): + def on_screen_start(self): + super().on_screen_start() + + def update_players(self, current_time) -> str: + self.player_1.update(current_time) + if self.text_fade_out.is_finished: + self.player_1.selected_song = True + next_screen = "GAME_PRACTICE" + return next_screen