Index: code/branches/invaders/data/levels/Invaders.oxw
===================================================================
--- code/branches/invaders/data/levels/Invaders.oxw	(revision 9866)
+++ code/branches/invaders/data/levels/Invaders.oxw	(revision 9868)
@@ -25,28 +25,14 @@
   <?lua include("includes/notifications.oxi") ?>
 
+    <!-- ambientlight = "0.8, 0.8, 0.8"
+    skybox       = "Orxonox/Starbox" -->
   <Scene
-    ambientlight = "0.8, 0.8, 0.8"
-    skybox       = "Orxonox/Starbox"
+    ambientlight = "0.8, 0.7, 0.4"
+    skybox     = "Orxonox/skyBoxBasic"
   >
 
-    <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"/>
+    <!-- <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"/> -->
+    <Light type=directional position="1100, 11000, -7000" lookat="0, 0, 0" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0" />
     <SpawnPoint team=0 position="-200,0,0" lookat="0,0,0" spawnclass=InvaderShip pawndesign=spaceshipinvader />
-    <MovableEntity
-      position = "-200,0,0"
-      velocity = "975.7, 0, 0"
-    >
-      <events>
-        <activity>
-          <EventListener event="start" />
-        </activity>
-      </events>
-      <attached>
-
-        <Model mass="1000" mesh="ast1.mesh" />
-      </attached>
-      <camerapositions>
-        <CameraPosition position="0,300,-100" direction="0, -1, 0" drag=false mouselook=true />
-      </camerapositions>
-    </MovableEntity>
 
     <DistanceTrigger name="start" position="-200,0,0" target="Pawn" distance=10 stayActive="true" delay=0 />
Index: code/branches/invaders/data/levels/includes/invaderWeapon.oxi
===================================================================
--- code/branches/invaders/data/levels/includes/invaderWeapon.oxi	(revision 9866)
+++ code/branches/invaders/data/levels/includes/invaderWeapon.oxi	(revision 9868)
@@ -15,13 +15,7 @@
         <Weapon>
           <InvaderWeapon mode=0 munitionpershot=0 delay=0.125 damage=9.3 material="Flares/point_lensflare" muzzleoffset=" 0.1, 1.6,-2" projectileMesh="laserbeam.mesh" />
-          <!--InvaderWeapon mode=0 munitionpershot=0 delay=0   
-
-          LaserBeam2
-
-            damage=3.14159 material="Flares/point_lensflare" muzzleoffset="-1.6, 1.3,-2" projectileMesh="LaserBeam.mesh" /-->
         </Weapon>
         <Weapon>
           <InvaderWeapon mode=0 munitionpershot=0 delay=0     damage=9.3 material="Flares/point_lensflare" muzzleoffset=" 1.6, 1.3, -2.0" projectileMesh="laserbeam.mesh" />
-          <!--InvaderWeapon mode=0 munitionpershot=0 delay=0.125 damage=3.14159 material="Flares/point_lensflare" muzzleoffset="-0.1, 1.6, -2.0" projectileMesh="LaserBeam.mesh" /-->
         </Weapon>
       </WeaponPack>
Index: code/branches/invaders/data/levels/templates/enemyInvader.oxt
===================================================================
--- code/branches/invaders/data/levels/templates/enemyInvader.oxt	(revision 9866)
+++ code/branches/invaders/data/levels/templates/enemyInvader.oxt	(revision 9868)
@@ -7,11 +7,11 @@
    explosionchunks        = 4
 
-   health            = 100
-   maxhealth         = 100
-   initialhealth     = 100
+   health            = 10
+   maxhealth         = 10
+   initialhealth     = 10
 
-   shieldhealth        = 35
-   initialshieldhealth = 35
-   maxshieldhealth     = 60
+   shieldhealth        = 10
+   initialshieldhealth = 10
+   maxshieldhealth     = 10
    shieldabsorption    = 0.9
    reloadrate          = 1
Index: code/branches/invaders/data/overlays/InvaderHUD.oxo
===================================================================
--- code/branches/invaders/data/overlays/InvaderHUD.oxo	(revision 9866)
+++ code/branches/invaders/data/overlays/InvaderHUD.oxo	(revision 9868)
@@ -69,16 +69,6 @@
     />
 
