@supalosa/chronodivide-bot 0.3.1 → 0.5.1

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 (149) hide show
  1. package/.env.template +5 -0
  2. package/README.md +57 -39
  3. package/dist/bot/bot.js +27 -37
  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/awarenessImpl.js +132 -0
  8. package/dist/bot/logic/awarenessImpl.js.map +1 -0
  9. package/dist/bot/logic/building/ArtilleryUnit.js +2 -29
  10. package/dist/bot/logic/building/ArtilleryUnit.js.map +1 -0
  11. package/dist/bot/logic/building/antiAirStaticDefence.js +43 -0
  12. package/dist/bot/logic/building/antiAirStaticDefence.js.map +1 -0
  13. package/dist/bot/logic/building/antiGroundStaticDefence.js +8 -5
  14. package/dist/bot/logic/building/antiGroundStaticDefence.js.map +1 -1
  15. package/dist/bot/logic/building/basicAirUnit.js +2 -23
  16. package/dist/bot/logic/building/basicAirUnit.js.map +1 -1
  17. package/dist/bot/logic/building/basicBuilding.js +3 -2
  18. package/dist/bot/logic/building/basicBuilding.js.map +1 -1
  19. package/dist/bot/logic/building/basicGroundUnit.js +2 -43
  20. package/dist/bot/logic/building/basicGroundUnit.js.map +1 -1
  21. package/dist/bot/logic/building/building.js +55 -11
  22. package/dist/bot/logic/building/building.js.map +1 -0
  23. package/dist/bot/logic/building/buildingRules.js +62 -50
  24. package/dist/bot/logic/building/buildingRules.js.map +1 -1
  25. package/dist/bot/logic/building/common.js +19 -0
  26. package/dist/bot/logic/building/common.js.map +1 -0
  27. package/dist/bot/logic/building/harvester.js +2 -1
  28. package/dist/bot/logic/building/harvester.js.map +1 -1
  29. package/dist/bot/logic/building/queueController.js +73 -41
  30. package/dist/bot/logic/building/queueController.js.map +1 -1
  31. package/dist/bot/logic/common/utils.js +35 -0
  32. package/dist/bot/logic/common/utils.js.map +1 -1
  33. package/dist/bot/logic/composition/alliedCompositions.js +13 -0
  34. package/dist/bot/logic/composition/alliedCompositions.js.map +1 -0
  35. package/dist/bot/logic/composition/common.js +2 -0
  36. package/dist/bot/logic/composition/common.js.map +1 -0
  37. package/dist/bot/logic/composition/sovietCompositions.js +13 -0
  38. package/dist/bot/logic/composition/sovietCompositions.js.map +1 -0
  39. package/dist/bot/logic/mission/actionBatcher.js +92 -0
  40. package/dist/bot/logic/mission/actionBatcher.js.map +1 -0
  41. package/dist/bot/logic/mission/behaviours/combatSquad.js +124 -0
  42. package/dist/bot/logic/mission/behaviours/combatSquad.js.map +1 -0
  43. package/dist/bot/logic/mission/behaviours/common.js +58 -0
  44. package/dist/bot/logic/mission/behaviours/common.js.map +1 -0
  45. package/dist/bot/logic/mission/behaviours/engineerSquad.js +39 -0
  46. package/dist/bot/logic/mission/behaviours/engineerSquad.js.map +1 -0
  47. package/dist/bot/logic/mission/behaviours/expansionSquad.js +46 -0
  48. package/dist/bot/logic/mission/behaviours/expansionSquad.js.map +1 -0
  49. package/dist/bot/logic/mission/behaviours/retreatSquad.js +31 -0
  50. package/dist/bot/logic/mission/behaviours/retreatSquad.js.map +1 -0
  51. package/{src/bot/logic/squad/behaviours/scoutingSquad.ts → dist/bot/logic/mission/behaviours/scoutingSquad.js} +29 -47
  52. package/dist/bot/logic/mission/behaviours/scoutingSquad.js.map +1 -0
  53. package/dist/bot/logic/mission/mission.js +91 -19
  54. package/dist/bot/logic/mission/mission.js.map +1 -1
  55. package/dist/bot/logic/mission/missionController.js +262 -21
  56. package/dist/bot/logic/mission/missionController.js.map +1 -1
  57. package/dist/bot/logic/mission/missions/attackMission.js +159 -52
  58. package/dist/bot/logic/mission/missions/attackMission.js.map +1 -1
  59. package/dist/bot/logic/mission/missions/basicMission.js +13 -0
  60. package/dist/bot/logic/mission/missions/basicMission.js.map +1 -0
  61. package/dist/bot/logic/mission/missions/defenceMission.js +43 -28
  62. package/dist/bot/logic/mission/missions/defenceMission.js.map +1 -1
  63. package/dist/bot/logic/mission/missions/engineerMission.js +37 -7
  64. package/dist/bot/logic/mission/missions/engineerMission.js.map +1 -1
  65. package/dist/bot/logic/mission/missions/expansionMission.js +42 -6
  66. package/dist/bot/logic/mission/missions/expansionMission.js.map +1 -1
  67. package/dist/bot/logic/mission/missions/missionBehaviour.js +2 -0
  68. package/dist/bot/logic/mission/missions/missionBehaviour.js.map +1 -0
  69. package/dist/bot/logic/mission/missions/retreatMission.js +31 -5
  70. package/dist/bot/logic/mission/missions/retreatMission.js.map +1 -1
  71. package/dist/bot/logic/mission/missions/scoutingMission.js +103 -6
  72. package/dist/bot/logic/mission/missions/scoutingMission.js.map +1 -1
  73. package/dist/bot/logic/mission/missions/squads/combatSquad.js +116 -0
  74. package/dist/bot/logic/mission/missions/squads/combatSquad.js.map +1 -0
  75. package/dist/bot/logic/mission/missions/squads/common.js +58 -0
  76. package/dist/bot/logic/mission/missions/squads/common.js.map +1 -0
  77. package/dist/bot/logic/mission/missions/squads/squad.js +2 -0
  78. package/dist/bot/logic/mission/missions/squads/squad.js.map +1 -0
  79. package/dist/bot/logic/squad/behaviours/attackSquad.js +63 -56
  80. package/dist/bot/logic/squad/behaviours/combatSquad.js +19 -18
  81. package/dist/bot/logic/squad/behaviours/combatSquad.js.map +1 -1
  82. package/dist/bot/logic/squad/behaviours/common.js +2 -19
  83. package/dist/bot/logic/squad/behaviours/common.js.map +1 -1
  84. package/dist/bot/logic/squad/behaviours/defenceSquad.js +15 -2
  85. package/dist/bot/logic/squad/behaviours/retreatSquad.js.map +1 -1
  86. package/dist/bot/logic/squad/behaviours/scoutingSquad.js +17 -21
  87. package/dist/bot/logic/squad/behaviours/scoutingSquad.js.map +1 -1
  88. package/dist/bot/logic/squad/squad.js +8 -5
  89. package/dist/bot/logic/squad/squad.js.map +1 -1
  90. package/dist/bot/logic/squad/squadBehaviour.js.map +1 -1
  91. package/dist/bot/logic/squad/squadController.js +3 -2
  92. package/dist/bot/logic/squad/squadController.js.map +1 -1
  93. package/dist/bot/logic/threat/threatCalculator.js +5 -5
  94. package/dist/bot/logic/threat/threatCalculator.js.map +1 -1
  95. package/dist/exampleBot.js +53 -16
  96. package/dist/exampleBot.js.map +1 -1
  97. package/package.json +5 -4
  98. package/src/bot/bot.ts +38 -53
  99. package/src/bot/logic/awareness.ts +34 -22
  100. package/src/bot/logic/building/antiAirStaticDefence.ts +64 -0
  101. package/src/bot/logic/building/antiGroundStaticDefence.ts +7 -20
  102. package/src/bot/logic/building/artilleryUnit.ts +2 -28
  103. package/src/bot/logic/building/basicAirUnit.ts +2 -33
  104. package/src/bot/logic/building/basicBuilding.ts +8 -6
  105. package/src/bot/logic/building/basicGroundUnit.ts +2 -46
  106. package/src/bot/logic/building/buildingRules.ts +73 -57
  107. package/src/bot/logic/building/common.ts +23 -0
  108. package/src/bot/logic/building/harvester.ts +2 -1
  109. package/src/bot/logic/building/queueController.ts +105 -42
  110. package/src/bot/logic/common/utils.ts +47 -0
  111. package/src/bot/logic/composition/alliedCompositions.ts +22 -0
  112. package/src/bot/logic/composition/common.ts +3 -0
  113. package/src/bot/logic/composition/sovietCompositions.ts +21 -0
  114. package/src/bot/logic/mission/actionBatcher.ts +124 -0
  115. package/src/bot/logic/mission/mission.ts +186 -37
  116. package/src/bot/logic/mission/missionController.ts +340 -31
  117. package/src/bot/logic/mission/missionFactories.ts +3 -3
  118. package/src/bot/logic/mission/missions/attackMission.ts +234 -56
  119. package/src/bot/logic/mission/missions/defenceMission.ts +72 -45
  120. package/src/bot/logic/mission/missions/engineerMission.ts +67 -15
  121. package/src/bot/logic/mission/missions/expansionMission.ts +67 -14
  122. package/src/bot/logic/mission/missions/retreatMission.ts +50 -6
  123. package/src/bot/logic/mission/missions/scoutingMission.ts +138 -14
  124. package/src/bot/logic/mission/missions/squads/combatSquad.ts +160 -0
  125. package/src/bot/logic/{squad/behaviours → mission/missions/squads}/common.ts +14 -20
  126. package/src/bot/logic/mission/missions/squads/squad.ts +19 -0
  127. package/src/bot/logic/threat/threat.ts +15 -15
  128. package/src/bot/logic/threat/threatCalculator.ts +10 -10
  129. package/src/exampleBot.ts +59 -19
  130. package/.prettierrc +0 -5
  131. package/TODO.md +0 -18
  132. package/dist/bot/logic/building/artilleryUnit.js.map +0 -1
  133. package/dist/bot/logic/building/massedAntiGroundUnit.js +0 -20
  134. package/dist/bot/logic/building/queues.js +0 -19
  135. package/dist/bot/logic/knowledge.js +0 -1
  136. package/dist/bot/logic/mission/basicMission.js +0 -26
  137. package/dist/bot/logic/mission/expansionMission.js +0 -32
  138. package/dist/bot/logic/squad/behaviours/squadExpansion.js +0 -31
  139. package/dist/bot/logic/squad/behaviours/squadScouters.js +0 -8
  140. package/rules.ini +0 -23126
  141. package/src/bot/logic/mission/missions/oneTimeMission.ts +0 -33
  142. package/src/bot/logic/squad/behaviours/combatSquad.ts +0 -127
  143. package/src/bot/logic/squad/behaviours/engineerSquad.ts +0 -53
  144. package/src/bot/logic/squad/behaviours/expansionSquad.ts +0 -59
  145. package/src/bot/logic/squad/behaviours/retreatSquad.ts +0 -44
  146. package/src/bot/logic/squad/squad.ts +0 -159
  147. package/src/bot/logic/squad/squadBehaviour.ts +0 -62
  148. package/src/bot/logic/squad/squadBehaviours.ts +0 -8
  149. package/src/bot/logic/squad/squadController.ts +0 -254
