1 | <LevelInfo |
---|
2 | name = "CampaignHS15 1" |
---|
3 | description = "Protect the transporter!" |
---|
4 | tags = "mission" |
---|
5 | screenshot = "missionOne.png" |
---|
6 | /> |
---|
7 | |
---|
8 | <?lua |
---|
9 | include("stats.oxo") |
---|
10 | include("HUDTemplates3.oxo") |
---|
11 | include("templates/lodInformation.oxt") |
---|
12 | ?> |
---|
13 | |
---|
14 | <?lua |
---|
15 | include("templates/spaceshipAssff2.oxt") |
---|
16 | include("templates/spaceshipPirate.oxt") |
---|
17 | include("templates/spaceshipEscort.oxt") |
---|
18 | include("templates/spaceshipRing.oxt") |
---|
19 | include("templates/spaceshipSwallow.oxt") |
---|
20 | include("templates/spaceshipTransporter.oxt") |
---|
21 | ?> |
---|
22 | |
---|
23 | <Level gametype = "Mission"> |
---|
24 | <templates> |
---|
25 | <Template link="lodtemplate_default" /> |
---|
26 | </templates> |
---|
27 | |
---|
28 | <?lua include("includes/notifications.oxi") ?> |
---|
29 | <NotificationQueueCEGUI |
---|
30 | name="narrative" |
---|
31 | targets="simpleNotification" |
---|
32 | size=3 |
---|
33 | displayTime=3.9 |
---|
34 | position="0.15, 0, 0.1, 0" |
---|
35 | fontSize="23" |
---|
36 | fontColor="0.3, 1, 0.2, 0.8" |
---|
37 | alignment="HorzCentred" |
---|
38 | displaySize="0.7, 0, 0, 0" |
---|
39 | /> |
---|
40 | |
---|
41 | <!-- GLOBAL LUA VARIABLES --> |
---|
42 | <?lua |
---|
43 | waves = 3 |
---|
44 | enemies = 5 |
---|
45 | ?> |
---|
46 | |
---|
47 | <Scene |
---|
48 | ambientlight = "0.8, 0.8, 0.8" |
---|
49 | skybox = "Orxonox/Starbox" |
---|
50 | > |
---|
51 | |
---|
52 | <SpawnPoint name="playerSpawn" team=1 position="0,-50,0" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff2 /> |
---|
53 | |
---|
54 | <WorldAmbientSound source="Earth.ogg" looping="true" playOnLoad="true" /> |
---|
55 | |
---|
56 | <Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0"/> |
---|
57 | |
---|
58 | <!--QUEST DEFINITIONS--> |
---|
59 | |
---|
60 | <GlobalQuest id="quest1"> |
---|
61 | <QuestDescription title="Reach the Station!" description="" failMessage="" completeMessage="" /> |
---|
62 | <hints> |
---|
63 | <QuestHint id="quest1hint1" /> |
---|
64 | </hints> |
---|
65 | <complete-effects> |
---|
66 | <!-- Quest 2 not made as of yet |
---|
67 | <AddQuest questId="quest2" /> |
---|
68 | <AddQuest questId="quest2.1" /> |
---|
69 | <AddQuest questId="quest2.2" /> |
---|
70 | <AddQuest questId="quest2.3" /> |
---|
71 | --> |
---|
72 | <AddQuest questId="quest3" /> |
---|
73 | </complete-effects> |
---|
74 | </GlobalQuest> |
---|
75 | |
---|
76 | <GlobalQuest id="quest2"> |
---|
77 | <QuestDescription title="Prepare to fight the Wave" description="" failMessage="" completeMessage="" /> |
---|
78 | <hints> |
---|
79 | </hints> |
---|
80 | <subquests> |
---|
81 | <GlobalQuest id="quest2.1"> |
---|
82 | <QuestDescription title="Get a better Spaceship" description="" failMessage="" completeMessage="" /> |
---|
83 | </GlobalQuest> |
---|
84 | <GlobalQuest id="quest2.2"> |
---|
85 | <QuestDescription title="Get some Pickups" description="" failMessage="" completeMessage="" /> |
---|
86 | </GlobalQuest> |
---|
87 | <GlobalQuest id="quest2.3"> |
---|
88 | <QuestDescription title="Meet your Unit" description="" failMessage="" completeMessage="" /> |
---|
89 | </GlobalQuest> |
---|
90 | </subquests> |
---|
91 | <complete-effects> |
---|
92 | <AddQuest questId="quest3" /> |
---|
93 | </complete-effects> |
---|
94 | </GlobalQuest> |
---|
95 | |
---|
96 | <GlobalQuest id="quest3"> |
---|
97 | <QuestDescription title="Fight the first Wave" description="" failMessage="" completeMessage="" /> |
---|
98 | <hints> |
---|
99 | </hints> |
---|
100 | <complete-effects> |
---|
101 | <AddQuest questId="quest4" /> |
---|
102 | <AddQuest questId="quest4.1" /> |
---|
103 | <AddQuest questId="quest4.2" /> |
---|
104 | </complete-effects> |
---|
105 | </GlobalQuest> |
---|
106 | |
---|
107 | <GlobalQuest id="quest4"> |
---|
108 | <QuestDescription title="Prepare for the next Wave" description="" failMessage="" completeMessage="" /> |
---|
109 | <hints> |
---|
110 | </hints> |
---|
111 | <subquests> |
---|
112 | <GlobalQuest id="quest4.1"> |
---|
113 | <QuestDescription title="Get to the Defense Station" description="" failMessage="" completeMessage="" /> |
---|
114 | </GlobalQuest> |
---|
115 | <GlobalQuest id="quest4.2"> |
---|
116 | <QuestDescription title="Find the turret" description="" failMessage="" completeMessage="" /> |
---|
117 | </GlobalQuest> |
---|
118 | </subquests> |
---|
119 | <complete-effects> |
---|
120 | <AddQuest questId="quest5" /> |
---|
121 | </complete-effects> |
---|
122 | </GlobalQuest> |
---|
123 | |
---|
124 | <GlobalQuest id="quest5"> |
---|
125 | <QuestDescription title="Fight the Hord!" description="" failMessage="" completeMessage="" /> |
---|
126 | <hints> |
---|
127 | </hints> |
---|
128 | <complete-effects> |
---|
129 | <AddQuest questId="quest6" /> |
---|
130 | <AddQuest questId="quest6.1" /> |
---|
131 | <AddQuest questId="quest6.2" /> |
---|
132 | </complete-effects> |
---|
133 | </GlobalQuest> |
---|
134 | |
---|
135 | <GlobalQuest id="quest6"> |
---|
136 | <QuestDescription title="Get back to the Transporter" description="" failMessage="" completeMessage="" /> |
---|
137 | <hints> |
---|
138 | </hints> |
---|
139 | <subquests> |
---|
140 | <GlobalQuest id="quest6.1"> |
---|
141 | <QuestDescription title="Collect the local Pickups" description="" failMessage="" completeMessage="" /> |
---|
142 | </GlobalQuest> |
---|
143 | <GlobalQuest id="quest6.2"> |
---|
144 | <QuestDescription title="Use Portal to the Transporter" description="" failMessage="" completeMessage="" /> |
---|
145 | </GlobalQuest> |
---|
146 | </subquests> |
---|
147 | <complete-effects> |
---|
148 | <AddQuest questId="quest7" /> |
---|
149 | </complete-effects> |
---|
150 | </GlobalQuest> |
---|
151 | |
---|
152 | <GlobalQuest id="quest7"> |
---|
153 | <QuestDescription title="Fight the final Wave" description="" failMessage="" completeMessage="" /> |
---|
154 | <hints> |
---|
155 | </hints> |
---|
156 | <subquests> |
---|
157 | </subquests> |
---|
158 | </GlobalQuest> |
---|
159 | |
---|
160 | <!--EVENTS AND TRIGGERS |
---|
161 | Usable events and triggers: |
---|
162 | _spawntrigger |
---|
163 | _reachedA |
---|
164 | _wave<k> |
---|
165 | _killedEnemy<k>.<i> |
---|
166 | _waveClear<k> |
---|
167 | --> |
---|
168 | |
---|
169 | <EventMultiTrigger name="spawntrigger"> |
---|
170 | <events> |
---|
171 | <trigger> |
---|
172 | <EventListener event="playerSpawn" /> |
---|
173 | </trigger> |
---|
174 | </events> |
---|
175 | </EventMultiTrigger> |
---|
176 | |
---|
177 | <DistanceTrigger name="reachedA" position="2494,-1667,0" distance=200 target="SpaceShip" beaconMode="exclude" targetname="NPC" stayactive=true /> |
---|
178 | |
---|
179 | <EventMultiTrigger name="wave1" activations="1" stayactive="true" > |
---|
180 | <events> |
---|
181 | <trigger> |
---|
182 | <EventListener event="reachedA" /> |
---|
183 | </trigger> |
---|
184 | </events> |
---|
185 | </EventMultiTrigger> |
---|
186 | |
---|
187 | <!-- Recursive helper function for the end-of-wave events. F*ck the event system, seriously. --> |
---|
188 | <?lua |
---|
189 | function enemyTriggerRecursor(i, k) |
---|
190 | if i > 0 then |
---|
191 | return [[ |
---|
192 | <EventTrigger name=killedEnemy]] .. k .. [[.]] .. i .. [[ activations=1 stayactive=true delay=0.1> |
---|
193 | <events> |
---|
194 | <trigger> |
---|
195 | <EventListener event=attackers]] .. k .. [[ /> |
---|
196 | </trigger> |
---|
197 | </events> |
---|
198 | ]] .. enemyTriggerRecursor(i-1, k) .. [[ |
---|
199 | </EventTrigger> |
---|
200 | ]] |
---|
201 | else return "" |
---|
202 | end |
---|
203 | end |
---|
204 | ?> |
---|
205 | <!-- Actual recursive Event(s) for the respective waves. --> |
---|
206 | <?lua |
---|
207 | for k = 1, waves, 1 |
---|
208 | do |
---|
209 | print(enemyTriggerRecursor(enemies,k)) |
---|
210 | ?> |
---|
211 | <EventMultiTrigger name="waveClear<?lua print(k) ?>" delay=4.0> |
---|
212 | <events> |
---|
213 | <trigger> |
---|
214 | <EventListener event="killedEnemy<?lua print(k .. [[.]] .. enemies) ?>" /> |
---|
215 | </trigger> |
---|
216 | </events> |
---|
217 | </EventMultiTrigger> |
---|
218 | <?lua end ?> |
---|
219 | |
---|
220 | <!-- This trigger needs fixing, as endMission can only be called by a Pawn Distance Trigger. Herpaderp --> |
---|
221 | <EventMultiTrigger name="missionFailed" target="Pawn" stayActive="true" delay=1.5> |
---|
222 | <events> |
---|
223 | <trigger> |
---|
224 | <EventListener event="transporter" /> |
---|
225 | </trigger> |
---|
226 | </events> |
---|
227 | </EventMultiTrigger> |
---|
228 | |
---|
229 | <Script code="Mission endMission fail" onLoad="false" times="1"> |
---|
230 | <events> |
---|
231 | <trigger> |
---|
232 | <EventListener event="missionFailed" /> |
---|
233 | </trigger> |
---|
234 | </events> |
---|
235 | </Script> |
---|
236 | |
---|
237 | <!--QUEST EFFECT BEACONS --> |
---|
238 | |
---|
239 | <QuestEffectBeacon times=1> |
---|
240 | <effects> |
---|
241 | <AddQuest questId="quest1" /> |
---|
242 | </effects> |
---|
243 | <events> |
---|
244 | <execute> |
---|
245 | <EventListener event="spawntrigger" /> |
---|
246 | </execute> |
---|
247 | </events> |
---|
248 | </QuestEffectBeacon> |
---|
249 | |
---|
250 | <QuestEffectBeacon times=1> |
---|
251 | <effects> |
---|
252 | <CompleteQuest questId="quest1" /> |
---|
253 | </effects> |
---|
254 | <events> |
---|
255 | <execute> |
---|
256 | <EventListener event="reachedA" /> |
---|
257 | </execute> |
---|
258 | </events> |
---|
259 | </QuestEffectBeacon> |
---|
260 | |
---|
261 | <QuestEffectBeacon times=1> |
---|
262 | <effects> |
---|
263 | <CompleteQuest questId="quest3" /> |
---|
264 | </effects> |
---|
265 | <events> |
---|
266 | <execute> |
---|
267 | <EventListener event="waveClear1" /> |
---|
268 | </execute> |
---|
269 | </events> |
---|
270 | </QuestEffectBeacon> |
---|
271 | |
---|
272 | <!--NOTIFICATIONS --> |
---|
273 | |
---|
274 | <SimpleNotification broadcast="true" message="Welcome, Commander. Please report at Station A"> |
---|
275 | <events> |
---|
276 | <trigger> |
---|
277 | <EventListener event="spawntrigger" /> |
---|
278 | </trigger> |
---|
279 | </events> |
---|
280 | </SimpleNotification> |
---|
281 | |
---|
282 | <SimpleNotification broadcast="true" message="An enemy wave is approaching the shuttle!"> |
---|
283 | <events> |
---|
284 | <trigger> |
---|
285 | <EventListener event="wave1" /> |
---|
286 | <EventListener event="wave2" /> |
---|
287 | <EventListener event="wave3" /> |
---|
288 | </trigger> |
---|
289 | </events> |
---|
290 | </SimpleNotification> |
---|
291 | |
---|
292 | <SimpleNotification broadcast="true" message="yippie kai yay motherf*cker!"> |
---|
293 | <events> |
---|
294 | <trigger> |
---|
295 | <EventListener event="attackers1" /> |
---|
296 | <EventListener event="attackers2" /> |
---|
297 | <EventListener event="attackers3" /> |
---|
298 | </trigger> |
---|
299 | </events> |
---|
300 | </SimpleNotification> |
---|
301 | |
---|
302 | <SimpleNotification broadcast="true" message="Phew, that was close! Well done, Commmander."> |
---|
303 | <events> |
---|
304 | <trigger> |
---|
305 | <EventListener event="waveClear1" /> |
---|
306 | <EventListener event="waveClear2" /> |
---|
307 | <EventListener event="waveClear3" /> |
---|
308 | </trigger> |
---|
309 | </events> |
---|
310 | </SimpleNotification> |
---|
311 | |
---|
312 | <SimpleNotification broadcast="true" message="It's over... we failed. Retreat!"> |
---|
313 | <events> |
---|
314 | <trigger> |
---|
315 | <EventListener event="missionFailed" /> |
---|
316 | </trigger> |
---|
317 | </events> |
---|
318 | </SimpleNotification> |
---|
319 | |
---|
320 | <!--STRUCTURE --> |
---|
321 | |
---|
322 | <!-- A, Coordinates are approx. (cos(29pi/16), sin(29pi/16), 0)*3000 --> |
---|
323 | <StaticEntity name="statA" position="2494,-1667,0" direction="0,-1,0" collisionType=static mass=100000 friction=0.01> |
---|
324 | <attached> |
---|
325 | <Model position="0,0,0" mesh="cube.mesh" scale3D="40,40,40" /> |
---|
326 | </attached> |
---|
327 | <collisionShapes> |
---|
328 | <BoxCollisionShape position="0,0,0" halfExtents="10,10,10" /> |
---|
329 | </collisionShapes> |
---|
330 | </StaticEntity> |
---|
331 | |
---|
332 | <!-- B, Coordinates are approx. (-cos(29pi/16), sin(29pi/16), 0)*3000 --> |
---|
333 | <StaticEntity name="statB" position="-2494,-1667,0" direction="0,-1,0" collisionType=static mass=100000 friction=0.01> |
---|
334 | <attached> |
---|
335 | <Model position="0,0,0" mesh="cube.mesh" scale3D="40,40,40" /> |
---|
336 | </attached> |
---|
337 | <collisionShapes> |
---|
338 | <BoxCollisionShape position="0,0,0" halfExtents="10,10,10" /> |
---|
339 | </collisionShapes> |
---|
340 | </StaticEntity> |
---|
341 | |
---|
342 | <!-- C --> |
---|
343 | <StaticEntity name="statC" position="0,-1400,0" direction="0,-1,0" collisionType=static mass=100000 friction=0.01> |
---|
344 | <attached> |
---|
345 | <Model position="0,0,0" mesh="cube.mesh" scale3D="40,40,40" /> |
---|
346 | </attached> |
---|
347 | <collisionShapes> |
---|
348 | <BoxCollisionShape position="0,0,0" halfExtents="10,10,10" /> |
---|
349 | </collisionShapes> |
---|
350 | </StaticEntity> |
---|
351 | |
---|
352 | <!--ELEMENTS --> |
---|
353 | |
---|
354 | <!-- Enemies. Outer loop defines waves, inner loop defines enemies in every wave. --> |
---|
355 | <?lua |
---|
356 | for k = 1, waves, 1 |
---|
357 | do |
---|
358 | ?> |
---|
359 | <?lua |
---|
360 | for i = 1, enemies, 1 |
---|
361 | do |
---|
362 | x = math.cos(math.pi/8*(i+1))*1500 |
---|
363 | y = math.sin(math.pi/8*(i+1))*1500 |
---|
364 | ?> |
---|
365 | <SpaceShip visible=false active=false name="attackers<?lua print(k)?>" radarname="Attacker" position="<?lua print(x)?>,<?lua print(y)?>,<?lua print(math.pow(-1,i)*250) ?>" lookat="0,0,0" team=2> |
---|
366 | <templates> |
---|
367 | <Template link="spaceshippirate" /> |
---|
368 | </templates> |
---|
369 | <events> |
---|
370 | <visibility> |
---|
371 | <EventListener event="wave<?lua print(k)?>" /> |
---|
372 | </visibility> |
---|
373 | <activity> |
---|
374 | <EventListener event="wave<?lua print(k)?>" /> |
---|
375 | </activity> |
---|
376 | </events> |
---|
377 | <attached> |
---|
378 | <DistanceTriggerBeacon name="NPC" /> |
---|
379 | </attached> |
---|
380 | <controller> |
---|
381 | <WaypointPatrolController name="attackController" alertnessradius=50 team=1 active=false> |
---|
382 | <waypoints> |
---|
383 | <Attacher target="transporter" deletewithparent=false /> |
---|
384 | </waypoints> |
---|
385 | <events> |
---|
386 | <activity> |
---|
387 | <EventListener event="wave<?lua print(k)?>" /> |
---|
388 | </activity> |
---|
389 | </events> |
---|
390 | </WaypointPatrolController> |
---|
391 | </controller> |
---|
392 | </SpaceShip> |
---|
393 | <?lua end ?> |
---|
394 | <?lua end ?> |
---|
395 | |
---|
396 | <!-- Transporter, starting Point is near A, end Point near B, the circle parameters for the waypoints are: Center = (0, -887, 0), r = 2613 --> |
---|
397 | <SpaceShip position="2450, -1667, 0" lookat="-2494, -1667, 0" team=1 name="transporter" radarname="Shuttle"> |
---|
398 | <templates> |
---|
399 | <Template link="spaceshipTransporter" /> |
---|
400 | </templates> |
---|
401 | <attached> |
---|
402 | <DistanceTriggerBeacon name="NPC" /> |
---|
403 | </attached> |
---|
404 | <controller> |
---|
405 | <WaypointController accuracy=10> |
---|
406 | <waypoints> |
---|
407 | <!-- A to B --> |
---|
408 | <?lua |
---|
409 | max = 5 |
---|
410 | for i = 1, max, 1 |
---|
411 | do |
---|
412 | x = math.cos(math.pi*(i+1)/8)*2613 |
---|
413 | y = -math.sin(math.pi*(i+1)/8)*2613-887 |
---|
414 | ?> |
---|
415 | <Model mesh="sphere.mesh" scale=100 position="<?lua print(x) ?>,<?lua print(y) ?>,0" /> |
---|
416 | <?lua end ?> |
---|
417 | |
---|
418 | <!-- Return Point --> |
---|
419 | <Model mesh="sphere.mesh" scale=100 position="-2450, -1667, 0" /> |
---|
420 | |
---|
421 | <!-- B to A --> |
---|
422 | <?lua |
---|
423 | max = 5 |
---|
424 | for i = 1, max, 1 |
---|
425 | do |
---|
426 | x = math.cos(math.pi*(max+2-i)/8)*2613 |
---|
427 | y = -math.sin(math.pi*(max+2-i)/8)*2613-887 |
---|
428 | ?> |
---|
429 | <Model mesh="sphere.mesh" scale=100 position="<?lua print(x) ?>,<?lua print(y) ?>,0" /> |
---|
430 | <?lua end ?> |
---|
431 | |
---|
432 | <!-- Start Point --> |
---|
433 | <Model mesh="sphere.mesh" scale=100 position="2450,-1667,0" /> |
---|
434 | </waypoints> |
---|
435 | </WaypointController> |
---|
436 | </controller> |
---|
437 | </SpaceShip> |
---|
438 | |
---|
439 | </Scene> |
---|
440 | </Level> |
---|