[Orxonox-commit 7418] r12029 - in code/branches/mergeFS18: . data/levels data/levels/templates src/libraries/tools src/modules/gametypes src/orxonox/items src/orxonox/worldentities/pawns

merholzl at orxonox.net merholzl at orxonox.net
Wed Oct 10 15:36:53 CEST 2018


Author: merholzl
Date: 2018-10-10 15:36:53 +0200 (Wed, 10 Oct 2018)
New Revision: 12029

Added:
   code/branches/mergeFS18/data/levels/templates/SpaceRaceTemplates.oxt
Modified:
   code/branches/mergeFS18/
   code/branches/mergeFS18/data/levels/newnewnewspacerace.oxw
   code/branches/mergeFS18/data/levels/presentationHS12.oxw
   code/branches/mergeFS18/data/levels/templates/fastship.oxt
   code/branches/mergeFS18/data/levels/templates/spaceshipCollateralDamage.oxt
   code/branches/mergeFS18/src/libraries/tools/Timer.h
   code/branches/mergeFS18/src/modules/gametypes/SpaceRace.cc
   code/branches/mergeFS18/src/modules/gametypes/SpaceRace.h
   code/branches/mergeFS18/src/modules/gametypes/SpaceRaceController.cc
   code/branches/mergeFS18/src/modules/gametypes/SpaceRaceController.h
   code/branches/mergeFS18/src/modules/gametypes/SpaceRaceManager.cc
   code/branches/mergeFS18/src/orxonox/items/Engine.cc
   code/branches/mergeFS18/src/orxonox/worldentities/pawns/SpaceShip.cc
   code/branches/mergeFS18/src/orxonox/worldentities/pawns/SpaceShip.h
Log:
added space race improvements

Index: code/branches/mergeFS18
===================================================================
--- code/branches/mergeFS18	2018-10-10 13:16:51 UTC (rev 12028)
+++ code/branches/mergeFS18	2018-10-10 13:36:53 UTC (rev 12029)

Property changes on: code/branches/mergeFS18
___________________________________________________________________
Modified: svn:mergeinfo
## -13,6 +13,7 ##
 /code/branches/ParticleEffectsFS15:10309-10612
 /code/branches/Presentation_HS17_merge:11723-11782
 /code/branches/ProtectBoss_HS17:11457-11763
+/code/branches/RacingBots_FS18:11817-12028
 /code/branches/Racingbot:9388-9513
 /code/branches/SOBv2_HS17:11459-11765
 /code/branches/SciptableControllerFS15:10308-10613
Modified: code/branches/mergeFS18/data/levels/newnewnewspacerace.oxw
===================================================================
--- code/branches/mergeFS18/data/levels/newnewnewspacerace.oxw	2018-10-10 13:16:51 UTC (rev 12028)
+++ code/branches/mergeFS18/data/levels/newnewnewspacerace.oxw	2018-10-10 13:36:53 UTC (rev 12029)
@@ -20,7 +20,7 @@
   include("templates/spaceshipPirate.oxt")
 
   include("templates/spaceshipAssff.oxt")
-  include("templates/pickupRepresentationTemplates.oxt")
+  include("templates/SpaceRaceTemplates.oxt")
 
 ?>
 
@@ -217,7 +217,7 @@
       </collisionShapes>
   </StaticEntity>
 
-<StaticEntity position="10000,-70,200" direction="-1,0,0" yaw=90 pitch=0 roll=-30 collisionType="static">
+<StaticEntity position="11000,-60,200" direction="-1,0,0" yaw=90 pitch=0 roll=-30 collisionType="static">
     <attached>
       <Model scale="20" mesh="Board2.mesh" />
     </attached>
@@ -232,8 +232,11 @@
  <checkpoints>
     
     <!-- distance = how far from the middle point of a check point do i have to fly ? distance variable answers this question   -->
+   
 
+      
 
+
     <RaceCheckPoint name="checkpoint1" yaw=90 pitch=90 position="1000,30,0" roll="0" direction="0,1,0" collisionType="static" scale="1" distance="60" checkpointindex="0" islast="false" nextcheckpoints="1,-1,-1">
         <attached>
       <Model position="0,0,0" scale="70" mesh="Checkpoint_Green.mesh"/>
@@ -245,9 +248,9 @@
         <BoxCollisionShape position="-70,0,0"     halfExtents="10, 10, 70" />
     </collisionShapes>
     </RaceCheckPoint>
+            <Model mesh="cube.mesh" scale=2 position="3000,200,100"/>
+            <Model mesh="cube.mesh" scale=2 position="5000,100,500"/>
 
-
-
 <RaceCheckPoint name="checkpoint2" yaw=90 pitch=90 position="3000,200,100" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="1" islast="false" nextcheckpoints="2,-1,-1">
         <attached>
       <Model position="0,0,0" scale="70" mesh="Checkpoint_InnerRing.mesh"/>
@@ -261,7 +264,7 @@
     </RaceCheckPoint>
 
 
-<RaceCheckPoint name="checkpoint3" yaw=90 pitch=90 position="5000,100,500" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="2" islast="false" nextcheckpoints="3,-1,-1">
+<RaceCheckPoint name="checkpoint3" yaw=90 pitch=90 position="5000,80,500" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="2" islast="false" nextcheckpoints="3,-1,-1">
         <attached>
       <Model position="0,0,0" scale="70" mesh="Checkpoint_InnerRing.mesh"/>
     </attached>
@@ -287,7 +290,7 @@
     </RaceCheckPoint>
 
 
-<RaceCheckPoint name="checkpoint5"  yaw=90 pitch=90 position="10000,-200,200" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="4" islast="false" nextcheckpoints="5,-1,-1">
+<RaceCheckPoint name="checkpoint5"  yaw=90 pitch=90 position="11000,-200,200" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="4" islast="false" nextcheckpoints="5,-1,-1">
         <attached>
       <Model position="0,0,0" scale="70" mesh="Checkpoint_InnerRing.mesh"/>
     </attached>
@@ -301,7 +304,7 @@
 
 
 
-<RaceCheckPoint name="checkpoint6" yaw=90 pitch=90 position="13000,200,400" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="5" islast="false" nextcheckpoints="6,-1,-1">
+<RaceCheckPoint name="checkpoint6" yaw=90 pitch=90 position="13000,-70,350" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="5" islast="false" nextcheckpoints="6,-1,-1">
         <attached>
       <Model position="0,0,0" scale="70" mesh="Checkpoint_InnerRing.mesh"/>
     </attached>
@@ -315,7 +318,7 @@
 
 
 
-<RaceCheckPoint name="checkpoint7" yaw=90 pitch=90 position="15000,0,0" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="6" islast="false" nextcheckpoints="7,-1,-1">
+<RaceCheckPoint name="checkpoint7" yaw=90 pitch=90 position="15500,0,0" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="6" islast="false" nextcheckpoints="7,-1,-1">
         <attached>
       <Model position="0,0,0" scale="70" mesh="Checkpoint_InnerRing.mesh"/>
     </attached>
@@ -352,7 +355,6 @@
         <BoxCollisionShape position="-70,0,0"     halfExtents="10, 10, 70" />
     </collisionShapes>
     </RaceCheckPoint>