-
-    <OverlayText
-     position  = "0.4, 0.1"
-     pickpoint = "0.0, 0.0"
-     font      = "ShareTechMono"
-     textsize  = 0.04
-     colour    = "1.0, 1.0, 1.0, 1.0"
-     align     = "left"
-     caption   = "X"
-    />
     <InvaderHUDinfo
-     position  = "0.42, 0.1"
+     position  = "0.25, 0.1"
      pickpoint = "0.0, 0.0"
      font      = "ShareTechMono"
Index: code/branches/invaders/src/modules/invader/Invader.cc
===================================================================
--- code/branches/invaders/src/modules/invader/Invader.cc	(revision 9866)
+++ code/branches/invaders/src/modules/invader/Invader.cc	(revision 9868)
@@ -59,20 +59,20 @@
         RegisterObject(Invader);
         this->center_ = 0;
+        init();
+        this->setHUDTemplate("InvaderHUD");
+    }
 
-        this->console_addEnemy = createConsoleCommand( "spawnEnemy", createExecutor( createFunctor(&Invader::spawnEnemy, this) ) );
-        //this->context = context;
-        this->setHUDTemplate("InvaderHUD");
-
+    void Invader::init()
+    {
+        bEndGame = false;
         lives = 3;
+        // TODO:
         level = 1;
         point = 0;
         multiplier = 1;
         b_combo = false;
+        // spawn enemy every 2 seconds
         enemySpawnTimer.setTimer(2.0f, true, createExecutor(createFunctor(&Invader::spawnEnemy, this)));
         comboTimer.setTimer(2.5f, true, createExecutor(createFunctor(&Invader::comboControll, this)));
-    }
-
-    Invader::~Invader()
-    {
     }
 
@@ -94,4 +94,5 @@
             newPawn->setPlayer(player);
             newPawn->level = level;
+            // spawn enemy at random points in front of player.
             newPawn->setPosition(player->getPosition() + Vector3(500 + 100 * i, 0, float(rand())/RAND_MAX * 400 - 200));
         }
@@ -101,6 +102,8 @@
     {
         lives--;
-        multiplier = 0;
-        if (lives <= 0) end();
+        multiplier = 1;
+        // end the game in 30 seconds.
+        if (lives <= 0)
+            enemySpawnTimer.setTimer(30.0f, false, createExecutor(createFunctor(&Invader::end, this)));
     };
 
@@ -109,4 +112,5 @@
         if (b_combo)
             multiplier++;
+        // if no combo was performed before, reset multiplier
         else
             multiplier = 1;
@@ -114,14 +118,7 @@
     }
 
-    // inject custom player controller
- /**   void Invader::spawnPlayer(PlayerInfo* player)
-    {
-        assert(player);
-
-        //player->startControl(new InvaderShip(this->center_->getContext() ) );
-    }*/
-
     void Invader::start()
     {
+        init();
         // Set variable to temporarily force the player to spawn.
         this->bForceSpawn_ = true;
@@ -137,9 +134,12 @@
     }
 
+
     void Invader::end()
     {
-        orxout() << "STOP THE GAME, CHEATER!!!" << endl;
-        // Call end for the parent class.
-        // Deathmatch::end();
+        // DON'T CALL THIS!
+        //      Deathmatch::end();
+        // It will misteriously crash the game!
+        // Instead startMainMenu, this won't crash.
+        GSLevel::startMainMenu();
     }
 }
Index: code/branches/invaders/src/modules/invader/Invader.h
===================================================================
--- code/branches/invaders/src/modules/invader/Invader.h	(revision 9866)
+++ code/branches/invaders/src/modules/invader/Invader.h	(revision 9868)
@@ -29,5 +29,5 @@
 /**
     @file Invader.h
-    @brief Declaration of the Invader class.
+    @brief Gametype.
     @ingroup Invader
 */
