@supalosa/chronodivide-bot 0.4.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/.env.template +5 -0
  2. package/README.md +54 -47
  3. package/dist/bot/bot.js +14 -35
  4. package/dist/bot/bot.js.map +1 -1
  5. package/dist/bot/logic/awareness.js +13 -8
  6. package/dist/bot/logic/awareness.js.map +1 -1
  7. package/dist/bot/logic/building/ArtilleryUnit.js +2 -29
  8. package/dist/bot/logic/building/antiAirStaticDefence.js +43 -0
  9. package/dist/bot/logic/building/antiAirStaticDefence.js.map +1 -0
  10. package/dist/bot/logic/building/antiGroundStaticDefence.js +10 -20
  11. package/dist/bot/logic/building/antiGroundStaticDefence.js.map +1 -1
  12. package/dist/bot/logic/building/artilleryUnit.js.map +1 -1
  13. package/dist/bot/logic/building/basicAirUnit.js +2 -23
  14. package/dist/bot/logic/building/basicAirUnit.js.map +1 -1
  15. package/dist/bot/logic/building/basicBuilding.js +3 -2
  16. package/dist/bot/logic/building/basicBuilding.js.map +1 -1
  17. package/dist/bot/logic/building/basicGroundUnit.js +2 -43
  18. package/dist/bot/logic/building/basicGroundUnit.js.map +1 -1
  19. package/dist/bot/logic/building/buildingRules.js +15 -9
  20. package/dist/bot/logic/building/buildingRules.js.map +1 -1
  21. package/dist/bot/logic/building/common.js +19 -0
  22. package/dist/bot/logic/building/common.js.map +1 -0
  23. package/dist/bot/logic/building/harvester.js +2 -1
  24. package/dist/bot/logic/building/harvester.js.map +1 -1
  25. package/dist/bot/logic/building/queueController.js +69 -42
  26. package/dist/bot/logic/building/queueController.js.map +1 -1
  27. package/dist/bot/logic/common/utils.js +21 -0
  28. package/dist/bot/logic/common/utils.js.map +1 -1
  29. package/dist/bot/logic/composition/alliedCompositions.js +13 -0
  30. package/dist/bot/logic/composition/alliedCompositions.js.map +1 -0
  31. package/dist/bot/logic/composition/common.js +2 -0
  32. package/dist/bot/logic/composition/common.js.map +1 -0
  33. package/dist/bot/logic/composition/sovietCompositions.js +13 -0
  34. package/dist/bot/logic/composition/sovietCompositions.js.map +1 -0
  35. package/dist/bot/logic/mission/actionBatcher.js +92 -0
  36. package/dist/bot/logic/mission/actionBatcher.js.map +1 -0
  37. package/dist/bot/logic/mission/behaviours/combatSquad.js +124 -0
  38. package/dist/bot/logic/mission/behaviours/combatSquad.js.map +1 -0
  39. package/dist/bot/logic/mission/behaviours/common.js +56 -0
  40. package/dist/bot/logic/mission/behaviours/common.js.map +1 -0
  41. package/dist/bot/logic/mission/behaviours/engineerSquad.js +39 -0
  42. package/dist/bot/logic/mission/behaviours/engineerSquad.js.map +1 -0
  43. package/dist/bot/logic/mission/behaviours/expansionSquad.js +46 -0
  44. package/dist/bot/logic/mission/behaviours/expansionSquad.js.map +1 -0
  45. package/dist/bot/logic/mission/behaviours/retreatSquad.js +31 -0
  46. package/dist/bot/logic/mission/behaviours/retreatSquad.js.map +1 -0
  47. package/{src/bot/logic/squad/behaviours/scoutingSquad.ts → dist/bot/logic/mission/behaviours/scoutingSquad.js} +27 -51
  48. package/dist/bot/logic/mission/behaviours/scoutingSquad.js.map +1 -0
  49. package/dist/bot/logic/mission/mission.js +91 -19
  50. package/dist/bot/logic/mission/mission.js.map +1 -1
  51. package/dist/bot/logic/mission/missionController.js +262 -21
  52. package/dist/bot/logic/mission/missionController.js.map +1 -1
  53. package/dist/bot/logic/mission/missions/attackMission.js +113 -39
  54. package/dist/bot/logic/mission/missions/attackMission.js.map +1 -1
  55. package/dist/bot/logic/mission/missions/basicMission.js +13 -0
  56. package/dist/bot/logic/mission/missions/basicMission.js.map +1 -0
  57. package/dist/bot/logic/mission/missions/defenceMission.js +43 -28
  58. package/dist/bot/logic/mission/missions/defenceMission.js.map +1 -1
  59. package/dist/bot/logic/mission/missions/engineerMission.js +37 -7
  60. package/dist/bot/logic/mission/missions/engineerMission.js.map +1 -1
  61. package/dist/bot/logic/mission/missions/expansionMission.js +42 -6
  62. package/dist/bot/logic/mission/missions/expansionMission.js.map +1 -1
  63. package/dist/bot/logic/mission/missions/missionBehaviour.js +2 -0
  64. package/dist/bot/logic/mission/missions/missionBehaviour.js.map +1 -0
  65. package/dist/bot/logic/mission/missions/retreatMission.js +31 -5
  66. package/dist/bot/logic/mission/missions/retreatMission.js.map +1 -1
  67. package/dist/bot/logic/mission/missions/scoutingMission.js +103 -6
  68. package/dist/bot/logic/mission/missions/scoutingMission.js.map +1 -1
  69. package/dist/bot/logic/mission/missions/squads/combatSquad.js +116 -0
  70. package/dist/bot/logic/mission/missions/squads/combatSquad.js.map +1 -0
  71. package/dist/bot/logic/mission/missions/squads/common.js +58 -0
  72. package/dist/bot/logic/mission/missions/squads/common.js.map +1 -0
  73. package/dist/bot/logic/mission/missions/squads/squad.js +2 -0
  74. package/dist/bot/logic/mission/missions/squads/squad.js.map +1 -0
  75. package/dist/bot/logic/squad/squadController.js +6 -2
  76. package/dist/bot/logic/squad/squadController.js.map +1 -1
  77. package/dist/bot/logic/threat/threatCalculator.js +9 -9
  78. package/dist/bot/logic/threat/threatCalculator.js.map +1 -1
  79. package/dist/exampleBot.js +50 -18
  80. package/dist/exampleBot.js.map +1 -1
  81. package/package.json +5 -4
  82. package/src/bot/bot.ts +19 -51
  83. package/src/bot/logic/awareness.ts +34 -22
  84. package/src/bot/logic/building/antiAirStaticDefence.ts +64 -0
  85. package/src/bot/logic/building/antiGroundStaticDefence.ts +7 -20
  86. package/src/bot/logic/building/artilleryUnit.ts +2 -28
  87. package/src/bot/logic/building/basicAirUnit.ts +2 -33
  88. package/src/bot/logic/building/basicBuilding.ts +8 -6
  89. package/src/bot/logic/building/basicGroundUnit.ts +2 -46
  90. package/src/bot/logic/building/buildingRules.ts +15 -9
  91. package/src/bot/logic/building/common.ts +23 -0
  92. package/src/bot/logic/building/harvester.ts +2 -1
  93. package/src/bot/logic/building/queueController.ts +98 -43
  94. package/src/bot/logic/common/utils.ts +28 -0
  95. package/src/bot/logic/composition/alliedCompositions.ts +22 -0
  96. package/src/bot/logic/composition/common.ts +3 -0
  97. package/src/bot/logic/composition/sovietCompositions.ts +21 -0
  98. package/src/bot/logic/{squad/behaviours → mission}/actionBatcher.ts +66 -7
  99. package/src/bot/logic/mission/mission.ts +186 -37
  100. package/src/bot/logic/mission/missionController.ts +340 -31
  101. package/src/bot/logic/mission/missionFactories.ts +3 -3
  102. package/src/bot/logic/mission/missions/attackMission.ts +181 -44
  103. package/src/bot/logic/mission/missions/defenceMission.ts +72 -45
  104. package/src/bot/logic/mission/missions/engineerMission.ts +67 -15
  105. package/src/bot/logic/mission/missions/expansionMission.ts +67 -14
  106. package/src/bot/logic/mission/missions/retreatMission.ts +50 -6
  107. package/src/bot/logic/mission/missions/scoutingMission.ts +138 -14
  108. package/src/bot/logic/{squad/behaviours → mission/missions/squads}/combatSquad.ts +56 -33
  109. package/src/bot/logic/{squad/behaviours → mission/missions/squads}/common.ts +11 -17
  110. package/src/bot/logic/mission/missions/squads/squad.ts +19 -0
  111. package/src/bot/logic/threat/threatCalculator.ts +10 -10
  112. package/src/exampleBot.ts +56 -24
  113. package/.prettierrc +0 -5
  114. package/TODO.md +0 -15
  115. package/rules.ini +0 -23126
  116. package/src/bot/logic/mission/missions/oneTimeMission.ts +0 -33
  117. package/src/bot/logic/squad/behaviours/engineerSquad.ts +0 -58
  118. package/src/bot/logic/squad/behaviours/expansionSquad.ts +0 -64
  119. package/src/bot/logic/squad/behaviours/retreatSquad.ts +0 -50
  120. package/src/bot/logic/squad/squad.ts +0 -165
  121. package/src/bot/logic/squad/squadBehaviour.ts +0 -66
  122. package/src/bot/logic/squad/squadBehaviours.ts +0 -8
  123. package/src/bot/logic/squad/squadController.ts +0 -271