-
 <RaceCheckPoint name="checkpoint10" yaw=90 pitch=90 position="24000,-150,-80" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="9" islast="false" nextcheckpoints="10,-1,-1">
         <attached>
       <Model position="0,0,0" scale="70" mesh="Checkpoint_InnerRing.mesh"/>
@@ -379,7 +381,7 @@
 
 
 
-<RaceCheckPoint name="checkpoint12" yaw=90 pitch=90 position="30000,-300,900" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="11" islast="false" nextcheckpoints="12,-1,-1">
+<RaceCheckPoint name="checkpoint12" yaw=90 pitch=90 position="30000,-250,670" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="11" islast="false" nextcheckpoints="12,-1,-1">
         <attached>
       <Model position="0,0,0" scale="70" mesh="Checkpoint_InnerRing.mesh"/>
     </attached>
@@ -392,7 +394,7 @@
     </RaceCheckPoint>
 
 
-<RaceCheckPoint name="checkpoint13" yaw=90 pitch=90 position="33000,600,60" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="12" islast="false" nextcheckpoints="13,-1,-1">
+<RaceCheckPoint name="checkpoint13" yaw=90 pitch=90 position="33000,150,600" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="12" islast="false" nextcheckpoints="13,-1,-1">
         <attached>
       <Model position="0,0,0" scale="70" mesh="Checkpoint_InnerRing.mesh"/>
     </attached>
@@ -406,7 +408,7 @@
 
 
 
-<RaceCheckPoint name="checkpoint14" yaw=90 pitch=90 position="35000,120,20" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="13" islast="false" nextcheckpoints="14,-1,-1">
+<RaceCheckPoint name="checkpoint14" yaw=90 pitch=90 position="35000,500,300" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="13" islast="false" nextcheckpoints="14,-1,-1">
         <attached>
       <Model position="0,0,0" scale="70" mesh="Checkpoint_InnerRing.mesh"/>
     </attached>
@@ -418,7 +420,7 @@
     </collisionShapes>
     </RaceCheckPoint>
 
-<RaceCheckPoint name="checkpoint15" yaw=90 pitch=90 position="38000,-200,0" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="14" islast="false" nextcheckpoints="15,-1,-1">
+<RaceCheckPoint name="checkpoint15" yaw=90 pitch=90 position="38000,150,150" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="14" islast="false" nextcheckpoints="15,-1,-1">
         <attached>
       <Model position="0,0,0" scale="70" mesh="Checkpoint_InnerRing.mesh"/>
     </attached>
@@ -476,7 +478,7 @@
         <BoxCollisionShape position="70,0,0"      halfExtents="10, 10, 70" />
         <BoxCollisionShape position="-70,0,0"     halfExtents="10, 10, 70" />
     </collisionShapes>
-    </RaceCheckPoint>
+    </RaceCheckPoint> 
 
 <!-- the last checkpoint is bigger and red -->
     <RaceCheckPoint name="checkpoint20" yaw=90 pitch=90 position="53000,0,0" direction="0,1,0" roll="0" collisionType="static" scale="1" distance="60" checkpointindex="19" islast="true">
@@ -489,23 +491,60 @@
         <BoxCollisionShape position="90,0,0"      halfExtents="13, 13, 90" />
         <BoxCollisionShape position="-90,0,0"     halfExtents="13, 13, 90" />
     </collisionShapes>
-    </RaceCheckPoint>
+    </RaceCheckPoint> 
 
 
 </checkpoints>
 </SpaceRaceManager>
+   <Arrow>
+      <attached>
+       <Model scale="5" mesh="botpointer4.mesh"/>
+      </attached>
+      <controller>
+        <ArrowController accuracy = 10000>
+          <gpspoints>
+            <Model mesh="cube.mesh" scale=0 position="1000,30,0"/>
+            <Model mesh="cube.mesh" scale=0 position="3000,200,100"/>
+            <Model mesh="cube.mesh" scale=0 position="5000,80,500"/>
+            <Model mesh="cube.mesh" scale=0 position="8000,-150,150"/>
+            <Model mesh="cube.mesh" scale=0 position="11000,-200,200"/>
+            <Model mesh="cube.mesh" scale=0 position="13000,-70,350"/>
+            <Model mesh="cube.mesh" scale=0 position="15500,0,0"/>
+            <Model mesh="cube.mesh" scale=0 position="18000,150,-150"/>
+            <Model mesh="cube.mesh" scale=0 position="21000,200,-120"/>
+            <Model mesh="cube.mesh" scale=0 position="24000,-150,-80"/>
+            <Model mesh="cube.mesh" scale=0 position="27000,-200,0"/>
+            <Model mesh="cube.mesh" scale=0 position="30000,-250,670"/>
+            <Model mesh="cube.mesh" scale=0 position="33000,150,600"/>
+            <Model mesh="cube.mesh" scale=0 position="35000,500,300"/>
+            <Model mesh="cube.mesh" scale=0 position="38000,150,150"/>
+            <Model mesh="cube.mesh" scale=0 position="41000,30,-50"/>
+            <Model mesh="cube.mesh" scale=0 position="44000,90,0"/>
+            <Model mesh="cube.mesh" scale=0 position="47000,120,30"/>
+            <Model mesh="cube.mesh" scale=0 position="50000,0,100"/>
+            <Model mesh="cube.mesh" scale=0 position="53000,0,0"/>
 
+            
 
 
+           
+
+                </gpspoints>
+        </ArrowController>
+      </controller>
+    </Arrow>
+
+
 <!-- ---------------------PickUps---------------------- -->
 
-    <PickupSpawner pickup=smallshrinkpickup position="10000,-200,200" triggerDistance="60" respawnTime="10" maxSpawnedItems="10" scale="8"/>
-    <PickupSpawner pickup=mediumboostpickup position="24000,-150,-80" triggerDistance="60" respawnTime="10" maxSpawnedItems="8" scale="10"/>
-    <PickupSpawner pickup=smallboostpickup position="38000,-200,0" triggerDistance="60" respawnTime="10" maxSpawnedItems="8" scale="10"/>
+    
+    <PickupSpawner pickup=mediumboostpickup position="24000,-165,-80" triggerDistance="60" respawnTime="10" maxSpawnedItems="8" scale="10"/>
+    
+    <PickupSpawner pickup=smallboostpickup position="42000,70,-30" triggerDistance="60" respawnTime="10" maxSpawnedItems="8" scale="10"/>
+    <PickupSpawner pickup=smallspeedpickup position="32000,0,650" triggerDistance="60" respawnTime="10" maxSpawnedItems="8" scale="10"/>
 
-    <PickupSpawner pickup=smallspeedpickup position="7000,-200,100" triggerDistance="60" respawnTime="10" maxSpawnedItems="8" scale="10"/>
-    <PickupSpawner pickup=mediumshinkpickup position="16000,150,50" triggerDistance="60" respawnTime="10" maxSpawnedItems="8" scale="10"/>
-    <PickupSpawner pickup=triplehealthspeedinvisibilitypickup position="41000,-300,100" triggerDistance="60" respawnTime="10" maxSpawnedItems="8" scale="10"/>
+    <PickupSpawner pickup=smallspeedpickup position="9000,-185,66" triggerDistance="60" respawnTime="10" maxSpawnedItems="8" scale="10"/>
+ 
   </Scene>
 </Level>
  
\ No newline at end of file

