Oops, forgot to add some files in the last push. Rest of the sound changes.
This commit is contained in:
		
							
								
								
									
										57
									
								
								src/pack_sound_system.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								src/pack_sound_system.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | ||||
| #!/usr/bin/env python3 | ||||
| # -*- coding: utf-8 -*- | ||||
| """Pack-specific sound system for Wicked Quest. | ||||
|  | ||||
| Provides hierarchical sound loading that checks pack-specific sounds first, | ||||
| then falls back to generic sounds, without modifying libstormgames. | ||||
| """ | ||||
|  | ||||
| import os | ||||
| import pygame | ||||
| from libstormgames.sound import Sound | ||||
|  | ||||
|  | ||||
| class PackSoundSystem(dict): | ||||
|     """Sound system with hierarchical pack-specific loading.""" | ||||
|      | ||||
|     def __init__(self, originalSounds, soundDir="sounds/", levelPackName=None): | ||||
|         """Initialize pack-specific sound system. | ||||
|          | ||||
|         Args: | ||||
|             originalSounds (dict): Original sound dictionary from initialize_gui | ||||
|             soundDir (str): Base sound directory | ||||
|             levelPackName (str): Name of level pack for pack-specific sounds | ||||
|         """ | ||||
|         # Initialize dict with original sounds | ||||
|         super().__init__(originalSounds) | ||||
|          | ||||
|         self.soundDir = soundDir | ||||
|         self.levelPackName = levelPackName | ||||
|          | ||||
|         # Load pack-specific sounds if pack name provided | ||||
|         if levelPackName: | ||||
|             self._load_pack_sounds() | ||||
|      | ||||
|     def _load_pack_sounds(self): | ||||
|         """Load pack-specific sounds from sounds/[pack_name]/ directory.""" | ||||
|         packSoundDir = os.path.join(self.soundDir, self.levelPackName) | ||||
|         if not os.path.exists(packSoundDir): | ||||
|             return | ||||
|              | ||||
|         try: | ||||
|             for dirPath, _, fileNames in os.walk(packSoundDir): | ||||
|                 relPath = os.path.relpath(dirPath, packSoundDir) | ||||
|                  | ||||
|                 for fileName in fileNames: | ||||
|                     if fileName.lower().endswith(('.ogg', '.wav')): | ||||
|                         fullPath = os.path.join(dirPath, fileName) | ||||
|                         baseName = os.path.splitext(fileName)[0] | ||||
|                          | ||||
|                         # Create sound key same as base system | ||||
|                         soundKey = baseName if relPath == '.' else os.path.join(relPath, baseName).replace('\\', '/') | ||||
|                         # Add/override sound in the main dictionary | ||||
|                         self[soundKey] = pygame.mixer.Sound(fullPath) | ||||
|                          | ||||
|         except Exception as e: | ||||
|             print(f"Error loading pack sounds: {e}") | ||||
|      | ||||
		Reference in New Issue
	
	Block a user