rebalance unit cost

This commit is contained in:
evanpelle
2024-12-09 13:05:32 -08:00
committed by Evan
parent d290054e5c
commit 63b0e89d8b
7 changed files with 183 additions and 72 deletions
-1
View File
@@ -64,7 +64,6 @@ export interface Config {
defensePostRange(): number
defensePostDefenseBonus(): number
falloutDefenseModifier(): number
maxUnitCost(): number
}
export interface Theme {
+66 -68
View File
@@ -8,10 +8,6 @@ import { pastelTheme } from "./PastelTheme";
export class DefaultConfig implements Config {
maxUnitCost(): number {
return 99_999_999
}
cityPopulationIncrease(): number {
return 250_000
}
@@ -38,71 +34,73 @@ export class DefaultConfig implements Config {
}
unitInfo(type: UnitType): UnitInfo {
const fn = () => {
switch (type) {
case UnitType.TransportShip:
return {
cost: () => 0,
territoryBound: false
}
case UnitType.Destroyer:
return {
cost: (p: Player) => (p.units(UnitType.Destroyer).length + 1) * 250_000,
territoryBound: false
}
case UnitType.Battleship:
return {
cost: (p: Player) => (p.units(UnitType.Battleship).length + 1) * 500_000,
territoryBound: false
}
case UnitType.Shell:
return {
cost: (p: Player) => 0,
territoryBound: false
}
case UnitType.Port:
return {
cost: (p: Player) => Math.pow(2, p.units(UnitType.Port).length) * 250_000,
territoryBound: true
}
case UnitType.AtomBomb:
return {
cost: () => 1_000_000,
territoryBound: false
}
case UnitType.HydrogenBomb:
return {
cost: () => 5_000_000,
territoryBound: false
}
case UnitType.TradeShip:
return {
cost: () => 0,
territoryBound: false
}
case UnitType.MissileSilo:
return {
cost: () => 1_000_000,
territoryBound: true
}
case UnitType.DefensePost:
return {
cost: (p: Player) => Math.pow(2, p.units(UnitType.DefensePost).length) * 100_000,
territoryBound: true
}
case UnitType.City:
return {
cost: (p: Player) => Math.pow(2, p.units(UnitType.City).length) * 250_000,
territoryBound: true
}
default:
assertNever(type)
}
switch (type) {
case UnitType.TransportShip:
return {
cost: () => 0,
territoryBound: false
}
case UnitType.Destroyer:
return {
cost: (p: Player) => (p.units(UnitType.Destroyer).length + 1) * 250_000,
territoryBound: false
}
case UnitType.Battleship:
return {
cost: (p: Player) => (p.units(UnitType.Battleship).length + 1) * 500_000,
territoryBound: false
}
case UnitType.Shell:
return {
cost: () => 0,
territoryBound: false
}
case UnitType.Port:
return {
cost: (p: Player) =>
Math.min(
10_000_000,
Math.pow(2, p.units(UnitType.Port).length) * 250_000
),
territoryBound: true
}
case UnitType.AtomBomb:
return {
cost: () => 1_000_000,
territoryBound: false
}
case UnitType.HydrogenBomb:
return {
cost: () => 5_000_000,
territoryBound: false
}
case UnitType.TradeShip:
return {
cost: () => 0,
territoryBound: false
}
case UnitType.MissileSilo:
return {
cost: () => 1_000_000,
territoryBound: true
}
case UnitType.DefensePost:
return {
cost: (p: Player) =>
Math.min(
500_000,
(p.units(UnitType.DefensePost).length + 1) * 100_000
),
territoryBound: true
}
case UnitType.City:
return {
cost: (p: Player) => Math.pow(2, p.units(UnitType.City).length) * 125_000,
territoryBound: true
}
default:
assertNever(type)
}
const ui = fn()
const oldCost = ui.cost
ui.cost = (p: Player) => Math.min(this.maxUnitCost(), oldCost(p))
return ui
}
defaultDonationAmount(sender: Player): number {
return Math.floor(sender.troops() / 3)
+1 -1
View File
@@ -5,7 +5,7 @@ export const devConfig = new class extends DefaultConfig {
unitInfo(type: UnitType): UnitInfo {
const info = super.unitInfo(type)
const oldCost = info.cost
info.cost = (p: Player) => oldCost(p) / 1000
// info.cost = (p: Player) => oldCost(p) / 1000
return info
}
maxUnitCost(): number {
+3
View File
@@ -1,7 +1,10 @@
import { GameConfig, GameID, GameRecord, GameRecordSchema, Turn } from "../core/Schemas";
import { Storage } from '@google-cloud/storage';
import { BigQuery } from '@google-cloud/bigquery';
const storage = new Storage();
const bigquery = new BigQuery();
export async function archive(gameRecord: GameRecord) {
try {