Modified: code/branches/mergeFS18/data/levels/presentationHS12.oxw
===================================================================
--- code/branches/mergeFS18/data/levels/presentationHS12.oxw	2018-10-10 13:16:51 UTC (rev 12028)
+++ code/branches/mergeFS18/data/levels/presentationHS12.oxw	2018-10-10 13:36:53 UTC (rev 12029)
@@ -60,7 +60,7 @@
     ?>
 
     <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"/>
-    <SpawnPoint team=0 position="-900,0,0" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipescort />
+    <SpawnPoint team=0 position="-900,0,0" lookat="0,0,0" primaryThrust=1000 spawnclass=SpaceShip pawndesign=spaceshipescort />
     <!--SpawnPoint team=0 position="-200,0,0" lookat="0,0,0" spawnclass=SpaceShip pawndesign=bigship /-->
     <!--SpawnPoint team=0 position="-900,0,0" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipcollateraldamage /-->
     <!--SpawnPoint team=0 position="6000,0,2000" lookat="1,1,0" spawnclass=SpaceShip pawndesign=spaceshipcollateraldamage /-->
@@ -327,10 +327,10 @@
         lookat              = "0,0,0"
         roll                = "180"
         name                = "collateralDamage"
-        radarname           = "Collateral Damage" >
-        <!--
+        radarname           = "Collateral Damage" 
         pitch               = "90"
-        yaw                 = "0"-->
+        yaw                 = "100"
+        primaryThrust       = "2000">
       <attached>
         <DockingTarget name="spaceShip" />
         <DistanceTriggerBeacon name="bcnDestroyer" />

