Index: /orxonox/branches/physics/src/lib/graphics/particles/particle_system.cc
===================================================================
--- /orxonox/branches/physics/src/lib/graphics/particles/particle_system.cc	(revision 4189)
+++ /orxonox/branches/physics/src/lib/graphics/particles/particle_system.cc	(revision 4190)
@@ -24,4 +24,8 @@
 
 #include "field.h"
+
+// needed to find the Position of the Camera
+#include "world.h"
+#include "camera.h"
 
 using namespace std;
@@ -273,24 +277,57 @@
     {
     case PARTICLE_SPRITE:
+      GLdouble projMat[16];
+      GLfloat drawPartPos[4];
+      glGetDoublev(GL_PROJECTION_MATRIX, projMat);
+      
       glMatrixMode(GL_MODELVIEW);
-      //  glDisable(GL_LIGHTING);
-      material->select(); 
       glDisable(GL_DEPTH_TEST);
+      glDisable(GL_LIGHTING);
+           material->select(); 
+      
+
       while (likely(drawPart != NULL))
 	{
-	  glPushMatrix();
-	  glTranslatef(drawPart->position.x, drawPart->position.y, drawPart->position.z);
-	  glScalef(drawPart->radius, drawPart->radius, drawPart->radius);
-	  glCallList(*this->glID);
-	  
-	  //glVertex3f(drawPart->position.x, drawPart->position.y, drawPart->position.z);
+	  //! \todo implement a faster code for the look-at Camera algorithm.
+
+	  Camera* camera = WorldInterface::getInstance()->getCurrentWorld()->getLocalCamera();
+	  Vector cameraPos = camera->getAbsCoor();
+	  Vector cameraTargetPos = camera->getTarget()->getAbsCoor();
+	  Vector view = cameraTargetPos - cameraPos;
+	  Vector up = Vector(0, 1, 0);
+	  up = camera->getAbsDir().apply(up);
+	  Vector h = up.cross(view);
+	  Vector v = h.cross(view);
+	  h.normalize();
+	  v.normalize();
+	  v *= .5 * drawPart->radius;
+	  h *= .5 * drawPart->radius;
+
+	  glBegin(GL_TRIANGLE_STRIP);
+	  glTexCoord2i(1, 1);
+	  glVertex3f(drawPart->position.x - h.x - v.x,
+		     drawPart->position.y - h.y - v.y,
+		     drawPart->position.z - h.z - v.z);
+	  glTexCoord2i(0, 1);
+	  glVertex3f(drawPart->position.x - h.x + v.x,
+		     drawPart->position.y - h.y + v.y,
+		     drawPart->position.z - h.z + v.z);
+	  glTexCoord2i(1, 0);
+	  glVertex3f(drawPart->position.x + h.x - v.x,
+		     drawPart->position.y + h.y - v.y,
+		     drawPart->position.z + h.z - v.z);
+	  glTexCoord2i(0, 0);
+	  glVertex3f(drawPart->position.x + h.x + v.x,
+		     drawPart->position.y + h.y + v.y,
+		     drawPart->position.z + h.z + v.z);
+
+	  glEnd();
+  
 	  drawPart = drawPart->next;
-	  glPopMatrix();
-	}
-      //      glEnd();
-      
-      //  glEnable(GL_LIGHTING);
-      
+	}
+      glEnable(GL_LIGHTING);
       glEnable(GL_DEPTH_TEST);
+
+      
       break;
     default:
Index: /orxonox/branches/physics/src/story_entities/world.cc
===================================================================
--- /orxonox/branches/physics/src/story_entities/world.cc	(revision 4189)
+++ /orxonox/branches/physics/src/story_entities/world.cc	(revision 4190)
@@ -492,21 +492,21 @@
 
 
-  ParticleSystem* system = new ParticleSystem(10000, PARTICLE_SPARK);
-  system->setLifeSpan(5);
+  ParticleSystem* system = new ParticleSystem(100000, PARTICLE_SPRITE);
+  system->setLifeSpan(3);
   system->setConserve(.9);
   system->setRadius(2, 0, 2, 0);
 
-  ParticleEmitter* emitter = new ParticleEmitter(Vector(-1, 0, 0), M_PI_4, 1000, 0);
+  ParticleEmitter* emitter = new ParticleEmitter(Vector(-1, 0, 0), M_PI_4, 400, .5);
   emitter->setParent(this->localPlayer);
   
   Field* twirl = new Twirl();
-  twirl->setMagnitude(-.1);
+  twirl->setMagnitude(.1);
   Field* gravity = new PointGravity();
-  gravity->setMagnitude(0);
-  new PhysicsConnection(system, twirl);
-  //  new PhysicsConnection(system, gravity);
-  twirl->setParent(this->localCamera->getTarget());
-  gravity->setParent(this->localCamera->getTarget());
-  particleEngine->addConnection(emitter, system);
+  gravity->setMagnitude(.5);
+    new PhysicsConnection(system, twirl);
+    //    new PhysicsConnection(system, gravity);
+    twirl->setParent(this->localCamera->getTarget());
+    gravity->setParent(this->localCamera->getTarget());
+    particleEngine->addConnection(emitter, system);
 }
 
Index: /orxonox/branches/physics/src/story_entities/world.h
===================================================================
--- /orxonox/branches/physics/src/story_entities/world.h	(revision 4189)
+++ /orxonox/branches/physics/src/story_entities/world.h	(revision 4190)
@@ -36,4 +36,5 @@
   static WorldInterface* getInstance();
   void init(World* world);
+  inline World* getCurrentWorld(void) {return this->worldReference;}
   tList<WorldEntity>* getEntityList();
 
@@ -90,4 +91,6 @@
   void setPath( const char* name);
 
+  inline Camera* getLocalCamera(void) {return this->localCamera;}
+
  private:
   void constuctorInit(char* name, int worldID);
