RandomizeDeadline is onUse Global modeQuota growth formula
increase ≈ BaseIncrease * (1 + quota² / CurveSharpness) * randomFactor
randomFactor ∈ [1 - 0.5*RandomizerMultiplier, 1 + 0.5*RandomizerMultiplier]
Example with defaults (BaseIncrease=100, CurveSharpness=16, RandomizerMultiplier=1):
| Quota | Curve term | Avg increase | Cumulative quota (start 130) |
|---|---|---|---|
| 1 | 100 × (1 + 1/16) ≈ 106 | ~106 ± 53 | ~236 |
| 2 | 100 × (1 + 4/16) ≈ 125 | ~125 ± 63 | ~361 |
| 3 | 100 × (1 + 9/16) ≈ 156 | ~156 ± 78 | ~517 |
| 4 | 100 × (1 + 16/16) ≈ 200 | ~200 ± 100 | ~717 |
| 5 | 100 × (1 + 25/16) ≈ 256 | ~256 ± 128 | ~973 |
FinalLevelDampening formula (only active after DampeningStartAt quota):
excess = currentQuota - DampeningStartAt
divisor = 1 + (excess / DampeningSharpness)²
finalIncrease = curveIncrease / divisor
Example: DampeningStartAt=6, DampeningSharpness=11, at quota 10:
excess = 10 - 6 = 4
divisor = 1 + (4/11)² ≈ 1.13
=> growth shrinks by ~12%
Multiplier formula:
extra = clamp(playerCount - PlayerThreshold, 0, PlayerCap - PlayerThreshold)
multiplier = 1 + extra * MultPerPlayer
Example: 4 players, PlayerThreshold=2, PlayerCap=4, MultPerPlayer=0.25:
extra = clamp(4 - 2, 0, 4 - 2) = 2
multiplier = 1 + 2 * 0.25 = 1.5x
5th player would not raise this further because of the cap.
Rollover example: quota was 100, you sold $150 of scrap (overage = $50), RolloverAmount = 0.5:
carried = $50 * 0.5 = $25 → applied toward next quota
Dynamic = falsePercentCap as the scaleFormulas:
fixedMode: pct = dead * PercentPerPlayer (clamped to PercentCap)
dynamicMode: pct = (dead / total) * PercentCap (naturally ≤ PercentCap)
if recovered > 0:
pct *= 1 - RecoveryBonus * (recovered / dead)
if pct < PercentThreshold: pct = 0
Example A — fixed mode, 8-player lobby, 2 dead, PercentPerPlayer=0.15, PercentCap=0.5:
pct = 2 * 0.15 = 30% (under 50% cap → applied as-is)
Example B — dynamic mode, 8-player lobby, 2 dead, PercentCap=0.05:
pct = (2 / 8) * 0.05 = 1.25%
Example C — recovery bonus, 4 dead, 2 recovered, RecoveryBonus=0.5, base 30%:
pct = 30% * (1 - 0.5 * 2/4) = 30% * 0.75 = 22.5%
Per-item loss chance:
lossChance = (1 - ItemsSafeChance) * LoseEachScrapChance
Example: 10 items on the ship, ItemsSafeChance=0.5, LoseEachScrapChance=0.1:
lossChance = 0.5 * 0.1 = 5% per item
expected losses ≈ 10 * 0.05 = 0.5 items per wipe (capped at MaxLostScrapItems)
Stacking example: Percent = 0.25 (each wipe removes 25%), 3 wipes in a row on the same scrap:
remaining = (1 - 0.25)³ = 0.75³ ≈ 0.42
=> scrap retains ~42% of its original value
Example: 6 equipment items on the ship, LoseEachEquipmentChance=0.05, MaxLostEquipmentItems=1:
expected losses ≈ 6 * 0.05 = 0.3 items per wipe (capped at 1)
Scales the moons interior multiplier by player count.
PerMissingPlayer (boost when below threshold) or PerExtraPlayer (boost when above threshold)Formula:
count = PerMissingPlayer ? max(0, PlayerThreshold - playerCount)
: max(0, playerCount - PlayerThreshold)
factor = 1 + count * MultPerPlayer
size = BaseSize * factor
Example (PerExtraPlayer, PlayerThreshold=2, MultPerPlayer=0.10, BaseSize=1.0):
| Players | count | factor | size |
|---|---|---|---|
| 1 | 0 | 1.00 | 1.00 |
| 2 | 0 | 1.00 | 1.00 |
| 3 | 1 | 1.10 | 1.10 |
| 4 | 2 | 1.20 | 1.20 |
Scales the moon's current min/max total scrap value (after moon mods) with a player count factor.
PerMissingPlayer (boost when below threshold) or PerExtraPlayer (boost when above threshold)Formula:
count = PerMissingPlayer ? max(0, PlayerThreshold - playerCount)
: max(0, playerCount - PlayerThreshold)
factor = 1 + count * MultPerPlayer
min = round(baseMinTotalScrapValue * MinValueMultiplier * factor) + ScrapValueOffset
max = round(baseMaxTotalScrapValue * MaxValueMultiplier * factor) + ScrapValueOffset
Solo boost example (PerMissingPlayer, PlayerThreshold=2, MultPerPlayer=0.15, MinMult=1.0, MaxMult=1.0, Offset=0):
| Players | factor | base min/max | scaled min/max |
|---|---|---|---|
| 1 (solo) | 1.15 | $1200 / $1800 | $1380 / $2070 |
| 2+ | 1.00 | $1200 / $1800 | $1200 / $1800 |
Scales the moon's min/max scrap item count off baseMinTotalScrapValue, with a player count factor.
Dynamic Scrap Amount is independent from Dynamic Scrap Value output. Enabling both will not compound the two systems.
minScrap = round(maxScrap * this)maxScrap. -1 disables the capPerMissingPlayer (boost when below threshold) or PerExtraPlayer (boost when above threshold)Formula:
count = PerMissingPlayer ? max(0, PlayerThreshold - playerCount)
: max(0, playerCount - PlayerThreshold)
factor = 1 + count * MultPerPlayer
maxScrap = max(1, round(baseMinTotalScrapValue * factor) / ValuePerScrapItem)
if cap >= 0: maxScrap = min(maxScrap, MaxScrapItemsCap)
minScrap = max(1, round(maxScrap * MinScrapFraction))
Solo boost example (defaults: PerMissingPlayer, PlayerThreshold=2, MultPerPlayer=0.15, Divisor=25, Fraction=0.6):
| baseMinTotalScrapValue | Players | factor | maxScrap | minScrap |
|---|---|---|---|---|
| $200 | 1 (solo) | 1.15 | 9 | 5 |
| $200 | 2+ | 1.00 | 8 | 5 |
| $1,000 | 1 | 1.15 | 46 | 28 |
| $1,000 | 4 | 1.00 | 40 | 24 |
Tighter cap (MaxScrapItemsCap=15):
| baseMinTotalScrapValue | Raw maxScrap | Capped | minScrap |
|---|---|---|---|
| $500 | 20 | 15 | 9 |
| $1,000 | 40 | 15 | 9 |
| $2,000 | 80 | 15 | 9 |
Scales moons enemy power budgets by player count. Higher budget = more / stronger enemies can spawn.
maxEnemyPowerCountmaxOutsideEnemyPowerCount (night time outside enemies)maxDaytimeEnemyPowerCount (daytime enemies)Formula:
count = max(0, playerCount - PlayerThreshold)
factor = min(MaxFactor, 1 + count * MultPerPlayer)
maxEnemyPowerCount *= factor (if ScaleInside)
maxOutsideEnemyPowerCount *= factor (if ScaleOutside)
maxDaytimeEnemyPowerCount *= factor (if ScaleDaytime)
Example (defaults: PlayerThreshold=2, MultPerPlayer=0.15, MaxFactor=3.0):
| Players | count | factor | inside @ vanilla 8 | outside @ vanilla 8 |
|---|---|---|---|---|
| 1 | 0 | 1.00 | 8 | 8 |
| 2 | 0 | 1.00 | 8 | 8 |
| 3 | 1 | 1.15 | 9 | 9 |
| 4 | 2 | 1.30 | 10 | 10 |
| 8 | 6 | 1.90 | 15 | 15 |
Native port of BuyRateSettings features. All entries default OFF; the Company's daily buy rate is vanilla until you enable something here. The host computes the rate and broadcasts it to clients — no desync.
[MinRate, MaxRate]. Required for RandomRateEnabled0.2 = 20%)[MinRate, MaxRate]LastDayMinRate / LastDayMaxRate0.01 = 1%)SCRAP EMERGENCY alert with sound on jackpot (per-client)Precedence (host evaluates in order, first hit wins):
1. Jackpot → JackpotEnabled AND chance roll AND (last-day if LastDayOnly)
2. Last-day rate → LastDayRateEnabled AND daysUntilDeadline == 0
3. Random rate → RandomRateEnabled AND MinMaxEnabled
4. Min/Max clamp → MinMaxEnabled (clamps the vanilla rate)
5. Vanilla → none of the above
Sample run (JackpotEnabled=true, chance=1%, last-day-only, LastDayMin=Max=1.2, MinMax=true, Min=0.3, Max=1.0):
| Day | Result |
|---|---|
| Mid-quota, no jackpot | Vanilla rate clamped to [0.3, 1.0] |
| Last day, no jackpot | 1.2 (120%) from last-day override |
| Last day, jackpot hits | Random pick in [1.5, 3.0] + red alert |
A separate com.seeya.configurablequota_constellations.cfg is auto-generated only when LethalConstellations is detected. Each constellation gets its own block:
UseGlobal, Fixed, or RandomFixedRandomNot recommended.
Distributed under the GPL v3 License.
If you enjoy my work, consider supporting me. Donations are optional but greatly appreciated.