Copied: code/branches/mergeFS18/data/levels/templates/SpaceRaceTemplates.oxt (from rev 12028, code/branches/RacingBots_FS18/data/levels/templates/SpaceRaceTemplates.oxt)
===================================================================
--- code/branches/mergeFS18/data/levels/templates/SpaceRaceTemplates.oxt	                        (rev 0)
+++ code/branches/mergeFS18/data/levels/templates/SpaceRaceTemplates.oxt	2018-10-10 13:36:53 UTC (rev 12029)
@@ -0,0 +1,885 @@
+<!-- Boost pickups: -->
+
+<Template name=smallboostpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.0,1.0,0.8" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.0,1.0,0.8" material="Flash" scale=0.3 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=smallboostpickup baseclass=BoostPickup>
+  <BoostPickup
+    representation = "smallboostpickup"
+    boostrefill = 0.5
+    activationType = "immediate"
+    durationType = "once"
+  />
+</Template>
+
+<Template name=mediumboostpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.0,1.0,0.8" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.0,1.0,0.8" material="Flash" scale=0.5 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=mediumboostpickup baseclass=BoostPickup>
+  <BoostPickup
+    representation = "mediumboostpickup"
+    boostrefill = 0.75
+    activationType = "immediate"
+    durationType = "once"
+  />
+</Template>
+
+<Template name=hugeboostpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.0,1.0,0.8" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.0,1.0,0.8" material="Flash" scale=0.7 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=hugeboostpickup baseclass=BoostPickup>
+  <BoostPickup
+    representation = "hugeboostpickup"
+    boostrefill = 1.0
+    activationType = "immediate"
+    durationType = "once"
+  />
+</Template>
+
+<!-- Shield pickups: -->
+
+<Template name=smallshieldpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="1,1,1" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="1,1,1" material="Shield" scale=0.3 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=smallshieldpickup baseclass=ShieldPickup>
+  <ShieldPickup
+    representation = "smallshieldpickup"
+    duration = 10
+    shieldabsorption = 0.7
+    shieldhealth = 300
+    activationType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
+<Template name=mediumshieldpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="1,1,1" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="1,1,1" material="Shield" scale=0.5 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=mediumshieldpickup baseclass=ShieldPickup>
+  <ShieldPickup
+    representation = "mediumshieldpickup"
+    duration = 30
+    shieldabsorption = 0.8
+    shieldhealth = 500
+    activationType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
+
+<Template name=hugeshieldpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="1,1,1" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="1,1,1" material="Shield" scale=0.7 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=hugeshieldpickup baseclass=ShieldPickup>
+  <ShieldPickup
+    representation = "hugeshieldpickup"
+    duration = 60
+    shieldabsorption = 0.95
+    shieldhealth = 700
+    activationType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
+<!-- Health pickups: -->
+
+<Template name=smallhealthpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.50,0.90,0.25" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.36,0.81,0.10" material="Cross" scale=0.3 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=smallhealthpickup baseclass=HealthPickup>
+  <HealthPickup
+    representation = "smallhealthpickup"
+    health = 10
+    healthType = "limited"
+    activationType = "immediate"
+    durationType = "once"
+  />
+</Template>
+
+<Template name=mediumhealthpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.50,0.90,0.25" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.36,0.81,0.10" material="Cross" scale=0.5 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=mediumhealthpickup baseclass=HealthPickup>
+  <HealthPickup
+    representation = "mediumhealthpickup"
+    health = 50
+    healthType = "limited"
+    activationType = "immediate"
+    durationType = "once"
+  />
+</Template>
+
+<Template name=hugehealthpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.50,0.90,0.25" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.36,0.81,0.10" material="Cross" scale=0.7 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=hugehealthpickup baseclass=HealthPickup>
+  <HealthPickup
+    representation = "hugehealthpickup"
+    health = 100
+    healthType = "limited"
+    activationType = "immediate"
+    durationType = "once"
+  />
+</Template>
+
+<Template name=crazyhealthpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.50,0.90,0.25" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.36,0.81,0.10" material="Cross" scale=1.2 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=crazyhealthpickup baseclass=HealthPickup>
+  <HealthPickup
+    representation = "crazyhealthpickup"
+    health = 1000
+    healthType = "permanent"
+    activationType = "immediate"
+    durationType = "once"
+  />
+</Template>
+
+<!-- Munition pickups: -->
+
+<Template name=smallmunitionpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.59,0.30,0.16" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.47,0.24,0.13" material="Munition" scale=0.3 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=smallmunitionpickup baseclass=MunitionPickup>
+  <MunitionPickup
+    representation = "smallmunitionpickup"
+    activationType = "immediate"
+    durationType = "once"
+  >
+    <munitioncontainers>
+        <MunitionContainer munitiontype="LaserMunition" munitionamount=16 magazinesamount=0 />
+        <MunitionContainer munitiontype="FusionMunition" munitionamount=8 magazinesamount=0 />
+        <MunitionContainer munitiontype="LightningMunition" munitionamount=8 magazinesamount=0 />
+    </munitioncontainers>
+  </MunitionPickup>
+</Template>
+
+<Template name=mediummunitionpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.59,0.30,0.16" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.47,0.24,0.13" material="Munition" scale=0.5 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=mediummunitionpickup baseclass=MunitionPickup>
+  <MunitionPickup
+    representation = "mediummunitionpickup"
+    activationType = "immediate"
+    durationType = "once"
+  >
+    <munitioncontainers>
+        <MunitionContainer munitiontype="LaserMunition" munitionamount=32 magazinesamount=0 />
+        <MunitionContainer munitiontype="FusionMunition" munitionamount=16 magazinesamount=0 />
+        <MunitionContainer munitiontype="LightningMunition" munitionamount=16 magazinesamount=0 />        
+        <MunitionContainer munitiontype="SplitMunition" munitionamount=8 magazinesamount=0 />
+        <MunitionContainer munitiontype="RocketMunition" munitionamount=0 magazinesamount=2 />
+        <MunitionContainer munitiontype="MineMunition" munitionamount=0 magazinesamount=2 />
+    </munitioncontainers>
+  </MunitionPickup>
+</Template>
+
+<Template name=hugemunitionpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.59,0.30,0.16" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.47,0.24,0.13" material="Munition" scale=0.7 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=hugemunitionpickup baseclass=MunitionPickup>
+  <MunitionPickup
+    representation = "hugemunitionpickup"
+    activationType = "immediate"
+    durationType = "once"
+  >
+    <munitioncontainers>
+        <MunitionContainer munitiontype="LaserMunition" munitionamount=64 magazinesamount=0 />
+        <MunitionContainer munitiontype="FusionMunition" munitionamount=32 magazinesamount=0 />
+        <MunitionContainer munitiontype="LightningMunition" munitionamount=32 magazinesamount=0 />        
+        <MunitionContainer munitiontype="SplitMunition" munitionamount=16 magazinesamount=0 />
+        <MunitionContainer munitiontype="RocketMunition" munitionamount=0 magazinesamount=10 />
+        <MunitionContainer munitiontype="IceMunition" munitionamount=0 magazinesamount=10 />
+        <MunitionContainer munitiontype="FlameMunition" munitionamount=0 magazinesamount=10 />
+        <MunitionContainer munitiontype="GravityBombMunition" munitionamount=0 magazinesamount=10 />
+        <MunitionContainer munitiontype="MineMunition" munitionamount=0 magazinesamount=10 />
+    </munitioncontainers>
+  </MunitionPickup>
+</Template>
+
+<!-- Meta pickups: -->
+
+<Template name=usepickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.6,0.⁰,0.8" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.6,0.⁰,0.8" material="ArrowUp" scale=0.65 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=usemetapickup baseclass=MetaPickup>
+  <MetaPickup representation="use" metaType="use" />
+</Template>
+
+<Template name=droppickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.6,0.⁰,0.8" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.6,0.⁰,0.8" material="ArrowDown" scale=0.65 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=dropmetapickup baseclass=MetaPickup>
+  <MetaPickup representation="drop" metaType="drop" />
+</Template>
+
+<Template name=destroypickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.6,0.⁰,0.8" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.6,0.⁰,0.8" material="Splash" scale=0.65 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=destroymetapickup baseclass=MetaPickup>
+  <MetaPickup representation="destroy" metaType="destroy" />
+</Template>
+
+<Template name=destroycarrierpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.6,0.⁰,0.8" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.6,0.⁰,0.8" material="Asterisk" scale=0.65 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=destroycarriermetapickup baseclass=MetaPickup>
+  <MetaPickup representation="destroycarrier" metaType="destroyCarrier" />
+</Template>
+
+<!-- DamageBoost pickups -->
+
+<Template name=smalldamageboostpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.95,0.10,0.05" material="Sphere2" scale=0.1 >
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.70,0.10,0.10" material="Damage" scale=0.3 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=smalldamageboostpickup baseclass=DamageBoostPickup>
+  <DamageBoostPickup
+    representation = "smalldamageboostpickup"
+    duration = 10.0
+    damageMultiplier = 2.0
+    activationType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
+<Template name=mediumdamageboostpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.95,0.10,0.05" material="Sphere2" scale=0.1 >
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.70,0.10,0.10" material="Damage" scale=0.5 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=mediumdamageboostpickup baseclass=DamageBoostPickup>
+  <DamageBoostPickup
+    representation = "mediumdamageboostpickup"
+    duration = 10.0
+    damageMultiplier = 5.0
+    activationType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
+<Template name=hugedamageboostpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.95,0.10,0.05" material="Sphere2" scale=0.1 >
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.70,0.10,0.10" material="Damage" scale=0.7 />                            
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=hugedamageboostpickup baseclass=DamageBoostPickup>
+  <DamageBoostPickup
+    representation = "hugedamageboostpickup"
+    duration = 10.0
+    damageMultiplier = 7.0
+    activationType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
+
+<!-- Speed pickups -->
+
+<Template name=smallspeedpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.99,0.96,0.52" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.98,0.94,0.22" material="3arrowsup" scale=0.3 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=smallspeedpickup baseclass=SpeedPickup>
+  <SpeedPickup
+    representation = "smallspeedpickup"
+    duration = 3.0
+    speedAdd = 0.0
+    SpeedMultiply = 1.8
+    activationType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
+<Template name=mediumspeedpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.99,0.96,0.52" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.98,0.94,0.22" material="3arrowsup" scale=0.5 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=mediumspeedpickup baseclass=SpeedPickup>
+  <SpeedPickup
+    representation = "mediumspeedpickup"
+    duration = 5.0
+    speedAdd = 0.0
+    SpeedMultiply = 0.1
+    activationType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
+<Template name=hugespeedpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.99,0.96,0.52" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.98,0.94,0.22" material="3arrowsup" scale=0.7 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=hugespeedpickup baseclass=SpeedPickup>
+  <SpeedPickup
+    representation = "hugespeedpickup"
+    duration = 2.0
+    speedAdd = 0.0
+    SpeedMultiply = 3.0
+    activationType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
+<Template name=smalljumppickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.99,0.96,0.52" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="1,0,0" material="3arrowsup" scale=0.3 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=smalljumppickup baseclass=SpeedPickup>
+  <SpeedPickup
+    representation = "smalljumppickup"
+    duration = 0.7
+    speedAdd = 50.0
+    SpeedMultiply = 1.0
+    activationType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
+<!-- Invisible pickups -->
+
+<Template name=smallinvisiblepickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.22,0.32,0.86" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.06,0.14,0.63" material="Eye" scale=0.5 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=smallinvisiblepickup baseclass=InvisiblePickup>
+  <InvisiblePickup 
+    representation = "smallinvisiblepickup"
+    duration = 5.0
+    activaionType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
+<Template name=mediuminvisiblepickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.22,0.32,0.86" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.06,0.14,0.63" material="Eye" scale=0.7 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=mediuminvisiblepickup baseclass=InvisiblePickup>
+  <InvisiblePickup 
+    representation = "mediuminvisiblepickup"
+    duration = 10.0
+    activaionType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
+<Template name=hugeinvisiblepickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.22,0.32,0.86" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.06,0.14,0.63" material="Eye" scale=0.9 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=hugeinvisiblepickup baseclass=InvisiblePickup>
+  <InvisiblePickup 
+    representation = "hugeinvisiblepickup"
+    duration = 20.0
+    activaionType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
+<Template name=smallshrinkpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="1.0,0.55,1.0" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="1.0,0.55,1.0" material="Shrink" scale=0.35 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=smallshrinkpickup baseclass=ShrinkPickup>
+  <ShrinkPickup 
+    representation = "smallshrinkpickup"
+    duration = 3.0
+    shrinkFactor = 2.5
+    activaionType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
+<Template name=mediumshrinkpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="1.0,0.55,1.0" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="1.0,0.55,1.0" material="Shrink" scale=0.55 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=mediumshrinkpickup baseclass=ShrinkPickup>
+  <ShrinkPickup 
+    representation = "mediumshrinkpickup"
+    duration = 30.0
+    shrinkFactor = 5.0
+    activaionType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
+<Template name=hugeshrinkpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="1.0,0.55,1.0" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="1.0,0.55,1.0" material="Shrink" scale=0.75 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=hugeshrinkpickup baseclass=ShrinkPickup>
+  <ShrinkPickup 
+    representation = "hugeshrinkpickup"
+    duration = 60.0
+    shrinkFactor = 10.0
+    activaionType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
+<!-- Pickup Collection pickups -->
+
+<Template name=triplehealthspeedinvisibilitypickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.95,0.85,0.27" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,20,0" colour="0.36,0.81,0.10" material="Cross" scale=0.25 />
+                            <Billboard position="-20,-10,0" colour="0.98,0.94,0.22" material="3arrowsup" scale=0.25 />
+                            <Billboard position="20,-10,0" colour="0.06,0.14,0.63" material="Eye" scale=0.35 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=triplehealthspeedinvisibilitypickup baseclass=PickupCollection>
+    <PickupCollection
+        representation = "triplehealthspeedinvisibilitypickup"
+    >
+        <pickupables>
+            <HealthPickup template=mediumhealthpickup />
+            <SpeedPickup template=mediumspeedpickup />
+            <InvisiblePickup template=mediuminvisiblepickup />
+        </pickupables>
+    </PickupCollection>
+</Template>
+
+<!-- Drone Pickup -->
+
+<Template name=droneTemplate>
+    <Drone name="Drone"  mass= "50" linearDamping = "0.7" angularDamping = "0.99999" maxDistanceToOwner_=150 minDistanceToOwner_=75 maxShootingRange_=1000 primaryThrust_=250 auxilaryThrust_=250 rotationThrust_=50>
+        <attached>
+            <Model scale="1" mesh="drone.mesh"/>
+        </attached>
+        <collisionShapes>
+            <SphereCollisionShape position="0,0,0" radius=5 />
+        </collisionShapes>
+        <weaponslots>
+            <WeaponSlot position="0,0,0" />
+        </weaponslots>
+        <weaponsets>
+            <WeaponSet firemode=0 />
+        </weaponsets>
+        <weaponpacks>
+            <WeaponPack>
+                <links>
+                    <DefaultWeaponmodeLink firemode=0 weaponmode=0 />
+                </links>
+                <Weapon>
+                    <attached>
+                        <Model mesh="hs-w01.mesh" roll="195" position="0,1,0" scale=2 />
+                        <Model mesh="hs-w01s.mesh" roll="195" position="0.1,0.5,0" scale=2 />
+                    </attached>
+                    <HsW01 mode=0 munitionpershot=0 delay=0.125 damage=1.5708 material="Flares/point_lensflare" muzzleoffset=" 0.7, 1.5,-4" />
+                    <HsW01 mode=0 munitionpershot=0 delay=0     damage=1.5708 material="Flares/point_lensflare" muzzleoffset="-0.9, 1.1,-4" />
+                </Weapon>
+            </WeaponPack>
+        </weaponpacks>
+        <munition>
+            <LaserMunition initialmagazines=2 maxmagazines=2 munitionpermagazine=10 replenishamount=1 replenishinterval=0.5/>
+        </munition>
+    </Drone>
+</Template>
+
+<Template name=dronepickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.96,0.35,0.02" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Model scale="5" mesh="drone.mesh"/>
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=dronepickup baseclass=DronePickup>
+    <DronePickup representation=dronepickup droneTemplate=droneTemplate />
+</Template>
+

Modified: code/branches/mergeFS18/data/levels/templates/fastship.oxt
===================================================================
--- code/branches/mergeFS18/data/levels/templates/fastship.oxt	2018-10-10 13:16:51 UTC (rev 12028)
+++ code/branches/mergeFS18/data/levels/templates/fastship.oxt	2018-10-10 13:36:53 UTC (rev 12029)
@@ -20,13 +20,13 @@
    auxilaryThrust    = 1000
    rotationThrust    = 50
 
-   lift = 0;
-   stallSpeed = 220;
+   lift = 0
+   stallSpeed = 220
 
 
-   boostPower            = 8
+   boostPower            = 7.5  
    boostPowerRate        = 3
-   boostRate             = 8
+   boostRate             = 7.5
    boostCooldownDuration = 6
 
    shakeFrequency = 50

Modified: code/branches/mergeFS18/data/levels/templates/spaceshipCollateralDamage.oxt
===================================================================
--- code/branches/mergeFS18/data/levels/templates/spaceshipCollateralDamage.oxt	2018-10-10 13:16:51 UTC (rev 12028)
+++ code/branches/mergeFS18/data/levels/templates/spaceshipCollateralDamage.oxt	2018-10-10 13:36:53 UTC (rev 12029)
@@ -18,7 +18,7 @@
    shieldrechargerate  = 1
    shieldrechargewaittime = 1
 
-   primaryThrust     = 100
+   primaryThrust     = 1000
    auxilaryThrust    = 30
    rotationThrust    = 50
 
@@ -28,7 +28,7 @@
    boostPower            = 15
    boostPowerRate        = 1
    boostRate             = 5
-   boostCooldownDuration = 10
+   boostCooldownDuration = 1
 
    shakeFrequency = 15
    shakeAmplitude = 12
@@ -35,7 +35,7 @@
 
    collisionType     = "dynamic"
    mass              = 100
-   linearDamping     = 0.7
+   linearDamping     = 0.5
    angularDamping    = 0.9999999
   >
     <engines>

Modified: code/branches/mergeFS18/src/libraries/tools/Timer.h
===================================================================
--- code/branches/mergeFS18/src/libraries/tools/Timer.h	2018-10-10 13:16:51 UTC (rev 12028)
+++ code/branches/mergeFS18/src/libraries/tools/Timer.h	2018-10-10 13:36:53 UTC (rev 12029)
@@ -114,6 +114,7 @@
 
             void run();
 
+
             /// Re-starts the timer: The executor will be called after @a interval seconds.
             inline void startTimer()
                 { this->bActive_ = true; this->time_ = this->interval_; }

Modified: code/branches/mergeFS18/src/modules/gametypes/SpaceRace.cc
===================================================================
--- code/branches/mergeFS18/src/modules/gametypes/SpaceRace.cc	2018-10-10 13:16:51 UTC (rev 12028)
+++ code/branches/mergeFS18/src/modules/gametypes/SpaceRace.cc	2018-10-10 13:36:53 UTC (rev 12029)
@@ -68,7 +68,9 @@
 #include "util/Math.h"
 #include "SpaceRaceBot.h"
 #include "items/Engine.h"
-#include <vector>
+#include <vector> 
+#include <iostream>
+#include <string>
 
 
 namespace orxonox
@@ -82,8 +84,8 @@
         this->botclass_ = Class(SpaceRaceBot);
         this->cantMove_ = false;
         this->bTimeIsUp_ = false;
-
         this->numberOfBots_ = 5; // quick fix: don't allow default-bots to enter the race 
+        this->bLost =false;
         //we fixed the number of bots in order to have the same starting position all the time ! 
     }
 
@@ -100,7 +102,7 @@
         startpos[3] =100;
         startpos[4] =-40;
         startpos[5] =100;
-        
+         
         startpos[6] =100;
         startpos[7] =-40;
         startpos[8] =-100;
@@ -116,11 +118,13 @@
         Gametype::start();
 
         this->spawnPlayersIfRequested();
+        this->countdown_mode=true;
         this->cantMove_ = true;
         //players are unable to move while countdown is running
         for (Engine* engine : ObjectList<Engine>())
         {
             engine->setActive(false);
+            engine->addSpeedMultiply(1.7);
         }
 
         //append spawn positions to bots
@@ -137,37 +141,73 @@
             c += 3;
         }
 
-        std::string message("Use headphones to hear the countdown!");
+        std::string message("Use headphones to hear the countdown! Press W for forward acceleration, press W+space for boost!");
+
         this->getGametypeInfo()->sendAnnounceMessage(message);
         ChatManager::message(message);
+        
 
-        //after 11 seconds , countdownFinished function is called to activate bots` engines
-        Timer* countdownTimer = new Timer();
-        countdownTimer->setTimer(11, false, createExecutor(createFunctor(&SpaceRace::countdownFinished, this)));
+
+        
     }
 
+    // Counter in the beginning of the game
+    void SpaceRace::tick(float dt) {
+        SUPER(SpaceRace, tick, dt);
+        
+        //countdown_mode is set true,when spawnIfRequested is called
+        if (countdown_mode) {
+            //10 seconds will be counted
+            this->time_passed -= dt;
 
+            //orxout() << "time: " <<(int) time_passed << "s" << endl;
 
+            std::string message=std::to_string((int)time_passed);
+            this->getGametypeInfo()->sendAnnounceMessage(message);
+            if (time_passed <= 1) {
 
+                this->countdownFinished();
+                this->countdown_mode = false;
+            }
+        }
+
+    }
+        
+    void SpaceRace::startmessage(int second){
+
+        std::string message=std::to_string(second);
+        this->getGametypeInfo()->sendAnnounceMessage(message);
+        ChatManager::message(message);
+        
+        
+
+    }
+
     void SpaceRace::end()
     {
+        
         this->clock_.capture();
         int s = this->clock_.getSeconds();
         int ms = static_cast<int>(this->clock_.getMilliseconds() - 1000*s);
         std::string message;
-
         if (this->bTimeIsUp_)
         {
-            message = multi_cast<std::string>(s) + "." + multi_cast<std::string>(ms) + " seconds !!\n"
-                        + "You lose!";
+            message =  "TIME IS UP! YOU LOOSE!";
         }
+       else if(this->bLost){
+            message = "YOU LOOSE!";
+
+       }        
+       
         else
         {
             message = "You win!! Final check point reached after "+ multi_cast<std::string>(s)
                         + "." + multi_cast<std::string>(ms) + " seconds.";
         }
+        
         if (!this->hasEnded())
         {
+
             this->getGametypeInfo()->sendAnnounceMessage(message);
             ChatManager::message(message);
         }
@@ -182,12 +222,17 @@
         int s = this->clock_.getSeconds();
         int ms = this->clock_.getMilliseconds() % 1000;
 
-       
-    
-        const std::string& message = player->getName() + " reached the checkpoint " + multi_cast<std::string>(checkpoint->getCheckpointIndex() + 1) 
+
+        std::string message(player->getName() + " reached the checkpoint " + multi_cast<std::string>(checkpoint->getCheckpointIndex() + 1) 
+        + " after " + multi_cast<std::string>(s) + "." + multi_cast<std::string>(ms) + " seconds.");
+
+        this->getGametypeInfo()->sendAnnounceMessage(message);
+        ChatManager::message(message);
+      /*  const std::string& message = player->getName() + " reached the checkpoint " + multi_cast<std::string>(checkpoint->getCheckpointIndex() + 1) 
         + "after " + multi_cast<std::string>(s) + "." + multi_cast<std::string>(ms) + " seconds.";
         this->getGametypeInfo()->sendAnnounceMessage(message);
-        ChatManager::message(message);
+        ChatManager::message(message);*/
+        
 
     }
 
@@ -194,13 +239,18 @@
     void SpaceRace::countdownFinished()//activates the engines of all players
     {
 
-        std::string message("RACE STARTED ");
+        std::string message("RACE STARTED");
         this->getGametypeInfo()->sendAnnounceMessage(message);
         ChatManager::message(message);
+        
 
 
         for (Engine* engine : ObjectList<Engine>())
             engine->setActive(true);
+
+        std::string message2("Press W for forward acceleration, press W+space for boost!");
+        this->getGametypeInfo()->sendAnnounceMessage(message2);
+        ChatManager::message(message2);
     }
 
     void SpaceRace::playerEntered(PlayerInfo* player)

Modified: code/branches/mergeFS18/src/modules/gametypes/SpaceRace.h
===================================================================
--- code/branches/mergeFS18/src/modules/gametypes/SpaceRace.h	2018-10-10 13:16:51 UTC (rev 12028)
+++ code/branches/mergeFS18/src/modules/gametypes/SpaceRace.h	2018-10-10 13:36:53 UTC (rev 12029)
@@ -41,6 +41,7 @@
 
 #include "SpaceRaceManager.h"
 
+
 namespace orxonox
 {
     /**
@@ -53,13 +54,16 @@
 
 
         public:
-            SpaceRace(Context* context);
+            SpaceRace(Context* context);//, SpaceRace* parentRace);
             virtual ~SpaceRace() {}
 
             virtual void start() override;
             virtual void end() override;
             virtual void countdownFinished();
+            
             virtual void addBots(unsigned int amount) override; //<! overwrite function in order to bypass the addbots command.
+            virtual void tick(float dt) override;
+            virtual void startmessage(int second);
 
 
 
@@ -78,15 +82,20 @@
                 { this->bTimeIsUp_ = true;}
             inline Clock& getClock()
                 { return this->clock_; }
+            //inline void setParentRace(SpaceRace* parentRace) { this->parentRace = parentRace; }
 
             virtual bool allowPawnHit(Pawn* victim, Pawn* originator) override;
             virtual bool allowPawnDamage(Pawn* victim, Pawn* originator) override;
             virtual bool allowPawnDeath(Pawn* victim, Pawn* originator) override;
+            bool countdown_mode = false;
+            float time_passed = 11.0f;
+            
+            bool bLost=false;
 
         private:
             bool cantMove_;                                            ///< Helper variable, used to stall the engines before the race starts.
             std::map<PlayerInfo*, RaceCheckPoint*> checkpointReached_; ///< The number of the last check point reached by each player.
-            bool bTimeIsUp_;                                           ///< True if one of the check points is reached too late.
+            bool bTimeIsUp_;    ///< True if one of the check points is reached too late.
 
             Clock clock_; ///< The clock starts running at the beginning of the game. It is used to give the time at each check point, the give the time at the end of the game, and to stop the game if a check point is reached too late.
     };

Modified: code/branches/mergeFS18/src/modules/gametypes/SpaceRaceController.cc
===================================================================
--- code/branches/mergeFS18/src/modules/gametypes/SpaceRaceController.cc	2018-10-10 13:16:51 UTC (rev 12028)
+++ code/branches/mergeFS18/src/modules/gametypes/SpaceRaceController.cc	2018-10-10 13:36:53 UTC (rev 12029)
@@ -19,7 +19,7 @@
  *   along with this program; if not, write to the Free Software
  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  *
- *  Created on: Oct 8, 2012
+ *  Created on: Oct 8, 2012findCheck
  *      Author: purgham
  */
 
@@ -29,6 +29,7 @@
 #include "gametypes/SpaceRaceManager.h"
 #include "collisionshapes/CollisionShape.h"
 #include "BulletCollision/CollisionShapes/btCollisionShape.h"
+#include "SpaceRace.h"
 
 
 namespace orxonox
@@ -37,6 +38,7 @@
 
     const int ADJUSTDISTANCE = 500;
     const int MINDISTANCE = 5;
+
     /*
      * Idea: Find static Point (checkpoints the spaceship has to reach)
      */
@@ -44,6 +46,8 @@
         ArtificialController(context)
     {
         RegisterObject(SpaceRaceController);
+        //this->parentRace = nullptr;
+
         std::vector<RaceCheckPoint*> checkpoints;
 
         virtualCheckPointIndex = -2;
@@ -62,7 +66,7 @@
         currentRaceCheckpoint_ = nullptr;
 
         int i;
-        for (i = -2; findCheckpoint(i) != nullptr; i--)
+        for (i = -2; findCheckpoint(i) != nullptr; i--)     // WIESO?
         {
             continue;
         }
@@ -102,7 +106,15 @@
         }
         return returnVec;
     }
