all repos — uStrat @ 52186a25550d945fd5ee6e2ac79804b564d82921

simple turn-based strategy game inspired by uCity, Super Robot Wars, C&C, Fire Emblem

refactored AI code to be more like the rest of the game; properly passes state through gameState.flow now; cpu Unit movement is animated
Iris Lightshard nilix@nilfm.cc
PGP Signature
-----BEGIN PGP SIGNATURE-----

iQJDBAABCAAtFiEEkFh6dA+k/6CXFXU4O3+8IhROY5gFAl1KFCMPHG5pbGl4QG5p
bGZtLmNjAAoJEDt/vCIUTmOYmPAP/2gSka8ikZ5sPGks9CCtR2SxdsUHY0kPfL60
9b6FZcVDPBz+mouUFuVegy0xKdlcC8gZAoYP+uUFOTY9k5H8XUI/YjLRFJsxlkfk
4nvS9qhtB1SUaGrzDYA/ba/CzsTiTlE6xrmixvPsOtElRWvqweb3SOG/LD9YPhvT
eleYwkNCESQxkB6C/rIDeQinb563VbeEDa1D8WNoiFtTQ6xyH33+KzM3R+5Ysg9A
c1bqP/BfZ9i5I9a0KBf+TETIr6KtDUX+SVcIkAZanAR7mhQxqUwgdv+AoKVClwOT
bOPpWWg2m3fs42SzaKoW66qJpBlIu+eIbtjJkXbW3VQBpDRF5064cADZKusZq1an
UGX8LZNzZlB6QizS6X0s6RIEWbIVaqOhT+glKm9A1mc1mXvEInJFAM7D6K6rNGA8
kHOZAdHg71GMrn3Q93iLkaF4+X+LfF1LOT2YH9OY7+7PmJ1c72DQnR6Kosk8x/sV
GGzvsnAjY8l5xBTs6bzRZkVmhmPO1XpX4aXJLSP1vD4DOrZlFtWvNNFgMjQfjTEC
15YtJxqALEqFR8NZr2D0VnE0IwVfS8CS5ci4kNd8RWLC2l6QYfDdAClqaPMSovmD
VUTkBallcMoNWmvcGa2tH/7qHSafE25Oo/ph9lpjmM7HqiWUvn5effaVJnDEbA1E
olJY54E2
=+cns
-----END PGP SIGNATURE-----
commit

52186a25550d945fd5ee6e2ac79804b564d82921

parent

79f0c38b156792fd6d86848f751d0aa48c2b764c

3 files changed, 103 insertions(+), 10 deletions(-)

jump to
M AI.jsAI.js

@@ -4,6 +4,7 @@ AI.fCounter = 0;

AI.Q = {} AI.moveOptions = new Array(4); AI.focus = {}; +AI.delay = 0; AI.rand = function(i)

@@ -420,7 +421,7 @@ }

} -AI.testPath = function() +AI.walkPath = function() { var i, j, k; for (i = 0; i < teams.cpu.units.length ; i++)

@@ -430,7 +431,7 @@ AI.generatePath(teams.cpu.units[i]);

while (gameState.flow != "moveFinished") { k = new Date(); - if (k - gameState.frame >= 33.34) + if (k - gameState.frame >= 200) { gameState.frame = k; movement.go();

@@ -440,7 +441,7 @@ map.draw();

mapCursor.draw(); } } - gameState.flow = "cpuPhase"; + gameState.flow = "cpuActions"; } }

@@ -470,8 +471,10 @@ }

} } -AI.main = function() +AI.turnStart = function() { AI.Q = AI.actions; - AI.animLoop(); -}+ AI.focus = 0; + gameState.flow = "cpuActions"; +} +
M Engine.jsEngine.js

@@ -59,7 +59,7 @@ {

case "p1": tm = teams.p1; gameState.phase = "cpu"; - gameState.flow = "cpuPhase"; + gameState.flow = "cpuInit"; break; case "cpu": tm = teams.cpu;

@@ -151,6 +151,76 @@ break;

} } +function cpuTurnStart() +{ + AI.focus = 0; + gameState.flow = "cpuBuildStructs"; +} + +function cpuBuildStruct() +{ + if (AI.delay == 1) + { + AI.buildStruct(); + } + AI.delay++; + camera.manage(); + camera.centerOnCursor(); + map.draw(); + mapCursor.draw(); + hud.draw(); + if (AI.delay >= 30) + { + AI.delay = 0; + gameState.flow = "cpuManageFactories"; + } +} + +function cpuGenTargets() +{ + var i; + for (i = 0; i < teams.cpu.units.length; i++) + { + AI.assignTarget(teams.cpu.units[i], map.data[16][16]); + } + gameState.flow = "cpuPathGen"; +} + +function cpuManagePath() +{ + AI.generatePath(teams.cpu.units[AI.focus]); + gameState.flow = "cpuMove"; +} + +function cpuMove() +{ + mapCursor.x = movement.chain[0].x; + mapCursor.y = movement.chain[0].y; + camera.centerOnCursor(); + movement.go(); + map.draw(); +} + +function cpuManageFactories() +{ + AI.cycleThruFactories(); + if (teams.cpu.units.length > 0) + { + gameState.flow = "cpuGenTargets"; + } + else endPhase(); +} + +function cpuMoveDone() +{ + if (AI.focus >= teams.cpu.units.length) + { + AI.focus = 0; + endPhase(); + } + else gameState.flow = "cpuPathGen"; +} + function loop() { thisFrame = new Date();

@@ -190,8 +260,26 @@ break;

case "attackEnd": attackEnd(); break; - case "cpuPhase": - AI.main(); + case "cpuInit": + cpuTurnStart(); + break; + case "cpuBuildStructs": + cpuBuildStruct(); + break; + case "cpuManageFactories": + cpuManageFactories(); + break; + case "cpuGenTargets": + cpuGenTargets(); + break; + case "cpuPathGen": + cpuManagePath(); + break; + case "cpuMove": + cpuMove(); + break; + case "cpuMoveDone": + cpuMoveDone(); break; }
M Movement.jsMovement.js

@@ -135,7 +135,9 @@ if (gameState.phase == "p1")

{ gameState.flow = "freeLook"; } - else { gameState.flow = "moveFinished"; } + else { + AI.focus++; + gameState.flow = "cpuMoveDone"; } return; } moveToTile(movement.unit, movement.chain[0]);