diff --git a/src/level.py b/src/level.py index 808936f..dd3f96f 100644 --- a/src/level.py +++ b/src/level.py @@ -16,8 +16,9 @@ from src.skull_storm import SkullStorm class Level: - def __init__(self, levelData, sounds, player): + def __init__(self, levelData, sounds, player, levelPackName=None): self.sounds = sounds + self.levelPackName = levelPackName self.objects = [] self.enemies = [] self.bouncing_items = [] @@ -52,11 +53,22 @@ class Level: try: pygame.mixer.music.stop() if "ambience" in levelData: - try: - pygame.mixer.music.load(f"sounds/ambience/{levelData['ambience']}") - pygame.mixer.music.play(-1) # Loop indefinitely - except: - pass + ambientFile = levelData['ambience'] + + # Build list of paths to try (pack-specific first, then generic) + ambiencePaths = [] + if self.levelPackName: + ambiencePaths.append(f"sounds/{self.levelPackName}/ambience/{ambientFile}") + ambiencePaths.append(f"sounds/ambience/{ambientFile}") + + # Try each path until one works + for ambiencePath in ambiencePaths: + try: + pygame.mixer.music.load(ambiencePath) + pygame.mixer.music.play(-1) # Loop indefinitely + break + except: + continue except: pass diff --git a/src/powerup.py b/src/powerup.py index c36b234..9a5a893 100644 --- a/src/powerup.py +++ b/src/powerup.py @@ -86,6 +86,23 @@ class PowerUp(Object): player.get_health() + 1, player.get_max_health() )) + + # Check for 100 coin bonus after adding shin bone coins + if player._coins >= 100: + # Only give extra lives in story mode, not survival mode (level_id 999) + if level.levelId != 999: + # Extra life + player._coins = 0 + player._lives += 1 + level.levelScore += 1000 + play_sound(self.sounds['get_extra_life']) + else: + # In survival mode, reset coin counter but give bonus score instead + player._coins = 0 + level.levelScore += 2000 # Double score bonus instead of extra life + speak("100 bone dust collected! Bonus score!") + play_sound(self.sounds.get('survivor_bonus', 'bone_dust')) # Use survivor_bonus sound if available, fallback to bone_dust + self.check_for_nunchucks(player) elif self.item_type == 'witch_broom': broomWeapon = Weapon.create_witch_broom() diff --git a/wicked_quest.py b/wicked_quest.py index c09b972..42fa0a1 100755 --- a/wicked_quest.py +++ b/wicked_quest.py @@ -79,7 +79,7 @@ class WickedQuest: # Pass existing player to new level pygame.event.clear() - self.currentLevel = Level(levelData, self.get_sounds(), self.player) + self.currentLevel = Level(levelData, self.get_sounds(), self.player, self.currentGame) return True except FileNotFoundError: @@ -356,6 +356,7 @@ class WickedQuest: pygame.event.clear() self.currentLevel.player.scoreboard.add_high_score() + cut_scene(self.get_sounds(), "game_over") display_text(report) def game_loop(self, startingLevelNum=1): @@ -546,7 +547,7 @@ class WickedQuest: # Generate first survival segment levelData = self.survivalGenerator.generate_survival_level(self.survivalWave, 300) - self.currentLevel = Level(levelData, self.get_sounds(), self.player) + self.currentLevel = Level(levelData, self.get_sounds(), self.player, self.currentGame) self.survival_loop() @@ -660,7 +661,7 @@ class WickedQuest: self.player.xPos = playerX # Create new level - self.currentLevel = Level(levelData, self.get_sounds(), self.player) + self.currentLevel = Level(levelData, self.get_sounds(), self.player, self.currentGame) def game_mode_menu(sounds):