Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/campaignHS15/data/levels/Campaign1.oxw @ 10808

Last change on this file since 10808 was 10808, checked in by paulsc, 8 years ago

ended quests, added mission accomplishment

File size: 41.4 KB
Line 
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    include("templates/spaceshipAssff.oxt")
14    include("templates/spaceshipPirate.oxt")
15    include("templates/spaceshipEscort.oxt")
16    include("templates/spaceshipShuttle.oxt")
17    include("templates/FPS.oxt")
18    include("templates/pickupRepresentationTemplates.oxt")
19?>
20
21<Level gametype = "Mission">
22    <templates>
23        <Template link="lodtemplate_default" />
24    </templates>
25
26    <?lua include("includes/notifications.oxi") ?>
27
28    <NotificationQueueCEGUI
29        name="narrative"
30        targets="simpleNotification"
31        size=3
32        displayTime=3.9
33        position="0.15, 0, 0.1, 0"
34        fontSize="23"
35        fontColor="0.3, 1, 0.2, 0.8"
36        alignment="HorzCentred"
37        displaySize="0.7, 0, 0, 0"
38    />
39
40    <!-- GLOBAL LUA VARIABLES -->
41    <?lua
42        waves = 3
43        enemiesInit = 5
44        enemiesIncrease = 2
45        allies = 3
46
47        --[[ Coordinates in (y,z,x). NOTE: Indexing starts at 1 in lua! Don´t forget to adapt the for loops, too! ]]--
48        cCenter = {0, 0, 0}
49        cSpawn = {-50, 0, 0}
50        cUnit = {-2000, 0, 3000}
51        cA = {-3000, 0, 5000}
52        cB = {-3000, 0, -5000}
53        cC = {-2300, 0, 0}
54        dStation = {1, 0, 0}
55        cNewShip = {-2100, 0, 4100}
56        cFPSGround = {-2300, 800, 0}
57        cFPS = {-2300, 1000, 0}
58        cField1 = {400, 0, 2500}
59        cField2 = {400, 0, -2500}
60        cPlanet1 = {8000, -2000, 15000}
61        cPlanet2 = {-20000, 4000, -1000}
62        rAllies = {3000, -2000}         --[[ To be addressed directly, hence r. Do not permute! ]]--
63
64        --[[ Function to print Coordinates. Quotes not included! ]]--
65        function printC(coord)
66          print(coord[1] .. [[,]] .. coord[2] .. [[,]] .. coord[3])
67        end
68    ?>
69
70    <Scene
71        ambientlight = "0.8, 0.8, 0.8"
72        skybox = "Orxonox/skyBoxMoreNebula"
73        hasPhysics = true
74    >
75
76    <SpawnPoint name="playerSpawn" team=0 position="<?lua printC(cSpawn) ?>" lookat="<?lua printC(cA) ?>" spawnclass=SpaceShip pawndesign=spaceshipescort />
77
78    <WorldAmbientSound source="Earth.ogg" looping="true" playOnLoad="true" />
79
80    <Light type=directional position="<?lua printC(cCenter) ?>" 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"/>
81
82    <!--QUEST DEFINITIONS-->
83
84    <GlobalQuest id="quest1">
85        <QuestDescription title="Reach the Station A!" description="You need to get in contact with your base! Word is enemies are preparing to attack our people and goods! Be quick!" failMessage="" completeMessage="" />
86        <hints>
87        </hints>
88        <complete-effects>
89            <AddQuest questId="quest2" />
90            <AddQuest questId="quest2.1" />
91        </complete-effects>
92    </GlobalQuest>
93
94    <GlobalQuest id="quest2">
95        <QuestDescription title="Prepare to fight the Enemy" description="You need to be prepared, mentally and physically! So gather all your strength and forces to destroy those space pirates!" failMessage="" completeMessage="" />
96        <hints>
97        </hints>
98        <subquests>
99            <GlobalQuest id="quest2.1">
100                <QuestDescription title="> Get a better Spaceship" description="Take over the faster, stronger, more secure and overall better spaceship!" failMessage="" completeMessage="" />
101                <complete-effects>
102                    <AddQuest questId="quest2.2" />
103                </complete-effects>
104            </GlobalQuest>
105            <GlobalQuest id="quest2.2">
106                <QuestDescription title="> Meet your Unit" description="Your unit will help you, where ever you go. To victory or to death, they will be loyal to you!" failMessage="" completeMessage="" />
107            </GlobalQuest>
108        </subquests>
109        <complete-effects>
110            <AddQuest questId="quest3" />
111        </complete-effects>
112    </GlobalQuest>
113
114    <GlobalQuest id="quest3">
115        <QuestDescription title="Fight the first Wave" description="Five enemies are approaching you! There main target is the transporter though, so destroy them - before the destroy the transporter with the valuebals goods (and of course the people aboard)!" failMessage="Oh no! You have to be better, they destroyed the transporter!" completeMessage="Good Job!" />
116        <hints>
117        </hints>
118        <complete-effects>
119            <AddQuest questId="quest4" />
120            <AddQuest questId="quest4.1" />
121            <AddQuest questId="quest4.2" />
122        </complete-effects>
123    </GlobalQuest>
124
125    <GlobalQuest id="quest4">
126        <QuestDescription title="Prepare for the next Wave" description="This was just a scouting troop from the enemies, they know now how many there are from us and will send a bigger troop next time! Prepare yourself..." failMessage="" completeMessage="" />
127        <hints>
128        </hints>
129        <subquests>
130            <GlobalQuest id="quest4.1">
131                <QuestDescription title="> Get to the Defense Station" description="Fly to Station C, we will repair your spaceship while you will fight them with the Cannons." failMessage="" completeMessage="" />
132            </GlobalQuest>
133            <GlobalQuest id="quest4.2">
134                <QuestDescription title="> Get into the Cannon Suit!" description="Dock to Station C, you will be able to contol the Cannons on top of the station, perfect for fighting off a hord of enemies!" failMessage="" completeMessage="" />
135            </GlobalQuest>
136        </subquests>
137        <complete-effects>
138            <AddQuest questId="quest5" />
139        </complete-effects>
140    </GlobalQuest>
141
142    <GlobalQuest id="quest5">
143        <QuestDescription title="Fight the Hord!" description="Destroy the next wave!" failMessage="" completeMessage="" />
144        <hints>
145        </hints>
146        <complete-effects>
147            <AddQuest questId="quest6" />
148            <AddQuest questId="quest6.1" />
149            <AddQuest questId="quest6.2" />
150        </complete-effects>
151    </GlobalQuest>
152
153    <GlobalQuest id="quest6">
154        <QuestDescription title="Get back for the Showdown" description="Undock from Station C and get into your Spaceship!" failMessage="" completeMessage="" />
155        <hints>
156        </hints>
157        <subquests>
158            <GlobalQuest id="quest6.1">
159                <QuestDescription title="> Collect the local Pickups" description="There are pickups scattered around Spacestation C, you can collect them if you want to, but it is advised to do so. They will support your task in destroying the enemies and make your life easier." failMessage="" completeMessage="" />
160            </GlobalQuest>
161            <GlobalQuest id="quest6.2">
162                <QuestDescription title="> Get back to the Transporter" description="Fly to the transporter!" failMessage="" completeMessage="" />
163            </GlobalQuest>
164        </subquests>
165        <complete-effects>
166            <AddQuest questId="quest7" />
167        </complete-effects>
168    </GlobalQuest>
169
170    <GlobalQuest id="quest7">
171        <QuestDescription title="Fight the final Wave" description="Good gracious, another hord of pirate ships!" failMessage="" completeMessage="" />
172        <hints>
173        </hints>
174        <subquests>
175        </subquests>
176    </GlobalQuest>
177
178    <!--EVENTS AND TRIGGERS
179        Usable events and triggers:
180        _spawntrigger
181        _reachedA
182        _dock<A|B|C>
183        _docked<A>      WIP; see below
184        -joinedUnit
185        _wave<k>
186        _killedEnemy<k>.<i>
187        _waveClear<k>
188    -->
189
190    <EventMultiTrigger name="spawntrigger">
191        <events>
192            <trigger>
193                <EventListener event="playerSpawn" />
194            </trigger>
195        </events>
196    </EventMultiTrigger>
197
198    <DistanceTrigger name="reachedA" position="<?lua printC(cA) ?>" distance=1000 target="SpaceShip" beaconMode="exclude" targetname="NPC" stayactive=true />
199
200    <!-- TODO: find out how to link an event to the COMPLETION of a dock. How is this not possible?? -->
201    <EventMultiTrigger name="dockedA" activations="1" stayactive="true" delay=3>
202        <events>
203            <trigger>
204                <EventListener event="dockA" />
205            </trigger>
206        </events>
207    </EventMultiTrigger>
208
209    <DistanceTrigger name="joinedUnit" active=false position="<?lua printC(cUnit) ?>" distance=100 target="SpaceShip" beaconMode="exclude" targetname="NPC" stayactive=true>
210        <events>
211            <activity>
212                    <EventListener event="dockedA" />
213            </activity>
214        </events>
215    </DistanceTrigger>
216
217    <EventMultiTrigger name="wave1" activations="1" delay=4>
218        <events>
219            <trigger>
220                <EventListener event="joinedUnit" />
221            </trigger>
222        </events>
223    </EventMultiTrigger>
224
225    <!-- Recursive helper function for the end-of-wave events. F*ck the event system, seriously. -->
226    <?lua
227    function enemyTriggerRecursor(i, k)
228    if i > 0 then
229    return [[
230    <EventTrigger name=killedEnemy]] .. k .. [[.]] .. i .. [[ activations=1 stayactive=true delay=0.1>
231        <events>
232            <trigger>
233                <EventListener event=attackers]] .. k .. [[ />
234            </trigger>
235        </events>
236        ]] .. enemyTriggerRecursor(i-1, k) .. [[
237    </EventTrigger>
238    ]]
239    else return ""
240    end
241    end
242    ?>
243    <!-- Actual recursive Event(s) for the respective waves. -->
244    <?lua
245    enemies = enemiesInit
246    for k = 1, waves, 1
247    do
248    print(enemyTriggerRecursor(enemies,k))
249    ?>
250    <EventMultiTrigger name="waveClear<?lua print(k) ?>" delay=4.0>
251        <events>
252            <trigger>
253                <EventListener event="killedEnemy<?lua print(k .. [[.]] .. enemies) ?>" />
254            </trigger>
255        </events>
256    </EventMultiTrigger>
257    <?lua enemies = enemies + enemiesIncrease ?>
258    <?lua end ?>
259
260    <!-- This controls the ally AI controller so it is only active when active enemies are around!
261    TODO: Find a way to control the allies in another case (Multiple controllers are not allowed). -->
262    <EventDispatcher name="allyControllerDispatcher">
263      <targets>
264        <EventTarget target="allyController" />
265      </targets>
266      <events>
267          <activity>
268              <?lua
269              for k = 1, waves, 1 do
270              ?>
271              <Trigger mode=and>
272                  <EventTrigger>
273                      <events>
274                          <trigger>
275                              <EventListener event="wave<?lua print(k) ?>" />
276                          </trigger>
277                      </events>
278                  </EventTrigger>
279                  <EventTrigger invert=true>
280                      <events>
281                          <trigger>
282                              <EventListener event="waveClear<?lua print(k) ?>" />
283                          </trigger>
284                      </events>
285                  </EventTrigger>
286              </Trigger>
287              <?lua end ?>
288          </activity>
289      </events>
290    </EventDispatcher>
291
292    <DistanceTrigger active=false name="reachedC" position="<?lua printC(cC) ?>" distance=400 target="SpaceShip" beaconMode="exclude" targetname="NPC" stayactive=true>
293        <events>
294            <activity>
295                <EventListener event="waveClear1" />
296            </activity>
297        </events>
298    </DistanceTrigger>
299
300    <!-- TODO: find out how to link an event to the COMPLETION of a dock. How is this not possible?? -->
301    <EventMultiTrigger name="dockedC" activations="1" stayactive="true" delay=3>
302        <events>
303            <trigger>
304                <EventListener event="dockC" />
305            </trigger>
306        </events>
307    </EventMultiTrigger>
308
309    <EventMultiTrigger name="wave2" activations="1" delay=8>
310        <events>
311            <trigger>
312                <EventListener event="dockedC" />
313            </trigger>
314        </events>
315    </EventMultiTrigger>
316
317    <EventMultiTrigger name="readyAfterWave2" activations="1" delay=2 stayactive=true>
318        <events>
319            <trigger>
320                <Trigger mode=and>
321                    <EventTrigger>
322                        <events>
323                            <trigger>
324                                <EventListener event="undockC" />
325                            </trigger>
326                        </events>
327                    </EventTrigger>
328                    <EventTrigger>
329                        <events>
330                            <trigger>
331                                <EventListener event="waveClear2" />
332                            </trigger>
333                        </events>
334                    </EventTrigger>
335                </Trigger>
336            </trigger>
337        </events>
338    </EventMultiTrigger>
339
340    <!-- See the DistanceTrigger attached to the shuttle here! !-->
341
342    <EventMultiTrigger name="wave3" activations="1" delay=12>
343        <events>
344            <trigger>
345                <EventListener event="reachedShuttle" />
346            </trigger>
347        </events>
348    </EventMultiTrigger>
349
350    <DistanceTrigger active=false name="reachedB" position="<?lua printC(cB) ?>" distance=400 target="SpaceShip" beaconMode="exclude" targetname="NPC" stayactive=true>
351        <events>
352            <activity>
353                <EventListener event="waveClear3" />
354            </activity>
355        </events>
356    </DistanceTrigger>
357
358    <Script code="Mission endMission true" onLoad="false">
359        <events>
360            <trigger>
361                <EventListener event="reachedB" />
362            </trigger>
363        </events>
364    </Script>
365
366    <!-- FIXME: This trigger needs fixing, as endMission can only be called by a Pawn Distance Trigger. Herpaderp.
367    Also, the fix proposed in MissionOne does not work anymore... -->
368   <EventMultiTrigger name="missionFailed" target="Pawn" stayActive="true" delay=1.5>
369       <events>
370           <trigger>
371               <EventListener event="transporter" />
372           </trigger>
373       </events>
374   </EventMultiTrigger>
375
376    <Script code="Mission endMission fail" onLoad="false">
377        <events>
378            <trigger>
379                <EventListener event="missionFailed" />
380            </trigger>
381        </events>
382    </Script>
383
384    <!--QUEST EFFECT BEACONS -->
385
386    <QuestEffectBeacon times=1>
387        <effects>
388            <AddQuest questId="quest1" />
389        </effects>
390        <events>
391            <execute>
392                <EventListener event="spawntrigger" />
393            </execute>
394        </events>
395    </QuestEffectBeacon>
396
397    <QuestEffectBeacon times=1>
398        <effects>
399            <CompleteQuest questId="quest1" />
400        </effects>
401        <events>
402            <execute>
403                <EventListener event="reachedA" />
404            </execute>
405        </events>
406    </QuestEffectBeacon>
407
408    <QuestEffectBeacon times=1>
409        <effects>
410            <CompleteQuest questId="quest2.1" />
411        </effects>
412        <events>
413            <execute>
414                <EventListener event="dockedA" />
415            </execute>
416        </events>
417    </QuestEffectBeacon>
418
419    <QuestEffectBeacon times=1>
420        <effects>
421            <CompleteQuest questId="quest2.2" />
422            <CompleteQuest questId="quest2" />
423        </effects>
424        <events>
425            <execute>
426                <EventListener event="joinedUnit" />
427            </execute>
428        </events>
429    </QuestEffectBeacon>
430
431    <QuestEffectBeacon times=1>
432        <effects>
433            <CompleteQuest questId="quest3" />
434        </effects>
435        <events>
436            <execute>
437                <EventListener event="waveClear1" />
438            </execute>
439        </events>
440    </QuestEffectBeacon>
441
442    <QuestEffectBeacon times=1>
443        <effects>
444            <CompleteQuest questId="quest4.1" />
445        </effects>
446        <events>
447            <execute>
448                <EventListener event="reachedC" />
449            </execute>
450        </events>
451    </QuestEffectBeacon>
452
453    <QuestEffectBeacon times=1>
454        <effects>
455            <CompleteQuest questId="quest4.2" />
456            <CompleteQuest questId="quest4" />
457        </effects>
458        <events>
459            <execute>
460                <EventListener event="dockedC" />
461            </execute>
462        </events>
463    </QuestEffectBeacon>
464
465    <QuestEffectBeacon times=1>
466        <effects>
467            <CompleteQuest questId="quest5" />
468        </effects>
469        <events>
470            <execute>
471                <EventListener event="waveClear2" />
472            </execute>
473        </events>
474    </QuestEffectBeacon>
475
476    <QuestEffectBeacon times=1>
477        <effects>
478            <CompleteQuest questId="quest6.1" />
479        </effects>
480        <events>
481            <execute>
482                <EventListener event="gotPickups" />
483            </execute>
484        </events>
485    </QuestEffectBeacon>
486
487    <QuestEffectBeacon times=1>
488        <effects>
489            <CompleteQuest questId="quest6.2" />
490            <CompleteQuest questId="quest6" />
491        </effects>
492        <events>
493            <execute>
494                <EventListener event="reachedShuttle" />
495            </execute>
496        </events>
497    </QuestEffectBeacon>
498
499    <QuestEffectBeacon times=1>
500        <effects>
501            <CompleteQuest questId="quest7" />
502        </effects>
503        <events>
504            <execute>
505                <EventListener event="waveClear3" />
506            </execute>
507        </events>
508    </QuestEffectBeacon>
509
510    <!--NOTIFICATIONS -->
511
512    <SimpleNotification broadcast="true" message="Welcome, Commander. Please report at Station A.">
513        <events>
514            <trigger>
515                <EventTrigger stayactive="true" delay=4 >
516                   <events>
517                      <trigger>
518                         <EventListener event="spawntrigger" />
519                      </trigger>
520                   </events>
521                </EventTrigger>
522            </trigger>
523        </events>
524    </SimpleNotification>
525
526    <SimpleNotification broadcast="true" message="Our enemy is set to attack us very soon.">
527        <events>
528            <trigger>
529                <EventTrigger stayactive="true" delay=8 >
530                   <events>
531                      <trigger>
532                         <EventListener event="spawntrigger" />
533                      </trigger>
534                   </events>
535                </EventTrigger>
536            </trigger>
537        </events>
538    </SimpleNotification>
539
540    <SimpleNotification broadcast="true" message="Please study your mission briefing!">
541        <events>
542            <trigger>
543                <EventTrigger stayactive="true" delay=12 >
544                   <events>
545                      <trigger>
546                         <EventListener event="spawntrigger" />
547                      </trigger>
548                   </events>
549                </EventTrigger>
550            </trigger>
551        </events>
552    </SimpleNotification>
553
554    <SimpleNotification broadcast="true" message="Welcome to Station A, Commander.">
555        <events>
556            <trigger>
557                <EventListener event="reachedA" />
558            </trigger>
559        </events>
560    </SimpleNotification>
561
562    <SimpleNotification broadcast="true" message="We've prepared a reinforced Ship for you.">
563        <events>
564            <trigger>
565                <EventTrigger stayactive="true" delay=4 >
566                   <events>
567                      <trigger>
568                         <EventListener event="reachedA" />
569                      </trigger>
570                   </events>
571                </EventTrigger>
572            </trigger>
573        </events>
574    </SimpleNotification>
575
576    <SimpleNotification broadcast="true" message="Now join our defense Team.">
577        <events>
578            <trigger>
579                <EventListener event="dockedA" />
580            </trigger>
581        </events>
582    </SimpleNotification>
583
584    <SimpleNotification broadcast="true" message="Howdy Commander! Ready to kick some alien ass?">
585        <events>
586            <trigger>
587                <EventListener event="joinedUnit" />
588            </trigger>
589        </events>
590    </SimpleNotification>
591
592    <!-- HACK: Somehow only fires a second time if the (notification,event) pairs are separate! WTF -->
593    <?lua
594    for k = 1, waves, 1 do
595    ?>
596    <SimpleNotification broadcast="true" message="An enemy wave is approaching the shuttle!">
597        <events>
598            <trigger>
599                <EventListener event="wave<?lua print(k) ?>" />
600            </trigger>
601        </events>
602    </SimpleNotification>
603    <?lua end ?>
604
605    <SimpleNotification broadcast="true" message="yippie ki yay motherf*cker!">
606        <events>
607            <trigger>
608                <EventListener event="attackers1" />
609                <EventListener event="attackers2" />
610                <EventListener event="attackers3" />
611            </trigger>
612        </events>
613    </SimpleNotification>
614
615    <SimpleNotification broadcast="true" message="Phew, that was close! Well done, Commmander.">
616        <events>
617            <trigger>
618                <EventListener event="waveClear1" />
619            </trigger>
620        </events>
621    </SimpleNotification>
622
623    <SimpleNotification broadcast="true" message="But it's not over yet! Get to Station C and dock!">
624        <events>
625            <trigger>
626                <EventTrigger stayactive="true" delay=4 >
627                   <events>
628                      <trigger>
629                         <EventListener event="waveClear1" />
630                      </trigger>
631                   </events>
632                </EventTrigger>
633            </trigger>
634        </events>
635    </SimpleNotification>
636
637    <SimpleNotification broadcast="true" message="This is our powerful reinforced cannon suit.">
638        <events>
639            <trigger>
640                <EventListener event="dockedC" />
641            </trigger>
642        </events>
643    </SimpleNotification>
644
645    <SimpleNotification broadcast="true" message="It should deal with those pesky invaders!">
646        <events>
647            <trigger>
648                <EventTrigger stayactive="true" delay=4 >
649                   <events>
650                      <trigger>
651                         <EventListener event="dockedC" />
652                      </trigger>
653                   </events>
654                </EventTrigger>
655            </trigger>
656        </events>
657    </SimpleNotification>
658
659    <SimpleNotification broadcast="true" message="Brilliant work, Commander! now undock again.">
660        <events>
661            <trigger>
662                <EventListener event="waveClear2" />
663            </trigger>
664        </events>
665    </SimpleNotification>
666
667    <SimpleNotification broadcast="true" message="Here's some supplies for you. Shoot that crate!">
668        <events>
669            <trigger>
670                <EventListener event="readyAfterWave2" />
671            </trigger>
672        </events>
673    </SimpleNotification>
674
675    <SimpleNotification broadcast="true" message="Our Intelligence reports one more wave...">
676        <events>
677            <trigger>
678                <EventListener event="reachedShuttle" />
679            </trigger>
680        </events>
681    </SimpleNotification>
682
683    <SimpleNotification broadcast="true" message="Ready to be a hero, Commander?">
684        <events>
685            <trigger>
686                <EventTrigger stayactive="true" delay=4 >
687                   <events>
688                      <trigger>
689                         <EventListener event="reachedShuttle" />
690                      </trigger>
691                   </events>
692                </EventTrigger>
693            </trigger>
694        </events>
695    </SimpleNotification>
696
697    <SimpleNotification broadcast="true" message="Congrats, Commander! You saved our skin.">
698        <events>
699            <trigger>
700                <EventListener event="waveClear3" />
701            </trigger>
702        </events>
703    </SimpleNotification>
704
705    <SimpleNotification broadcast="true" message="Get over to Station B to take a break.">
706        <events>
707            <trigger>
708                <EventTrigger stayactive="true" delay=4 >
709                   <events>
710                      <trigger>
711                         <EventListener event="waveClear3" />
712                      </trigger>
713                   </events>
714                </EventTrigger>
715            </trigger>
716        </events>
717    </SimpleNotification>
718
719    <SimpleNotification broadcast="true" message="It's over... we failed. Retreat!">
720        <events>
721            <trigger>
722                <EventListener event="missionFailed" />
723            </trigger>
724        </events>
725    </SimpleNotification>
726
727    <!--STATIONS -->
728
729    <!-- (Temporary) Template for stations. Used to define common features of all Stations. -->
730    <Template name="station">
731        <Pawn mass=10000000 collisionType=dynamic friction=0.01>
732            <attached>
733                <Model mesh="HydroHarvester.mesh" position="0,0,0" scale=50 />
734                <DistanceTriggerBeacon name="NPC" />
735            </attached>
736            <collisionShapes>
737                <BoxCollisionShape  position="-560,0,0" halfExtents="115,100,245" /><!-- Three lower boxes -->
738                <BoxCollisionShape  position="290,0,-480" halfExtents="115,100,245" yaw=-120 />
739                <BoxCollisionShape  position="290,0,480" halfExtents="115,100,245" yaw=-240 />
740                <BoxCollisionShape  position="-280,0,0" halfExtents="163,50,50" /><!-- Three lower connections -->
741                <BoxCollisionShape  position="140,0,-240" halfExtents="163,50,50" yaw=-120 />
742                <BoxCollisionShape  position="140,0,240" halfExtents="163,50,50" yaw=-240 />
743                <BoxCollisionShape  position="0,530,0" halfExtents="172,52,298" /><!-- Upper Tower -->
744                <BoxCollisionShape  position="0,530,0" halfExtents="172,52,298" yaw=-120 />
745                <BoxCollisionShape  position="0,530,0" halfExtents="172,52,298" yaw=-240 />
746                <BoxCollisionShape  position="0,400,0" halfExtents="43,110,26" yaw=-30 /><!-- Middle one-->
747                <BoxCollisionShape  position="-200,100,0" halfExtents="26,50,43" /><!--Three lower legs -->
748                <BoxCollisionShape  position="100,100,-173" halfExtents="43,50,26" yaw=-30 />
749                <BoxCollisionShape  position="100,100,-173" halfExtents="43,50,26" yaw=30 />
750                <BoxCollisionShape  position="-100,264,0" halfExtents="26,105,43" roll=-49 /><!--Three upper legs -->
751                <BoxCollisionShape  position="50,264,-87" halfExtents="26,105,43" roll=-49 yaw=-120 />
752                <BoxCollisionShape  position="50,264,87" halfExtents="26,105,43" roll=-49 yaw=-240 />
753            </collisionShapes>
754        </Pawn>
755    </Template>
756
757    <!-- A, Coordinates are approx. (cos(29pi/16), sin(29pi/16), 0)*3000 -->
758    <Pawn name="statA" team=0 radarname="Station A" position="<?lua printC(cA) ?>" direction="<?lua printC(dStation) ?>" yaw=-50 initialhealth=10000 maxhealth=10000>
759        <templates>
760            <Template link="station" />
761        </templates>
762        <attached>
763            <DockingTarget name="dockTargetA" />
764            <Dock position="0,0,0" active=true>
765                <animations>
766                    <MoveToDockingTarget target="dockTargetA" />
767                </animations>
768                <effects>
769                    <DockToShip target="newSpaceShip" />
770                </effects>
771                <events>
772                    <execute>
773                        <EventListener event="dockA" />
774                    </execute>
775                </events>
776                <attached>
777                    <DistanceTrigger position="0,0,0" distance="200" target="SpaceShip" beaconMode="exclude" targetname="NPC" name="dockA" />
778                    <Billboard position="0,0,0" amplitude=1 material="Flares/lensflare" colour="1,0,0.05" />
779                </attached>
780            </Dock>
781        </attached>
782    </Pawn>
783
784    <!-- B, Coordinates are approx. (-cos(29pi/16), sin(29pi/16), 0)*3000 -->
785    <Pawn name="statB" team=0 radarname="Station B" position="<?lua printC(cB) ?>" direction="<?lua printC(dStation) ?>" yaw=210 initialhealth=10000 maxhealth=10000>
786        <templates>
787            <Template link="station" />
788        </templates>
789        <attached>
790            <DockingTarget name="dockTargetB" />
791            <Dock position="0,0,0" active=false>
792                <animations>
793                    <MoveToDockingTarget target="dockTargetB" />
794                </animations>
795                <effects>
796                    <DockToShip target="newSpaceShip" />
797                </effects>
798                <events>
799                    <execute>
800                        <EventListener event="dockB" />
801                    </execute>
802                </events>
803                <attached>
804                    <DistanceTrigger position="0,0,0" distance="200" target="SpaceShip" beaconMode="exclude" targetname="NPC" name="dockB" />
805                    <Billboard position="0,0,0" amplitude=1 material="Flares/lensflare" colour="1,0,0.05" />
806                </attached>
807            </Dock>
808        </attached>
809    </Pawn>
810
811    <!-- C -->
812    <Pawn name="statC" team=0 radarname="Station C" position="<?lua printC(cC) ?>" direction="<?lua printC(dStation) ?>" initialhealth=10000 maxhealth=10000>
813        <templates>
814            <Template link="station" />
815        </templates>
816        <attached>
817            <DockingTarget name="dockTargetC" />
818            <Dock position="0,0,0">
819                <animations>
820                    <MoveToDockingTarget target="dockTargetC" />
821                </animations>
822                <effects>
823                    <DockToShip target="fpsMode" />
824                </effects>
825                <events>
826                    <execute>
827                        <EventListener event="dockC" />
828                    </execute>
829                </events>
830                <attached>
831                    <!--HACK: We use another dock to undock back to the ship since undocking is not implemented... -->
832                    <Dock position="0,0,0" active=true>
833                        <effects>
834                            <DockToShip target="newSpaceShip" />
835                        </effects>
836                        <events>
837                            <execute>
838                                <EventListener event="undockC" />
839                            </execute>
840                        </events>
841                    </Dock>
842                    <DistanceTrigger active=false position="0,0,0" distance="200" target="SpaceShip" beaconMode="exclude" targetname="NPC" name="dockC">
843                        <events>
844                            <activity>
845                                <EventListener event="reachedC" />
846                            </activity>
847                        </events>
848                    </DistanceTrigger>
849                    <Billboard position="0,0,0" amplitude=1 material="Flares/lensflare" colour="1,0,0.05" />
850                </attached>
851            </Dock>
852        </attached>
853    </Pawn>
854
855    <!-- New SpaceShip as destination of dock A-->
856    <SpaceShip
857            template            = "spaceshipassff"
858            team                = "0"
859            position            = "<?lua printC(cNewShip) ?>"
860            lookat              = "<?lua printC(cCenter) ?>"
861            health              = "400"
862            initialhealth       = "400"
863            maxhealth           = "1500"
864            shieldhealth        = "80"
865            initialshieldhealth = "80"
866            maxshieldhealth     = "120"
867            shieldabsorption    = "0.8"
868            reloadrate          = "1"
869            reloadwaittime      = "1"
870            name                = "newSpaceShip"
871            radarname           = "Defender" >
872        <attached>
873            <DockingTarget name="newSpaceShip" />
874            <DistanceTriggerBeacon name="newSpaceShip" />
875        </attached>
876    </SpaceShip>
877
878    <!-- FPS Player as destination of dock C -->
879    <FpsPlayer team=0 template = "fps" radarname = "Cannon Suit" position = "<?lua printC(cFPS) ?>" lookat="<?lua printC(cCenter) ?>">
880        <attached>
881            <DockingTarget name="fpsMode" />
882            <DistanceTriggerBeacon name="fpsPlayer" />
883        </attached>
884        <collisionShapes>
885            <BoxCollisionShape position="0,0,0" halfExtents="1,1,1"/>
886        </collisionShapes>
887    </FpsPlayer>
888
889    <!-- Floor for FPS Player -->
890    <StaticEntity position="<?lua printC(cFPSGround) ?>" collisionType=static mass=100000 friction=0.01 >
891        <attached>
892            <Model position="0,0,0" mesh="crate.mesh" scale3D="80,5,80" />
893            <Billboard position="320,50,320" material="Flares/ringflare2" colour="0.2,0.4,0.8" />
894            <DistanceTrigger position="320,50,320" distance="50" target="Pawn" beaconMode="identify" targetname="fpsPlayer" name="undockC" stayactive=true />
895            <ForceField active=false position="0,0,0" mode="homogen" diameter="600" forcedirection = "0,-500,0" />
896            <!-- TODO: Invisible boundaries to prevent falling off platform -->
897        </attached>
898        <collisionShapes>
899            <BoxCollisionShape position="0,0,0" halfExtents="400,25,400" />
900        </collisionShapes>
901    </StaticEntity>
902
903    <!--ELEMENTS -->
904
905    <?lua
906        dofile("includes/asteroidField.lua")
907       asteroidField(cField1[1], cField1[2], cField1[3], 20, 30, 2000, 250, 0)
908    ?>
909
910    <?lua
911        dofile("includes/asteroidField.lua")
912       asteroidField(cField2[1], cField2[2], cField2[3], 20, 30, 2000, 250, 0)
913    ?>
914
915    <Planet
916        position="<?lua printC(cPlanet1) ?>"
917        scale="2000"
918        collisionType="dynamic"
919        linearDamping="0.8"
920        angularDamping="0"
921        mass="5000000"
922        pitch="0"
923        mesh="planets/muunilinst.mesh"
924        atmosphere="atmosphere1"
925        rotationaxis="1,0,0"
926        rotationrate="1.0"
927        atmospheresize="80.0f"
928        imagesize="1024.0f"
929        collisiondamage = 2
930        enablecollisiondamage = true
931      >
932      <attached>
933        <ForceField position="0,0,0" mode="sphere" diameter="4000" velocity="-500" />
934        </attached>
935          <collisionShapes>
936            <SphereCollisionShape radius="2000" position="0,0,0" />
937      </collisionShapes>
938    </Planet>
939
940    <?lua
941        dofile("includes/asteroidField.lua")
942        asteroidBelt(cPlanet1[1], cPlanet1[2], cPlanet1[3], 30, 0, 30, 20, 40, 2800, 3000, 200, 1)
943    ?>
944
945    <Planet
946        position="<?lua printC(cPlanet2) ?>"
947        scale="3000"
948        collisionType="dynamic"
949        linearDamping="0.8"
950        angularDamping="0"
951        mass="5000000"
952        pitch="0"
953        mesh="planets/planet3.mesh"
954        atmosphere="atmosphere1"
955        rotationaxis="1,0,0"
956        rotationrate="1.0"
957        atmospheresize="80.0f"
958        imagesize="1024.0f"
959        collisiondamage = 2
960        enablecollisiondamage = true
961      >
962      <attached>
963        <ForceField position="0,0,0" mode="sphere" diameter="6000" velocity="-500" />
964        </attached>
965          <collisionShapes>
966            <SphereCollisionShape radius="3000" position="0,0,0" />
967      </collisionShapes>
968    </Planet>
969
970    <?lua
971        dofile("includes/asteroidField.lua")
972        asteroidBelt(cPlanet2[1], cPlanet2[2], cPlanet2[3], 30, 20, 100, 20, 40, 3400, 3700, 400, 1)
973    ?>
974
975    <!-- Box with Pickups. TODO: Pickups! -->
976    <SpaceShip team=0 name="gotPickups" health=30 position="<?lua print((cC[1]+600) .. ',' .. cC[2] .. ',' .. (cC[3]-600)) ?>" direction="0,-1,0" collisionType=dynamic mass=1000 radarname="Supplies" >
977        <events>
978            <visibility>
979                <EventListener event="readyAfterWave2" />
980            </visibility>
981            <activity>
982                <EventListener event="readyAfterWave2" />
983            </activity>
984        </events>
985        <attached>
986            <Model position="0,0,0" mesh="crate.mesh" scale3D="10,10,10" />
987        </attached>
988        <collisionShapes>
989            <BoxCollisionShape position="0,0,0" halfExtents="30,30,30" />
990        </collisionShapes>
991    </SpaceShip>
992
993    <?lua
994        include("includes/pickups.oxi")
995    ?>
996
997    <PickupSpawner pickup=hugeshieldpickup position="<?lua print((cC[1]+585) .. ',' .. cC[2] .. ',' .. (cC[3]-585)) ?>" triggerDistance="15" maxSpawnedItems="1">
998        <events>
999            <visibility>
1000                <EventListener event="readyAfterWave2" />
1001            </visibility>
1002            <activity>
1003                <EventListener event="readyAfterWave2" />
1004            </activity>
1005        </events>
1006    </PickupSpawner>
1007
1008    <PickupSpawner pickup=crazyhealthpickup position="<?lua print((cC[1]+615) .. ',' .. cC[2] .. ',' .. (cC[3]-615)) ?>" triggerDistance="15" maxSpawnedItems="1">
1009        <events>
1010            <visibility>
1011                <EventListener event="readyAfterWave2" />
1012            </visibility>
1013            <activity>
1014                <EventListener event="readyAfterWave2" />
1015            </activity>
1016        </events>
1017    </PickupSpawner>
1018
1019    <PickupSpawner pickup=hugespeedpickup position="<?lua print((cC[1]+585) .. ',' .. cC[2] .. ',' .. (cC[3]-615)) ?>" triggerDistance="15" maxSpawnedItems="1" >
1020        <events>
1021            <visibility>
1022                <EventListener event="readyAfterWave2" />
1023            </visibility>
1024            <activity>
1025                <EventListener event="readyAfterWave2" />
1026            </activity>
1027        </events>
1028    </PickupSpawner>
1029
1030    <!-- Allies -->
1031    <?lua
1032    for i = 1, allies, 1
1033    do
1034    x = rAllies[1] + math.cos(2*math.pi/allies*(i+1))*100
1035    y = rAllies[2] + math.sin(2*math.pi/allies*(i+1))*100
1036    ?>
1037    <SpaceShip visible=false active=false name="allies<?lua print(k)?>" radarname="Ally" position="<?lua print(y)?>,<?lua print(math.pow(-1,i)*100) ?>,<?lua print(x)?>" lookat="0,0,0" team=0>
1038        <templates>
1039            <Template link="spaceshipassff" />
1040        </templates>
1041        <events>
1042            <visibility>
1043                <EventListener event="dockedA" />
1044            </visibility>
1045            <activity>
1046                <EventListener event="dockedA" />
1047            </activity>
1048        </events>
1049        <attached>
1050            <DistanceTriggerBeacon name="NPC" />
1051        </attached>
1052        <controller>
1053            <!-- also see allyControllerDispatcher -->
1054            <AIController name="allyController" accuracy=100 team=0 active=false />
1055        </controller>
1056    </SpaceShip>
1057    <?lua end ?>
1058
1059    <!-- Enemies. Outer loop defines waves, inner loop defines enemies in every wave. -->
1060    <?lua
1061    enemies = enemiesInit
1062    for k = 1, waves, 1
1063    do
1064    ?>
1065    <?lua
1066    for i = 1, enemies, 1
1067    do
1068    x = math.cos(math.pi/(2*enemies - 2)*(i+k))*1500
1069    y = math.sin(math.pi/(2*enemies - 2)*(i+k))*1500
1070    ?>
1071    <SpaceShip visible=false active=false name="attackers<?lua print(k)?>" radarname="Attacker" position="<?lua print(y)?>,<?lua print(math.pow(-1,i)*250) ?>,<?lua print(x)?>" lookat="0,0,0" team=1>
1072        <templates>
1073            <Template link="spaceshippirate" />
1074        </templates>
1075        <events>
1076            <visibility>
1077                <EventListener event="wave<?lua print(k)?>" />
1078            </visibility>
1079            <activity>
1080                <EventListener event="wave<?lua print(k)?>" />
1081            </activity>
1082        </events>
1083        <attached>
1084            <DistanceTriggerBeacon name="NPC" />
1085        </attached>
1086        <controller>
1087            <WaypointPatrolController name="attackController" accuracy=100 alertnessradius=100 team=1 active=false>
1088                <waypoints>
1089                    <Attacher target="transporter" deletewithparent=false />
1090                </waypoints>
1091                <events>
1092                    <activity>
1093                        <EventListener event="wave<?lua print(k)?>" />
1094                    </activity>
1095                </events>
1096            </WaypointPatrolController>
1097        </controller>
1098    </SpaceShip>
1099    <?lua end ?>
1100    <?lua
1101    enemies = enemies + enemiesIncrease
1102    end ?>
1103
1104    <!-- Transporter, starting Point is near A, end Point near B, the circle parameters for the waypoints are: Center = (0, -887, 0), r = 2613 -->
1105    <SpaceShip position="<?lua printC(cA) ?>" lookat="<?lua printC(cB) ?>" team=0 name="transporter" radarname="Shuttle">
1106        <templates>
1107            <Template link="spaceshipShuttle" />
1108        </templates>
1109        <attached>
1110            <DistanceTriggerBeacon name="NPC" />
1111            <DistanceTrigger active=false name="reachedShuttle" position="0,0,0" distance=400 target="SpaceShip" beaconMode="exclude" targetname="NPC" stayactive=true>
1112                <events>
1113                    <activity>
1114                        <EventListener event="readyAfterWave2" />
1115                    </activity>
1116                </events>
1117            </DistanceTrigger>
1118        </attached>
1119        <controller>
1120            <WaypointController accuracy=10 team=0>
1121                <waypoints>
1122                    <!-- A to B -->
1123                    <?lua
1124                    max = 5
1125                    for i = 1, max, 1
1126                    do
1127                    x = math.cos(math.pi*(i+1)/8)*5000
1128                    y = -math.sin(math.pi*(i+1)/8)*700-3000
1129                    ?>
1130                    <Billboard position="<?lua print(y) ?>,0,<?lua print(x) ?>" amplitude=1 material="Flares/lensflare" colour="1,1,0.05"/>
1131                    <?lua end ?>
1132
1133                    <!-- Return Point -->
1134                    <Billboard position="<?lua printC(cB) ?>" amplitude=1 material="Flares/lensflare" colour="1,1,0.05"/>
1135
1136                    <!-- B to A -->
1137                    <?lua
1138                    max = 5
1139                    for i = 1, max, 1
1140                    do
1141                    x = math.cos(math.pi*(max+2-i)/8)*5000
1142                    y = -math.sin(math.pi*(max+2-i)/8)*700-3000
1143                    ?>
1144                    <Billboard position="<?lua print(y) ?>,0,<?lua print(x) ?>" amplitude=1 material="Flares/lensflare" colour="1,1,0.05"/>
1145                    <?lua end ?>
1146
1147                    <!-- Start Point -->
1148                    <Billboard position="<?lua printC(cA) ?>" amplitude=1 material="Flares/lensflare" colour="1,1,0.05"/>
1149                </waypoints>
1150            </WaypointController>
1151        </controller>
1152    </SpaceShip>
1153
1154    </Scene>
1155</Level>
Note: See TracBrowser for help on using the repository browser.