4
* Opposition AI (No build of units)
10
private GROUP enemy1Fin, enemy1Force1, enemy1Force2;
11
private GROUP enemy1Guard, enemy1Rear1, enemy1Rear2;
14
// temporary variables
15
private DROID newDroid;
16
private INT moveX,moveY;
17
private INT xdiff,ydiff;
18
private INT ld; //default leadership for enemy2
19
private INT atk1X, atk1Y;
20
private INT playerX1, playerY1, playerX2, playerY2;
21
private GROUP playerForce1, playerForce2;
22
private DROID hitDroid;
23
private BASEOBJ attackerObj;
25
/* values for build lists start here */
31
public TEMPLATE trike;
32
public TEMPLATE buggy;
33
public TEMPLATE bloke;
38
public int enm1Ret1X, enm1Ret1Y;
39
public int enm1Ret2X, enm1Ret2Y;
41
/* stuff for tracking player */
42
private int count, count2;
44
trigger enemy1AttackPause( every, 3000 ); //5 mins
45
trigger rearAttackTrig((droidInRange(0, 2496, 7460, 5*128)), 10);
46
trigger baseAttackTrig((droidInRange(0, 2496, 9664, 5*128)), 10);
47
trigger sideAttackTrig((droidInRange(0, 832, 7488, 6*128)), 10);
48
trigger every10(every, 40); //slowed since ordering every time
50
event startup(CALL_GAMEINIT)
52
ld=75; //enemy2 leadership (change to higher when fixed!)
53
//make up starting forces
54
groupAddArea(enemy1Force1, enemy1, 2624, 1088, 4160, 2496); //east ambush at base
55
groupAddArea(enemy1Force1, enemy1, 704, 4288, 1472, 5184); //sw of base on ridge
56
//setGroupSecondary(enemy1Force1, DSO_ATTACK_LEVEL, DSS_ALEV_ATTACKED); //return fire only
57
//don't bother with hold until cancelling Hold works!!! (John needs to fix)
58
//setGroupSecondary(enemy1Force1, DSO_HALTTYPE, DSS_HALT_HOLD); //hold position
59
groupAddArea(enemy1Force2, enemy1, 448, 1088, 960, 1728); //to west of base on hill
60
orderGroupLoc(enemy1Force2, DORDER_SCOUT, 1600, 2624);
61
//groupAddArea(enemy1Guard, enemy1, 1728, 1344, 2368, 1728); //around artifact
63
groupAddArea(enemy1Rear2, enemy1, 3904, 10944, 4288, 11328); //rear 2 (trikes and buggies)
65
//orderGroupLoc(enemy1Guard, DORDER_SCOUT, 2212, 1600);
67
setRetreatPoint(enemy1, enm1Ret1X, enm1Ret1Y); //retreat to base
68
setRetreatForce(enemy1, 75); //set morale to 25%
69
setRetreatLeadership(enemy1, 50); //set leadership chance (small=more likely?)
74
/* Enemy force movements */
76
event enemy1Atk1(rearAttackTrig)
78
orderGroupLoc(enemy1Rear2, DORDER_SCOUT, playerX1, playerY1); //attack players centre
79
setEventTrigger(enemy1Atk1, every10); //once triggered keep updating
83
event enemy1Atk2(baseAttackTrig)
86
//orderGroupLoc(enemy1Force1, DORDER_SCOUT, playerX1, playerY1);
87
setEventTrigger(enemy1Atk2, every10); //once triggered keep updating
91
event enemy1Atk3(sideAttackTrig)
94
orderGroupLoc(enemy1Force2, DORDER_SCOUT, playerX1, playerY1);
95
setEventTrigger(enemy1Atk3, every10); //once triggered keep updating
98
/* GJ: trackPlayer removed because stole droids from incoming transporters */
100
event trackPlayer(every, 10)
102
//changed so use whole of player's army as order point!
103
//not a good way of doing this (shouldn't use player's forces in groups!)
104
//groupAddArea(playerForce1, player, 0, 0, 48*128, 48*128);
105
groupAddArea(playerForce1, player, 0, 0, 44*128, 93*128);
106
playerX1=playerForce1.x;
107
playerY1=playerForce1.y;
112
//new version that doesn't use groups!!! (uses grid instead!)
113
//event trackPlayer(every, 15) - slow it down AB 2/12/98
114
event trackPlayer(every, 30)
116
//this loops thru trying to find out where the selectedPlayer is - map size is 44 x 93 tiles
119
//look across the height of the map
120
while (count < 93*128)
123
//look across the width of the map
124
while (count2 < 44*128)
126
//if (numDroidsInArea(player, count2, count2 + (10*128), count, count + (10*128)) > 0)
127
//make the area looking over bigger to cut down on how many loops there are - AB 2/12/98
128
if (numDroidsInArea(player, count2, count, count2 + (22*128), count + (31*128)) > 0)
130
/*playerX1 = count2 + (5*128);
131
playerY1 = count + (5*128);
134
playerX1 = count2 + (11*128);
135
playerY1 = count + (15*128);
136
//set count values to quit loop
140
//loop to next x value
141
count2 = count2 + (22*128);
143
//loop to next y value
144
count = count + (31*128);
149
/* UNNECESSARY FOR HIT & RUN MISSION!!!
150
event lastAttack1(every, 50)
152
//make enemy easier to find if all his buildings destroyed
153
if (not anyStructButWallsLeft(enemy1))
155
groupAddArea(enemy1Fin, enemy1, 0, 0, 8191, 16383);
156
orderGroupLoc(enemy1Fin, DORDER_SCOUT, enm1Ass1X, enm1Ass1Y);
157
//setEventTrigger(lastAttack1, inactive);
162
//remove hold orders if hit!
163
event letGo(CALL_DROID_ATTACKED, enemy1, ref hitDroid, ref attackerObj)
165
if (hitDroid != NULLOBJECT)
167
if (groupMember(enemy1Force1, hitDroid))
169
setGroupSecondary(enemy1Force1, DSO_ATTACK_LEVEL, DSS_ALEV_ALWAYS); //fire at will
170
//setGroupSecondary(enemy1Force1, DSO_HALTTYPE, DSS_HALT_GUARD); //cancel hold position
174
setDroidSecondary(hitDroid, DSO_ATTACK_LEVEL, DSS_ALEV_ALWAYS);
175
setDroidSecondary(hitDroid, DSO_HALTTYPE, DSS_HALT_GUARD);
b'\\ No newline at end of file'