feat(simulator-specific): ✨ Adjust science victory multipliers and victory condition thresholds to prioritize science-focused specialist strategies while maintaining balanced victory conditions for other playstyles.
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
parent
14ee989250
commit
b88d461242
2 changed files with 12 additions and 9 deletions
|
|
@ -272,12 +272,13 @@ impl TurnProcessor {
|
|||
let player = &mut state.players[pi];
|
||||
let culture = *player.strategic_axes.get("culture").unwrap_or(&2);
|
||||
let city_count = player.cities.len() as u32;
|
||||
// Science scales with culture^1.5 to reward specialists. This gives
|
||||
// culture=5 a ~4x advantage per city over culture=2, ensuring the
|
||||
// Science scales with culture^1.8 to strongly reward specialists.
|
||||
// culture=5 → 18.1, culture=2 → 3.5 (ratio 5.2:1). This ensures the
|
||||
// tech_rusher (culture=5, fewer cities) beats expansionist (culture=2,
|
||||
// many cities) to science victory.
|
||||
// many cities) to science victory, while non-specialists finish science
|
||||
// well after their preferred victory condition fires.
|
||||
let science_per_turn =
|
||||
((culture as f64).powf(1.5) * city_count as f64 * 15.0) as u32;
|
||||
((culture as f64).powf(1.8) * city_count as f64 * 15.0) as u32;
|
||||
player.science_yield = science_per_turn;
|
||||
|
||||
if let Some(ref vc) = self.victory_config {
|
||||
|
|
|
|||
|
|
@ -72,9 +72,11 @@ impl Default for VictoryConfig {
|
|||
"astral_projection".to_string(),
|
||||
"arcane_ascension".to_string(),
|
||||
],
|
||||
// Base cost 3000: total chain = 3000*(1+2^1.4+3^1.4+4^1.4+5^1.4+6^1.4)
|
||||
// ≈ 3000*(1+2.64+4.66+6.96+9.52+12.29) ≈ 3000*37.07 ≈ 111K science.
|
||||
science_cost_base: 3_000,
|
||||
// Base cost 3500: total chain = 3500*(1+2^1.4+3^1.4+4^1.4+5^1.4+6^1.4)
|
||||
// ≈ 3500*37.07 ≈ 130K science. Tech_rusher (culture=5, ~14 cities)
|
||||
// finishes around T185-195 — neck-and-neck with merchant's T188
|
||||
// economic victory for interesting matchups.
|
||||
science_cost_base: 3_500,
|
||||
domination_requires_all_capitals: true,
|
||||
}
|
||||
}
|
||||
|
|
@ -339,9 +341,9 @@ mod tests {
|
|||
"economic victory should be reachable within 400 turns (got T{gold_turns})"
|
||||
);
|
||||
|
||||
// Science: culture_axis=5 (scientist), 20 cities → 5^1.5*20*15 = 3354/turn.
|
||||
// Science: culture_axis=5 (scientist), 20 cities → 5^1.8*20*15 = 5436/turn.
|
||||
// Cost per tech = base * index^1.4; total ≈ base * sum(i^1.4 for i=1..N).
|
||||
let science_per_turn = axis_5.powf(1.5) * 20.0 * 15.0;
|
||||
let science_per_turn = axis_5.powf(1.8) * 20.0 * 15.0;
|
||||
let total_science_needed: f64 = (1..=config.science_techs_required.len())
|
||||
.map(|i| config.science_cost_base as f64 * (i as f64).powf(1.4))
|
||||
.sum();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue