/* * Cam1-2-AI.slo * * Opposition AI * */ // enemy1 variables private GROUP enemy1Build, enemy1Attack, enemy1Start, enemy1Fin, enemy1Force1, enemy1Force2; private GROUP enemy2Build, enemy2Attack, enemy2Start, enemy2Fin, enemy2Force1, enemy2Force2; public INT rBlkX,rBlkY; public INT oilPatchX,oilPatchY; public INT playerX,playerY; private BOOL oilWellClear; private STRUCTURE attackedStruct; private BASEOBJ attacker; private STRUCTURE newDroidFactory; // temporary variables private DROID newDroid; private INT moveX,moveY; private INT xdiff,ydiff; private INT ld; //default leadership for enemy2 /* values for build lists start here */ /* General Values */ public int player; public int enemy1; public int enemy2; public int enemy1Tot; //limit build to this number public int enemy2Tot; /* Enemy Tactics */ public TEMPLATE trike; public TEMPLATE buggy; public TEMPLATE bloke; public TEMPLATE jeep; /* enemy1 */ public STRUCTURE enm1; public STRUCTUREID enm1ID; public int enm1Ass1X, enm1Ass1Y; public int enm1Ret1X, enm1Ret1Y; public int enm1Ret2X, enm1Ret2Y; private int enm1Fact1State; private bool enm1Fact1Destroyed; /* enemy2 */ public STRUCTURE enm2; public STRUCTUREID enm2ID; public int enm2Ass1X, enm2Ass1Y; public int enm2Ret1X, enm2Ret1Y; public int enm2Ret2X, enm2Ret2Y; private int enm2Fact1State; private bool enm2Fact1Destroyed; trigger enemy1AttackPause( every, 3000 ); //5 mins /* triggers for build lists start here */ /* Triggers: Enemy Tactics */ trigger enm1Start1Trig(droidInRange(player, enm1.x, enm1.y, 2000),10); trigger enm1Fact1Trig(every,150); //trigger enm2Start1Trig(droidInRange(player, enm2.x, enm2.y, 2000),10); trigger enm2Start1Trig(wait, 300); //triggered after 30 seconds trigger enm2Fact1Trig(every,100); // event prototypes event enemy1AttackBase; event startup(CALL_GAMEINIT) { //setass here since factory might be dead if done later!!! setAssemblyPoint (enm1, enm1Ass1X, enm1Ass1Y); setAssemblyPoint (enm2, enm2Ass1X, enm2Ass1Y); //set up of positions now done in VLO // whether the oil well has been cleared oilWellClear = FALSE; ld=75; //enemy2 leadership (change to higher when fixed!) //set retreat stuff for non grouped units setRetreatPoint(enemy1, enm1Ret1X, enm1Ret1Y); //retreat to base1 by rocket pit setRetreatForce(enemy1, 50); //set morale to 50% setRetreatLeadership(enemy1, 50); //set leadership chance (small=more likely?) //make up starting forces //groupAddArea(enemy1Force1, enemy1, 4288, 9024, 5568, 9920); //groupAddArea(enemy1Force2, enemy1, 1600, 10048, 2624, 10816); //groupAddArea(enemy1Force1, enemy1, 448, 960, 1472, 1728); //lots of blokes round back groupAddArea(enemy1Force1, enemy1, 2496, 5824, 3136, 6336); //4 Jeeps (West door) //set retreat point setGroupRetreatPoint(enemy1Force1, enm1Ret1X, enm1Ret1Y); //retreat to base1 by rocket pit setGroupRetreatForce(enemy1Force1, 80); //set morale to 10% setGroupRetreatLeadership(enemy1Force1, 50); //set leadership chance (small=more likely?) //groupAddArea(enemy1Force2, enemy1, 5312, 960, 6336, 1984); //lots of blokes near base1 groupAddArea(enemy1Force2, enemy1, 3904, 4032, 5312, 4928); //4 Jeeps 2 blokes (east door) //set retreat point enemy2 setGroupRetreatPoint(enemy1Force2, enm2Ret1X, enm2Ret1Y); //retreat to base2 setGroupRetreatForce(enemy1Force2, 75); //set morale to 25% setGroupRetreatLeadership(enemy1Force2, ld); //set leadership chance (small=more likely?) } // deal with a droid being built by enemy1 event enemy1build(CALL_NEWDROID, enemy1, ref newDroid, ref newDroidFactory) { if (newDroidFactory == enm1) //and (idleGroup(enemy1Force1) >= enemy1Force1.members/2)) //only for 1st factory and idle { // see if there are any enemy droids near the base if (droidInRange(player, enm1Ass1X, enm1Ass1Y, 9 * 128)) { //set Morale to stubborn setGroupRetreatPoint(enemy1Force1, enm1Ret2X, enm1Ret2Y); //retreat to base //setRetreatForce(enemy1, 50); //set morale to 50% //setRetreatLeadership(enemy1, 50); //set leadership chance (small=more likely?) groupAddDroid(enemy1Force1, newDroid); // get all the droids back to base orderGroupLoc(enemy1Force1, DORDER_SCOUT, enm1Ass1X, enm1Ass1Y); } else { groupAddDroid(enemy1Build, newDroid); if (enemy1Build.members >= 4) { groupAddGroup(enemy1Force1, enemy1Build); if (droidInRange(player, rBlkX,rBlkY, 8 * 128)) { // in the canyon go get em moveX = rBlkX; moveY = rBlkY; } else { if (oilWellClear) { // go attack the base moveX = playerX; moveY = playerY; } else { // go and have a look at the derek moveX = oilPatchX; moveY = oilPatchY; //setEventTrigger(enemy1AttackBase, enemy1AttackPause); } } orderGroupLoc(enemy1Force1, DORDER_SCOUT, moveX,moveY); } } } } // send the droids to the player base if there is nothing at // the oil derek event enemy1AttackBase( inactive ) { if (not objectInRange(player, oilPatchX, oilPatchY, 8*128)) { orderGroupLoc(enemy1Force1, DORDER_SCOUT, playerX,playerY); oilWellClear = TRUE; } else { oilWellClear = FALSE; } } // deal with a droid being built by enemy2 event enemy2build(CALL_NEWDROID, enemy2, ref newDroid, ref newDroidFactory) { if (newDroidFactory == enm2) // and (idleGroup(enemy1Force2) >= enemy1Force2.members/2)) //only for 2nd factory and group idle { // see if there are any player droids near enemy2 base1 if (droidInRange(player, enm2Ass1X, enm2Ass1Y, 9 * 128)) { groupAddDroid(enemy1Force2, newDroid); //Set Morale to stubborn setGroupRetreatPoint(enemy1Force2, enm2Ret2X, enm2Ret2Y); //retreat to base2 //setRetreatForce(enemy2, 50); //set morale to 50% //setRetreatLeadership(enemy2, ld); //set leadership chance (small=more likely?) // get all the droids back to base orderGroupLoc(enemy1Force2, DORDER_SCOUT, enm2Ass1X, enm2Ass1Y); } else { groupAddDroid(enemy2Build, newDroid); if (enemy2Build.members >= 4) { groupAddGroup(enemy1Force2, enemy2Build); //set Morale low //setRetreatPoint(enemy2, enm2Ret2X, enm2Ret2Y); //retreat to base2 //setRetreatForce(enemy2, 75); //set morale to 25% //setRetreatLeadership(enemy2, ld); //set leadership chance (small=more likely?) if (droidInRange(player, rBlkX,rBlkY, 8 * 128)) { // in the canyon go get em moveX = rBlkX; moveY = rBlkY; } else { if (oilWellClear) { // go attack the base moveX = playerX; moveY = playerY; } else { // go and have a look at the derek moveX = oilPatchX; moveY = oilPatchY; setEventTrigger(enemy1AttackBase, enemy1AttackPause); } } orderGroupLoc(enemy1Force2, DORDER_SCOUT, moveX,moveY); } } } } /* events for build lists start here */ /* Enemy 1 */ //build list event enm1Fact1Evnt(inactive) { enm1Fact1Destroyed = buildingDestroyed (enm1ID, enemy1); if (enm1Fact1Destroyed) { setEventTrigger(enm1Fact1Evnt, inactive); } else if (structureIdle(enm1) and (enemy1Build.members+enemy1Force1.members)