warzone2100/data/script/text/cam1-1-ai.slo

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);
}
}
}