+    void SpaceRaceController::endtheGame() const {
+        SpaceRace* gametype = orxonox_cast<SpaceRace*>(this->getGametype());
+        assert(gametype)
+;        if (!gametype)
+        return;
+        gametype->bLost=true;
+        gametype->end();
 
+    }
     /*
      * called from 'findStaticCheckpoints'
      * return how many ways go from the given Checkpoint to the last Checkpoint (of the Game)
@@ -121,15 +133,18 @@
             int numberOfWays = 0; // counts number of ways from this Point to the last point
             for (int checkpointIndex : currentCheckpoint->getNextCheckpoints())
             {
+                if (findCheckpoint(checkpointIndex) == nullptr){
+                    orxout(internal_warning) << "Problematic Point: " << checkpointIndex << endl;
+                }
                 if (currentCheckpoint == findCheckpoint(checkpointIndex))
                 {
-                    //orxout() << currentCheckpoint->getCheckpointIndex()<<endl;
+                    orxout() << currentCheckpoint->getCheckpointIndex()<<endl;
                     continue;
                 }
-                if (findCheckpoint(checkpointIndex) == nullptr)
-                    orxout(internal_warning) << "Problematic Point: " << checkpointIndex << endl;
+             
                 else
                     numberOfWays += rekSimulationCheckpointsReached(findCheckpoint(checkpointIndex), zaehler);
+
             }
             zaehler[currentCheckpoint] += numberOfWays;
             return numberOfWays; // returns the number of ways from this point to the last one
@@ -161,6 +176,7 @@
         for (int checkpointIndex : raceCheckpoint->getNextCheckpoints())
         {
             RaceCheckPoint* nextRaceCheckPoint = findCheckpoint(checkpointIndex);
+
             float distance = recCalculateDistance(nextRaceCheckPoint, this->getControllableEntity()->getPosition());
 
             if (distance < minDistance || minNextRaceCheckPoint == nullptr)
@@ -167,10 +183,14 @@
             {
                 minDistance = distance;
                 minNextRaceCheckPoint = nextRaceCheckPoint;
+
             }
+            //There is a bug. If the user passes through the 19th checkpoint with the opponents, the game will end immediately
+            if(nextRaceCheckPoint->isLast())
+                endtheGame(); 
 
         }
-
+        if(minNextRaceCheckPoint == nullptr) { orxout()<<"nullptr found @192 SpaceRaceController" << endl;}
         return minNextRaceCheckPoint;
     }
 
@@ -207,11 +227,15 @@
         if (currentRaceCheckpoint_ == nullptr) // no Adjust possible
 
         {
+            if(nextRaceCheckpoint_ == nullptr) orxout()<<"nullptr found @218 SpaceRaceController" << endl;
+
             return nextRaceCheckpoint_;
         }
         if ((currentRaceCheckpoint_->getNextCheckpoints()).size() == 1) // no Adjust possible
 
         {
+            if(nextRaceCheckpoint_ == nullptr) orxout()<<"nullptr found @223 SpaceRaceController" << endl;
+
             return nextRaceCheckpoint_;
         }
 
@@ -220,14 +244,31 @@
         return nextPointFind(currentRaceCheckpoint_);
     }
 
+
+
+
+    
+
     RaceCheckPoint* SpaceRaceController::findCheckpoint(int index) const
     {
-        for (RaceCheckPoint* checkpoint : this->checkpoints_)
-            if (checkpoint->getCheckpointIndex() == index)
-                return checkpoint;
-        return nullptr;
+        RaceCheckPoint* res = nullptr;
+        for (RaceCheckPoint* checkpoint : this->checkpoints_){
+            //conclusion: index=20 is not 
+            if (checkpoint->getCheckpointIndex() == index){
+                //if(checkpoint == nullptr) orxout()<<"returned nullptr @line 234 SpaceRaceController"<<endl;
+                //orxout()<< "index of the checkpoint "<< index <<endl;
+                res = checkpoint;
+                return res;
+            }
+        }
+    /* if(index>2 )   
+        this->endtheGame();*/
+
+        return res;
     }
+    
 
+
     /*RaceCheckPoint* SpaceRaceController::addVirtualCheckPoint( RaceCheckPoint* previousCheckpoint, int indexFollowingCheckPoint , const Vector3& virtualCheckPointPosition )
     {
         orxout()<<"add VCP at"<<virtualCheckPointPosition.x<<", "<<virtualCheckPointPosition.y<<", "<<virtualCheckPointPosition.z<<endl;
@@ -281,6 +322,8 @@
 
     void SpaceRaceController::tick(float dt)
     {
+        
+
         if (this->getControllableEntity() == nullptr || this->getControllableEntity()->getPlayer() == nullptr )
         {
             //orxout()<< this->getControllableEntity() << " in tick"<<endl;
@@ -311,6 +354,8 @@
         else if ((lastPositionSpaceship-this->getControllableEntity()->getPosition()).length()/dt > ADJUSTDISTANCE)
         {
             nextRaceCheckpoint_ = adjustNextPoint();
+            if(nextRaceCheckpoint_ == nullptr) orxout()<<"nullptr found @327 SpaceRaceController" << endl;
+
             lastPositionSpaceship = this->getControllableEntity()->getPosition();
         }
 
@@ -324,13 +369,33 @@
             return;
         }
         //orxout(user_status) << "dt= " << dt << ";  distance= " << (lastPositionSpaceship-this->getControllableEntity()->getPosition()).length() <<std::endl;
-        lastPositionSpaceship = this->getControllableEntity()->getPosition();
-       
+        /*lastPositionSpaceship = this->getControllableEntity()->getPosition();
+        
+        SpaceRace obj=new SpaceRace();
+        obj.setParentRace(parentRace);
+        this->parentRace=obj.parentRace;*/
+        
         this->boostControl();