@@ -50,11 +50,8 @@
     {
         public:
-            Invader(Context* context); //!< Constructor. Registers and initializes the object.
-            virtual ~Invader(); //!< Destructor. Cleans up, if initialized.
+            Invader(Context* context);
 
-            virtual void start(); //!< Starts the Invader minigame.
-            virtual void end(); ///!< Ends the Invader minigame.
-
-            //virtual void spawnPlayer(PlayerInfo* player); //!< Spawns the input player.
+            virtual void start();
+            virtual void end();
 
             void spawnEnemy();
@@ -71,11 +68,14 @@
             void levelUp(){level++;}
             void addPoints(int numPoints){point += numPoints * multiplier; b_combo = true;}
+            // checks if multiplier should be reset.
             void comboControll();
+            void init();
             int lives;
+            int multiplier;
+            bool bEndGame;
         private:
             WeakPtr<InvaderCenterPoint> center_;
             WeakPtr<InvaderShip> player;
 
-            ConsoleCommand* console_addEnemy;
             Timer enemySpawnTimer;
             Timer comboTimer;
@@ -84,5 +84,4 @@
             int point;
             bool b_combo;
-            int multiplier;
     };
 }
Index: code/branches/invaders/src/modules/invader/InvaderCenterPoint.cc
===================================================================
--- code/branches/invaders/src/modules/invader/InvaderCenterPoint.cc	(revision 9866)
+++ code/branches/invaders/src/modules/invader/InvaderCenterPoint.cc	(revision 9868)
@@ -42,8 +42,4 @@
     RegisterClass(InvaderCenterPoint);
 
-    /**
-    @brief
-        Constructor. Registers and initializes the object and checks whether the gametype is actually Invader.
-    */
     InvaderCenterPoint::InvaderCenterPoint(Context* context) : StaticEntity(context)
     {
@@ -53,20 +49,9 @@
     }
 
-    /**
-    @brief
-        Method to create a InvaderCenterPoint through XML.
-    */
     void InvaderCenterPoint::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
         SUPER(InvaderCenterPoint, XMLPort, xmlelement, mode);
-
-//        XMLPortParam(InvaderCenterPoint, "dimension", setFieldDimension, getFieldDimension, xmlelement, mode);
-
     }
 
-    /**
-    @brief
-        Is called when the gametype has changed.
-    */
     void InvaderCenterPoint::changedGametype()
     {
@@ -77,8 +62,4 @@
     }
 
-    /**
-    @brief
-        Checks whether the gametype is Invader and if it is, sets its centerpoint.
-    */
     void InvaderCenterPoint::checkGametype()
     {
Index: code/branches/invaders/src/modules/invader/InvaderCenterPoint.h
===================================================================
--- code/branches/invaders/src/modules/invader/InvaderCenterPoint.h	(revision 9866)
+++ code/branches/invaders/src/modules/invader/InvaderCenterPoint.h	(revision 9868)
@@ -45,13 +45,11 @@
     {
         public:
-            InvaderCenterPoint(Context* context); //!< Constructor. Registers and initializes the object and checks whether the gametype is actually Invader.
-            virtual ~InvaderCenterPoint() {}
+            InvaderCenterPoint(Context* context); //checks whether the gametype is actually Invader.
 
-
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method to create a PongCenterpoint through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
 
             virtual void changedGametype(); //!< Is called when the gametype has changed.
         private:
-            void checkGametype(); //!< Checks whether the gametype is Pong and if it is, sets its centerpoint.
+            void checkGametype();
 
     };
Index: code/branches/invaders/src/modules/invader/InvaderEnemy.cc
===================================================================
--- code/branches/invaders/src/modules/invader/InvaderEnemy.cc	(revision 9866)
+++ code/branches/invaders/src/modules/invader/InvaderEnemy.cc	(revision 9868)
@@ -50,15 +50,11 @@
     {
         lifetime += dt;
+        // die after 5 seconds.
         if (lifetime > 5000)
-        {
             removeHealth(2000);
-        }
+
         if (player != NULL)
         {
             float newZ = 2/(pow(abs(getPosition().x - player->getPosition().x) * 0.01, 2) + 1) * (player->getPosition().z - getPosition().z);
-            // if (newZ < 0)
-            //     newZ = (-100 < newZ)?-100:newZ;
-            // else
-            //     newZ = (100 > newZ)?100:newZ;
             setVelocity(Vector3(1000 - level * 100 , 0, newZ));
         }
@@ -68,6 +64,6 @@
     inline bool InvaderEnemy::collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint)
     {
-        // setVelocity(Vector3(1500,0,0));
-        removeHealth(2000);
+        if(orxonox_cast<Pawn*>(otherObject))
+            removeHealth(2000);
         return false;
     }
@@ -87,5 +83,5 @@
         if (getGame())
             getGame()->addPoints(42);
-        // SUPER(InvaderEnemy, damage, damage, healthdamage, shielddamage, originator);
+        Pawn::damage(damage, healthdamage, shielddamage, originator);
     }
 }