@@ -0,0 +1,58 @@
1
+ import { AttackState, ObjectType, OrderType, StanceType, Vector2, ZoneType } from "@chronodivide/game-api";
2
+ import { getDistanceBetweenPoints, getDistanceBetweenUnits } from "../../../map/map.js";
3
+ import { BatchableAction } from "../../actionBatcher.js";
4
+ const NONCE_GI_DEPLOY = 0;
5
+ const NONCE_GI_UNDEPLOY = 1;
6
+ // Micro methods
7
+ export function manageMoveMicro(attacker, attackPoint) {
8
+ if (attacker.name === "E1") {
9
+ const isDeployed = attacker.stance === StanceType.Deployed;
10
+ if (isDeployed) {
11
+ return BatchableAction.noTarget(attacker.id, OrderType.DeploySelected, NONCE_GI_UNDEPLOY);
12
+ }
13
+ }
14
+ return BatchableAction.toPoint(attacker.id, OrderType.AttackMove, attackPoint);
15
+ }
16
+ export function manageAttackMicro(attacker, target) {
17
+ const distance = getDistanceBetweenUnits(attacker, target);
18
+ if (attacker.name === "E1") {
19
+ // Para (deployed weapon) range is 5.
20
+ const deployedWeaponRange = attacker.secondaryWeapon?.maxRange || 5;
21
+ const isDeployed = attacker.stance === StanceType.Deployed;
22
+ if (!isDeployed && (distance <= deployedWeaponRange || attacker.attackState === AttackState.JustFired)) {
23
+ return BatchableAction.noTarget(attacker.id, OrderType.DeploySelected, NONCE_GI_DEPLOY);
24
+ }
25
+ else if (isDeployed && distance > deployedWeaponRange) {
26
+ return BatchableAction.noTarget(attacker.id, OrderType.DeploySelected, NONCE_GI_UNDEPLOY);
27
+ }
28
+ }
29
+ let targetData = target;
30
+ let orderType = OrderType.Attack;
31
+ const primaryWeaponRange = attacker.primaryWeapon?.maxRange || 5;
32
+ if (targetData?.type == ObjectType.Building && distance < primaryWeaponRange * 0.8) {
33
+ orderType = OrderType.Attack;
34
+ }
35
+ else if (targetData?.rules.canDisguise) {
36
+ // Special case for mirage tank/spy as otherwise they just sit next to it.
37
+ orderType = OrderType.Attack;
38
+ }
39
+ return BatchableAction.toTargetId(attacker.id, orderType, target.id);
40
+ }
41
+ /**
42
+ *
43
+ * @param attacker
44
+ * @param target
45
+ * @returns A number describing the weight of the given target for the attacker, or null if it should not attack it.
46
+ */
47
+ export function getAttackWeight(attacker, target) {
48
+ const { rx: x, ry: y } = attacker.tile;
49
+ const { rx: hX, ry: hY } = target.tile;
50
+ if (!attacker.primaryWeapon?.projectileRules.isAntiAir && target.zone === ZoneType.Air) {
51
+ return null;
52
+ }
53
+ if (!attacker.primaryWeapon?.projectileRules.isAntiGround && target.zone === ZoneType.Ground) {
54
+ return null;
55
+ }
56
+ return 1000000 - getDistanceBetweenPoints(new Vector2(x, y), new Vector2(hX, hY));
57
+ }
58
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../../../src/bot/logic/mission/missions/squads/common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=squad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"squad.js","sourceRoot":"","sources":["../../../../../../src/bot/logic/mission/missions/squads/squad.ts"],"names":[],"mappings":""}
@@ -192,14 +192,13 @@ export class SquadController {
192
192
  this.squads.push(squad);
193
193
  }
