~ubuntu-branches/ubuntu/lucid/warzone2100/lucid

« back to all changes in this revision

Viewing changes to data/base/script/text/cam3a-d1x.slo

  • Committer: Bazaar Package Importer
  • Author(s): Christoph Egger, Paul Wise, Christoph Egger
  • Date: 2009-06-29 17:12:52 UTC
  • mfrom: (1.1.11 upstream) (2.1.7 squeeze)
  • Revision ID: james.westby@ubuntu.com-20090629171252-5ddnlfg3zfchrega
Tags: 2.2.1+dfsg1-1
[ Paul Wise ]
* New upstream release (Closes: #534962)
* Adjust the flex build-depends to take account of the conflict
  with all the versions of flex 2.5.34 (LP: #372872)
* Make the -music Recommends more strict, 2.1 music doesn't work
  with 2.2.
* Upstream moved the downloads to sourceforge, update the watch file
* Bump Standards-Version, no changes needed
* Drop use of dh_desktop since it no longer does anything
* Recommend the new warzone2100-video package, version 2.2 or similar
* Mention the warzone2100 crash reports in the -dbg package description

[ Christoph Egger ]
* Replace CC-2.0 graphic from cybersphinx, create a new tarball
* Add myself to uploaders

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//SLO file for LasSat firing
 
2
//on cam3A-D
 
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
 
8
 
 
9
//cam3A_DX.SLO
 
10
 
 
11
/* ******************** */
 
12
/* Declared Variables   */
 
13
/* ******************** */
 
14
 
 
15
public          int             player, enemy, capRange;
 
16
public          STRUCTURE       silo[3];                                //Missile silo object
 
17
public          WEAPON          lasSat;
 
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;
 
24
private         BOOL            flag;
 
25
private         int             numTargets, targets[13], res;
 
26
private         int             count, uplinkPlayer;
 
27
private     RESEARCHSTAT    researchDone;
 
28
 
 
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);
 
32
 
 
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
 
37
 
 
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!!)
 
41
 
 
42
event captureEvnt;
 
43
event fireLasSat;
 
44
 
 
45
event start(CALL_GAMEINIT)
 
46
{
 
47
 
 
48
        if (silo[0] != NULLOBJECT)
 
49
        {
 
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
 
59
 
 
60
        }
 
61
        lasX1 = 64;     //set LasSat area limits (change later)
 
62
        lasY1 = 64;     //3B only (get to 3AB later)
 
63
        lasX2 = 8000;
 
64
        lasY2 = 128;    //8000;
 
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
 
69
//setup target types
 
70
        numTargets = 13;
 
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;
 
76
        targets[4] = ST_WALL;
 
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;
 
85
}
 
86
 
 
87
event clearMessage(inactive)
 
88
{
 
89
        flushConsoleMessages();
 
90
        setEventTrigger(clearMessage, inactive);
 
91
}
 
92
 
 
93
//need to check this again later (with different structure IDs, since player number has changed!!!)
 
94
event captureDeadEvnt(captureDeadTrig)
 
95
{
 
96
//don't allow win
 
97
        setEventTrigger(captureEvnt, inactive);
 
98
//need to play audio if possible
 
99
        addConsoleText(_("Objective Destroyed"), player);
 
100
        playSound(failedSnd, player);
 
101
        pause(20);
 
102
        extraFailFlag = TRUE;
 
103
        setEventTrigger(captureDeadEvnt, inactive);
 
104
}
 
105
 
 
106
event captureEvnt(captureTrig)
 
107
{
 
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))
 
111
        {
 
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);
 
115
 
 
116
                //new way to take over structures whilst keeping ID same
 
117
                count = 0;
 
118
                while (count < 3)
 
119
                {
 
120
                        if (silo[count] != NULLOBJECT)
 
121
                        {
 
122
                                takeOverSingleStructure(silo[count], player);
 
123
                        }
 
124
                        count = count + 1;
 
125
                }
 