Index: code/branches/invaders/src/modules/invader/InvaderEnemy.h
===================================================================
--- code/branches/invaders/src/modules/invader/InvaderEnemy.h	(revision 9866)
+++ code/branches/invaders/src/modules/invader/InvaderEnemy.h	(revision 9868)
@@ -45,5 +45,4 @@
         public:
             InvaderEnemy(Context* context);
-            // virtual ~InvaderEnemy() {}
 
             virtual void tick(float dt);
Index: code/branches/invaders/src/modules/invader/InvaderHUDinfo.cc
===================================================================
--- code/branches/invaders/src/modules/invader/InvaderHUDinfo.cc	(revision 9866)
+++ code/branches/invaders/src/modules/invader/InvaderHUDinfo.cc	(revision 9868)
@@ -47,8 +47,4 @@
     }
 
-    InvaderHUDinfo::~InvaderHUDinfo()
-    {
-    }
-
     void InvaderHUDinfo::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
@@ -75,5 +71,17 @@
             {
                 const std::string& Level = multi_cast<std::string>(this->InvaderGame->getLevel());
-                this->setCaption(Level);
+                if (this->InvaderGame->lives <= 0)
+                {
+                    setPosition(Vector2(0.1, 0.65));
+                    this->setCaption("Game ends in 30 seconds.\nPress (e)xit / (q)uit to go to the main menu.\nTo restart press space.");
+                    setTextSize(0.05);
+                    this->InvaderGame->bEndGame = true;
+                }
+                else
+                {
+                    setTextSize(0.04);
+                    setPosition(Vector2(0.14, 0.055));
+                    this->setCaption(Level);
+                }
             }
             else if(this->bShowPoints_)
@@ -82,13 +90,24 @@
                 if (this->InvaderGame->lives <= 0)
                 {
-                    setTextSize(0.1);
-                    setPosition(Vector2(0.2, 0.5));
+                    setTextSize(0.2);
+                    setPosition(Vector2(0.1, 0.25));
+                    this->setCaption("Final score:\n" + points);
+                    this->setColour(ColourValue(1, 0, 0, 1));
                 }
-                this->setCaption(points);
+                else
+                {
+                    setTextSize(0.04);
+                    setPosition(Vector2(0.14, 0.1));
+                    this->setColour(ColourValue(1, 1, 1, 1));
+                    this->setCaption(points);
+                }
             }
             else if(this->bShowMultiplier_)
             {
-                const std::string& Multiplier = multi_cast<std::string>(this->InvaderGame->getMultiplier());
+                int mult = this->InvaderGame->getMultiplier();
+                const std::string& Multiplier = "X " + multi_cast<std::string>(mult);
                 this->setCaption(Multiplier);
+                this->setColour(ColourValue(1, 0, 0, clamp(float(mult * 0.1), 0.0f, 1.0f)));
+                this->setTextSize(clamp(float(mult * 0.1), 0.0f, 1.0f) * 0.01 + 0.04);
             }
         }
Index: code/branches/invaders/src/modules/invader/InvaderHUDinfo.h
===================================================================
--- code/branches/invaders/src/modules/invader/InvaderHUDinfo.h	(revision 9866)
+++ code/branches/invaders/src/modules/invader/InvaderHUDinfo.h	(revision 9868)
@@ -39,5 +39,4 @@
         public:
             InvaderHUDinfo(Context* context);