194
194
  // return text to display for global debug
195
- debugSquads(gameApi, actionsApi) {
195
+ getGlobalDebugText(gameApi) {
196
196
  const unitsInSquad = (unitIds) => countBy(unitIds, (unitId) => gameApi.getUnitData(unitId)?.name);
197
197
  let globalDebugText = "";
198
198
  this.squads.forEach((squad) => {
199
199
  this.logger(`Squad ${squad.getName()}: ${Object.entries(unitsInSquad(squad.getUnitIds()))
200
200
  .map(([unitName, count]) => `${unitName} x ${count}`)
201
201
  .join(", ")}`);
202
- squad.getUnitIds().forEach((unitId) => actionsApi.setUnitDebugText(unitId, squad.getName()));
203
202
  const squadDebugText = squad.getGlobalDebugText();
204
203
  if (squadDebugText) {
205
204
  globalDebugText += squad.getName() + ": " + squadDebugText + "\n";
@@ -207,5 +206,10 @@ export class SquadController {
207
206
  });
208
207
  return globalDebugText;
209
208
  }
209
+ updateDebugText(actionsApi) {
210
+ this.squads.forEach((squad) => {
211
+ squad.getUnitIds().forEach((unitId) => actionsApi.setUnitDebugText(unitId, squad.getName()));
212
+ });
213
+ }
210
214
  }
211
215
  //# sourceMappingURL=squadController.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"squadController.js","sourceRoot":"","sources":["../../../../src/bot/logic/squad/squadController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"squadController.js","sourceRoot":"","sources":["../../../../src/bot/logic/squad/squadController.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,22 @@
1
1
  import { GameMath, MovementZone, ObjectType } from "@chronodivide/game-api";
2
2
  import { GlobalThreat } from "./threat.js";
3
3
  export function calculateGlobalThreat(game, playerData, visibleAreaPercent) {
4
- let groundUnits = game.getVisibleUnits(playerData.name, "hostile", (r) => r.type == ObjectType.Vehicle || r.type == ObjectType.Infantry);
5
- let airUnits = game.getVisibleUnits(playerData.name, "hostile", (r) => r.movementZone == MovementZone.Fly);
4
+ let groundUnits = game.getVisibleUnits(playerData.name, "enemy", (r) => r.type == ObjectType.Vehicle || r.type == ObjectType.Infantry);
5
+ let airUnits = game.getVisibleUnits(playerData.name, "enemy", (r) => r.movementZone == MovementZone.Fly);
6
6
  let groundDefence = game
7
- .getVisibleUnits(playerData.name, "hostile", (r) => r.type == ObjectType.Building)
7
+ .getVisibleUnits(playerData.name, "enemy", (r) => r.type == ObjectType.Building)
8
8
  .filter((unitId) => isAntiGround(game, unitId));
9
9
  let antiAirPower = game
10
- .getVisibleUnits(playerData.name, "hostile", (r) => r.type != ObjectType.Building)
10
+ .getVisibleUnits(playerData.name, "enemy", (r) => r.type != ObjectType.Building)
11
11
  .filter((unitId) => isAntiAir(game, unitId));
12
12
  let ourAntiGroundUnits = game
13
13
  .getVisibleUnits(playerData.name, "self", (r) => r.isSelectableCombatant)
14
14
  .filter((unitId) => isAntiGround(game, unitId));
15
15
  let ourAntiAirUnits = game
16
- .getVisibleUnits(playerData.name, "self", (r) => r.isSelectableCombatant)
16
+ .getVisibleUnits(playerData.name, "self", (r) => r.isSelectableCombatant || r.type === ObjectType.Building)
17
17
  .filter((unitId) => isAntiAir(game, unitId));
18
18
  let ourGroundDefence = game
19
- .getVisibleUnits(playerData.name, "self", (r) => r.type == ObjectType.Building)
19
+ .getVisibleUnits(playerData.name, "self", (r) => r.type === ObjectType.Building)
20
20
  .filter((unitId) => isAntiGround(game, unitId));
21
21
  let ourAirUnits = game.getVisibleUnits(playerData.name, "self", (r) => r.movementZone == MovementZone.Fly && r.isSelectableCombatant);
22
22
  let observedGroundThreat = calculateFirepowerForUnits(game, groundUnits);
@@ -27,7 +27,7 @@ export function calculateGlobalThreat(game, playerData, visibleAreaPercent) {
27
27
  let ourAntiAirPower = calculateFirepowerForUnits(game, ourAntiAirUnits);
28
28
  let ourAirPower = calculateFirepowerForUnits(game, ourAirUnits);
29
29
  let ourGroundDefencePower = calculateFirepowerForUnits(game, ourGroundDefence);
30
- return new GlobalThreat(visibleAreaPercent, observedGroundThreat, observedAirThreat, observedAntiAirThreat, observedGroundDefence * 0.25, ourGroundDefencePower * 0.25, ourAntiGroundPower, ourAntiAirPower, ourAirPower);
30
+ return new GlobalThreat(visibleAreaPercent, observedGroundThreat, observedAirThreat, observedAntiAirThreat, observedGroundDefence, ourGroundDefencePower, ourAntiGroundPower, ourAntiAirPower, ourAirPower);
31
31
  }
32
32
  function isAntiGround(gameApi, unitId) {
33
33
  let unit = gameApi.getUnitData(unitId);
@@ -50,14 +50,14 @@ function calculateFirepowerForUnit(unitData) {
50
50
  threat +=
51
51
  (hpRatio *
52
52
  ((unitData.primaryWeapon.rules.damage + 1) * GameMath.sqrt(unitData.primaryWeapon.rules.range + 1))) /
53
- Math.max(unitData.primaryWeapon.cooldownTicks, 1);
53
+ Math.max(unitData.primaryWeapon.rules.rof, 1);
54
54
  }
55
55
  if (unitData.secondaryWeapon) {
56
56
  threat +=
57
57
  (hpRatio *
58
58
  ((unitData.secondaryWeapon.rules.damage + 1) *
59
59
  GameMath.sqrt(unitData.secondaryWeapon.rules.range + 1))) /
60
- Math.max(unitData.secondaryWeapon.cooldownTicks, 1);
60
+ Math.max(unitData.secondaryWeapon.rules.rof, 1);
61
61
  }
62
62
  return Math.min(800, threat);
63
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"threatCalculator.js","sourceRoot":"","sources":["../../../../src/bot/logic/threat/threatCalculator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"threatCalculator.js","sourceRoot":"","sources":["../../../../src/bot/logic/threat/threatCalculator.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
+ import "dotenv/config";
1
2
  import { cdapi } from "@chronodivide/game-api";
2
3
  import { SupalosaBot } from "./bot/bot.js";
4
+ const BOT_AUTO_SURRENDER_TIME_SECONDS = 360; // 7200; // 7200 = 2 hours (approx 30 mins in real time, given a game speed of 4)
3
5
  async function main() {
4
6
  /*
5
7
  Ladder maps:
@@ -14,6 +16,19 @@ async function main() {
14
16
 
15
17
  Other maps:
16
18
  mp03t4 large map, no oil derricks
19
+ mp02t2.map,mp06t2.map,mp11t2.map,mp08t2.map,mp21s2.map,mp14t2.map,mp29u2.map,mp31s2.map,mp18s3.map,mp09t3.map,mp01t4.map,mp03t4.map,mp05t4.map,mp10s4.map,mp12s4.map,mp13s4.map,mp19t4.map,
20
+ mp15s4.map,mp16s4.map,mp23t4.map,mp33u4.map,mp34u4.map,mp17t6.map,mp20t6.map,mp25t6.map,mp26s6.map,mp30s6.map,mp22s8.map,mp27t8.map,mp32s8.map,mp06mw.map,mp08mw.map,mp14mw.map,mp29mw.map,
21
+ mp05mw.map,mp13mw.map,mp15mw.map,mp16mw.map,mp23mw.map,mp17mw.map,mp25mw.map,mp30mw.map,mp22mw.map,mp27mw.map,mp32mw.map,mp09du.map,mp01du.map,mp05du.map,mp13du.map,mp15du.map,mp18du.map,
22
+ mp24du.map,mp17du.map,mp25du.map,mp27du.map,mp32du.map,c1m1a.map,c1m1b.map,c1m1c.map,c1m2a.map,c1m2b.map,c1m2c.map,c1m3a.map,c1m3b.map,c1m3c.map,c1m4a.map,c1m4b.map,c1m4c.map,c1m5a.map,
23
+ c1m5b.map,c1m5c.map,c2m1a.map,c2m1b.map,c2m1c.map,c2m2a.map,c2m2b.map,c2m2c.map,c2m3a.map,c2m3b.map,c2m3c.map,c2m4a.map,c2m4b.map,c2m4c.map,c2m5a.map,c2m5b.map,c2m5c.map,c3m1a.map,c3m1b.map,
24
+ c3m1c.map,c3m2a.map,c3m2b.map,c3m2c.map,c3m3a.map,c3m3b.map,c3m3c.map,c3m4a.map,c3m4b.map,c3m4c.map,c3m5a.map,c3m5b.map,c3m5c.map,c4m1a.map,c4m1b.map,c4m1c.map,c4m2a.map,c4m2b.map,c4m2c.map,
25
+ c4m3a.map,c4m3b.map,c4m3c.map,c4m4a.map,c4m4b.map,c4m4c.map,c4m5a.map,c4m5b.map,c4m5c.map,c5m1a.map,c5m1b.map,c5m1c.map,c5m2a.map,c5m2b.map,c5m2c.map,c5m3a.map,c5m3b.map,c5m3c.map,c5m4a.map,
26
+ c5m4b.map,c5m4c.map,c5m5a.map,c5m5b.map,c5m5c.map,tn01t2.map,tn01mw.map,tn04t2.map,tn04mw.map,tn02s4.map,tn02mw.map,amazon01.map,eb1.map,eb2.map,eb3.map,eb4.map,eb5.map,invasion.map,arena.map,
27
+ barrel.map,bayopigs.map,bermuda.map,break.map,carville.map,deadman.map,death.map,disaster.map,dustbowl.map,goldst.map,grinder.map,hailmary.map,hills.map,kaliforn.map,killer.map,lostlake.map,
28
+ newhghts.map,oceansid.map,pacific.map,potomac.map,powdrkeg.map,rockets.map,roulette.map,round.map,seaofiso.map,shrapnel.map,tanyas.map,tower.map,tsunami.map,valley.map,xmas.map,yuriplot.map,
29
+ cavernsofsiberia.map,countryswingfixed.map,4_country_swing_le_v2.map,dorado_descent_yr_port.mpr,dryheat.map,dunepatrolremake.map,heckbvb.map,heckcorners.map,heckgolden.mpr,heckcorners_b.map,
30
+ heckcorners_b_golden.map,hecklvl.map,heckrvr.map,hecktvt.map,isleland.map,jungleofvietnam.map,2_malibu_cliffs_le.map,mojosprt.map,4_montana_dmz_le.map,6_near_ore_far.map,8_near_ore_far.map,
31
+ offensedefense.map,ore2_startfixed.map,rekoool_fast_6players.mpr,rekoool_fast_8players.mpr,riverram.map,tourofegypt.map,unrepent.map,sinkswim_yr_port.map
17
32
  */
18
33
  const mapName = "mp03t4.map";
19
34
  // Bot names must be unique in online mode
@@ -38,36 +53,53 @@ async function main() {
38
53
  7=Confederation -> Cuba
39
54
  8=Russians
40
55
  */
56
+ const baseSettings = {
57
+ buildOffAlly: false,
58
+ cratesAppear: false,
59
+ credits: 10000,
60
+ gameMode: cdapi.getAvailableGameModes(mapName)[0],
61
+ gameSpeed: 6,
62
+ mapName,
63
+ mcvRepacks: true,
64
+ shortGame: true,
65
+ superWeapons: false,
66
+ unitCount: 0,
67
+ };
41
68
  const onlineSettings = {
69
+ ...baseSettings,
42
70
  online: true,
43
71
  serverUrl: process.env.SERVER_URL,
44
72
  clientUrl: process.env.CLIENT_URL,
45
- agents: [new SupalosaBot(firstBotName, "Americans"), { name: secondBotName, country: "French" }],
73
+ agents: [
74
+ new SupalosaBot(process.env.ONLINE_BOT_NAME ?? firstBotName, "Americans"),
75
+ { name: process.env.PLAYER_NAME ?? secondBotName, country: "French" },
76
+ ],
77
+ botPassword: process.env.ONLINE_BOT_PASSWORD ?? "default",
46
78
  };
47
- const debugBot = new SupalosaBot(secondBotName, "Russians", [secondBotName], true);
48
- debugBot.setDebugMode(true);
49
- const offlineSettings = {
79
+ const offlineSettings1v1 = {
80
+ ...baseSettings,
81
+ online: false,
82
+ agents: [
83
+ new SupalosaBot(firstBotName, "French", [], true).setDebugMode(true),
84
+ new SupalosaBot(secondBotName, "Russians", [], false),
85
+ ],
86
+ };
87
+ const offlineSettings2v2 = {
88
+ ...baseSettings,
89
+ online: false,
50
90
  agents: [
51
91
  new SupalosaBot(firstBotName, "French", [firstBotName], false),
52
- debugBot,
92
+ new SupalosaBot(secondBotName, "Russians", [firstBotName], true).setDebugMode(true),
53
93
  new SupalosaBot(thirdBotName, "Russians", [fourthBotName], false),
54
94
  new SupalosaBot(fourthBotName, "French", [thirdBotName], false),
55
95
  ],
56
96
  };
57
- const game = await cdapi.createGame({
58
- ...offlineSettings,
59
- buildOffAlly: false,
60
- cratesAppear: false,
61
- credits: 10000,
62
- gameMode: cdapi.getAvailableGameModes(mapName)[0],
63
- gameSpeed: 6,
64
- mapName,
65
- mcvRepacks: true,
66
- shortGame: true,
67
- superWeapons: false,
68
- unitCount: 0,
69
- });
97
+ const game = await cdapi.createGame(process.env.ONLINE_MATCH ? onlineSettings : offlineSettings1v1);
70
98
  while (!game.isFinished()) {
99
+ if (game.getCurrentTick() / 15 > BOT_AUTO_SURRENDER_TIME_SECONDS) {
100
+ console.log(`Game forced to end due to timeout`);
101
+ break;
102
+ }
71
103
  await game.update();
72
104
  }
73
105
  game.saveReplay();
@@ -1 +1 @@
1
- {"version":3,"file":"exampleBot.js","sourceRoot":"","sources":["../src/exampleBot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,KAAK,UAAU,IAAI;IACf;;;;;;;;;;;;;MAaE;IACF,MAAM,OAAO,GAAG,YAAY,CAAC;IAC7B,0CAA0C;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,MAAM,SAAS,EAAE,CAAC;IACvC,MAAM,aAAa,GAAG,MAAM,SAAS,EAAE,CAAC;IACxC,MAAM,YAAY,GAAG,OAAO,SAAS,EAAE,CAAC;IACxC,MAAM,aAAa,GAAG,UAAU,SAAS,EAAE,CAAC;IAE5C,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;IAE9C,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,UAAW,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,UAAW,CAAC,CAAC;IAEtD;;;;;;;;;;;;MAYE;IAEF,MAAM,cAAc,GAAG;QACnB,MAAM,EAAE,IAAY;QACpB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAW;QAClC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAW;QAClC,MAAM,EAAE,CAAC,IAAI,WAAW,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,CAG9F;KACJ,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,CAAC;IACnF,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAE5B,MAAM,eAAe,GAAG;QACpB,MAAM,EAAE;YACJ,IAAI,WAAW,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;YAC9D,QAAQ;YACR,IAAI,WAAW,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC;YACjE,IAAI,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;SAClE;KACJ,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC;QAChC,GAAG,eAAe;QAClB,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,KAAK;QACnB,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjD,SAAS,EAAE,CAAC;QACZ,OAAO;QACP,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,IAAI;QACf,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,CAAC;KACf,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;QACvB,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;KACvB;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;IAClB,IAAI,CAAC,OAAO,EAAE,CAAC;AACnB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACf,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"exampleBot.js","sourceRoot":"","sources":["../src/exampleBot.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@supalosa/chronodivide-bot",
3
- "version": "0.4.0",
3
+ "version": "0.5.2",
4
4
  "description": "Example bot for Chrono Divide",
5
5
  "repository": "https://github.com/Supalosa/supalosa-chronodivide-bot",
6
6
  "main": "dist/exampleBot.js",
@@ -13,16 +13,17 @@
13
13
  },
14
14
  "license": "UNLICENSED",
15
15
  "devDependencies": {
16
- "@chronodivide/game-api": "^0.49.0",
16
+ "@chronodivide/game-api": "^0.50.1",
17
17
  "@types/node": "^14.17.32",
18
18
  "prettier": "3.0.3",
19
19
  "typescript": "^4.3.5"
20
20
  },
21
21
  "peerDependencies": {
22
- "@chronodivide/game-api": "^0.49.0"
22
+ "@chronodivide/game-api": "^0.50.1"
23
23
  },
24
24
  "dependencies": {
25
25
  "@datastructures-js/priority-queue": "^6.3.0",
26
- "@timohausmann/quadtree-ts": "2.2.2"
26
+ "@timohausmann/quadtree-ts": "2.2.2",
27
+ "dotenv": "^16.3.1"
27
28
  }
28
29
  }
package/src/bot/bot.ts CHANGED
@@ -1,19 +1,9 @@
1
- import {
2
- ApiEventType,
3
- Bot,
4
- GameApi,
5
- ApiEvent,
6
- QueueStatus,
7
- ObjectType,
8
- FactoryType,
9
- Size,
10
- } from "@chronodivide/game-api";
1
+ import { ApiEventType, Bot, GameApi, ApiEvent, ObjectType, FactoryType, Size } from "@chronodivide/game-api";
11
2
 
12
3
  import { determineMapBounds } from "./logic/map/map.js";
13
4
  import { SectorCache } from "./logic/map/sector.js";
14
5
  import { MissionController } from "./logic/mission/missionController.js";
15
- import { SquadController } from "./logic/squad/squadController.js";
16
- import { QUEUES, QueueController, queueTypeToName } from "./logic/building/queueController.js";
6
+ import { QueueController } from "./logic/building/queueController.js";
17
7
  import { MatchAwareness, MatchAwarenessImpl } from "./logic/awareness.js";
18
8
  import { formatTimeDuration } from "./logic/common/utils.js";
19
9
 
@@ -21,13 +11,11 @@ const DEBUG_STATE_UPDATE_INTERVAL_SECONDS = 6;
21
11
 
22
12
  // Number of ticks per second at the base speed.
23
13
  const NATURAL_TICK_RATE = 15;
24
- const BOT_AUTO_SURRENDER_TIME_SECONDS = 7200; // 7200 = 2 hours (approx 30 mins in real time, given a game speed of 4)
25
14
 
26
15
  export class SupalosaBot extends Bot {
27
16
  private tickRatio?: number;
28
17
  private knownMapBounds: Size | undefined;
29
18
  private missionController: MissionController;
30
- private squadController: SquadController;
31
19
  private queueController: QueueController;
32
20
  private tickOfLastAttackOrder: number = 0;
33
21
 
@@ -41,7 +29,6 @@ export class SupalosaBot extends Bot {
41
29
  ) {
42
30
  super(name, country);
43
31
  this.missionController = new MissionController((message, sayInGame) => this.logBotStatus(message, sayInGame));
44
- this.squadController = new SquadController((message, sayInGame) => this.logBotStatus(message, sayInGame));
45
32
  this.queueController = new QueueController();
46
33
  }
47
34
 
@@ -83,11 +70,6 @@ export class SupalosaBot extends Bot {
83
70
 
84
71
  this.matchAwareness.onAiUpdate(game, myPlayer);
85
72
 
86
- if (game.getCurrentTick() / NATURAL_TICK_RATE > BOT_AUTO_SURRENDER_TIME_SECONDS) {
87
- this.logBotStatus(`Auto-surrendering after ${BOT_AUTO_SURRENDER_TIME_SECONDS} seconds.`);
88
- this.actionsApi.quitGame();
89
- }
90
-
91
73
  // hacky resign condition
92
74
  const armyUnits = game.getVisibleUnits(this.name, "self", (r) => r.isSelectableCombatant);
93
75
  const mcvUnits = game.getVisibleUnits(
@@ -105,6 +87,13 @@ export class SupalosaBot extends Bot {
105
87
  this.actionsApi.quitGame();
106
88
  }
107
89
 
90
+ // Mission logic every 3 ticks
91
+ if (this.gameApi.getCurrentTick() % 3 === 0) {
92
+ this.missionController.onAiUpdate(game, this.actionsApi, myPlayer, this.matchAwareness);
93
+ }
94
+
95
+ const unitTypeRequests = this.missionController.getRequestedUnitTypes();
96
+
108
97
  // Build logic.
109
98
  this.queueController.onAiUpdate(
110
99
  game,
@@ -112,18 +101,9 @@ export class SupalosaBot extends Bot {
112
101
  this.actionsApi,
113
102
  myPlayer,
114
103
  threatCache,
104
+ unitTypeRequests,
115
105
  (message) => this.logBotStatus(message),
116
106
  );
117
-
118
- // Mission logic every 6 ticks
119
- if (this.gameApi.getCurrentTick() % 6 === 0) {
120
- this.missionController.onAiUpdate(game, myPlayer, this.matchAwareness, this.squadController);
121
- }
122
-
123
- // Squad logic every 3 ticks
124
- if (this.gameApi.getCurrentTick() % 3 === 0) {
125
- this.squadController.onAiUpdate(game, this.actionsApi, myPlayer, this.matchAwareness);
126
- }
127
107
  }
128
108
  }
129
109
 
@@ -146,31 +126,19 @@ export class SupalosaBot extends Bot {
146
126
  if (!this.getDebugMode()) {
147
127
  return;
148
128
  }
149
-
129
+ // Update the global debug text.
150
130
  const myPlayer = game.getPlayerData(this.name);
151
- const queueState = QUEUES.reduce((prev, queueType) => {
152
- if (this.productionApi.getQueueData(queueType).size === 0) {
153
- return prev;
154
- }
155
- const paused = this.productionApi.getQueueData(queueType).status === QueueStatus.OnHold;
156
- return (
157
- prev +
158
- " [" +
159
- queueTypeToName(queueType) +
160
- (paused ? " PAUSED" : "") +
161
- ": " +
162
- this.productionApi.getQueueData(queueType).items.map((item) => item.rules.name + "x" + item.quantity) +
163
- "]"
164
- );
165
- }, "");
166
- let globalDebugText = `Cash: ${myPlayer.credits} | Queues: ${queueState}\n`;
167
131
  const harvesters = game.getVisibleUnits(this.name, "self", (r) => r.harvester).length;
168
- globalDebugText += `Harvesters: ${harvesters}\n`;
169
- globalDebugText += this.squadController.debugSquads(this.gameApi, this.actionsApi);
170
- this.missionController.logDebugOutput();
132
+
133
+ let globalDebugText = `Cash: ${myPlayer.credits} | Harvesters: ${harvesters}\n`;
134
+ globalDebugText += this.queueController.getGlobalDebugText(this.gameApi, this.productionApi);
135
+ globalDebugText += this.missionController.getGlobalDebugText(this.gameApi);
136
+ globalDebugText += this.matchAwareness?.getGlobalDebugText();
137
+
138
+ this.missionController.updateDebugText(this.actionsApi);
171
139
 
172
140
  // Tag enemy units with IDs
173
- game.getVisibleUnits(this.name, "hostile").forEach((unitId) => {
141
+ game.getVisibleUnits(this.name, "enemy").forEach((unitId) => {
174
142
  this.actionsApi.setUnitDebugText(unitId, unitId.toString());
175
143
  });
176
144
 
@@ -1,4 +1,4 @@
1
- import { GameApi, ObjectType, PlayerData, UnitData, Vector2 } from "@chronodivide/game-api";
1
+ import { GameApi, GameObjectData, ObjectType, PlayerData, UnitData, Vector2 } from "@chronodivide/game-api";
2
2
  import { SectorCache } from "./map/sector";
3
3
  import { GlobalThreat } from "./threat/threat";
4
4
  import { calculateGlobalThreat } from "./threat/threatCalculator.js";
@@ -23,10 +23,15 @@ export interface MatchAwareness {
23
23
  getSectorCache(): SectorCache;
24
24
 
25
25
  /**
26
- * Returns the enemy unit IDs in a certain radius of a point
26
+ * Returns the enemy unit IDs in a certain radius of a point.
27
+ * Warning: this may return non-combatant hostiles, such as neutral units.
27
28
  */
28
29
  getHostilesNearPoint2d(point: Vector2, radius: number): UnitPositionQuery[];
29
30
 
31
+ /**
32
+ * Returns the enemy unit IDs in a certain radius of a point.
33
+ * Warning: this may return non-combatant hostiles, such as neutral units.
34
+ */
30
35
  getHostilesNearPoint(x: number, y: number, radius: number): UnitPositionQuery[];
31
36
 
32
37
  /**
@@ -49,6 +54,8 @@ export interface MatchAwareness {
49
54
  shouldAttack(): boolean;
50
55
 
51
56
  getScoutingManager(): ScoutingManager;
57
+
58
+ getGlobalDebugText(): string | undefined;
52
59
  }
53
60
 
54
61
  const SECTORS_TO_UPDATE_PER_CYCLE = 8;
@@ -59,7 +66,7 @@ const THREAT_UPDATE_INTERVAL_TICKS = 30;
59
66
 
60
67
  type QTUnit = Circle<number>;
61
68
 
62
- const rebuildQuadtree = (quadtree: Quadtree<QTUnit>, units: UnitData[]) => {
69
+ const rebuildQuadtree = (quadtree: Quadtree<QTUnit>, units: GameObjectData[]) => {
63
70
  quadtree.clear();
64
71
  units.forEach((unit) => {
65
72
  quadtree.insert(new Circle<number>({ x: unit.tile.rx, y: unit.tile.ry, r: 1, data: unit.id }));
@@ -91,7 +98,7 @@ export class MatchAwarenessImpl implements MatchAwareness {
91
98
  const intersections = this.hostileQuadTree.retrieve(new Circle({ x: searchX, y: searchY, r: radius }));
92
99
  return intersections
93
100
  .map(({ x, y, data: unitId }) => ({ x, y, unitId: unitId! }))
94
- .filter(({ x, y }) => getDistanceBetweenPoints(new Vector2(x, y), new Vector2(searchX, searchY)) <= radius)
101
+ .filter(({ x, y }) => new Vector2(x, y).distanceTo(new Vector2(searchX, searchY)) <= radius)
95
102
  .filter(({ unitId }) => !!unitId);
96
103
  }
97
104
 
@@ -160,11 +167,14 @@ export class MatchAwarenessImpl implements MatchAwareness {
160
167
  .map((other) => other.name);
161
168
 
162
169
  // Build the quadtree, if this is too slow we should consider doing this periodically.
163
- const hostileUnitIds = game.getVisibleUnits(playerData.name, "hostile");
170
+ const hostileUnitIds = game.getVisibleUnits(playerData.name, "enemy");
164
171
  try {
165
172
  const hostileUnits = hostileUnitIds
166
- .map((id) => game.getUnitData(id))
167
- .filter((unit) => this.isHostileUnit(unit, hostilePlayerNames)) as UnitData[];
173
+ .map((id) => game.getGameObjectData(id))
174
+ .filter(
175
+ (gameObjectData: GameObjectData | undefined): gameObjectData is GameObjectData =>
176
+ gameObjectData !== undefined,
177
+ );
168
178
 
169
179
  rebuildQuadtree(this.hostileQuadTree, hostileUnits);
170
180
  } catch (err) {
@@ -178,21 +188,6 @@ export class MatchAwarenessImpl implements MatchAwareness {
178
188
  this.logger(`${Math.round(visibility * 1000.0) / 10}% of tiles visible. Calculating threat.`);
179
189
  // Update the global threat cache
180
190
  this.threatCache = calculateGlobalThreat(game, playerData, visibility);
181
- this.logger(
182
- `Threat LAND: Them ${Math.round(this.threatCache.totalOffensiveLandThreat)}, us: ${Math.round(
183
- this.threatCache.totalAvailableAntiGroundFirepower,
184
- )}.`,
185
- );
186
- this.logger(
187
- `Threat DEFENSIVE: Them ${Math.round(this.threatCache.totalDefensiveThreat)}, us: ${Math.round(
188
- this.threatCache.totalDefensivePower,
189
- )}.`,
190
- );
191
- this.logger(
192
- `Threat AIR: Them ${Math.round(this.threatCache.totalOffensiveAirThreat)}, us: ${Math.round(
193
- this.threatCache.totalAvailableAntiAirFirepower,
194
- )}.`,
195
- );
196
191
 
197
192
  // As the game approaches 2 hours, be more willing to attack. (15 ticks per second)
198
193
  const gameLengthFactor = Math.max(0, 1.0 - game.getCurrentTick() / (15 * 7200.0));
@@ -230,4 +225,21 @@ export class MatchAwarenessImpl implements MatchAwareness {
230
225
  );
231
226
  }
232
227
  }
228
+
229
+ public getGlobalDebugText(): string | undefined {
230
+ if (!this.threatCache) {
231
+ return undefined;
232
+ }
233
+ return (
234
+ `Threat LAND: Them ${Math.round(this.threatCache.totalOffensiveLandThreat)}, us: ${Math.round(
235
+ this.threatCache.totalAvailableAntiGroundFirepower,
236
+ )}.\n` +
237
+ `Threat DEFENSIVE: Them ${Math.round(this.threatCache.totalDefensiveThreat)}, us: ${Math.round(
238
+ this.threatCache.totalDefensivePower,
239
+ )}.\n` +
240
+ `Threat AIR: Them ${Math.round(this.threatCache.totalOffensiveAirThreat)}, us: ${Math.round(
241
+ this.threatCache.totalAvailableAntiAirFirepower,
242
+ )}.`
243
+ );
244
+ }
233
245
  }