fixed infinite loop in AI movement
Iris Lightshard nilix@nilfm.cc
PGP Signature
-----BEGIN PGP SIGNATURE----- iQJDBAABCAAtFiEEkFh6dA+k/6CXFXU4O3+8IhROY5gFAl5M0OUPHG5pbGl4QG5p bGZtLmNjAAoJEDt/vCIUTmOYNFMP/3BuceOPFO8GCjVLi4NG3uJHSIzOSPOcfmZ8 4ezWRXyRkYNaWddj/mdK1SbR9E9zkBSfc8ssN9B3A1kVXQPdc4fdSP8ufx6Cz1zq Yz87tWbx6nyZxhgYFoGUAjGQej+P+P6cmZiuBdVvnkKQqytprLVAmw3TjAW6pO6V XE9Qn9lTapKw7LN5E9W631xVVNOx6W/1d7KaZuD7NCFQ0i1ax66q4nQrLO7fTgwI aG2dPqVV40PRMg9lIVsPX84gH/5J4WPoM1ux/ZndJvcoVzL35NTU/6hXYYoRkedv ANcq2RDLr2enKBfq9eMF/CXMxmaQ0mXx+HEmaQST+R4oEFJ3kbPFGLMdapl2W1IL Nxy+QXD3N7zkPYqKByqqKizylrF6uKOt2UdpmqX7W+MKaiTmIWuzjdwop+1aRGpZ 7S7dW7uWenBh1HgXT2B2cBljk+9KVd/Diiwfh8Yhgg1MoNof9zyRO2IrlIi4p9Nb InbG2IlDyp+wz00JwE/jJ6syFlBuEMdezJBEiMMhBHEHMwAh/AR0IUJBo50+EWAO /HrB6ZHpGoOTEVwGho1/WXTeOzgJFdYpydmmqyzbhHRuvhX3oBL5Z3KDs9xQSHU6 8Pm/Z+yFtM0UDxMgMGi2BTB6MdctjfN6juNapewu6cP0TKlYaG+L5JjENb6fxSXp mNVS1WnQ =bCwq -----END PGP SIGNATURE-----
M
AI.js
→
AI.js
@@ -150,7 +150,7 @@ s = i;
} } if (s > 0) - return teams.p1.structs[u]; + return teams.p1.structs[s]; else return teams.p1.structs[0];@@ -193,7 +193,7 @@ s = i;
} } if (s > 0) - return teams.cpu.structs[u]; + return teams.cpu.structs[s]; else return teams.cpu.structs[0];@@ -700,7 +700,7 @@ else if (AI.countStructs("cpu factory") >= AI.countStructs("cpu armory"))
{ buildArmory(); } - else if (AI.rand(4) < 2) + else if (AI.rand(4) < 1) { if (AI.countStructs("cpu factory") < AI.countStructs("cpu armory")) {
M
Attack.js
→
Attack.js
@@ -22,6 +22,11 @@ }
attack.cpuInit = function() { + if (AI.focus >= teams.cpu.units.length || isEmptyObject(teams.cpu.units[AI.focus].equipment)) + { + AI.focus = 0; + endPhase(); + } gameState.flow = "cpuAttackReady"; attack.src = teams.cpu.units[AI.focus]; attack.pattern = attack.src.equipment.pattern;@@ -34,6 +39,8 @@ else
{ // search for closest enemy unit in range, target it // if nothing in range, do nothing + AI.focus++; + gameState.flow = "cpuAttackReady" } }
M
Engine.js
→
Engine.js
@@ -145,7 +145,7 @@ {
switch (gameState.phase) { case "cpu": - gameState.flow = "cpuAttackReady" + gameState.flow = "cpuAttackInit"; break; case "p1": gameState.flow = "freeLook";@@ -187,7 +187,8 @@ teams.cpu.units[AI.focus].target = {};
} if (isEmptyObject(teams.cpu.units[AI.focus].equipment)) { - AI.assignTarget(teams.cpu.units[AI.focus], AI.getClosestArmory(teams.cpu.units[AI.focus]), "defend"); + teams.cpu.units[AI.focus].target = AI.getClosestArmory(teams.cpu.units[AI.focus]); + teams.cpu.units[AI.focus].mode = "defend"; } else if (isEmptyObject(teams.cpu.units[AI.focus].target)) {@@ -230,10 +231,15 @@ {
AI.focus = 0; AI.manageEquipment(); if (!isEmptyObject(teams.cpu.units[AI.focus].equipment)) + { + mapCursor.x = teams.cpu.units[AI.focus].x; + mapCursor.y = teams.cpu.units[AI.focus].y; gameState.flow = "cpuAttackInit"; - return; + return; + } + else endPhase(); } - gameState.flow = "cpuGenTargets"; + else gameState.flow = "cpuGenTargets"; } function cpuAttackInit()