Index: branches/playability/src/world_entities/WorldEntities.am
===================================================================
--- branches/playability/src/world_entities/WorldEntities.am	(revision 10173)
+++ branches/playability/src/world_entities/WorldEntities.am	(revision 10179)
@@ -42,4 +42,5 @@
                 world_entities/weapons/swarm_launcher.cc \
                 world_entities/weapons/spike_launcher.cc \
+                world_entities/weapons/acid_launcher.cc \
                 \
                 world_entities/projectiles/lbolt.cc \
@@ -57,4 +58,5 @@
                 world_entities/projectiles/spike.cc \
                 world_entities/projectiles/spike_ball.cc \
+                world_entities/projectiles/acid_splash.cc \
                 \
                 world_entities/power_ups/turret_power_up.cc \
@@ -158,4 +160,5 @@
                 weapons/swarm_launcher.h \
                 weapons/spike_launcher.h \
+                weapons/acid_launcher.h \
                 \
                 projectiles/lbolt.h \
@@ -173,4 +176,5 @@
                 projectiles/spike.h \
                 projectiles/spike_ball.h \
+                projectiles/acid_splash.h \
                 \
                 power_ups/turret_power_up.h \
Index: branches/playability/src/world_entities/projectiles/acid_splash.cc
===================================================================
--- branches/playability/src/world_entities/projectiles/acid_splash.cc	(revision 10179)
+++ branches/playability/src/world_entities/projectiles/acid_splash.cc	(revision 10179)
@@ -0,0 +1,149 @@
+/*
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004-2006 orx
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   ### File Specific
+   main-programmer: Marc Schaerrer
+   co-programmer: Benjamin Grauer
+
+*/
+
+
+#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WEAPON
+
+#include "acid_splash.h"
+
+#include "state.h"
+
+//#include "space_ships/space_ship.h"
+
+#include <cassert>
+#include "debug.h"
+
+//#include "static_model.h"
+
+#include "effects/wobblegrid.h"
+
+
+#include "class_id_DEPRECATED.h"
+ObjectListDefinition(AcidSplash);
+CREATE_FAST_FACTORY_STATIC(AcidSplash);
+
+/**
+ *  standard constructor
+*/
+AcidSplash::AcidSplash () : Projectile()
+{
+  this->registerObject(this, AcidSplash::_objectList);
+
+  
+  //this->loadModel("models/projectiles/laser.obj");
+
+  this->setMinEnergy(1);
+  this->setHealthMax(0);
+  this->lifeSpan = 3.0;
+  this->angle     = 0;
+
+  this->grid = new Wobblegrid( 5);
+  this->grid->setTexture( "maps/acid3.png");
+  this->grid->setParent( this);
+
+  this->grid->toList(this->getOMListNumber());
+  this->toList(OM_ENVIRON);
+}
+
+
+/**
+ *  standard deconstructor
+ *
+ */
+AcidSplash::~AcidSplash ()
+{
+  // delete this->emitter;
+  //delete this->grid;
+  
+}
+
+
+void AcidSplash::activate()
+{
+  this->unhide();
+  this->grid->setVisibiliy(true);
+
+  this->setPhysDamage(10);
+  this->setElecDamage(0);
+  this->setHealth(0);
+}
+
+
+void AcidSplash::deactivate()
+{
+  this->lifeCycle = 0.0;
+
+  this->hide();
+  this->grid->setVisibiliy(false);
+  this->toList(OM_DEAD);
+  this->removeNode();
+  
+  AcidSplash::fastFactory->kill(this);
+}
+
+
+void AcidSplash::collidesWith(WorldEntity* entity, const Vector& location)
+{
+
+  if (this->hitEntity != entity)
+    this->destroy( entity );
+  this->hitEntity = entity;
+  //dynamic_cast<SpaceShip*>(entity)->damage(this->getPhysDamage(),this->getElecDamage());
+  //this->destroy(this);
+  this->deactivate();
+  
+  return;
+
+  //dynamic_cast<SpaceShip*>(entity)->damage( this->getPhysDamage(), this->getElecDamage());
+  //entity->destroy(this);
+  //this->deactivate();
+}
+
+/**
+ *  signal tick, time dependent things will be handled here
+ * @param dt time since last tick
+*/
+void AcidSplash::tick (float dt)
+{
+  //Vector v = *this->flightDirection * ( this->speed * time * 1000 + 0.1);
+  Vector v = this->velocity * dt;
+  this->shiftCoor(v);
+
+  if (this->tickLifeCycle(dt))
+    this->deactivate();
+
+  this->angle += this->rotationSpeed * dt;
+
+  this->grid->tick(dt);
+
+}
+
+/**
+ *  the function gets called, when the projectile is destroyed
+*/
+void AcidSplash::destroy (WorldEntity* killer)
+{
+  this->deactivate();
+  Projectile::destroy( killer );
+  PRINTF(5)("DESTROY AcidSplash\n");
+  this->lifeCycle = .95; //!< @todo calculate this usefully.
+}
+
+
+void AcidSplash::draw () const
+{
+  this->grid->draw();
+}
Index: branches/playability/src/world_entities/projectiles/acid_splash.h
===================================================================
--- branches/playability/src/world_entities/projectiles/acid_splash.h	(revision 10179)
+++ branches/playability/src/world_entities/projectiles/acid_splash.h	(revision 10179)
@@ -0,0 +1,45 @@
+/*!
+ * @file acid_splash.h
+ * @brief acid splash projectile
+*/
+
+#ifndef _ACIDSPLASH_H
+#define _ACIDSPLASH_H
+
+#include "projectile.h"
+
+class Vector;
+class Weapon;
+class FastFactory;
+class Wobblegrid;
+
+class AcidSplash : public Projectile
+{
+  ObjectListDeclaration(AcidSplash);
+  public:
+    AcidSplash ();
+    virtual ~AcidSplash ();
+
+
+    virtual void activate();
+    virtual void deactivate();
+
+    virtual void collidesWith(WorldEntity* entity, const Vector& location);
+
+    virtual void destroy (WorldEntity* killer);
+
+    virtual void tick (float dt);
+    virtual void draw () const;
+
+  private:
+    static FastFactory*               fastFactory;
+    Wobblegrid*                       grid;
+
+    float                             angle;
+    static const float                rotationSpeed = 1080;
+
+
+    WorldEntity* hitEntity; // FIXME TEMPORARY
+};
+
+#endif /* _ACIDSPLASH_H */
Index: branches/playability/src/world_entities/weapons/acid_launcher.cc
===================================================================
--- branches/playability/src/world_entities/weapons/acid_launcher.cc	(revision 10179)
+++ branches/playability/src/world_entities/weapons/acid_launcher.cc	(revision 10179)
@@ -0,0 +1,164 @@
+/*
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004-2006 orx
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   ### File Specific
+   main-programmer: Marc Schaerrer
+   co-programmer:
+*/
+//#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WEAPON
+
+#include "acid_launcher.h"
+
+#include "weapon_manager.h"
+#include "world_entities/projectiles/acid_splash.h"
+
+#include "model.h"
+
+#include "state.h"
+#include "animation3d.h"
+
+#include <list>
+#include <iterator>
+#include "util/state.h"
+
+#include "math/quaternion.h"
+
+#include "util/loading/factory.h"
+
+#include "class_id_DEPRECATED.h"
+
+using namespace std;
+
+ObjectListDefinition(AcidLauncher);
+CREATE_FACTORY(AcidLauncher);
+
+/**
+ *  standard constructor
+ *
+ * creates a new AcidLauncher
+ */
+AcidLauncher::AcidLauncher()
+  : Weapon()
+{
+  this->init();
+}
+
+/**
+ * creates a new AcidLauncher from a TiXmlElement
+ */
+AcidLauncher::AcidLauncher(const TiXmlElement* root)
+{
+  this->init();
+  if (root != NULL)
+    this->loadParams(root);
+}
+
+/**
+ *  standard deconstructor
+*/
+AcidLauncher::~AcidLauncher ()
+{
+  // model will be deleted from WorldEntity-destructor
+}
+
+void AcidLauncher::init()
+{
+  this->registerObject(this, AcidLauncher::_objectList);
+
+  Animation3D* animation1 = this->getAnimation(WS_ACTIVATING, this);
+  Animation3D* animation2 = this->getAnimation(WS_DEACTIVATING, this);
+
+  animation1->addKeyFrame(Vector(0, -.5, 0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
+  animation1->addKeyFrame(Vector(0, 0, 0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
+  animation2->addKeyFrame(Vector(0, 0, 0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
+  animation2->addKeyFrame(Vector(0, -.5, 0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
+
+  animation1->setInfinity(ANIM_INF_CONSTANT);
+  animation2->setInfinity(ANIM_INF_CONSTANT);
+
+  this->setStateDuration(WS_SHOOTING, .6);
+  this->setStateDuration(WS_RELOADING, 1.0f);
+  this->setStateDuration(WS_ACTIVATING, .4);
+  this->setStateDuration(WS_DEACTIVATING, .4);
+
+  this->setEnergyMax(10);
+  this->increaseEnergy(10);
+  //this->minCharge = 2;
+
+  this->setCapability(WTYPE_ALLDIRS | WTYPE_TURRET | WTYPE_DIRECTIONAL | WTYPE_LIGHT);
+  this->setProjectileTypeC("AcidSplash");
+
+  this->loadModel("models/guns/turret1.obj", 1.0);
+
+  this->setEmissionPoint(1.684, 0.472, 0);
+  this->getProjectileFactory()->prepare(50);
+
+  this->setActionSound(WA_SHOOT, "sound/explosions/explosion_1.wav");
+  this->setActionSound(WA_ACTIVATE, "sound/vocals/missiles.wav");
+  this->setActionSound(WA_RELOAD, "sound/vocals/reload.wav");
+
+}
+
+void AcidLauncher::loadParams(const TiXmlElement* root)
+{
+  Weapon::loadParams(root);
+}
+
+void AcidLauncher::activate()
+{
+}
+
+void AcidLauncher::deactivate()
+{
+}
+
+void AcidLauncher::tick(float dt)
+{
+  if (!Weapon::tickW(dt))
+    return;
+  /*
+  Quaternion quat;
+  Vector direction;
+  if (this->getDefaultTarget() == NULL)
+    direction = this->getAbsCoor();
+  else
+    direction = this->getDefaultTarget()->getAbsCoor() - this->getAbsCoor();
+
+  direction.normalize();
+
+  if (likely (this->getParent() != NULL))
+    quat = Quaternion(direction, this->getParent()->getAbsDir().apply(Vector(0,1,0))) * Quaternion ( -M_PI_2, Vector(0,1,0)) ;
+  else
+    quat = Quaternion(direction, Vector(0,1,0)) * Quaternion ( -M_PI_2, Vector(0,1,0)) ;
+
+  this->setAbsDirSoft(quat, 5);
+  */
+}
+
+void AcidLauncher::fire()
+{
+  bool fired  = false;
+
+  Projectile* pj = NULL;
+  for( int i=0; i < 5; i++)
+  {
+      pj  = this->getProjectile();
+      if (pj == NULL)
+        return;
+
+      fired = true;
+      pj->setVelocity(this->getVelocity()+(this->getAbsDir().apply(Vector(1,0,0))*115.0 + VECTOR_RAND(10)));
+
+      pj->setParent(PNode::getNullParent());
+      pj->setAbsCoor(this->getEmissionPoint());
+      pj->setAbsDir(this->getAbsDir()+Quaternion(0,VECTOR_RAND(5)));
+      pj->activate();
+  }
+}
Index: branches/playability/src/world_entities/weapons/acid_launcher.h
===================================================================
--- branches/playability/src/world_entities/weapons/acid_launcher.h	(revision 10179)
+++ branches/playability/src/world_entities/weapons/acid_launcher.h	(revision 10179)
@@ -0,0 +1,34 @@
+/*!
+ * @file acid_launcher.h
+*/
+
+
+#ifndef _ACID_LAUNCHER_H
+#define _ACID_LAUNCHER_H
+
+#include "weapon.h"
+
+#define ACID_LAUNCHER_MAXRANGE = 50.0;
+
+class AcidLauncher : public Weapon
+  {
+  ObjectListDeclaration(AcidLauncher);
+  public:
+    AcidLauncher ();
+    AcidLauncher(const TiXmlElement* root);
+    virtual ~AcidLauncher ();
+
+    void init();
+    virtual void loadParams(const TiXmlElement* root);
+
+    virtual void activate();
+    virtual void deactivate();
+
+    virtual void tick(float dt);
+    virtual void fire();
+
+
+  private:
+  };
+
+#endif /* _ACID_LAUNCHER_H */
Index: branches/playability/src/world_entities/weapons/swarm_launcher.cc
===================================================================
--- branches/playability/src/world_entities/weapons/swarm_launcher.cc	(revision 10173)
+++ branches/playability/src/world_entities/weapons/swarm_launcher.cc	(revision 10179)
@@ -163,5 +163,5 @@
       pj->setAbsDir(this->getAbsDir());
       dynamic_cast<SwarmProjectile*>(pj)->setTarget( (PNode*)(*eIterator) );
-      pj->toList(OM_GROUP_01_PROJ);
+      //pj->toList(OM_GROUP_01_PROJ);
       pj->activate();
     }
