Index: code/branches/explosionChunksHS15/src/orxonox/worldentities/ExplosionPart.cc
===================================================================
--- code/branches/explosionChunksHS15/src/orxonox/worldentities/ExplosionPart.cc	(revision 10810)
+++ code/branches/explosionChunksHS15/src/orxonox/worldentities/ExplosionPart.cc	(revision 10837)
@@ -84,6 +84,8 @@
 		XMLPortParam(ExplosionPart, "effect2", setEffect2, getEffect2, xmlelement, mode).defaultValues("");
 		XMLPortParam(ExplosionPart, "offset", setOffset, getOffset, xmlelement, mode).defaultValues(Vector3::ZERO);
-
-
+		XMLPortParam(ExplosionPart, "direction", setDirection, getDirection, xmlelement, mode).defaultValues(Vector3(1,1,1));
+		XMLPortParam(ExplosionPart, "angle", setAngle, getAngle, xmlelement, mode).defaultValues(180);
+		XMLPortParam(ExplosionPart, "size", setSize, getSize, xmlelement, mode).defaultValues(4);
+		XMLPortParam(ExplosionPart, "delay", setDelay, getDelay, xmlelement, mode).defaultValues(0);
 	}
 
@@ -91,39 +93,5 @@
 	void ExplosionPart::Explode()
 	{
-		orxout() << "Explode" << endl;
-
-
-
-		this->model_->setVisible(true);
-
-		//this->explosionEntity_->setSyncMode(0);
-
-		//this->model_->setSyncMode(0);
-
-		if(effect1_ != "")
-		{
-			this->effect1Particle_ = new ParticleInterface(this->getScene()->getSceneManager(), effect1_, this->LOD_);
-			this->model_->attachOgreObject(this->effect1Particle_->getParticleSystem());
-		}
-
-		if(effect2_ != "")
-		{
-			this->effect2Particle_ = new ParticleInterface(this->getScene()->getSceneManager(), effect2_, this->LOD_);
-			this->model_->attachOgreObject(this->effect2Particle_->getParticleSystem());
-		}	
-
-		this->explosionEntity_->setVelocity(Vector3(rnd(-1, 1), rnd(-1, 1), rnd(-1, 1))*rnd(minSpeed_,maxSpeed_));
-        this->explosionEntity_->setAngularVelocity(Vector3(rnd(-1, 1), rnd(-1, 1), rnd(-1, 1)).normalisedCopy() * Degree(400).valueRadians());
-        this->explosionEntity_->setScale(4);
-
-        this->explosionEntity_->attach(model_);
-
-        this->attach(explosionEntity_);
-
-        if (GameMode::isMaster())
-        {
-            this->destroyTimer_.setTimer(rnd(2, 4), false, createExecutor(createFunctor(&ExplosionPart::stop, this)));
-        }
-
+		this->destroyTimer_.setTimer(delay_, false, createExecutor(createFunctor(&ExplosionPart::ActuallyExplode, this)));
 	}
 
@@ -144,4 +112,48 @@
 	}
 
