diff --git a/src/coffin.py b/src/coffin.py index 3bc3315..2fb4685 100644 --- a/src/coffin.py +++ b/src/coffin.py @@ -34,14 +34,18 @@ class CoffinObject(Object): # Determine item to drop if self.specified_item == "random": - item_type = ItemProperties.get_random_item() + # Check if we're in survival mode (level_id 999) + is_survival_mode = hasattr(self.level, 'levelData') and self.level.levelData.get('level_id') == 999 + item_type = ItemProperties.get_random_item(survival_mode=is_survival_mode) else: # Validate specified item if ItemProperties.is_valid_item(self.specified_item): item_type = self.specified_item else: # Fall back to random if invalid item specified - item_type = ItemProperties.get_random_item() + # Check if we're in survival mode (level_id 999) + is_survival_mode = hasattr(self.level, 'levelData') and self.level.levelData.get('level_id') == 999 + item_type = ItemProperties.get_random_item(survival_mode=is_survival_mode) # Create item 1-2 tiles away in random direction direction = random.choice([-1, 1]) diff --git a/src/item_types.py b/src/item_types.py index e43b5d9..9af0fd4 100644 --- a/src/item_types.py +++ b/src/item_types.py @@ -10,6 +10,7 @@ class ItemType(Enum): GUTS = auto() HAND_OF_GLORY = auto() JACK_O_LANTERN = auto() + SHIN_BONE = auto() EXTRA_LIFE = auto() CAULDRON = auto() WITCH_BROOM = auto() @@ -18,11 +19,18 @@ class ItemType(Enum): class ItemProperties: """Manages item properties and availability""" - # Items that naturally appear in graves and coffins (excluding special items like extra_life, cauldron, witch_broom) - RANDOM_ELIGIBLE = { + # Items for story mode (graves and coffins) - no powerful items + STORY_MODE_ELIGIBLE = { + ItemType.HAND_OF_GLORY: "hand_of_glory", + ItemType.JACK_O_LANTERN: "jack_o_lantern" + } + + # Items for survival mode (graves and coffins) - includes powerful items + SURVIVAL_MODE_ELIGIBLE = { ItemType.HAND_OF_GLORY: "hand_of_glory", ItemType.JACK_O_LANTERN: "jack_o_lantern", - ItemType.GUTS: "guts" + ItemType.GUTS: "guts", + ItemType.SHIN_BONE: "shin_bone" } # All possible items (including special ones) @@ -30,6 +38,7 @@ class ItemProperties: ItemType.GUTS: "guts", ItemType.HAND_OF_GLORY: "hand_of_glory", ItemType.JACK_O_LANTERN: "jack_o_lantern", + ItemType.SHIN_BONE: "shin_bone", ItemType.EXTRA_LIFE: "extra_life", ItemType.CAULDRON: "cauldron", ItemType.WITCH_BROOM: "witch_broom", @@ -41,9 +50,12 @@ class ItemProperties: return ItemProperties.ALL_ITEMS.get(item_type) @staticmethod - def get_random_item(): + def get_random_item(survival_mode=False): """Get a random item from eligible items""" - item_type = random.choice(list(ItemProperties.RANDOM_ELIGIBLE.keys())) + if survival_mode: + item_type = random.choice(list(ItemProperties.SURVIVAL_MODE_ELIGIBLE.keys())) + else: + item_type = random.choice(list(ItemProperties.STORY_MODE_ELIGIBLE.keys())) return ItemProperties.get_sound_name(item_type) @staticmethod diff --git a/src/level.py b/src/level.py index 57e7ee0..a13feb2 100644 --- a/src/level.py +++ b/src/level.py @@ -151,7 +151,9 @@ class Level: # Story mode: use item as specified grave_item = obj.get("item", None) if grave_item == "random": - grave_item = ItemProperties.get_random_item() + # Check if we're in survival mode (level_id 999) + is_survival_mode = self.levelData.get('level_id') == 999 + grave_item = ItemProperties.get_random_item(survival_mode=is_survival_mode) grave = GraveObject( xPos[0],