Introduced a bug with coffins and items when working on survival mode. Hopefully fixed now.

This commit is contained in:
Storm Dragon
2025-09-21 12:37:26 -04:00
parent 4b21552ca9
commit bd1eb7c1c7
3 changed files with 26 additions and 8 deletions

View File

@@ -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])

View File

@@ -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

View File

@@ -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],