Tweaks to survival mode with spawn chances.
This commit is contained in:
@@ -437,6 +437,7 @@ class Level:
|
|||||||
damage=damage,
|
damage=damage,
|
||||||
attack_range=attack_range,
|
attack_range=attack_range,
|
||||||
speed_multiplier=speed_multiplier,
|
speed_multiplier=speed_multiplier,
|
||||||
|
attack_pattern={"type": "hunter"}, # Hunt like original spiders
|
||||||
)
|
)
|
||||||
self.enemies.append(enemy)
|
self.enemies.append(enemy)
|
||||||
|
|
||||||
|
|||||||
@@ -131,17 +131,31 @@ class SurvivalGenerator:
|
|||||||
levelData["weapon_sound_overrides"] = self.weaponOverrides
|
levelData["weapon_sound_overrides"] = self.weaponOverrides
|
||||||
|
|
||||||
# Calculate spawn rates based on difficulty
|
# Calculate spawn rates based on difficulty
|
||||||
collectibleDensity = max(0.1, 0.3 - (difficultyLevel * 0.02)) # Fewer collectibles over time
|
# Ensure total probabilities stay under 1.0 to prevent graves being squeezed out
|
||||||
enemyDensity = min(0.8, 0.2 + (difficultyLevel * 0.05)) # More enemies over time
|
collectibleDensity = max(0.05, 0.15 - (difficultyLevel * 0.01)) # Fewer collectibles over time
|
||||||
hazardDensity = min(0.4, 0.1 + (difficultyLevel * 0.03)) # More hazards over time
|
enemyDensity = min(0.4, 0.15 + (difficultyLevel * 0.025)) # More enemies over time
|
||||||
graveDensity = max(0.15, 0.25 - (difficultyLevel * 0.01)) # Moderate grave density, slight decrease over time
|
hazardDensity = min(0.2, 0.05 + (difficultyLevel * 0.015)) # More hazards over time
|
||||||
objectDensity = max(0.1, 0.2 - (difficultyLevel * 0.01)) # Fewer misc objects 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
|
# Generate objects across the segment with buffer zones
|
||||||
startBufferZone = 25 # Safe zone at start of each wave
|
startBufferZone = 25 # Safe zone at start of each wave
|
||||||
endBufferZone = 30 # Safe zone at end of each wave
|
endBufferZone = 30 # Safe zone at end of each wave
|
||||||
currentX = startBufferZone # Start placing objects after start buffer zone
|
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:
|
while currentX < segmentLength - endBufferZone:
|
||||||
# Determine what to place based on probability
|
# Determine what to place based on probability
|
||||||
rand = random.random()
|
rand = random.random()
|
||||||
@@ -270,9 +284,9 @@ class SurvivalGenerator:
|
|||||||
baseChance = obj.get("zombie_spawn_chance", 0)
|
baseChance = obj.get("zombie_spawn_chance", 0)
|
||||||
obj["zombie_spawn_chance"] = min(50, baseChance + (difficultyLevel * 2))
|
obj["zombie_spawn_chance"] = min(50, baseChance + (difficultyLevel * 2))
|
||||||
|
|
||||||
# Add item spawn chance that scales with difficulty (more items later when you need them)
|
# Add item spawn chance that decreases with difficulty (fewer items in later waves)
|
||||||
baseItemChance = 30 # 30% base chance
|
baseItemChance = 50 # 50% base chance
|
||||||
obj["item_spawn_chance"] = min(70, baseItemChance + (difficultyLevel * 3))
|
obj["item_spawn_chance"] = max(10, baseItemChance - (difficultyLevel * 2))
|
||||||
obj["item"] = "random" # Will be resolved to specific item in level generation
|
obj["item"] = "random" # Will be resolved to specific item in level generation
|
||||||
|
|
||||||
# Handle x_range vs single x
|
# Handle x_range vs single x
|
||||||
|
|||||||
Reference in New Issue
Block a user