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