1
//SLO file for LasSat firing
3
//Nexus DOESN'T hold back for 5 mins yet! (need to communicate between scripts)
4
//a hack for this would be placing a unit for player X in region and using this as a trigger in the generic script
5
//no countdown sequence yet either!
6
//also doesn't check for Nexus destroying the missile silo as a mission fail (ID changes when taken over)
7
//will need to check player has a certain type of structure
11
/* ******************** */
12
/* Declared Variables */
13
/* ******************** */
15
public int player, enemy, capRange;
16
public STRUCTURE silo[3]; //Missile silo object
18
public STRUCTURESTAT testStat;
19
public SOUND capturedSnd, warnSatSnd, failedSnd;
20
private int uplinkX[3], uplinkY[3], tempX, tempY, temp;
21
private int lasX1, lasX2, lasY1, lasY2, yMax, switch1, switch2, chance;
22
//private STRUCTURE target;
23
private BASEOBJ target;
25
private int numTargets, targets[13], res;
26
private int count, uplinkPlayer;
27
private RESEARCHSTAT researchDone;
29
trigger captureTrig((droidInRange(player, uplinkX[0], uplinkY[0], 300) and ((silo[0] != NULLOBJECT) or (silo[1] != NULLOBJECT) or (silo[2] != NULLOBJECT))), 13); //3 tiles range
30
trigger nexusGoTrig(wait, 3000); //wait 5 mins after warning
31
trigger captureDeadTrig(((silo[0] == NULLOBJECT) and (silo[1] == NULLOBJECT) and (silo[2] == NULLOBJECT)), 17);
33
trigger fireLasSatTrig(wait, 50); //every 5 seconds
34
trigger fireLasSatTrig2(wait, 100); //every 10 seconds (1 hour on 3A)
35
trigger fireLasSatTrig3(wait, 150); //every 15 seconds
36
trigger fireLasSatTrig4(wait, 200); //every 20 seconds
38
trigger moveSatTrig(every, 50); //every 5 seconds //from N of 3B to N of 3A (10mins on 3B)
39
trigger moveSatTrig2(every, 250); //every 25 seconds //from N of 3A to N of 3C (50 mins on 3A)
40
trigger moveSatTrig3(every, 250); //every 25 seconds //from N of 3C to N of 3D (Not actually used!!)
45
event start(CALL_GAMEINIT)
48
if (silo[0] != NULLOBJECT)
50
uplinkX[0] = silo[0].x;
51
uplinkY[0] = silo[0].y;
52
uplinkX[1] = silo[1].x;
53
uplinkY[1] = silo[1].y;
54
uplinkX[2] = silo[2].x;
55
uplinkY[2] = silo[2].y;
56
uplinkPlayer = silo[0].player;
57
createAlliance(player, uplinkPlayer); //ally player with uplink
58
createAlliance(enemy, uplinkPlayer); //ally Enemy with uplink
61
lasX1 = 64; //set LasSat area limits (change later)
62
lasY1 = 64; //3B only (get to 3AB later)
65
chance = 50; //starting chance to hit %age
66
yMax = 16384; //24576; //allow 3A-B
67
switch1 = 8192; //when switches speed for covering 3A
68
switch2 = 16384; //when switches speed for covering 3C
71
//use wall more than anything else so picks more often
72
targets[0] = ST_HQ; //ST_WALL
73
targets[1] = ST_FACTORY;
74
targets[2] = ST_POWER_GEN;
75
targets[3] = ST_RESOURCE_EXTRACTOR;
77
targets[5] = ST_RESEARCH;
78
targets[6] = ST_REPAIR_FACILITY;
79
targets[7] = ST_COMMAND_CONTROL;
80
targets[8] = ST_CYBORG_FACTORY;
81
targets[9] = ST_VTOL_FACTORY; //ST_WALL
82
targets[10] = ST_REARM_PAD;
83
targets[11] = ST_SENSOR;
84
targets[12] = ST_DEF_ALL;
87
event clearMessage(inactive)
89
flushConsoleMessages();
90
setEventTrigger(clearMessage, inactive);
93
//need to check this again later (with different structure IDs, since player number has changed!!!)
94
event captureDeadEvnt(captureDeadTrig)
97
setEventTrigger(captureEvnt, inactive);
98
//need to play audio if possible
99
addConsoleText(_("Objective Destroyed"), player);
100
playSound(failedSnd, player);
102
extraFailFlag = TRUE;
103
setEventTrigger(captureDeadEvnt, inactive);
106
event captureEvnt(captureTrig)
108
//check that no enemy defences/units nearby
109
if ((numDroidsInArea(enemy, uplinkX[0] - capRange, uplinkY[0] - capRange, uplinkX[0] + capRange,
110
uplinkY[0] + capRange) == 0) and (numStructsByTypeInArea(enemy, REF_DEFENSE, uplinkX[0] - capRange, uplinkY[0] - capRange, uplinkX[0] + capRange, uplinkY[0] + capRange) == 0))
112
setEventTrigger(captureDeadEvnt, inactive);
113
//convert structure to player ownership now script function exists
114
//takeOverStructsInArea(uplinkPlayer, player, uplinkX[0] - 1280, uplinkY[0] - 1280, uplinkX[0] + 1280, uplinkY[0] + 1280);
116
//new way to take over structures whilst keeping ID same
120
if (silo[count] != NULLOBJECT)
122
takeOverSingleStructure(silo[count], player);
127
//need to play Audio if possible?
128
playSound(capturedSnd, player);
129
showConsoleText(_("Objective Captured"), player);
131
extraVictoryFlag = TRUE;
132
setEventTrigger(captureEvnt, inactive);
136
event fireLasSat(fireLasSatTrig) //every 5 seconds
138
//find a target in area
139
resetStructTargets();
140
setStructTarPref(targets[random(numTargets)]); //pick random target type preference
141
//setStructTarPref(targets[4]); //pick walls to check
142
target = structTargetInArea(player, -1, lasX1, lasY1, lasX2, lasY2);
143
//if no structures to hit go for Droids
144
if (target == NULLOBJECT)
147
target = droidTargetInArea(player, -1, lasX1, lasY1, lasX2, lasY2);
149
if (target != NULLOBJECT)
151
if (random(100) < chance)
153
tempX = target.x; //store for audio message later
156
fireWeaponAtObj(lasSat, target);
160
//try to just miss target
161
//use pickStructLocation
162
tempX = target.x - 512 + random(1024); //slight randomisation for better effect
163
tempY = target.y - 512 + random(1024);
164
flag = pickStructLocation(testStat, ref tempX, ref tempY,player);
167
tempX = tempX - 64 + random(128); //randomise result a bit more
168
tempY = tempY - 64 + random(128);
169
fireWeaponAtLoc(lasSat, tempX, tempY);
171
//if can't miss, then hit close by anyway!
174
//pick random coords (hopefully miss!)
175
tempX = target.x - 512 + random(1024); //slight randomisation for better effect
176
tempY = target.y - 512 + random(1024); //4 tiles either side
177
fireWeaponAtLoc(lasSat, tempX, tempY);
183
//pick random coords (hopefully miss!)
184
tempX = lasX1 + random(lasX2 - lasX1);
185
tempY = lasY1 + random(lasY2 - lasY1);
186
fireWeaponAtLoc(lasSat, tempX, tempY);
189
//warn player that lassat has fired!
190
if (random(100) < 50)
192
playSoundPos(warnSatSnd, selectedPlayer, tempX, tempY, 0); //warn player!!
195
//set random time for next firing
199
setEventTrigger(fireLasSat, fireLasSatTrig);
203
setEventTrigger(fireLasSat, fireLasSatTrig2);
207
setEventTrigger(fireLasSat, fireLasSatTrig3);
211
setEventTrigger(fireLasSat, fireLasSatTrig4);
215
event moveSat(moveSatTrig) //every 10 seconds
219
lasY2 = lasY2 + 128; //add another tile to limit, so creeps to North of 3A in 10 mins
220
//lasY1 = lasY1 + 64; //add another 1/2 tile to limit, so stops targetting north so much
223
//slow down for covering 3A
226
setEventTrigger(moveSat, moveSatTrig2);
229
//slow down for covering 3C
232
setEventTrigger(moveSat, moveSatTrig3);
240
event incChance(every, 10)
244
chance = chance + 1; //increment chance up to maximum (50%)
248
setEventTrigger(incChance, inactive);