Updated level creation documentation. Fixed a couple bugs in weapon overrides.
This commit is contained in:
		
							
								
								
									
										32
									
								
								src/level.py
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								src/level.py
									
									
									
									
									
								
							| @@ -41,9 +41,12 @@ class Level: | ||||
|         # Pass footstep sound to player | ||||
|         self.player.set_footstep_sound(self.footstepSound) | ||||
|  | ||||
|         # Apply weapon sound overrides if specified | ||||
|         if "weapon_sound_overrides" in levelData: | ||||
|             self._apply_weapon_overrides(levelData["weapon_sound_overrides"]) | ||||
|         # Store and apply weapon sound overrides if specified | ||||
|         self.weaponOverrides = levelData.get("weapon_sound_overrides", {}) | ||||
|         if self.weaponOverrides: | ||||
|             self._apply_weapon_overrides(self.weaponOverrides) | ||||
|             # Give player access to overrides for newly added weapons | ||||
|             self.player.set_weapon_overrides(self.weaponOverrides) | ||||
|  | ||||
|         # Level intro message (skip for survival mode) | ||||
|         if levelData["level_id"] != 999:  # 999 is survival mode | ||||
| @@ -578,19 +581,26 @@ class Level: | ||||
|     def _apply_weapon_overrides(self, weaponOverrides): | ||||
|         """Apply sound and name overrides to player weapons based on level pack theme.""" | ||||
|         for weapon in self.player.weapons: | ||||
|             if weapon.name in weaponOverrides: | ||||
|                 overrides = weaponOverrides[weapon.name] | ||||
|             # Check if weapon needs override (use originalName if available, fallback to current name) | ||||
|             weaponKey = getattr(weapon, 'originalName', weapon.name) | ||||
|  | ||||
|                 # Override weapon name if specified | ||||
|                 if "name" in overrides: | ||||
|             if weaponKey in weaponOverrides: | ||||
|                 overrides = weaponOverrides[weaponKey] | ||||
|  | ||||
|                 # Store original name on first override to enable future lookups | ||||
|                 if not hasattr(weapon, 'originalName'): | ||||
|                     weapon.originalName = weapon.name | ||||
|  | ||||
|                 # Override weapon name if specified and different from current | ||||
|                 if "name" in overrides and weapon.name != overrides["name"]: | ||||
|                     weapon.name = overrides["name"] | ||||
|  | ||||
|                 # Override attack sound if specified | ||||
|                 if "attack_sound" in overrides: | ||||
|                 # Override attack sound if specified and different from current | ||||
|                 if "attack_sound" in overrides and hasattr(weapon, 'attackSound') and weapon.attackSound != overrides["attack_sound"]: | ||||
|                     weapon.attackSound = overrides["attack_sound"] | ||||
|  | ||||
|                 # Override hit sound if specified | ||||
|                 if "hit_sound" in overrides: | ||||
|                 # Override hit sound if specified and different from current | ||||
|                 if "hit_sound" in overrides and hasattr(weapon, 'hitSound') and weapon.hitSound != overrides["hit_sound"]: | ||||
|                     weapon.hitSound = overrides["hit_sound"] | ||||
|  | ||||
|     def _apply_object_sound_overrides(self, obj, soundOverrides): | ||||
|   | ||||
| @@ -62,6 +62,9 @@ class Player: | ||||
|         # Death state tracking (to prevent revival after death in same frame) | ||||
|         self.diedThisFrame = False | ||||
|  | ||||
|         # Weapon override storage | ||||
|         self.weaponOverrides = {} | ||||
|  | ||||
|         # Initialize starting weapon (rusty shovel) | ||||
|         self.add_weapon( | ||||
|             Weapon( | ||||
| @@ -270,6 +273,9 @@ class Player: | ||||
|  | ||||
|     def add_weapon(self, weapon): | ||||
|         """Add a new weapon to inventory and equip if first weapon""" | ||||
|         # Apply weapon overrides if they exist | ||||
|         self._apply_weapon_override(weapon) | ||||
|  | ||||
|         self.weapons.append(weapon) | ||||
|         if len(self.weapons) == 1:  # If this is our first weapon, equip it | ||||
|             self.equip_weapon(weapon) | ||||
| @@ -289,7 +295,9 @@ class Player: | ||||
|  | ||||
|         # Find the weapon in player's inventory | ||||
|         for weapon in self.weapons: | ||||
|             if weapon.originalName == targetWeaponName: | ||||
|             # Check original name if it exists, fallback to current name | ||||
|             weaponKey = getattr(weapon, 'originalName', weapon.name) | ||||
|             if weaponKey == targetWeaponName: | ||||
|                 self.equip_weapon(weapon) | ||||
|                 speak(weapon.name.replace("_", " ")) | ||||
|                 return True | ||||
| @@ -297,6 +305,37 @@ class Player: | ||||
|         # Weapon not found in inventory | ||||
|         return False | ||||
|  | ||||
|     def set_weapon_overrides(self, weaponOverrides): | ||||
|         """Store weapon overrides for applying to newly added weapons""" | ||||
|         self.weaponOverrides = weaponOverrides | ||||
|  | ||||
|     def _apply_weapon_override(self, weapon): | ||||
|         """Apply weapon overrides to a single weapon""" | ||||
|         if not hasattr(self, 'weaponOverrides') or not self.weaponOverrides: | ||||
|             return | ||||
|  | ||||
|         # Check if weapon needs override (use originalName if available, fallback to current name) | ||||
|         weaponKey = getattr(weapon, 'originalName', weapon.name) | ||||
|  | ||||
|         if weaponKey in self.weaponOverrides: | ||||
|             overrides = self.weaponOverrides[weaponKey] | ||||
|  | ||||
|             # Store original name on first override to enable future lookups | ||||
|             if not hasattr(weapon, 'originalName'): | ||||
|                 weapon.originalName = weapon.name | ||||
|  | ||||
|             # Override weapon name if specified and different from current | ||||
|             if "name" in overrides and weapon.name != overrides["name"]: | ||||
|                 weapon.name = overrides["name"] | ||||
|  | ||||
|             # Override attack sound if specified and different from current | ||||
|             if "attack_sound" in overrides and hasattr(weapon, 'attackSound') and weapon.attackSound != overrides["attack_sound"]: | ||||
|                 weapon.attackSound = overrides["attack_sound"] | ||||
|  | ||||
|             # Override hit sound if specified and different from current | ||||
|             if "hit_sound" in overrides and hasattr(weapon, 'hitSound') and weapon.hitSound != overrides["hit_sound"]: | ||||
|                 weapon.hitSound = overrides["hit_sound"] | ||||
|  | ||||
|     def add_item(self, item): | ||||
|         """Add an item to inventory""" | ||||
|         self.inventory.append(item) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user