178 lines
5.3 KiB
Plaintext
178 lines
5.3 KiB
Plaintext
/*
|
|
* 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);
|
|
}
|
|
}
|
|
} |