diff --git a/src/core/configuration/DefaultConfig.ts b/src/core/configuration/DefaultConfig.ts index bd6717c69..c1aa881ee 100644 --- a/src/core/configuration/DefaultConfig.ts +++ b/src/core/configuration/DefaultConfig.ts @@ -142,9 +142,9 @@ export class DefaultConfig implements Config { manpowerAdditionRate(player: Player): number { let max = this.maxManpower(player) - let toAdd = 10 + (player.troops() + Math.sqrt(player.troops() * player.numTilesOwned())) / 100 + let toAdd = 10 + (player.manpowerReserve() + Math.sqrt(player.manpowerReserve() * player.numTilesOwned())) / 100 - const ratio = 1 - (player.troops() / max) + const ratio = 1 - (player.manpowerReserve() / max) toAdd *= ratio toAdd *= .5 // console.log(`to add ${toAdd}`) @@ -161,8 +161,8 @@ export class DefaultConfig implements Config { return player.numTilesOwned() / 100 } troopAdjustmentRate(player: Player): number { - const maxDiff = player.manpower() / 250 + this.manpowerAdditionRate(player) - const target = player.manpower() * player.targetTroopRatio() + const maxDiff = player.totalManpower() / 250 + this.manpowerAdditionRate(player) + const target = player.totalManpower() * player.targetTroopRatio() const diff = target - player.troops() if (Math.abs(diff) < maxDiff) { return diff diff --git a/src/core/execution/AttackExecution.ts b/src/core/execution/AttackExecution.ts index 3f10ccebd..7608b7732 100644 --- a/src/core/execution/AttackExecution.ts +++ b/src/core/execution/AttackExecution.ts @@ -159,7 +159,6 @@ export class AttackExecution implements Execution { this.troops -= attackerTroopLoss if (this.target.isPlayer()) { this.target.removeTroops(defenderTroopLoss) - this.target.removeManpower(defenderTroopLoss) } this._owner.conquer(tileToConquer) this.checkDefenderDead() diff --git a/src/core/execution/PlayerExecution.ts b/src/core/execution/PlayerExecution.ts index 506277a63..25221a893 100644 --- a/src/core/execution/PlayerExecution.ts +++ b/src/core/execution/PlayerExecution.ts @@ -30,7 +30,7 @@ export class PlayerExecution implements Execution { if (ticks < this.config.numSpawnPhaseTurns()) { return } - this.player.addManpower(this.config.manpowerAdditionRate(this.player)) + this.player.addManpowerReserve(this.config.manpowerAdditionRate(this.player)) this.player.addGold(this.config.goldAdditionRate(this.player)) this.player.addTroops(this.config.troopAdjustmentRate(this.player)) diff --git a/src/core/game/Game.ts b/src/core/game/Game.ts index 9d2c2d903..0c06da885 100644 --- a/src/core/game/Game.ts +++ b/src/core/game/Game.ts @@ -196,7 +196,8 @@ export interface Player { outgoingEmojis(): EmojiMessage[] canDonate(recipient: Player): boolean gold(): Gold - manpower(): number + totalManpower(): number + manpowerReserve(): number // Number between 0, 1 targetTroopRatio(): number } @@ -224,8 +225,8 @@ export interface MutablePlayer extends Player { donate(recipient: MutablePlayer, troops: number): void addGold(toAdd: Gold): void removeGold(toRemove: Gold): void - addManpower(toAdd: number): void - removeManpower(toRemove: number): void + addManpowerReserve(toAdd: number): void + removeManpowerReserve(toRemove: number): void setTargetTroopRatio(target: number): void } diff --git a/src/core/game/PlayerImpl.ts b/src/core/game/PlayerImpl.ts index 43330a9d5..61736ee05 100644 --- a/src/core/game/PlayerImpl.ts +++ b/src/core/game/PlayerImpl.ts @@ -22,7 +22,8 @@ export class PlayerImpl implements MutablePlayer { private _gold: Gold private _troops: number - private _targetTroopRatio = .5 + private _reserves: number + private _targetTroopRatio: number isTraitor_ = false @@ -42,9 +43,12 @@ export class PlayerImpl implements MutablePlayer { private sentDonations: Donation[] = [] - constructor(private gs: GameImpl, private readonly playerInfo: PlayerInfo, private _manpower: number) { + constructor(private gs: GameImpl, private readonly playerInfo: PlayerInfo, manpower: number) { this._name = playerInfo.name; - this._displayerName = processName(this._name) + this._targetTroopRatio = .5 + this._troops = manpower * this._targetTroopRatio; + this._reserves = manpower * (1 - this._targetTroopRatio) + this._gold = manpower } name(): string { @@ -294,14 +298,17 @@ export class PlayerImpl implements MutablePlayer { this._gold -= toRemove } - manpower(): number { - return this._manpower + totalManpower(): number { + return this._troops + this._reserves } - addManpower(toAdd: number): void { - this._manpower += toAdd + manpowerReserve(): number { + return Math.max(1, this._reserves) } - removeManpower(toRemove: number): void { - this._manpower = Math.max(1, this._manpower - toRemove) + addManpowerReserve(toAdd: number): void { + this._reserves += toAdd + } + removeManpowerReserve(toRemove: number): void { + this._reserves = Math.max(1, this._reserves - toRemove) } targetTroopRatio(): number { @@ -316,7 +323,7 @@ export class PlayerImpl implements MutablePlayer { } hash(): number { - return simpleHash(this.id()) * (this.manpower() + this.numTilesOwned()); + return simpleHash(this.id()) * (this.totalManpower() + this.numTilesOwned()); } toString(): string { return `Player:{name:${this.info().name},clientID:${this.info().clientID},isAlive:${this.isAlive()},troops:${this._troops},numTileOwned:${this.numTilesOwned()}}]`;