Have trains produce more gold (#1759)

## Description:

During the play test, trains did not produce enough gold. So increase
gold, and give 4x bonus for allies.

## Please complete the following:

- [x] I have added screenshots for all UI updates
- [x] I process any text displayed to the user through translateText()
and I've added it to the en.json file
- [x] I have added relevant tests to the test directory
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
- [x] I have read and accepted the CLA agreement (only required once).

## Please put your Discord username so you can be contacted if a bug or
regression is found:

evan
This commit is contained in:
evanpelle
2025-08-08 18:38:16 -07:00
committed by GitHub
parent 7de962eb5b
commit 754db60a00
4 changed files with 19 additions and 20 deletions
+1 -1
View File
@@ -130,7 +130,7 @@ export interface Config {
unitInfo(type: UnitType): UnitInfo;
tradeShipGold(dist: number, numPorts: number): Gold;
tradeShipSpawnRate(numberOfPorts: number): number;
trainGold(): Gold;
trainGold(isFriendly: boolean): Gold;
trainSpawnRate(numberOfStations: number): number;
trainStationMinRange(): number;
trainStationMaxRange(): number;
+3 -2
View File
@@ -328,9 +328,10 @@ export class DefaultConfig implements Config {
trainSpawnRate(numberOfStations: number): number {
return Math.min(1400, Math.round(40 * Math.pow(numberOfStations, 0.5)));
}
trainGold(): Gold {
return BigInt(4_000);
trainGold(isFriendly: boolean): Gold {
return isFriendly ? 100_000n : 25_000n;
}
trainStationMinRange(): number {
return 15;
}
+10 -13
View File
@@ -18,19 +18,18 @@ interface TrainStopHandler {
* Behavior to be defined
*/
class CityStopHandler implements TrainStopHandler {
private factor: bigint = BigInt(2);
onStop(
mg: Game,
station: TrainStation,
trainExecution: TrainExecution,
): void {
const level = BigInt(station.unit.level() + 1);
let goldBonus = (mg.config().trainGold() * level) / this.factor;
const stationOwner = station.unit.owner();
const trainOwner = trainExecution.owner();
const isFriendly = stationOwner.isFriendly(trainOwner);
const goldBonus = mg.config().trainGold(isFriendly) * level;
// Share revenue with the station owner if it's not the current player
if (stationOwner.isFriendly(trainOwner)) {
goldBonus += BigInt(1_000); // Bonus for everybody when trading with an ally!
if (isFriendly) {
stationOwner.addGold(goldBonus, station.tile());
}
trainOwner.addGold(goldBonus, station.tile());
@@ -38,7 +37,6 @@ class CityStopHandler implements TrainStopHandler {
}
class PortStopHandler implements TrainStopHandler {
private factor: bigint = BigInt(2);
constructor(private random: PseudoRandom) {}
onStop(
mg: Game,
@@ -46,12 +44,12 @@ class PortStopHandler implements TrainStopHandler {
trainExecution: TrainExecution,
): void {
const level = BigInt(station.unit.level() + 1);
let goldBonus = (mg.config().trainGold() * level) / this.factor;
const stationOwner = station.unit.owner();
const trainOwner = trainExecution.owner();
// Share revenue with the station owner if it's not the current player
if (stationOwner.isFriendly(trainOwner)) {
goldBonus += BigInt(1_000); // Bonus for everybody when trading with an ally!
const isFriendly = stationOwner.isFriendly(trainOwner);
const goldBonus = mg.config().trainGold(isFriendly) * level;
if (isFriendly) {
stationOwner.addGold(goldBonus, station.tile());
}
trainOwner.addGold(goldBonus, station.tile());
@@ -59,18 +57,17 @@ class PortStopHandler implements TrainStopHandler {
}
class FactoryStopHandler implements TrainStopHandler {
private factor: bigint = BigInt(2);
onStop(
mg: Game,
station: TrainStation,
trainExecution: TrainExecution,
): void {
let goldBonus = mg.config().trainGold();
const stationOwner = station.unit.owner();
const trainOwner = trainExecution.owner();
const isFriendly = stationOwner.isFriendly(trainOwner);
const goldBonus = mg.config().trainGold(isFriendly);
// Share revenue with the station owner if it's not the current player
if (stationOwner.isFriendly(trainOwner)) {
goldBonus += BigInt(1_000); // Bonus for everybody when trading with an ally!
if (isFriendly) {
stationOwner.addGold(goldBonus, station.tile());
}
trainOwner.addGold(goldBonus, station.tile());
+5 -4
View File
@@ -16,7 +16,8 @@ describe("TrainStation", () => {
game = {
ticks: jest.fn().mockReturnValue(123),
config: jest.fn().mockReturnValue({
trainGold: () => BigInt(4000),
trainGold: (isFriendly: boolean) =>
isFriendly ? BigInt(1000) : BigInt(500),
}),
addUpdate: jest.fn(),
addExecution: jest.fn(),
@@ -50,7 +51,7 @@ describe("TrainStation", () => {
station.onTrainStop(trainExecution);
expect(unit.owner().addGold).toHaveBeenCalledWith(4000n, unit.tile());
expect(unit.owner().addGold).toHaveBeenCalledWith(1000n, unit.tile());
});
it("handles allied trade", () => {
@@ -60,9 +61,9 @@ describe("TrainStation", () => {
station.onTrainStop(trainExecution);
expect(unit.owner().addGold).toHaveBeenCalledWith(5000n, unit.tile());
expect(unit.owner().addGold).toHaveBeenCalledWith(2000n, unit.tile());
expect(trainExecution.owner().addGold).toHaveBeenCalledWith(
5000n,
2000n,
unit.tile(),
);
});