-            virtual ~InvaderHUDinfo();
 
             virtual void tick(float dt);
Index: code/branches/invaders/src/modules/invader/InvaderPrereqs.h
===================================================================
--- code/branches/invaders/src/modules/invader/InvaderPrereqs.h	(revision 9866)
+++ code/branches/invaders/src/modules/invader/InvaderPrereqs.h	(revision 9868)
@@ -21,5 +21,5 @@
  *
  *   Author:
- *      Reto Grieder
+ *      Florian Zinggeler
  *   Co-authors:
  *      ...
Index: code/branches/invaders/src/modules/invader/InvaderShip.cc
===================================================================
--- code/branches/invaders/src/modules/invader/InvaderShip.cc	(revision 9866)
+++ code/branches/invaders/src/modules/invader/InvaderShip.cc	(revision 9868)
@@ -42,8 +42,4 @@
     RegisterClass(InvaderShip);
 
-    /**
-    @brief
-        Constructor. Registers and initializes the object.
-    */
     InvaderShip::InvaderShip(Context* context) : SpaceShip(context)
     {
@@ -78,8 +74,8 @@
             if (pos.z + dist_x > 42*2.5 || pos.z + dist_x < -42*3)
                 velocity.x = 0;
-            // this->setVelocity(Vector3(1000 + velocity.y, 0, velocity.x));
             pos += Vector3(1000 + velocity.y, 0, velocity.x) * dt;
         }
 
+        // shoot!
         if (isFireing)
             ControllableEntity::fire(0);
@@ -91,5 +87,4 @@
             camera->setPosition(Vector3(-pos.z, -posforeward, 0));
             camera->setOrientation(Vector3::UNIT_Z, Degree(90));
-            // orxout() << "asbhajskjasjahg" << pos << endl;
         }
 
@@ -97,11 +92,6 @@
 
         // bring back on track!
-        // if (pos.z > 42*2.5)
-        //     pos.z = 42*2.5;
-        // else if (pos.z < -42*3)
-        //     pos.z = -42*3;
         if(pos.y != 0)
             pos.y = 0;
-            
 
         setPosition(pos);
@@ -122,10 +112,5 @@
         lastTime = 0;
         if (getGame())
-        {
             getGame()->levelUp();
-            // SmartPtr<Invader> game = orxonox_cast<Invader>(getGametype());
-            
-        }
-        //level++
     }
 