+
+        /*if(nextRaceCheckpoint_ == nullptr){
+            this->parentRace->bLost=true;
+            this->parentRace->end();
+        }*/
+        // if(nextRaceCheckpoint_ == nullptr ){
+        //    // if( nextRaceCheckpoint_->getCheckpointIndex()==19) 
+        //     orxout()<<"nullptr @351 Line"<<endl;
+        // }
+
+        
         this->moveToPosition(nextRaceCheckpoint_->getPosition());
+
         this->boostControl();
     }
 
+
+    /*void SpaceRaceController::setParentRace(parentRace){
+        this->parentRace=parentRace;
+    }*/
     // True if a coordinate of 'pointToPoint' is smaller then the corresponding coordinate of 'groesse'
     bool SpaceRaceController::vergleicheQuader(const Vector3& pointToPoint, const Vector3& groesse)
     {

Modified: code/branches/mergeFS18/src/modules/gametypes/SpaceRaceController.h
===================================================================
--- code/branches/mergeFS18/src/modules/gametypes/SpaceRaceController.h	2018-10-10 13:16:51 UTC (rev 12028)
+++ code/branches/mergeFS18/src/modules/gametypes/SpaceRaceController.h	2018-10-10 13:36:53 UTC (rev 12029)
@@ -46,10 +46,11 @@
             public Tickable
     {
         public:
-            SpaceRaceController(Context* context);
+            SpaceRaceController(Context* context);//, SpaceRace* parentRace);
             virtual ~SpaceRaceController();
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
             virtual void tick(float dt) override;
+            
 
         private:
             float recCalculateDistance(RaceCheckPoint*, const Vector3& currentPosition);
@@ -56,6 +57,8 @@
             float distanceSpaceshipToCheckPoint(RaceCheckPoint*);
             RaceCheckPoint* nextPointFind(RaceCheckPoint*);
             RaceCheckPoint* adjustNextPoint();
+            void endtheGame() const;
+
             std::vector<RaceCheckPoint*> findStaticCheckpoints(RaceCheckPoint*, const std::vector<RaceCheckPoint*>&);
             std::vector<RaceCheckPoint*> staticCheckpoints();
             int rekSimulationCheckpointsReached(RaceCheckPoint*, std::map<RaceCheckPoint*, int>&);
@@ -73,6 +76,7 @@
             std::vector<RaceCheckPoint*> checkpoints_;
             Vector3 lastPositionSpaceship;
             int virtualCheckPointIndex;
+            //SpaceRace* parentRace;
     };
 
 }

Modified: code/branches/mergeFS18/src/modules/gametypes/SpaceRaceManager.cc
===================================================================
--- code/branches/mergeFS18/src/modules/gametypes/SpaceRaceManager.cc	2018-10-10 13:16:51 UTC (rev 12028)
+++ code/branches/mergeFS18/src/modules/gametypes/SpaceRaceManager.cc	2018-10-10 13:36:53 UTC (rev 12029)
@@ -112,9 +112,15 @@
      */
     RaceCheckPoint* SpaceRaceManager::findCheckpoint(int index) const
     {
-        for (RaceCheckPoint* checkpoint : this->checkpoints_)
+        /*for (RaceCheckPoint* checkpoint : this->checkpoints_)
         if (checkpoint->getCheckpointIndex() == index)
         return checkpoint;
+        return nullptr;*/
+        for (RaceCheckPoint* checkpoint : this->checkpoints_){
+            if (checkpoint->getCheckpointIndex() == index)
+                return checkpoint;
+        }
+        orxout()<<"returned checkpoint @line 123 SpaceRaceManager"<<endl;
         return nullptr;
     }
 

Modified: code/branches/mergeFS18/src/orxonox/items/Engine.cc
===================================================================
--- code/branches/mergeFS18/src/orxonox/items/Engine.cc	2018-10-10 13:16:51 UTC (rev 12028)
+++ code/branches/mergeFS18/src/orxonox/items/Engine.cc	2018-10-10 13:36:53 UTC (rev 12029)
@@ -53,7 +53,7 @@
         this->shipID_ = OBJECTID_UNKNOWN;
         this->relativePosition_ = Vector3::ZERO;
 
-        this->boostFactor_ = 1.5f;
+        this->boostFactor_ = 1.2f;
 
         this->maxSpeedFront_ = 0.0f;
         this->maxSpeedBack_ = 0.0f;
@@ -60,7 +60,7 @@
         this->maxSpeedLeftRight_ = 0.0f;
         this->maxSpeedUpDown_ = 0.0f;
 
-        this->accelerationFront_ = 0.0f;
+        this->accelerationFront_ = 1.0f;
         this->accelerationBrake_ = 0.0f;
         this->accelerationBack_ = 0.0f;
         this->accelerationLeftRight_ = 0.0f;
@@ -67,7 +67,7 @@
         this->accelerationUpDown_ = 0.0f;
 
         this->speedAdd_ = 0.0f;
-        this->speedMultiply_ = 1.0f;
+        this->speedMultiply_ = 1.0f;                       //////////////////////////////////////////
 
         this->setConfigValues();
         this->registerVariables();

Modified: code/branches/mergeFS18/src/orxonox/worldentities/pawns/SpaceShip.cc
===================================================================
--- code/branches/mergeFS18/src/orxonox/worldentities/pawns/SpaceShip.cc	2018-10-10 13:16:51 UTC (rev 12028)
+++ code/branches/mergeFS18/src/orxonox/worldentities/pawns/SpaceShip.cc	2018-10-10 13:36:53 UTC (rev 12029)
@@ -64,7 +64,7 @@
         this->boostPower_ = 10.0f;
         this->boostPowerRate_ = 1.0f;
         this->boostRate_ = 5.0f;
-        this->boostCooldownDuration_ = 5.0f;
+        this->boostCooldownDuration_ = 10.0f;
 
         this->shakeFrequency_ = 15.0f;
         this->shakeAmplitude_ = 5.0f;

Modified: code/branches/mergeFS18/src/orxonox/worldentities/pawns/SpaceShip.h
===================================================================
--- code/branches/mergeFS18/src/orxonox/worldentities/pawns/SpaceShip.h	2018-10-10 13:16:51 UTC (rev 12028)
+++ code/branches/mergeFS18/src/orxonox/worldentities/pawns/SpaceShip.h	2018-10-10 13:36:53 UTC (rev 12029)
@@ -102,19 +102,19 @@
             @param value A vector whose first component specifies the amount of movement. Positive means forward, negative means backward.
             */
             virtual void moveFrontBack(const Vector2& value)
-                { this->steering_.z -= value.x; }
+                { this->steering_.z -= (0.6)*value.x; }
             /**
             @brief Move right or left.
             @param value A vector whose first component specifies the amount of movement. Positive means right, negative means left.
             */
             virtual void moveRightLeft(const Vector2& value)
-                { this->steering_.x += value.x; }
+                { this->steering_.x += (0.6)*value.x; }
             /**
             @brief Move up or down.
             @param value A vector whose first component specifies the amount of movement. Positive means up, negative means down.
             */
             virtual void moveUpDown(const Vector2& value)
-                { this->steering_.y += value.x; }
+                { this->steering_.y += (0.6)*value.x; }
 
             inline void moveFrontBack(float value)
                 { this->moveFrontBack(Vector2(value, 0)); }



More information about the Orxonox-commit mailing list