increased game length, balanced attacks

This commit is contained in:
evanpelle
2024-08-16 14:48:51 -07:00
parent 51c05f9d10
commit d12ebc5f4b
8 changed files with 59 additions and 31 deletions
+1 -1
View File
@@ -1,6 +1,5 @@
import {Player, PlayerID, PlayerInfo, TerrainType, TerrainTypes, TerraNullius, Tile} from "../Game";
import {Colord, colord} from "colord";
import {pastelTheme} from "./PastelTheme";
export interface Config {
@@ -9,6 +8,7 @@ export interface Config {
turnIntervalMs(): number
gameCreationRate(): number
lobbyLifetime(): number
numBots(): number
}
export interface PlayerConfig {
+19 -10
View File
@@ -1,8 +1,12 @@
import {Player, PlayerInfo, TerraNullius, Tile} from "../Game";
import {within} from "../Util";
import {Config, PlayerConfig, Theme} from "./Config";
import {pastelTheme} from "./PastelTheme";
export const defaultConfig = new class implements Config {
numBots(): number {
return 1000
}
player(): PlayerConfig {
return defaultPlayerConfig
}
@@ -23,9 +27,9 @@ export const defaultPlayerConfig = new class implements PlayerConfig {
attackLogic(attacker: Player, defender: Player | TerraNullius, tileToConquer: Tile): {attackerTroopLoss: number; defenderTroopLoss: number; tilesPerTickUsed: number} {
if (defender.isPlayer()) {
return {
attackerTroopLoss: Math.max(defender.troops() / attacker.troops(), 1),
defenderTroopLoss: 0,
tilesPerTickUsed: Math.max(defender.troops() / attacker.troops(), .25)
attackerTroopLoss: Math.min(defender.troops() / 1000, 10),
defenderTroopLoss: Math.min(attacker.troops() / 2000, 5),
tilesPerTickUsed: 1
}
} else {
return {attackerTroopLoss: 1, defenderTroopLoss: 0, tilesPerTickUsed: 1}
@@ -34,7 +38,11 @@ export const defaultPlayerConfig = new class implements PlayerConfig {
}
attackTilesPerTick(attacker: Player, defender: Player | TerraNullius, numAdjacentTilesWithEnemy: number): number {
return numAdjacentTilesWithEnemy / 4
if (defender.isPlayer()) {
return within(attacker.numTilesOwned() / defender.numTilesOwned(), .01, .5) * numAdjacentTilesWithEnemy
} else {
return numAdjacentTilesWithEnemy / 4
}
}
boatAttackAmount(attacker: Player, defender: Player | TerraNullius): number {
@@ -50,16 +58,17 @@ export const defaultPlayerConfig = new class implements PlayerConfig {
}
startTroops(playerInfo: PlayerInfo): number {
return 1000
if (playerInfo.isBot) {
return 1000
}
return 5000
}
troopAdditionRate(player: Player): number {
let toAdd = Math.sqrt(player.numTilesOwned() * player.troops()) / 5
const max = Math.sqrt(player.numTilesOwned()) * 1000 + 1000
let toAdd = 10 + (player.troops() + Math.sqrt(player.troops() * player.numTilesOwned())) / 250
const max = Math.sqrt(player.numTilesOwned()) * 100 + 1000
const ratio = 1 - player.troops() / max
toAdd *= ratio * ratio * ratio
toAdd = Math.max(2, toAdd)
return Math.min(player.troops() + toAdd, max)
}