@@ -144,24 +129,24 @@
     {
         isFireing = bBoost;
+        // restart if game ended
+        if (getGame())
+            if (getGame()->bEndGame)
+                getGame()->start();
     }
     inline bool InvaderShip::collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint)
     {
         // orxout() << "touch!!! " << endl; //<< otherObject << " at " << contactPoint;
-
         WeakPtr<InvaderEnemy> enemy = orxonox_cast<InvaderEnemy*>(otherObject);
+        // ensure that this gets only called once per enemy.
         if (enemy != NULL && lastEnemy != enemy)
         {
             lastEnemy = enemy;
-            orxout() << "Enemy!!!! " << endl;
+
             removeHealth(20);
-            if (getHealth() <= 0)
+            if (getGame())
             {
-                orxout() << "DIED!!!! " << endl;
-                if (getGame())
-                {
-                    getGame()->costLife();
-                    // SmartPtr<Invader> game = orxonox_cast<Invader>(getGametype());
-                    
-                }
+                getGame()->multiplier = 1;
+                if (getHealth() <= 0)
+                    getGame()->costLife();                    
             }
             return false;
Index: code/branches/invaders/src/modules/invader/InvaderShip.h
===================================================================
--- code/branches/invaders/src/modules/invader/InvaderShip.h	(revision 9866)
+++ code/branches/invaders/src/modules/invader/InvaderShip.h	(revision 9868)
@@ -45,25 +45,25 @@
     {
         public:
-            InvaderShip(Context* context); //!< Constructor. Registers and initializes the object.
-            virtual ~InvaderShip() {}
+            InvaderShip(Context* context);
 
             virtual void tick(float dt);
 
+            // overwrite for 2d movement
             virtual void moveFrontBack(const Vector2& value);
             virtual void moveRightLeft(const Vector2& value);
 
-            virtual void boost(bool bBoost); // Starts or stops fireing
+            // Starts or stops fireing
+            virtual void boost(bool bBoost);
 
             //no rotation!
             virtual void rotateYaw(const Vector2& value){}; 
             virtual void rotatePitch(const Vector2& value){};
-            virtual void rotateRoll(const Vector2& value){};
+            //return to main menu if game has ended.
+            virtual void rotateRoll(const Vector2& value){if (getGame()) if (getGame()->bEndGame) getGame()->end();};
 
             virtual void updateLevel();
 
-            // *InvaderShip getShip(){return this;}
             virtual inline bool collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint);
         private:
-
             WeakPtr<Invader> getGame();
             WeakPtr<Invader> game;
Index: code/branches/invaders/src/modules/invader/InvaderWeapon.cc
===================================================================
--- code/branches/invaders/src/modules/invader/InvaderWeapon.cc	(revision 9866)
+++ code/branches/invaders/src/modules/invader/InvaderWeapon.cc	(revision 9868)
@@ -61,6 +61,4 @@
     void InvaderWeapon::shot()
     {
-        // orxout(internal_error) << "shotttttt" << endl;
-
         assert( this->getWeapon() && this->getWeapon()->getWeaponPack() && this->getWeapon()->getWeaponPack()->getWeaponSystem() && this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn() );
 
@@ -74,7 +72,9 @@
 
         this->computeMuzzleParameters(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getAimPosition());
-        projectile->setOrientation(Quaternion(sqrt(0.5),0,sqrt(0.5),0)); //this->getMuzzleOrientation()   Quaternion::IDENTITY
+        // only shoot in foreward direction
+        projectile->setOrientation(Quaternion(sqrt(0.5),0,sqrt(0.5),0));
         projectile->setPosition(this->getMuzzlePosition());
-        projectile->setVelocity(Vector3(1, 0, 0) * 2000); //this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getVelocity() + this->getMuzzleDirection() * this->speed_
+        // only shoot in foreward direction
+        projectile->setVelocity(Vector3(1, 0, 0) * 2000);
 
         projectile->setShooter(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
Index: code/branches/invaders/src/modules/invader/InvaderWeapon.h
===================================================================
--- code/branches/invaders/src/modules/invader/InvaderWeapon.h	(revision 9866)
+++ code/branches/invaders/src/modules/invader/InvaderWeapon.h	(revision 9868)
@@ -42,12 +42,4 @@
 namespace orxonox
 {
-
-    /**
-    @brief
-        Shoots laser beams.
-    @author
-        Hagen Seifert
-    @ingroup WeaponsHsW01s
-    */
     class _InvaderExport InvaderWeapon : public HsW01
     {
Index: code/branches/invaders/src/orxonox/gametypes/Gametype.cc
===================================================================
--- code/branches/invaders/src/orxonox/gametypes/Gametype.cc	(revision 9866)
+++ code/branches/invaders/src/orxonox/gametypes/Gametype.cc	(revision 9868)
@@ -171,5 +171,4 @@
                     entity->setOrientation(oldentity->getWorldOrientation());
                 }
-
                 it->first->startControl(entity);
             }
Index: code/branches/invaders/src/orxonox/worldentities/BigExplosion.cc
===================================================================
--- code/branches/invaders/src/orxonox/worldentities/BigExplosion.cc	(revision 9866)
+++ code/branches/invaders/src/orxonox/worldentities/BigExplosion.cc	(revision 9868)
@@ -148,4 +148,6 @@
         this->debrisEntity4_->attach(debris4_);
 
+        // particleSpawner is a static entity. It should probably be dynamic, for better explosions.
+        // effect->SetVelocity(this->getVelocity() + Vector3(rnd(-1, 1), rnd(-1, 1), rnd(-1, 1))*rnd(10,100))
         ParticleSpawner* effect = new ParticleSpawner(this->getContext());
         effect->setDestroyAfterLife(true);