@@ -4,25 +4,25 @@ import { GlobalThreat } from "./threat.js";
4
4
  export function calculateGlobalThreat(game: GameApi, playerData: PlayerData, visibleAreaPercent: number): GlobalThreat {
5
5
  let groundUnits = game.getVisibleUnits(
6
6
  playerData.name,
7
- "hostile",
7
+ "enemy",
8
8
  (r) => r.type == ObjectType.Vehicle || r.type == ObjectType.Infantry,
9
9
  );
10
- let airUnits = game.getVisibleUnits(playerData.name, "hostile", (r) => r.movementZone == MovementZone.Fly);
10
+ let airUnits = game.getVisibleUnits(playerData.name, "enemy", (r) => r.movementZone == MovementZone.Fly);
11
11
  let groundDefence = game
12
- .getVisibleUnits(playerData.name, "hostile", (r) => r.type == ObjectType.Building)
12
+ .getVisibleUnits(playerData.name, "enemy", (r) => r.type == ObjectType.Building)
13
13
  .filter((unitId) => isAntiGround(game, unitId));
14
14
  let antiAirPower = game
15
- .getVisibleUnits(playerData.name, "hostile", (r) => r.type != ObjectType.Building)
15
+ .getVisibleUnits(playerData.name, "enemy", (r) => r.type != ObjectType.Building)
16
16
  .filter((unitId) => isAntiAir(game, unitId));
17
17
 
18
18
  let ourAntiGroundUnits = game
19
19
  .getVisibleUnits(playerData.name, "self", (r) => r.isSelectableCombatant)
20
20
  .filter((unitId) => isAntiGround(game, unitId));
21
21
  let ourAntiAirUnits = game
22
- .getVisibleUnits(playerData.name, "self", (r) => r.isSelectableCombatant)
22
+ .getVisibleUnits(playerData.name, "self", (r) => r.isSelectableCombatant || r.type === ObjectType.Building)
23
23
  .filter((unitId) => isAntiAir(game, unitId));
24
24
  let ourGroundDefence = game
25
- .getVisibleUnits(playerData.name, "self", (r) => r.type == ObjectType.Building)
25
+ .getVisibleUnits(playerData.name, "self", (r) => r.type === ObjectType.Building)
26
26
  .filter((unitId) => isAntiGround(game, unitId));
27
27
  let ourAirUnits = game.getVisibleUnits(
28
28
  playerData.name,
@@ -45,8 +45,8 @@ export function calculateGlobalThreat(game: GameApi, playerData: PlayerData, vis
45
45
  observedGroundThreat,
46
46
  observedAirThreat,
47
47
  observedAntiAirThreat,
48
- observedGroundDefence * 0.25,
49
- ourGroundDefencePower * 0.25,
48
+ observedGroundDefence,
49
+ ourGroundDefencePower,
50
50
  ourAntiGroundPower,
51
51
  ourAntiAirPower,
52
52
  ourAirPower,
@@ -76,14 +76,14 @@ function calculateFirepowerForUnit(unitData: UnitData): number {
76
76
  threat +=
77
77
  (hpRatio *
78
78
  ((unitData.primaryWeapon.rules.damage + 1) * GameMath.sqrt(unitData.primaryWeapon.rules.range + 1))) /
79
- Math.max(unitData.primaryWeapon.cooldownTicks, 1);
79
+ Math.max(unitData.primaryWeapon.rules.rof, 1);
80
80
  }
81
81
  if (unitData.secondaryWeapon) {
82
82
  threat +=
83
83
  (hpRatio *
84
84
  ((unitData.secondaryWeapon.rules.damage + 1) *
85
85
  GameMath.sqrt(unitData.secondaryWeapon.rules.range + 1))) /
86
- Math.max(unitData.secondaryWeapon.cooldownTicks, 1);
86
+ Math.max(unitData.secondaryWeapon.rules.rof, 1);
87
87
  }
88
88
  return Math.min(800, threat);
89
89
  }
package/src/exampleBot.ts CHANGED
@@ -1,5 +1,7 @@
1
- import { Agent, Bot, cdapi } from "@chronodivide/game-api";
1
+ import "dotenv/config";
2
+ import { Agent, Bot, CreateBaseOpts, CreateOfflineOpts, CreateOnlineOpts, cdapi } from "@chronodivide/game-api";
2
3
  import { SupalosaBot } from "./bot/bot.js";
4
+ import { off } from "process";
3
5
 
4
6
  async function main() {
5
7
  /*
@@ -8,18 +10,34 @@ async function main() {
8
10
  CDR2 1v1 4_country_swing_le_v2.map
9
11
  CDR2 1v1 mp01t4.map, large map, oil derricks
10
12
  CDR2 1v1 tn04t2.map, small map
11
- CDR2 1v1 mp10s4.map <- depth charge, naval map (not supported)
13
+ CDR2 1v1 mp10s4.map <- depth charge, naval map (not supported). Cramped in position 1.
12
14
  CDR2 1v1 heckcorners.map
13
15
  CDR2 1v1 4_montana_dmz_le.map
14
16
  CDR2 1v1 barrel.map
15
17
 
16
18
  Other maps:
17
19
  mp03t4 large map, no oil derricks
20
+ 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,
21
+ 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,
22
+ 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,
23
+ 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,
24
+ 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,
25
+ 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,
26
+ 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,
27
+ 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,
28
+ 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,
29
+ 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,
30
+ 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,
31
+ 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,
32
+ offensedefense.map,ore2_startfixed.map,rekoool_fast_6players.mpr,rekoool_fast_8players.mpr,riverram.map,tourofegypt.map,unrepent.map,sinkswim_yr_port.map
18
33
  */
19
- const mapName = "mp10s4.map";
34
+ const mapName = "mp03t4.map";
20
35
  // Bot names must be unique in online mode
21
- const botName = `Joe${String(Date.now()).substr(-6)}`;
22
- const otherBotName = `Bob${String(Date.now() + 1).substr(-6)}`;
36
+ const timestamp = String(Date.now()).substr(-6);
37
+ const firstBotName = `Joe${timestamp}`;
38
+ const secondBotName = `Bob${timestamp}`;
39
+ const thirdBotName = `Mike${timestamp}`;
40
+ const fourthBotName = `Charlie${timestamp}`;
23
41
 
24
42
  await cdapi.init(process.env.MIX_DIR || "./");
25
43
 
@@ -40,19 +58,7 @@ async function main() {
40
58
  8=Russians
41
59
  */
42
60
 
43
- const onlineSettings = {
44
- online: true as true,
45
- serverUrl: process.env.SERVER_URL!,
46
- clientUrl: process.env.CLIENT_URL!,
47
- agents: [new SupalosaBot(botName, "Americans"), { name: otherBotName, country: "French" }] as [Bot, ...Agent[]],
48
- };
49
-
50
- const offlineSettings = {
51
- agents: [new SupalosaBot(botName, "French", false), new SupalosaBot(otherBotName, "Russians", true)],
52
- };
53
-
54
- const game = await cdapi.createGame({
55
- ...offlineSettings,
61
+ const baseSettings: CreateBaseOpts = {
56
62
  buildOffAlly: false,
57
63
  cratesAppear: false,
58
64
  credits: 10000,
@@ -63,7 +69,41 @@ async function main() {
63
69
  shortGame: true,
64
70
  superWeapons: false,
65
71
  unitCount: 0,
66
- });
72
+ };
73
+
74
+ const onlineSettings: CreateOnlineOpts = {
75
+ ...baseSettings,
76
+ online: true,
77
+ serverUrl: process.env.SERVER_URL!,
78
+ clientUrl: process.env.CLIENT_URL!,
79
+ agents: [
80
+ new SupalosaBot(process.env.ONLINE_BOT_NAME ?? firstBotName, "Americans"),
81
+ { name: process.env.PLAYER_NAME ?? secondBotName, country: "French" },
82
+ ] as [Bot, ...Agent[]],
83
+ botPassword: process.env.ONLINE_BOT_PASSWORD ?? "default",
84
+ };
85
+
86
+ const offlineSettings1v1: CreateOfflineOpts = {
87
+ ...baseSettings,
88
+ online: false,
89
+ agents: [
90
+ new SupalosaBot(firstBotName, "French", [], true).setDebugMode(true),
91
+ new SupalosaBot(secondBotName, "Russians", [], false),
92
+ ],
93
+ };
94
+
95
+ const offlineSettings2v2: CreateOfflineOpts = {
96
+ ...baseSettings,
97
+ online: false,
98
+ agents: [
99
+ new SupalosaBot(firstBotName, "French", [firstBotName], false),
100
+ new SupalosaBot(secondBotName, "Russians", [firstBotName], true).setDebugMode(true),
101
+ new SupalosaBot(thirdBotName, "Russians", [fourthBotName], false),
102
+ new SupalosaBot(fourthBotName, "French", [thirdBotName], false),
103
+ ],
104
+ };
105
+
106
+ const game = await cdapi.createGame(process.env.ONLINE_MATCH ? onlineSettings : offlineSettings1v1);
67
107
  while (!game.isFinished()) {
68
108
  await game.update();
69
109
  }
package/.prettierrc DELETED
@@ -1,5 +0,0 @@
1
- {
2
- "tabWidth": 4,
3
- "useTabs": false,
4
- "printWidth": 120
5
- }
package/TODO.md DELETED
@@ -1,18 +0,0 @@
1
- # TODO for Supabot
2
-
3
- Urgent
4
-
5
- - maybe not spam move commands for scouting and attacking missions
6
- - don't spam repair
7
- - handle multiple opponents or allies
8
- - leader pathfinding
9
-
10
- Medium priority
11
-
12
- - detect naval map (can scan tiles to check if more of the map is water or not)
13
- - handle naval construction
14
- - detect islands and implement island-hopping
15
-
16
- Not urgent
17
-
18
- - Remove squad paradigm, all unit-related for mission can just go into the mission.
@@ -1 +0,0 @@
1
- {"version":3,"file":"artilleryUnit.js","sourceRoot":"","sources":["../../../../src/bot/logic/building/artilleryUnit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,QAAQ,EAA2B,MAAM,wBAAwB,CAAC;AAEpF,OAAO,EAAmB,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,MAAM,OAAO,aAAa;IACtB,YACY,YAAoB,EACpB,cAAsB,EACtB,eAAuB,EACvB,UAAkB;QAHlB,iBAAY,GAAZ,YAAY,CAAQ;QACpB,mBAAc,GAAd,cAAc,CAAQ;QACtB,oBAAe,GAAf,eAAe,CAAQ;QACvB,eAAU,GAAV,UAAU,CAAQ;IAC3B,CAAC;IAEJ,oBAAoB,CAChB,IAAa,EACb,UAAsB,EACtB,WAAwB;QAExB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,WAAW,CACP,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,WAAgC;QAEhC,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QACxE,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;QACjC,6EAA6E;QAC7E,IAAI,WAAW,IAAI,WAAW,CAAC,mBAAmB,GAAG,WAAW,CAAC,iCAAiC,EAAE;YAChG,QAAQ;gBACJ,IAAI,CAAC,cAAc;oBACnB,CAAC,WAAW,CAAC,iCAAiC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC;SACtG;QACD,IAAI,WAAW,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE;YACzC,+DAA+D;YAC/D,IAAI,WAAW,CAAC,wBAAwB,GAAG,WAAW,CAAC,iCAAiC,EAAE;gBACtF,QAAQ;oBACJ,IAAI,CAAC,eAAe;wBACpB,IAAI,CAAC,YAAY;wBACjB,CAAC,WAAW,CAAC,wBAAwB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,iCAAiC,CAAC,CAAC,CAAC;aAC3G;iBAAM;gBACH,wEAAwE;gBACxE,QAAQ;oBACJ,CAAC,IAAI,CAAC,eAAe;wBACjB,IAAI,CAAC,YAAY;wBACjB,QAAQ,CAAC,IAAI,CACT,WAAW,CAAC,iCAAiC;4BACzC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,wBAAwB,GAAG,WAAW,CAAC,oBAAoB,CAAC,CAC3F,CAAC;wBACN,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;aACtB;SACJ;QACD,OAAO,QAAQ,GAAG,CAAC,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,WAAW,CACP,IAAa,EACb,UAAsB,EACtB,WAAwB,EACxB,WAAgC;QAEhC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
@@ -1,20 +0,0 @@
1
- import { numBuildingsOwnedOfType } from "./building.js";
2
- export class MassedAntiGroundUnit {
3
- constructor(basePriority, baseAmount) {
4
- this.basePriority = basePriority;
5
- this.baseAmount = baseAmount;
6
- }
7
- getPlacementLocation(game, playerData, technoRules) {
8
- return undefined;
9
- }
10
- getPriority(game, playerData, technoRules, threatCache) {
11
- // If the enemy's ground power is increasing we should try to keep up.
12
- if (threatCache) {
13
- if (threatCache.totalAvailableAntiGroundFirepower * threatCache.certainty > threatCache.totalAvailableAntiGroundFirepower) {
14
- return this.basePriority * (threatCache.totalAvailableAntiGroundFirepower / Math.max(1, threatCache.totalAvailableAntiGroundFirepower));
15
- }
16
- }
17
- const numOwned = numBuildingsOwnedOfType(game, playerData, technoRules);
18
- return this.basePriority * (1.0 - (numOwned / this.baseAmount));
19
- }
20
- }
@@ -1,19 +0,0 @@
1
- import { QueueType } from "@chronodivide/game-api";
2
- export const queueTypeToName = (queue) => {
3
- switch (queue) {
4
- case QueueType.Structures:
5
- return "Structures";
6
- case QueueType.Armory:
7
- return "Armory";
8
- case QueueType.Infantry:
9
- return "Infantry";
10
- case QueueType.Vehicles:
11
- return "Vehicles";
12
- case QueueType.Aircrafts:
13
- return "Aircrafts";
14
- case QueueType.Ships:
15
- return "Ships";
16
- default:
17
- return "Unknown";
18
- }
19
- };
@@ -1 +0,0 @@
1
- export {};
@@ -1,26 +0,0 @@
1
- // A basic mission requests specific units.
2
- export class BasicMission {
3
- constructor(uniqueName, priority = 1, squads = []) {
4
- this.uniqueName = uniqueName;
5
- this.priority = priority;
6
- this.squads = squads;
7
- }
8
- getUniqueName() {
9
- return this.uniqueName;
10
- }
11
- isActive() {
12
- return true;
13
- }
14
- removeSquad(squad) {
15
- this.squads = this.squads.filter((s) => s != squad);
16
- }
17
- addSquad(squad) {
18
- if (!this.squads.find((s) => s == squad)) {
19
- this.squads.push(squad);
20
- }
21
- }
22
- getSquads() {
23
- return this.squads;
24
- }
25
- onSquadAdded(gameApi, playerData, threatData) { }
26
- }
@@ -1,32 +0,0 @@
1
- import { Mission, disbandMission, noop } from "./mission.js";
2
- import { SquadExpansion } from "../squad/behaviours/expansionSquad.js";
3
- import { Squad } from "../squad/squad.js";
4
- /**
5
- * A mission that tries to create an MCV (if it doesn't exist) and deploy it somewhere it can be deployed.
6
- */
7
- export class ExpansionMission extends Mission {
8
- constructor(uniqueName, priority) {
9
- super(uniqueName, priority);
10
- this.hadSquad = false;
11
- }
12
- onAiUpdate(gameApi, playerData, threatData) {
13
- if (this.getSquad() === null) {
14
- if (!this.hadSquad) {
15
- this.hadSquad = true;
16
- return this.setSquad(new Squad(this.getUniqueName(), new SquadExpansion(), this));
17
- }
18
- else {
19
- return disbandMission();
20
- }
21
- }
22
- else {
23
- return noop();
24
- }
25
- }
26
- }
27
- export class ExpansionMissionFactory {
28
- maybeCreateMission(gameApi, playerData, threatData, existingMissions) {
29
- // No auto-expansion missions.
30
- return null;
31
- }
32
- }
@@ -1,31 +0,0 @@
1
- import { OrderType, SideType } from "@chronodivide/game-api";
2
- import { disband, noop, requestUnits } from "../squadBehaviour.js";
3
- const DEPLOY_COOLDOWN_TICKS = 30;
4
- // Expansion or initial base.
5
- export class SquadExpansion {
6
- constructor() {
7
- this.hasAttemptedDeployWith = null;
8
- }
9
- onAiUpdate(gameApi, actionsApi, playerData, squad, threatData) {
10
- let myMcvName = playerData.country?.side == SideType.GDI ? "AMCV" : "SMCV";
11
- const mcvs = squad.getUnitsOfType(gameApi, myMcvName);
12
- if (mcvs.length === 0) {
13
- // Perhaps we deployed already (or the unit was destroyed), end the mission.
14
- if (this.hasAttemptedDeployWith !== null) {
15
- return disband();
16
- }
17
- // We need an mcv!
18
- return requestUnits(myMcvName, 100);
19
- }
20
- else if (!this.hasAttemptedDeployWith ||
21
- gameApi.getCurrentTick() > this.hasAttemptedDeployWith.gameTick + DEPLOY_COOLDOWN_TICKS) {
22
- actionsApi.orderUnits(mcvs.map((mcv) => mcv.id), OrderType.DeploySelected);
23
- // Add a cooldown to deploy attempts.
24
- this.hasAttemptedDeployWith = {
25
- unitId: mcvs[0].id,
26
- gameTick: gameApi.getCurrentTick(),
27
- };
28
- }
29
- return noop();
30
- }
31
- }
@@ -1,8 +0,0 @@
1
- export class SquadScouters {
2
- requestConstruction(gameApi, playerData, squad, threatData) {
3
- return [];
4
- }
5
- onAiUpdate(gameApi, playerData, squad, threatData) {
6
- return {};
7
- }
8
- }