diff --git a/engine/src/modules/ecology/ecology_initializer.gd b/engine/src/modules/ecology/ecology_initializer.gd index a4095236..6771d916 100644 --- a/engine/src/modules/ecology/ecology_initializer.gd +++ b/engine/src/modules/ecology/ecology_initializer.gd @@ -406,18 +406,17 @@ static func _initialize_reef_health(game_map: Variant) -> void: static func _derive_growth_rate(traits: Variant) -> float: - ## r-strategy = fast growth, k-strategy = slow - var base: float = 0.02 + ## r-strategy = fast growth, k-strategy = slow. + ## Tuned for damped equilibrium by ~turn 50 (M2b Block 3). + var base: float = 0.06 # k_strategy base (was 0.02) if traits.reproduction == "r_strategy": - base = 0.05 - elif traits.reproduction == "budding": - base = 0.04 + base = 0.12 # r_strategy breeds fast (was 0.05) # Smaller creatures reproduce faster match traits.size: "tiny": base *= 2.0 "small": base *= 1.5 "large": base *= 0.7 - "huge": base *= 0.4 + "huge": base *= 0.5 return base diff --git a/engine/src/modules/ecology/fauna.gd b/engine/src/modules/ecology/fauna.gd index ce22547a..c85bdf26 100644 --- a/engine/src/modules/ecology/fauna.gd +++ b/engine/src/modules/ecology/fauna.gd @@ -173,8 +173,8 @@ func _process_creature_lifecycle( if health > thresh: new_q = quality + 1 - # Reproduction - if health > 0.8 and age > sp.get("maturity_age", 5): + # Reproduction — threshold 0.6 (tuned from 0.8 for stable populations) + if health > 0.6 and age > sp.get("maturity_age", 5): var count: int = ecology_db.get_creature_count_on_tile(pos.x, pos.y) var cap: float = sp.get("carrying_capacity", 10.0) if float(count) < cap and rng.randf() < sp.get("growth_rate", 0.02):