+	void ExplosionPart::ActuallyExplode()
+	{
+		this->model_->setVisible(true);
+
+		//this->explosionEntity_->setSyncMode(0);
+
+		//this->model_->setSyncMode(0);
+
+		if(effect1_ != "")
+		{
+			this->effect1Particle_ = new ParticleInterface(this->getScene()->getSceneManager(), effect1_, this->LOD_);
+			this->model_->attachOgreObject(this->effect1Particle_->getParticleSystem());
+		}
+
+		if(effect2_ != "")
+		{
+			this->effect2Particle_ = new ParticleInterface(this->getScene()->getSceneManager(), effect2_, this->LOD_);
+			this->model_->attachOgreObject(this->effect2Particle_->getParticleSystem());
+		}
+
+		
+        Vector3 velocityOffset = direction_.perpendicular();
+        velocityOffset.normalise();
+        Degree offsetDirection = Degree(rnd(0,360));
+        velocityOffset = Quaternion(offsetDirection, direction_.normalisedCopy()) * velocityOffset;
+        velocityOffset.normalise();
+        direction_.normalise();
+
+        Vector3 finalDirection = direction_ + sin((rnd(0, angle_))*M_PI/180)*velocityOffset;
+
+		this->explosionEntity_->setVelocity(finalDirection*rnd(minSpeed_,maxSpeed_));
+        this->explosionEntity_->setAngularVelocity(Vector3(rnd(-1, 1), rnd(-1, 1), rnd(-1, 1)).normalisedCopy() * Degree(400).valueRadians());
+        this->explosionEntity_->setScale(size_);
+
+        this->explosionEntity_->attach(model_);
+
+        this->attach(explosionEntity_);
+
+        if (GameMode::isMaster())
+        {
+            this->destroyTimer_.setTimer(rnd(2, 4), false, createExecutor(createFunctor(&ExplosionPart::stop, this)));
+        }
+	}
+
 
 
@@ -180,5 +192,25 @@
 	{
 		this->posOffset_ = newVector;
-		this->setPosition(this->getPosition() + this->posOffset_);
+		this->explosionEntity_->setPosition(this->getPosition() + this->posOffset_);
+	}
+
+	void ExplosionPart::setDirection(Vector3 newDirection)
+	{
+		this->direction_ = newDirection;
+	}
+
+	void ExplosionPart::setAngle(float newAngle)
+	{
+		this->angle_ = newAngle;
+	}
+
+	void ExplosionPart::setSize(float newSize)
+	{
+		this->size_ = newSize;
+	}
+
+	void ExplosionPart::setDelay(float newDelay)
+	{
+		this->delay_ = newDelay;
 	}
 
@@ -207,4 +239,24 @@
 	}
 
+	Vector3 ExplosionPart::getDirection()
+	{
+		return direction_;
+	}
+
+	float ExplosionPart::getAngle()
+	{
+		return angle_;
+	}
+
+	float ExplosionPart::getSize()
+	{
+		return size_;
+	}
+
+	float ExplosionPart::getDelay()
+	{
+		return delay_;
+	}
+
 
 
Index: code/branches/explosionChunksHS15/src/orxonox/worldentities/ExplosionPart.h
===================================================================
--- code/branches/explosionChunksHS15/src/orxonox/worldentities/ExplosionPart.h	(revision 10810)
+++ code/branches/explosionChunksHS15/src/orxonox/worldentities/ExplosionPart.h	(revision 10837)
@@ -54,4 +54,5 @@
             void Explode();
             void stop();
+            void ActuallyExplode();
 
             void setMesh(const std::string& newString);
@@ -67,4 +68,12 @@
             void setOffset(Vector3 newVector);
             Vector3 getOffset();
+            void setDirection(Vector3 newDirection);
+            Vector3 getDirection();
+            void setAngle(float newAgnle);
+            float getAngle();
+            void setSize(float newSize);
+            float getSize();
+            void setDelay(float newDelay);
+            float getDelay();
          
 
@@ -86,4 +95,8 @@
             std::string effect2_;
             Vector3 posOffset_;
+            Vector3 direction_;
+            float angle_;
+            float size_;
+            float delay_;
 
             MovableEntity* explosionEntity_;
Index: code/branches/explosionChunksHS15/src/orxonox/worldentities/pawns/Pawn.cc
===================================================================
--- code/branches/explosionChunksHS15/src/orxonox/worldentities/pawns/Pawn.cc	(revision 10810)
+++ code/branches/explosionChunksHS15/src/orxonox/worldentities/pawns/Pawn.cc	(revision 10837)
@@ -390,4 +390,5 @@
             explosionPartList_.back()->setPosition(this->getPosition());
             explosionPartList_.back()->setVelocity(this->getVelocity());
+            explosionPartList_.back()->setOrientation(this->getOrientation());
             explosionPartList_.back()->Explode();
             explosionPartList_.pop_back();
