/* * Cam1.1-AI.slo * * Opposition AI (No build of units) * */ // enemy1 variables private GROUP enemy1Fin, enemy1Force1, enemy1Force2; private GROUP enemy1Guard, enemy1Rear1, enemy1Rear2; public INT LZ_X,LZ_Y; // temporary variables private DROID newDroid; private INT moveX,moveY; private INT xdiff,ydiff; private INT ld; //default leadership for enemy2 private INT atk1X, atk1Y; private INT playerX1, playerY1, playerX2, playerY2; private GROUP playerForce1, playerForce2; private DROID hitDroid; private BASEOBJ attackerObj; /* values for build lists start here */ /* General Values */ public int player; public int enemy1; /* Enemy Tactics */ public TEMPLATE trike; public TEMPLATE buggy; public TEMPLATE bloke; public TEMPLATE jeep; /* enemy1 */ /* no factories! */ public int enm1Ret1X, enm1Ret1Y; public int enm1Ret2X, enm1Ret2Y; /* stuff for tracking player */ private int count, count2; trigger enemy1AttackPause( every, 3000 ); //5 mins trigger rearAttackTrig((droidInRange(0, 2496, 7460, 5*128)), 10); trigger baseAttackTrig((droidInRange(0, 2496, 9664, 5*128)), 10); trigger sideAttackTrig((droidInRange(0, 832, 7488, 6*128)), 10); trigger every10(every, 40); //slowed since ordering every time event startup(CALL_GAMEINIT) { ld=75; //enemy2 leadership (change to higher when fixed!) //make up starting forces groupAddArea(enemy1Force1, enemy1, 2624, 1088, 4160, 2496); //east ambush at base groupAddArea(enemy1Force1, enemy1, 704, 4288, 1472, 5184); //sw of base on ridge //setGroupSecondary(enemy1Force1, DSO_ATTACK_LEVEL, DSS_ALEV_ATTACKED); //return fire only //don't bother with hold until cancelling Hold works!!! (John needs to fix) //setGroupSecondary(enemy1Force1, DSO_HALTTYPE, DSS_HALT_HOLD); //hold position groupAddArea(enemy1Force2, enemy1, 448, 1088, 960, 1728); //to west of base on hill orderGroupLoc(enemy1Force2, DORDER_SCOUT, 1600, 2624); //groupAddArea(enemy1Guard, enemy1, 1728, 1344, 2368, 1728); //around artifact groupAddArea(enemy1Rear2, enemy1, 3904, 10944, 4288, 11328); //rear 2 (trikes and buggies) //orderGroupLoc(enemy1Guard, DORDER_SCOUT, 2212, 1600); //set retreat point? setRetreatPoint(enemy1, enm1Ret1X, enm1Ret1Y); //retreat to base setRetreatForce(enemy1, 75); //set morale to 25% setRetreatLeadership(enemy1, 50); //set leadership chance (small=more likely?) } /* Enemy force movements */ event enemy1Atk1(rearAttackTrig) { orderGroupLoc(enemy1Rear2, DORDER_SCOUT, playerX1, playerY1); //attack players centre setEventTrigger(enemy1Atk1, every10); //once triggered keep updating } /* event enemy1Atk2(baseAttackTrig) { //orderGroupLoc(enemy1Force1, DORDER_SCOUT, playerX1, playerY1); setEventTrigger(enemy1Atk2, every10); //once triggered keep updating } */ event enemy1Atk3(sideAttackTrig) { orderGroupLoc(enemy1Force2, DORDER_SCOUT, playerX1, playerY1); setEventTrigger(enemy1Atk3, every10); //once triggered keep updating } /* GJ: trackPlayer removed because stole droids from incoming transporters */ /* event trackPlayer(every, 10) { //changed so use whole of player's army as order point! //not a good way of doing this (shouldn't use player's forces in groups!) //groupAddArea(playerForce1, player, 0, 0, 48*128, 48*128); groupAddArea(playerForce1, player, 0, 0, 44*128, 93*128); playerX1=playerForce1.x; playerY1=playerForce1.y; } */ //new version that doesn't use groups!!! (uses grid instead!) //event trackPlayer(every, 15) - slow it down AB 2/12/98 event trackPlayer(every, 30) { //this loops thru trying to find out where the selectedPlayer is - map size is 44 x 93 tiles count = 0; //look across the height of the map while (count < 93*128) { count2 = 0; //look across the width of the map while (count2 < 44*128) { //if (numDroidsInArea(player, count2, count2 + (10*128), count, count + (10*128)) > 0) //make the area looking over bigger to cut down on how many loops there are - AB 2/12/98 if (numDroidsInArea(player, count2, count, count2 + (22*128), count + (31*128)) > 0) { /*playerX1 = count2 + (5*128); playerY1 = count + (5*128); count = 93*128; count2 = 44*128;*/ playerX1 = count2 + (11*128); playerY1 = count + (15*128); //set count values to quit loop count = 93*128; count2 = 44*128; } //loop to next x value count2 = count2 + (22*128); } //loop to next y value count = count + (31*128); } } /* UNNECESSARY FOR HIT & RUN MISSION!!! event lastAttack1(every, 50) { //make enemy easier to find if all his buildings destroyed if (not anyStructButWallsLeft(enemy1)) { groupAddArea(enemy1Fin, enemy1, 0, 0, 8191, 16383); orderGroupLoc(enemy1Fin, DORDER_SCOUT, enm1Ass1X, enm1Ass1Y); //setEventTrigger(lastAttack1, inactive); } } */ //remove hold orders if hit! event letGo(CALL_DROID_ATTACKED, enemy1, ref hitDroid, ref attackerObj) { if (hitDroid != NULLOBJECT) { if (groupMember(enemy1Force1, hitDroid)) { setGroupSecondary(enemy1Force1, DSO_ATTACK_LEVEL, DSS_ALEV_ALWAYS); //fire at will //setGroupSecondary(enemy1Force1, DSO_HALTTYPE, DSS_HALT_GUARD); //cancel hold position } else { setDroidSecondary(hitDroid, DSO_ATTACK_LEVEL, DSS_ALEV_ALWAYS); setDroidSecondary(hitDroid, DSO_HALTTYPE, DSS_HALT_GUARD); } } }