chore(mc-core): 🔧 Add post-capture refound suppression logic to combat balance system
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
parent
20509d2cce
commit
2441454e95
2 changed files with 34 additions and 1 deletions
|
|
@ -74,6 +74,37 @@ pub struct CombatBalance {
|
|||
/// 158 invented per-unit numbers.
|
||||
#[serde(default)]
|
||||
pub quality_deltas: QualityDeltas,
|
||||
/// p1-29i — post-capture refound suppression. After an empire loses a city
|
||||
/// to capture, it cannot found a *replacement* city for `cooldown_turns`
|
||||
/// turns. This is the capture-stickiness lever the p1-29h Phase-2
|
||||
/// measurement isolated: on the fair gridded duel both empires get pressed
|
||||
/// down to a single city (`per_player_min_cities = [1, 1]`) but neither is
|
||||
/// ever eliminated because the loser instantly refounds, so 20 captures
|
||||
/// produce 0 eliminations (pure churn). A short cooldown gives the attacker
|
||||
/// a window to press the now-undefended capital before the loser rebuilds.
|
||||
/// `cooldown_turns == 0` disables the lever entirely (baseline behaviour).
|
||||
#[serde(default)]
|
||||
pub refound_suppression: RefoundSuppression,
|
||||
}
|
||||
|
||||
/// p1-29i — post-capture refound-suppression tunables.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct RefoundSuppression {
|
||||
/// Number of turns after a city *loss* (capture by another player) during
|
||||
/// which the losing empire may not found a replacement city. `0` disables
|
||||
/// the lever (no suppression — preserves pre-p1-29i behaviour).
|
||||
#[serde(default = "default_refound_cooldown_turns")]
|
||||
pub cooldown_turns: u32,
|
||||
}
|
||||
|
||||
fn default_refound_cooldown_turns() -> u32 {
|
||||
0
|
||||
}
|
||||
|
||||
impl Default for RefoundSuppression {
|
||||
fn default() -> Self {
|
||||
Self { cooldown_turns: default_refound_cooldown_turns() }
|
||||
}
|
||||
}
|
||||
|
||||
/// p2-57c — additive combat-stat deltas applied per production-quality band.
|
||||
|
|
@ -204,6 +235,7 @@ impl Default for CombatBalance {
|
|||
low_worker_pool_threshold: default_low_worker_pool_threshold(),
|
||||
solo_city_grace: SoloCityGrace::default(),
|
||||
quality_deltas: QualityDeltas::default(),
|
||||
refound_suppression: RefoundSuppression::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,8 @@ pub mod worker;
|
|||
pub use building::{BuildingEntity, Placement};
|
||||
pub use city_action::{CityAction, CityId};
|
||||
pub use combat_balance::{
|
||||
parse_combat_balance, CombatBalance, QualityDeltas, SoloCityGrace, StatDelta,
|
||||
parse_combat_balance, CombatBalance, QualityDeltas, RefoundSuppression, SoloCityGrace,
|
||||
StatDelta,
|
||||
};
|
||||
pub use damage_channel::{ChannelDamageBundle, DamageChannel};
|
||||
pub use diplomacy::{AgreementType, MechanicKey};
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue