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