update meta

This commit is contained in:
evanpelle
2025-07-08 10:40:26 -07:00
parent 0feb5d29c5
commit 05d6c7b815
3 changed files with 65 additions and 16 deletions
+2 -1
View File
@@ -129,7 +129,7 @@ export interface Config {
donateCooldown(): Tick;
defaultDonationAmount(sender: Player): number;
unitInfo(type: UnitType): UnitInfo;
tradeShipGold(dist: number): Gold;
tradeShipGold(dist: number, numPorts: number): Gold;
tradeShipSpawnRate(numberOfPorts: number): number;
trainGold(): Gold;
trainSpawnRate(numberOfStations: number): number;
@@ -141,6 +141,7 @@ export interface Config {
SAMCooldown(): number;
SiloCooldown(): number;
defensePostDefenseBonus(): number;
defensePostSpeedBonus(): number;
falloutDefenseModifier(percentOfFallout: number): number;
difficultyModifier(difficulty: Difficulty): number;
warshipPatrolRange(): number;
+57 -14
View File
@@ -235,6 +235,9 @@ export class DefaultConfig implements Config {
traitorDefenseDebuff(): number {
return 0.5;
}
traitorSpeedDebuff(): number {
return 0.7;
}
traitorDuration(): number {
return 30 * 10; // 30 seconds
}
@@ -289,9 +292,15 @@ export class DefaultConfig implements Config {
defensePostRange(): number {
return 30;
}
defensePostDefenseBonus(): number {
return 5;
}
defensePostSpeedBonus(): number {
return 3;
}
playerTeams(): TeamCountConfig {
return this._gameConfig.playerTeams ?? 0;
}
@@ -316,12 +325,6 @@ export class DefaultConfig implements Config {
infiniteTroops(): boolean {
return this._gameConfig.infiniteTroops;
}
tradeShipGold(dist: number): Gold {
return BigInt(Math.floor(10000 + 150 * Math.pow(dist, 1.1)));
}
tradeShipSpawnRate(numberOfPorts: number): number {
return Math.min(50, Math.round(10 * Math.pow(numberOfPorts, 0.6)));
}
trainSpawnRate(numberOfStations: number): number {
return Math.min(1400, Math.round(70 * Math.pow(numberOfStations, 0.8)));
}
@@ -338,6 +341,34 @@ export class DefaultConfig implements Config {
return 100;
}
tradeShipGold(dist: number, numPorts: number): Gold {
const baseGold = Math.floor(50000 + 130 * dist);
const basePortBonus = 0.2;
const diminishingFactor = 0.95;
let totalMultiplier = 1;
for (let i = 0; i < numPorts; i++) {
totalMultiplier += basePortBonus * Math.pow(diminishingFactor, i);
}
return BigInt(Math.floor(baseGold * totalMultiplier));
}
// Chance to spawn a trade ship in one second,
tradeShipSpawnRate(numTradeShips: number): number {
if (numTradeShips <= 20) {
return 5;
}
if (numTradeShips > this.tradeShipCap()) {
return 1_000_000;
}
return numTradeShips - 15;
}
tradeShipCap(): number {
return 100;
}
unitInfo(type: UnitType): UnitInfo {
switch (type) {
case UnitType.TransportShip:
@@ -572,7 +603,7 @@ export class DefaultConfig implements Config {
const type = gm.terrainType(tileToConquer);
switch (type) {
case TerrainType.Plains:
mag = 85;
mag = 80;
speed = 16.5;
break;
case TerrainType.Highland:
@@ -591,11 +622,12 @@ export class DefaultConfig implements Config {
tileToConquer,
gm.config().defensePostRange(),
UnitType.DefensePost,
({ unit }) => unit.owner() === defender,
)) {
mag *= this.defensePostDefenseBonus();
speed *= this.defensePostDefenseBonus();
break;
if (dp.unit.owner() === defender) {
mag *= this.defensePostDefenseBonus();
speed *= this.defensePostSpeedBonus();
break;
}
}
}
@@ -642,7 +674,8 @@ export class DefaultConfig implements Config {
tilesPerTickUsed:
within(defender.troops() / (5 * attackTroops), 0.2, 1.5) *
speed *
largeSpeedMalus,
largeSpeedMalus *
(defender.isTraitor() ? this.traitorSpeedDebuff() : 1),
};
} else {
return {
@@ -665,8 +698,18 @@ export class DefaultConfig implements Config {
numAdjacentTilesWithEnemy: number,
): number {
if (defender.isPlayer()) {
let defendingTroops = defender.troops();
for (const attack of defender.outgoingAttacks()) {
if (
attack.target().isPlayer() &&
attack.target().id() === attacker.id()
) {
// If the defender has a counter attack, that should count as defending troops.
defendingTroops += attack.troops();
}
}
return (
within(((5 * attackTroops) / defender.troops()) * 2, 0.01, 0.5) *
within(((5 * attackTroops) / defendingTroops) * 2, 0.01, 0.5) *
numAdjacentTilesWithEnemy *
3
);
@@ -803,7 +846,7 @@ export class DefaultConfig implements Config {
nukeMagnitudes(unitType: UnitType): NukeMagnitude {
switch (unitType) {
case UnitType.MIRVWarhead:
return { inner: 25, outer: 30 };
return { inner: 12, outer: 18 };
case UnitType.AtomBomb:
return { inner: 12, outer: 30 };
case UnitType.HydrogenBomb:
+6 -1
View File
@@ -126,7 +126,12 @@ export class TradeShipExecution implements Execution {
private complete() {
this.active = false;
this.tradeShip!.delete(false);
const gold = this.mg.config().tradeShipGold(this.tilesTraveled);
const gold = this.mg
.config()
.tradeShipGold(
this.tilesTraveled,
this.tradeShip!.owner().units(UnitType.Port).length,
);
if (this.wasCaptured) {
this.tradeShip!.owner().addGold(gold, this._dstPort.tile());