pub struct CoresSettings {Show 14 fields
pub unlock_chapter: i64,
pub max_core_level: i64,
pub max_slots_per_core: i64,
pub core_levels_per_slot: PositiveI64,
pub upgrade_currency_id: CurrencyId,
pub unlock_essence_grant: i64,
pub kill_drop: CoreCurrencyKillDrop,
pub essence_chapter_bands: Vec<CoreEssenceChapterBand>,
pub law_drop_chance: f64,
pub level_costs: NonEmptyVec<CoreLevelCost>,
pub level_cost_growth: PositiveF64,
pub multiplied_attribute_ids: Vec<AttributeId>,
pub law_upgrade_ladder: NonEmptyVec<LawUpgradeStep>,
pub bridge_charge: BridgeChargeConfig,
}Expand description
Everything tunable about cores, laws and bridges.
Fields§
§unlock_chapter: i64§max_core_level: i64The hard stop on core levels. Effectively unbounded since the
acquisition pass: everything the level cap used to be coupled to now
keys off Self::max_slot_level (max_slots_per_core × core_levels_per_slot) instead, so levels above that open no slot, allow
no extra bridge and only grow the stat multiplier.
The history below explains why the SLOT ladder is what it is; it is no longer a statement about this field.
The old pair (cap 10, a slot every 2 levels) came from the pre-v0.2 rule
“a law sits in two bridges”: possible bridges were 2 × slots, so the
allowed count only caught up at level 11, and the every-two-levels
ladder existed solely to stretch 5 slots over that cap. Laws v0.2 cut a
law to ONE partner, halving the possible count — and the limit stopped
binding from level 4, which made BL-01 Extra Span’s “+1 bridge” half
dead content. With one slot per level and a cap of 5: slots = level,
possible = slots, allowed = level − 1 — exactly one short at every level,
so the limit binds again and BL-01 buys a bridge that has somewhere to
go.
The cost ladder covers the slot-opening levels and is EXTENDED past
them by level_cost_growth; the stat multiplier is the closed
core_stat_multiplier formula (see cores_settings/_data.yaml).
max_slots_per_core: i64The slot cap, and — through CoresSettings::max_slot_level — the
level at which slots, bridges and the deterministic law schedule all
stop moving.
core_levels_per_slot: PositiveI64§upgrade_currency_id: CurrencyId§unlock_essence_grant: i64§kill_drop: CoreCurrencyKillDropSUPERSEDED by Self::essence_chapter_bands (BAL-010) and no longer
read by the runtime. Kept only as the rollback shape — editing it has no
effect on the live faucet.
essence_chapter_bands: Vec<CoreEssenceChapterBand>BAL-010: the signed Core Essence faucet. Supersedes the flat
kill_drop placeholder above, which stays only as the rollback shape.
Bands are checked in order and the LAST one whose from_chapter is at or
below the reached chapter wins, so the final row is open-ended.
law_drop_chance: f64PLACEHOLDER ECONOMY (plan §4): the plan leaves the law drop source explicitly unassigned and asks for an existing one to be picked and marked as a stand-in. The mob-kill path is that pick — one random law template at this chance per enemy killed.
level_costs: NonEmptyVec<CoreLevelCost>§level_cost_growth: PositiveF64Geometric continuation of level_costs above its last tabled level:
cost(L) = last_tabled_cost × growth^(L − last_tabled_level).
This is the whole of the unbounded sink. The tabled rows double (700 → 11 200), so anything at or below 2.0 continues the table’s own shape; a value at the low end of that range keeps the post-slot levels reachable instead of decorative.
multiplied_attribute_ids: Vec<AttributeId>§law_upgrade_ladder: NonEmptyVec<LawUpgradeStep>§bridge_charge: BridgeChargeConfigImplementations§
Source§impl CoresSettings
impl CoresSettings
Sourcepub fn essence_band(&self, chapter: i64) -> Option<&CoreEssenceChapterBand>
pub fn essence_band(&self, chapter: i64) -> Option<&CoreEssenceChapterBand>
The band governing chapter: the last row whose from_chapter is at or
below it, so the final row stays open-ended. None only when no band is
authored at all or the player is below the first one — before the ch21
gate no source hands out Essence, so that is a real state, not an error.
Source§impl CoresSettings
impl CoresSettings
pub const fn is_unlocked(&self, chapter_level: i64) -> bool
Sourcepub fn max_slot_level(&self) -> i64
pub fn max_slot_level(&self) -> i64
The level at which the LAST law slot opens — and with it the last
bridge, the last deterministic law grant, and the end of every rule that
used to be pinned to max_core_level.
max_slots_per_core × core_levels_per_slot is exactly the argument that
makes law_slots_for_level return max_slots_per_core, so the two can
never drift apart.
Sourcepub fn max_tabled_core_level(&self) -> i64
pub fn max_tabled_core_level(&self) -> i64
Highest level level_costs prices explicitly. Above it the ladder is
continued by Self::level_cost_growth.
Sourcepub fn core_level_cost(&self, level: i64) -> Option<i64>
pub fn core_level_cost(&self, level: i64) -> Option<i64>
Cost of raising a core to level, or None for level 0 and below or
above max_core_level (which is how “above the cap” is refused).
Inside the table the authored row wins verbatim. Above it the cost grows geometrically from the last tabled row — the extension the unbounded level cap needs, kept here so the handler cannot disagree with it.
Saturating on purpose: growth^level overflows f64 to infinity long
before level 9999, and f64 as i64 saturates at i64::MAX, which reads
as “unaffordable” everywhere downstream rather than as a wrapped bargain.
Sourcepub fn law_upgrade_cost(&self, level: i64) -> Option<i64>
pub fn law_upgrade_cost(&self, level: i64) -> Option<i64>
Raw copies needed to raise a law to level, or None when the ladder
stops there (that is the law level cap).
Sourcepub fn max_law_level(&self) -> i64
pub fn max_law_level(&self) -> i64
Highest law level the ladder can reach.
Sourcepub fn bridge_capacity(&self) -> i64
pub fn bridge_capacity(&self) -> i64
Charge one bridge direction can hold, in WHOLE units; everything above
it burns. The runtime scales this by essences::cores::CHARGE_SCALE and
by whatever the Bridge Law socket does to it.
Sourcepub fn bridge_amplification_cap(&self) -> i64
pub fn bridge_amplification_cap(&self) -> i64
Amplification a completely full bridge is worth, in permyriad.
Sourcepub fn law_power_multiplier(&self, units: i64) -> f64
pub fn law_power_multiplier(&self, units: i64) -> f64
Law Power multiplier for a law that received units of charge at the
last flip, at the shipped capacity and cap.
This is the ONLY place amplification is priced. It multiplies the numbers of a law’s effect (and of its passive modifiers) and nothing else — never a condition, never a Resonance — which is what stops a law from amplifying its own bridge (plan §3).
Trait Implementations§
Source§impl Clone for CoresSettings
impl Clone for CoresSettings
Source§fn clone(&self) -> CoresSettings
fn clone(&self) -> CoresSettings
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for CoresSettings
impl Debug for CoresSettings
Source§impl<'de> Deserialize<'de> for CoresSettings
impl<'de> Deserialize<'de> for CoresSettings
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for CoresSettings
impl JsonSchema for CoresSettings
Source§fn schema_name() -> String
fn schema_name() -> String
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
§fn is_referenceable() -> bool
fn is_referenceable() -> bool
$ref keyword. Read more