From d2304fae854f70d316314f966488642eacf5eeaf Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Tue, 23 Sep 2025 00:41:23 -0400 Subject: [PATCH] Tweaks to survival mode with spawn chances. --- src/level.py | 1 + src/survival_generator.py | 30 ++++++++++++++++++++++-------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/level.py b/src/level.py index d1893e3..21d7061 100644 --- a/src/level.py +++ b/src/level.py @@ -437,6 +437,7 @@ class Level: damage=damage, attack_range=attack_range, speed_multiplier=speed_multiplier, + attack_pattern={"type": "hunter"}, # Hunt like original spiders ) self.enemies.append(enemy) diff --git a/src/survival_generator.py b/src/survival_generator.py index 3b67673..5c29141 100644 --- a/src/survival_generator.py +++ b/src/survival_generator.py @@ -131,17 +131,31 @@ class SurvivalGenerator: levelData["weapon_sound_overrides"] = self.weaponOverrides # Calculate spawn rates based on difficulty - collectibleDensity = max(0.1, 0.3 - (difficultyLevel * 0.02)) # Fewer collectibles over time - enemyDensity = min(0.8, 0.2 + (difficultyLevel * 0.05)) # More enemies over time - hazardDensity = min(0.4, 0.1 + (difficultyLevel * 0.03)) # More hazards over time - graveDensity = max(0.15, 0.25 - (difficultyLevel * 0.01)) # Moderate grave density, slight decrease over time - objectDensity = max(0.1, 0.2 - (difficultyLevel * 0.01)) # Fewer misc objects over time + # Ensure total probabilities stay under 1.0 to prevent graves being squeezed out + collectibleDensity = max(0.05, 0.15 - (difficultyLevel * 0.01)) # Fewer collectibles over time + enemyDensity = min(0.4, 0.15 + (difficultyLevel * 0.025)) # More enemies over time + hazardDensity = min(0.2, 0.05 + (difficultyLevel * 0.015)) # More hazards over time + graveDensity = 0.25 # Constant grave density throughout all waves + objectDensity = max(0.05, 0.1 - (difficultyLevel * 0.005)) # Fewer misc objects over time # Generate objects across the segment with buffer zones startBufferZone = 25 # Safe zone at start of each wave endBufferZone = 30 # Safe zone at end of each wave currentX = startBufferZone # Start placing objects after start buffer zone + # Guarantee at least one coffin per wave if coffins exist in templates + coffinTemplates = [obj for obj in self.objectTemplates if obj.get("type") == "coffin"] + coffin_placed = False + if coffinTemplates: + # Place guaranteed coffin in the first quarter of the level + coffin_x = random.randint(startBufferZone + 10, (segmentLength - endBufferZone) // 4) + coffin_template = random.choice(coffinTemplates) + coffin_obj = copy.deepcopy(coffin_template) + coffin_obj["item"] = "random" # Override any specified item + coffin_obj["x"] = coffin_x + levelData["objects"].append(coffin_obj) + coffin_placed = True + while currentX < segmentLength - endBufferZone: # Determine what to place based on probability rand = random.random() @@ -270,9 +284,9 @@ class SurvivalGenerator: baseChance = obj.get("zombie_spawn_chance", 0) obj["zombie_spawn_chance"] = min(50, baseChance + (difficultyLevel * 2)) - # Add item spawn chance that scales with difficulty (more items later when you need them) - baseItemChance = 30 # 30% base chance - obj["item_spawn_chance"] = min(70, baseItemChance + (difficultyLevel * 3)) + # Add item spawn chance that decreases with difficulty (fewer items in later waves) + baseItemChance = 50 # 50% base chance + obj["item_spawn_chance"] = max(10, baseItemChance - (difficultyLevel * 2)) obj["item"] = "random" # Will be resolved to specific item in level generation # Handle x_range vs single x