126
 
 
127
                //need to play Audio if possible?
 
128
                playSound(capturedSnd, player);
 
129
                showConsoleText(_("Objective Captured"), player);
 
130
                pause(20);
 
131
                extraVictoryFlag = TRUE;
 
132
                setEventTrigger(captureEvnt, inactive);
 
133
        }
 
134
}
 
135
 
 
136
event fireLasSat(fireLasSatTrig)        //every 5 seconds
 
137
{
 
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)
 
145
        {
 
146
                resetDroidTargets();
 
147
                target = droidTargetInArea(player, -1, lasX1, lasY1, lasX2, lasY2);
 
148
        }
 
149
        if (target != NULLOBJECT)
 
150
        {
 
151
                if (random(100) < chance)
 
152
                {
 
153
                        tempX = target.x;       //store for audio message later
 
154
                        tempY = target.y;
 
155
                        //hit target
 
156
                        fireWeaponAtObj(lasSat, target);
 
157
                }
 
158
                else
 
159
                {
 
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);
 
165
                        if (flag)
 
166
                        {
 
167
                                tempX = tempX - 64 + random(128);       //randomise result a bit more
 
168
                                tempY = tempY - 64 + random(128);
 
169
                                fireWeaponAtLoc(lasSat, tempX, tempY);
 
170
                        }
 
171
//if can't miss, then hit close by anyway!
 
172
                        else
 
173
                        {
 
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);
 
178
                        }
 
179
                }
 
180
        }
 
181
        else
 
182
        {
 
183
//pick random coords (hopefully miss!)
 
184
                tempX = lasX1 + random(lasX2 - lasX1);
 
185
                tempY = lasY1 + random(lasY2 - lasY1);
 
186
                fireWeaponAtLoc(lasSat, tempX, tempY);
 
187
        }
 
188
 
 
189
//warn player that lassat has fired!
 
190
        if (random(100) < 50)
 
191
        {
 
192
                playSoundPos(warnSatSnd, selectedPlayer, tempX, tempY, 0);      //warn player!!
 
193
        }
 
194
 
 
195
//set random time for next firing
 
196
        temp = random(4);
 
197
        if (temp == 0)
 
198
        {
 
199
                setEventTrigger(fireLasSat, fireLasSatTrig);
 
200
        }
 
201
        else if (temp == 1)
 
202
        {
 
203
                setEventTrigger(fireLasSat, fireLasSatTrig2);
 
204
        }
 
205
        else if (temp == 2)
 
206
        {
 
207
                setEventTrigger(fireLasSat, fireLasSatTrig3);
 
208
        }
 
209
        else
 
210
        {
 
211
                setEventTrigger(fireLasSat, fireLasSatTrig4);
 
212
        }
 
213
}
 
214
 
 
215
event moveSat(moveSatTrig)      //every 10 seconds
 
216
{
 
217
        if (lasY2 < yMax)
 
218
        {
 
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
 
221
 
 
222
 
 
223
                //slow down for covering 3A
 
224
                if (lasY2 > switch1)
 
225
                {
 
226
                        setEventTrigger(moveSat, moveSatTrig2);
 
227
                        switch1 = 100000;
 
228
                }
 
229
                //slow down for covering 3C
 
230
                if (lasY2 > switch2)
 
231
                {
 
232
                        setEventTrigger(moveSat, moveSatTrig3);
 
233
                        switch2 = 100000;
 
234
                }
 
235
        }
 
236
}
 
237
 
 
238
 
 
239
/* not needed
 
240
event incChance(every, 10)
 
241
{
 
242
        if (chance < 50)
 
243
        {
 
244
                chance = chance + 1;    //increment chance up to maximum (50%)
 
245
        }
 
246
        else
 
247
        {
 
248
                setEventTrigger(incChance, inactive);
 
249
        }
 
250
}
 
251
*/