Index: branches/vs-enhencements/src/world_entities/WorldEntities.am
===================================================================
--- branches/vs-enhencements/src/world_entities/WorldEntities.am	(revision 10646)
+++ branches/vs-enhencements/src/world_entities/WorldEntities.am	(revision 10648)
@@ -34,4 +34,6 @@
                 world_entities/weapons/acid_launcher.cc \
                 world_entities/weapons/rf_cannon.cc \
+                world_entities/weapons/disruptor.cc \
+                world_entities/weapons/nadion_laser.cc \
                 \
                 world_entities/projectiles/lbolt.cc \
@@ -187,4 +189,6 @@
                 weapons/acid_launcher.h \
                 weapons/rf_cannon.h \
+                weapons/disruptor.h \
+                weapons/nadion_laser.h \
                 \
                 projectiles/lbolt.h \
Index: branches/vs-enhencements/src/world_entities/npcs/npc.cc
===================================================================
--- branches/vs-enhencements/src/world_entities/npcs/npc.cc	(revision 10646)
+++ branches/vs-enhencements/src/world_entities/npcs/npc.cc	(revision 10648)
@@ -407,5 +407,5 @@
       {
         int slot = ws->getWeaponSlot();
-        int side = ws->getWeaponSide();
+//         int side = ws->getWeaponSide(); //FIXME / REMOVE: is not used
         this->getWeaponManager().setSlotPosition(slot, (*it).second->getCenter());
         this->getWeaponManager().setSlotDirection(slot, ws->getRelDir());
Index: branches/vs-enhencements/src/world_entities/projectiles/plasma_pulse.cc
===================================================================
--- branches/vs-enhencements/src/world_entities/projectiles/plasma_pulse.cc	(revision 10646)
+++ branches/vs-enhencements/src/world_entities/projectiles/plasma_pulse.cc	(revision 10648)
@@ -25,7 +25,4 @@
 #include "debug.h"
 
-// #include "effects/wobblegrid.h"
-
-
 
 ObjectListDefinition(PlasmaPulse);
@@ -39,12 +36,8 @@
   this->registerObject(this, PlasmaPulse::_objectList);
 
-//   srand(time(0));   //initialize Random Nomber Generator
-
-  //this->loadModel("models/projectiles/laser.obj");
 
   this->setMinEnergy(1);
   this->setHealthMax(0);
   this->lifeSpan = 3.0;
-//   this->angle     = 0;
 
   this->grid = new Billboard();
@@ -87,9 +80,7 @@
   this->lifeCycle = 0.0;
 
- // this->hide();
   this->grid->setVisibility(false);
   this->lifeCycle = 0.0;
   this->toList(OM_NULL);
-  //this->toList(OM_DEAD);
   this->removeNode();
 
@@ -136,4 +127,9 @@
 void PlasmaPulse::draw () const
 {
-  this->grid->draw();
+  glPushMatrix();
+    glEnable( GL_ALPHA_TEST);
+    glAlphaFunc( GL_GEQUAL, .5);
+    this->grid->draw();
+  glPopMatrix();
+
 }
Index: branches/vs-enhencements/src/world_entities/projectiles/plasma_pulse.h
===================================================================
--- branches/vs-enhencements/src/world_entities/projectiles/plasma_pulse.h	(revision 10646)
+++ branches/vs-enhencements/src/world_entities/projectiles/plasma_pulse.h	(revision 10648)
@@ -33,6 +33,4 @@
     static FastFactory*               fastFactory;
     Billboard*                        grid;
-
-//     WorldEntity* hitEntity; // FIXME TEMPORARY
 };
 
Index: branches/vs-enhencements/src/world_entities/space_ships/space_ship.cc
===================================================================
--- branches/vs-enhencements/src/world_entities/space_ships/space_ship.cc	(revision 10646)
+++ branches/vs-enhencements/src/world_entities/space_ships/space_ship.cc	(revision 10648)
@@ -27,4 +27,6 @@
 #include "weapons/heavy_blaster.h"
 #include "weapons/rf_cannon.h"
+#include "weapons/nadion_laser.h"
+#include "weapons/disruptor.h"
 #include "weapons/swarm_launcher.h"
 #include "weapons/spike_thrower.h"
@@ -166,14 +168,24 @@
   Weapon* wpLeft1 = new RFCannon ();
   wpLeft1->setName( "RFCannon");
-
+/*
   Weapon* wpRight2 = new MediumBlaster ();
   wpRight2->setName( "MediumBlaster");
   Weapon* wpLeft2 = new MediumBlaster ();
-  wpLeft2->setName( "MediumBlaster");
-
+  wpLeft2->setName( "MediumBlaster");*/
+
+  Weapon* wpRight2 = new NadionLaser ();
+  wpRight2->setName( "NadionLaser");
+  Weapon* wpLeft2 = new NadionLaser ();
+  wpLeft2->setName( "NadionLaser");
+/*
   Weapon* wpRight3 = new HeavyBlaster (1);
   wpRight3->setName( "HeavyBlaster");
   Weapon* wpLeft3 = new HeavyBlaster (0);
-  wpLeft3->setName( "HeavyBlaster");
+  wpLeft3->setName( "HeavyBlaster");*/
+
+  Weapon* wpRight3 = new Disruptor ();
+  wpRight3->setName( "Disruptor");
+  Weapon* wpLeft3 = new Disruptor ();
+  wpLeft3->setName( "Disruptor");
 
   Weapon* cannon = new SwarmLauncher();
Index: branches/vs-enhencements/src/world_entities/weapons/disruptor.cc
===================================================================
--- branches/vs-enhencements/src/world_entities/weapons/disruptor.cc	(revision 10648)
+++ branches/vs-enhencements/src/world_entities/weapons/disruptor.cc	(revision 10648)
@@ -0,0 +1,222 @@
+/*
+   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, Nicolas Schlumberger
+   co-programmer:
+
+*/
+
+#include "disruptor.h"
+#include "world_entities/projectiles/projectile.h"
+
+#include "world_entity.h"
+#include "static_model.h"
+#include "weapon_manager.h"
+#include "util/loading/factory.h"
+
+#include "animation3d.h"
+
+#include "loading/fast_factory.h"
+
+#include "elements/glgui_energywidgetvertical.h"
+
+CREATE_FACTORY(Disruptor);
+// ObjectListDefinition(Disruptor);
+
+
+
+/**
+ * Standard constructor
+ */
+Disruptor::Disruptor ()
+ : Weapon()
+{
+//     this->registerObject(this, Disruptor::_objectList);
+
+    this->init();
+}
+
+Disruptor::Disruptor (const TiXmlElement* root = NULL)
+ : Weapon()
+{
+//     this->registerObject(this, Disruptor::_objectList);
+
+    // TODO add leftRight to params
+    this->init();
+    if (root != NULL)
+      this->loadParams(root);
+}
+
+/**
+ * Default destructor
+ */
+Disruptor::~Disruptor()
+{
+  for (int i = 0; i < this->getBarrels(); i++)
+  {
+   delete [] this->shootAnim[i];
+   delete [] this->objComp[i];
+  }
+  delete [] this->emissionPoint;
+
+   delete [] this->shootAnim;
+   delete [] this->objComp;
+/*
+    for(int j = 0; j < this->getSegs(); j++)
+    {
+      delete this->shootAnim[i][j];
+      delete this->objComp[i][j];
+    }
+    delete this->shootAnim[i];
+    delete this->objComp[i];
+    delete this->emissionPoint[i];
+  }*/
+
+//  this->deconstr();
+     // model will be deleted from WorldEntity-destructor
+}
+
+void Disruptor::loadParams(const TiXmlElement* root)
+{
+  Weapon::loadParams(root);
+}
+
+void Disruptor::init()
+{
+
+  this->setScaling(.5);
+
+  this->loadModel("models/guns/disruptor.obj", this->getScaling());
+
+
+  this->setStateDuration(WS_SHOOTING, 0.3333);  // 3 Shots per Second
+  this->setStateDuration(WS_RELOADING, 0);
+  this->setStateDuration(WS_ACTIVATING, .5);
+  this->setStateDuration(WS_DEACTIVATING, 1);
+
+  this->setEnergyMax(500);
+  this->increaseEnergy(500);
+  //this->minCharge = 2;
+
+  this->setActionSound(WA_SHOOT, "sounds/guns/laser.wav");
+//   this->setActionSound(WA_ACTIVATE, "sounds/voices/lasers.wav");
+  this->setActionSound(WA_RELOAD, "sounds/spawn/alien_generator.wav");
+
+  this->setCapability(WTYPE_ALLDIRS | WTYPE_DIRECTIONAL | WTYPE_LIGHT);
+  this->setProjectileTypeC("HBolt");
+  this->prepareProjectiles(5);
+
+  this->setBarrels(1);
+  this->setSegs(1);
+  this->activeBarrel = 0;
+
+
+
+  this->objComp = new PNode**[this->getBarrels()];
+  this->emissionPoint = new PNode*[this->getBarrels()];
+  this->shootAnim = new Animation3D**[this->getBarrels()];
+  for (int i = 0; i < this->getBarrels(); i++)
+  {
+    this->objComp[i] = new PNode* [this->getSegs()];
+    this->emissionPoint[i] = new PNode;
+    this->emissionPoint[i]->setParent(this);  //Parenting emissionPoint to Weapon
+    this->emissionPoint[i]->setName("EmissionPoint");
+    this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
+    this->shootAnim[i] = new Animation3D* [this->getSegs()];
+    for(int j = 0; j < this->getSegs(); j++)
+    {
+      this->objComp[i][j] = new PNode;
+      this->shootAnim[i][j] = new Animation3D(this->objComp[i][j]);
+      this->shootAnim[i][j]->setInfinity(ANIM_INF_CONSTANT);
+    }
+  }
+
+  this->emissionPoint[0]->setRelCoor(Vector(1.672, 0.0, 0.0) * this->getScaling());
+
+
+  Animation3D* animation2 = this->getAnimation(WS_ACTIVATING, this);
+  Animation3D* animation3 = this->getAnimation(WS_DEACTIVATING, this);
+
+  animation2->setInfinity(ANIM_INF_CONSTANT);
+  animation3->setInfinity(ANIM_INF_CONSTANT);
+
+  animation2->addKeyFrame(Vector(0.0, -1.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
+  animation2->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.5, ANIM_LINEAR, ANIM_NULL);
+
+  animation3->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.5, ANIM_LINEAR, ANIM_NULL);
+  animation3->addKeyFrame(Vector(0.0, -1.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
+}
+
+
+void Disruptor::fire()
+{
+  Projectile* pj =  this->getProjectile();
+  if (pj == NULL)
+    return;
+
+  // set the owner
+  pj->setOwner(this->getOwner());
+  pj->setParent(PNode::getNullParent());
+
+  pj->setVelocity(this->getAbsDir().apply(Vector(1,0,0))*130 + VECTOR_RAND(1));
+
+  pj->setAbsCoor(this->emissionPoint[this->activeBarrel]->getAbsCoor());
+  pj->setAbsDir(this->getAbsDir());
+  pj->activate();
+
+  // initiate animation
+//   for (int i = 0; i < this->getSegs(); i++)
+//     this->shootAnim[this->activeBarrel][i]->replay();
+
+  // switch barrel
+//   this->activeBarrel = (this->activeBarrel + 1) % this->getBarrels();
+}
+
+/**
+ *  this activates the weapon
+*/
+void Disruptor::activate()
+{
+}
+
+/**
+ *  this deactivates the weapon
+*/
+void Disruptor::deactivate()
+{
+}
+
+
+void Disruptor::draw() const
+{
+  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+  glTranslatef (this->getAbsCoor ().x,
+                this->getAbsCoor ().y,
+                this->getAbsCoor ().z);
+    Vector tmpRot = this->getAbsDir().getSpacialAxis();
+    glRotatef (this->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
+
+  static_cast<StaticModel*>(this->getModel())->draw();
+
+  glPopMatrix();
+}
+
+void Disruptor::tick(float dt)
+{
+  if (!Weapon::tickW(dt))
+    return;
+  if (this->energyWidget != NULL && !this->isEnergyWidgetInitialized)
+  {
+    this->energyWidget->setDisplayedImage("textures/gui/gui_heavy_bolt.png");
+    this->setEnergyWidgetInitialized(true);
+  }
+}
Index: branches/vs-enhencements/src/world_entities/weapons/disruptor.h
===================================================================
--- branches/vs-enhencements/src/world_entities/weapons/disruptor.h	(revision 10648)
+++ branches/vs-enhencements/src/world_entities/weapons/disruptor.h	(revision 10648)
@@ -0,0 +1,45 @@
+#ifndef DISRUPTOR_H
+#define DISRUPTOR_H
+
+
+#include "weapon.h"
+
+// #define    W_LEFT        0
+// #define    W_RIGHT       1
+
+/**
+ *	@author Marc Schaerer <marcscha@ee.ethz.ch>
+ *
+ *  Heavy Blaster class
+ */
+class Disruptor : public Weapon
+{
+//   ObjectListDeclaration(Disruptor);
+  public:
+    Disruptor();
+    Disruptor (const TiXmlElement* root);
+    virtual ~Disruptor();
+
+    void init();
+    virtual void loadParams(const TiXmlElement* root);
+
+    virtual void activate();
+    virtual void deactivate();
+
+    virtual void fire();
+
+    virtual void tick(float dt);
+
+    virtual void draw() const;
+
+  private:
+    PNode*** objComp;
+    Animation3D*** shootAnim;
+    PNode** emissionPoint;
+
+    int activeBarrel;
+
+//     int leftRight;
+};
+
+#endif
Index: branches/vs-enhencements/src/world_entities/weapons/heavy_blaster.cc
===================================================================
--- branches/vs-enhencements/src/world_entities/weapons/heavy_blaster.cc	(revision 10646)
+++ branches/vs-enhencements/src/world_entities/weapons/heavy_blaster.cc	(revision 10648)
@@ -131,5 +131,5 @@
     this->objComp[i] = new PNode* [this->getSegs()];
     this->emissionPoint[i] = new PNode;
-    this->emissionPoint[i]->setParent(this);             //< One EmissionPoint, that is a PNode connected to the weapon. You can set this to the exitting point of the Projectiles
+    this->emissionPoint[i]->setParent(this);      //Parenting emissionPoint to Weapons
     this->emissionPoint[i]->setName("EmissionPoint");
     this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
Index: branches/vs-enhencements/src/world_entities/weapons/laser_cannon.cc
===================================================================
--- branches/vs-enhencements/src/world_entities/weapons/laser_cannon.cc	(revision 10646)
+++ branches/vs-enhencements/src/world_entities/weapons/laser_cannon.cc	(revision 10648)
@@ -55,7 +55,7 @@
   this->registerObject(this, LaserCannon::_objectList);
 
-//  this->model = (Model*)ResourceManager::getInstance()->load("models/guns/laser_cannon.obj", OBJ, RP_CAMPAIGN);
+  this->setScaling (5);
 
-  this->loadModel("models/guns/lasercannon.obj", 5.0f);
+  this->loadModel("models/guns/lasercannon.obj", this->getScaling());
 
   this->setStateDuration(WS_SHOOTING, .1);
@@ -75,5 +75,5 @@
   this->setProjectileTypeC("RailProjectile");
   this->prepareProjectiles(100);
-  this->setEmissionPoint(Vector(2.8,0,0) * 5.0);
+  this->setEmissionPoint(Vector(2.8,0,0) * this->getScaling());
 }
 
Index: branches/vs-enhencements/src/world_entities/weapons/light_blaster.cc
===================================================================
--- branches/vs-enhencements/src/world_entities/weapons/light_blaster.cc	(revision 10646)
+++ branches/vs-enhencements/src/world_entities/weapons/light_blaster.cc	(revision 10648)
@@ -106,5 +106,4 @@
     this->emissionPoint[i]->setName("EmissionPoint");
     this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
-//     this->shootAnim[i] = new Animation3D* [this->getSegs()];
     for(int j = 0; j < this->getSegs(); j++)
     {
@@ -114,8 +113,4 @@
     }
   }
-/*
-  this->emissionPoint[0]->setRelCoor(Vector(1.19, 0.0, 0.1));
-  this->emissionPoint[1]->setRelCoor(Vector(1.19, -0.07, -0.05));
-  this->emissionPoint[2]->setRelCoor(Vector(1.19, 0.07, -0.05));*/
 
   this->emissionPoint[0]->setRelCoor(Vector(2.2, 0.0, 0.1));
@@ -130,11 +125,4 @@
   animation2->setInfinity(ANIM_INF_CONSTANT);
   animation3->setInfinity(ANIM_INF_CONSTANT);
-
-//   this->setEmissionPoint(3.8, 1.2, 0);
-
-//   for (int i = 0; i < this->getBarrels(); i++){
-//     this->shootAnim[i][0]->addKeyFrame(Vector(), Quaternion(i * 120, Vector(1.0, 0.0, 0.0)), 0.049, ANIM_NULL, ANIM_LINEAR);
-//     this->shootAnim[i][0]->addKeyFrame(Vector(), Quaternion((i+1)*120, Vector(1.0, 0.0, 0.0)), 0.001, ANIM_NULL, ANIM_LINEAR);
-//   }
 
 
Index: branches/vs-enhencements/src/world_entities/weapons/medium_blaster.cc
===================================================================
--- branches/vs-enhencements/src/world_entities/weapons/medium_blaster.cc	(revision 10646)
+++ branches/vs-enhencements/src/world_entities/weapons/medium_blaster.cc	(revision 10648)
@@ -69,5 +69,7 @@
 void MediumBlaster::init()
 {
-  this->loadModel("models/guns/blaster.obj", .33);
+  this->setScaling(.3333);
+
+  this->loadModel("models/guns/blaster.obj", this->getScaling());
 
   this->setStateDuration(WS_SHOOTING, 0.2);   // 5 Schuss pro Sekunde
@@ -82,9 +84,9 @@
 
   this->setActionSound(WA_SHOOT, "sounds/guns/laser.wav");
-  this->setActionSound(WA_ACTIVATE, "sounds/voices/lasers.wav");
+//   this->setActionSound(WA_ACTIVATE, "sounds/voices/lasers.wav");
   this->setActionSound(WA_RELOAD, "sounds/spawn/alien_generator.wav");
 
   this->setCapability(WTYPE_ALLDIRS | WTYPE_DIRECTIONAL | WTYPE_LIGHT);
-  this->setProjectileTypeC("MBolt");   // FIXME temp project type until the blaste class exist
+  this->setProjectileTypeC("MBolt");
   this->prepareProjectiles(100);
 
@@ -95,8 +97,13 @@
 
   this->objComp = new PNode**[this->getBarrels()];
+  this->emissionPoint = new PNode*[this->getBarrels()];
   this->shootAnim = new Animation3D**[this->getBarrels()];
   for (int i = 0; i < this->getBarrels(); i++)
   {
     this->objComp[i] = new PNode* [this->getSegs()];
+    this->emissionPoint[i] = new PNode;
+    this->emissionPoint[i]->setParent(this);  //Parenting emissionPoint to Weapon
+    this->emissionPoint[i]->setName("EmissionPoint");
+    this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
     this->shootAnim[i] = new Animation3D* [this->getSegs()];
     for(int j = 0; j < this->getSegs(); j++)
@@ -109,11 +116,11 @@
 
   for (int i = 0; i < this->getBarrels(); i++){
-    this->shootAnim[i][0]->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.04, ANIM_LINEAR, ANIM_NULL);
-    this->shootAnim[i][0]->addKeyFrame(Vector(-0.333, 0.0, 0.0), Quaternion(), 0.15, ANIM_LINEAR, ANIM_NULL);
-    this->shootAnim[i][0]->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.01, ANIM_LINEAR, ANIM_NULL);
-
-    this->shootAnim[i][1]->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.04, ANIM_LINEAR, ANIM_NULL);
-    this->shootAnim[i][1]->addKeyFrame(Vector(.166, 0.0, 0.0), Quaternion(), 0.15, ANIM_LINEAR, ANIM_NULL);
-    this->shootAnim[i][1]->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.01, ANIM_LINEAR, ANIM_NULL);
+    this->shootAnim[i][0]->addKeyFrame(Vector(0.0, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.04, ANIM_LINEAR, ANIM_NULL);
+    this->shootAnim[i][0]->addKeyFrame(Vector(-1.0, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.15, ANIM_LINEAR, ANIM_NULL);
+    this->shootAnim[i][0]->addKeyFrame(Vector(0.0, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.01, ANIM_LINEAR, ANIM_NULL);
+
+    this->shootAnim[i][1]->addKeyFrame(Vector(0.0, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.04, ANIM_LINEAR, ANIM_NULL);
+    this->shootAnim[i][1]->addKeyFrame(Vector(.5, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.15, ANIM_LINEAR, ANIM_NULL);
+    this->shootAnim[i][1]->addKeyFrame(Vector(0.0, 0.0, 0.0) * this->getScaling(), Quaternion(), 0.01, ANIM_LINEAR, ANIM_NULL);
   }
 
@@ -124,6 +131,5 @@
   animation3->setInfinity(ANIM_INF_CONSTANT);
 
-
-  this->setEmissionPoint(1.3, 0, 0);
+  this->emissionPoint[0]->setRelCoor(Vector(3.9, 0.0, 0.0) * this->getScaling());
 
   animation2->addKeyFrame(Vector(0.0, -1.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
Index: branches/vs-enhencements/src/world_entities/weapons/medium_blaster.h
===================================================================
--- branches/vs-enhencements/src/world_entities/weapons/medium_blaster.h	(revision 10646)
+++ branches/vs-enhencements/src/world_entities/weapons/medium_blaster.h	(revision 10648)
@@ -33,4 +33,5 @@
     PNode*** objComp;
     Animation3D*** shootAnim;
+    PNode** emissionPoint;
 
     int activeBarrel;
Index: branches/vs-enhencements/src/world_entities/weapons/nadion_laser.cc
===================================================================
--- branches/vs-enhencements/src/world_entities/weapons/nadion_laser.cc	(revision 10648)
+++ branches/vs-enhencements/src/world_entities/weapons/nadion_laser.cc	(revision 10648)
@@ -0,0 +1,189 @@
+/*
+   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, Nicolas Schlumberger
+   co-programmer:
+
+*/
+
+#include "nadion_laser.h"
+#include "world_entities/projectiles/projectile.h"
+
+#include "world_entity.h"
+#include "static_model.h"
+#include "weapon_manager.h"
+#include "util/loading/factory.h"
+
+#include "animation3d.h"
+
+#include "loading/fast_factory.h"
+
+#include "elements/glgui_energywidgetvertical.h"
+
+//
+//ObjectListDefinition(NadionLaser);
+CREATE_FACTORY(NadionLaser);
+/**
+ * Standard constructor
+ */
+NadionLaser::NadionLaser ()
+ : Weapon()
+{
+    this->init();
+}
+
+NadionLaser::NadionLaser (const TiXmlElement* root = NULL)
+ : Weapon()
+{
+    this->init();
+    if (root != NULL)
+      this->loadParams(root);
+}
+
+/**
+ * Default destructor
+ */
+NadionLaser::~NadionLaser()
+{
+      // model will be deleted from WorldEntity-destructor
+  for (int i = 0; i < this->getBarrels(); i++)
+  {
+   delete [] this->shootAnim[i];
+  }
+  delete [] this->shootAnim;
+}
+
+void NadionLaser::loadParams(const TiXmlElement* root)
+{
+  Weapon::loadParams(root);
+}
+
+void NadionLaser::init()
+{
+  this->setScaling(.45);
+
+  this->loadModel("models/guns/nadion_laser.obj", this->getScaling());
+
+  this->setStateDuration(WS_SHOOTING, 0.1666);   // 6 Schuss pro Sekunde
+
+  this->setStateDuration(WS_RELOADING, 0);
+  this->setStateDuration(WS_ACTIVATING, .5); //.5);
+  this->setStateDuration(WS_DEACTIVATING, 1); // 1);
+
+  this->setEnergyMax(500);
+  this->increaseEnergy(500);
+  //this->minCharge = 2;
+
+  this->setActionSound(WA_SHOOT, "sounds/guns/laser.wav");
+//   this->setActionSound(WA_ACTIVATE, "sounds/voices/lasers.wav");
+  this->setActionSound(WA_RELOAD, "sounds/spawn/alien_generator.wav");
+
+  this->setCapability(WTYPE_ALLDIRS | WTYPE_DIRECTIONAL | WTYPE_LIGHT);
+  this->setProjectileTypeC("MBolt");   // FIXME temp projectile, until nadion_laser_bolt exists.
+  this->prepareProjectiles(100);
+
+
+  this->setBarrels(1);
+  this->setSegs(1);
+  this->activeBarrel = 0;
+
+  this->objComp = new PNode**[this->getBarrels()];
+  this->emissionPoint = new PNode*[this->getBarrels()];
+  this->shootAnim = new Animation3D**[this->getBarrels()];
+  for (int i = 0; i < this->getBarrels(); i++)
+  {
+    this->objComp[i] = new PNode* [this->getSegs()];
+    this->emissionPoint[i] = new PNode;
+    this->emissionPoint[i]->setParent(this);  //Parenting emissionPoint to Weapon
+    this->emissionPoint[i]->setName("EmissionPoint");
+    this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
+    this->shootAnim[i] = new Animation3D* [this->getSegs()];
+    for(int j = 0; j < this->getSegs(); j++)
+    {
+      this->objComp[i][j] = new PNode;
+      this->shootAnim[i][j] = new Animation3D(this->objComp[i][j]);
+      this->shootAnim[i][j]->setInfinity(ANIM_INF_CONSTANT);
+    }
+  }
+
+  this->emissionPoint[0]->setRelCoor(Vector(1.680, 0.0, 0.0) * this->getScaling());
+
+  Animation3D* animation2 = this->getAnimation(WS_ACTIVATING, this);
+  Animation3D* animation3 = this->getAnimation(WS_DEACTIVATING, this);
+
+  animation2->setInfinity(ANIM_INF_CONSTANT);
+  animation3->setInfinity(ANIM_INF_CONSTANT);
+
+  animation2->addKeyFrame(Vector(0.0, -1.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
+  animation2->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.5, ANIM_LINEAR, ANIM_NULL);
+
+  animation3->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.5, ANIM_LINEAR, ANIM_NULL);
+  animation3->addKeyFrame(Vector(0.0, -1.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
+}
+
+
+void NadionLaser::fire()
+{
+  Projectile* pj =  this->getProjectile();
+  if (pj == NULL)
+    return;
+
+  // set the owner
+  pj->setOwner(this->getOwner());
+
+  pj->setParent(PNode::getNullParent());
+
+  pj->setVelocity(this->getParent()->getVelocity() + this->getAbsDir().apply(Vector(1,0,0))*160);
+
+  pj->setAbsCoor(this->getEmissionPoint());
+  pj->setAbsDir(this->getAbsDir());
+  pj->activate();
+
+}
+
+
+/**
+ *  this activates the weapon
+*/
+void NadionLaser::activate()
+{
+}
+
+/**
+ *  this deactivates the weapon
+*/
+void NadionLaser::deactivate()
+{
+}
+
+void NadionLaser::draw() const
+{
+  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+    glTranslatef (this->getAbsCoor ().x, this->getAbsCoor ().y, this->getAbsCoor ().z);
+    Vector tmpRot = this->getAbsDir().getSpacialAxis();
+    glRotatef (this->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
+    static_cast<StaticModel*>(this->getModel())->draw();
+
+
+  glPopMatrix();
+}
+
+void NadionLaser::tick(float dt)
+{
+  if (!Weapon::tickW(dt))
+    return;
+  if (this->energyWidget != NULL && !this->isEnergyWidgetInitialized)
+  {
+    this->energyWidget->setDisplayedImage("textures/gui/gui_medium_bold.png");
+    this->setEnergyWidgetInitialized(true);
+  }
+}
Index: branches/vs-enhencements/src/world_entities/weapons/nadion_laser.h
===================================================================
--- branches/vs-enhencements/src/world_entities/weapons/nadion_laser.h	(revision 10648)
+++ branches/vs-enhencements/src/world_entities/weapons/nadion_laser.h	(revision 10648)
@@ -0,0 +1,37 @@
+#ifndef NADION_LASER_H
+#define NADION_LASER_H
+
+
+#include "weapon.h"
+
+
+class NadionLaser : public Weapon
+{
+  //ObjectListDeclaration(NadionLaser);
+  public:
+    NadionLaser();
+    NadionLaser (const TiXmlElement* root);
+    virtual ~NadionLaser();
+
+    void init();
+    virtual void loadParams(const TiXmlElement* root);
+
+    virtual void activate();
+    virtual void deactivate();
+
+    virtual void fire();
+
+    virtual void tick(float dt);
+
+    virtual void draw() const;
+
+  private:
+    PNode*** objComp;
+    Animation3D*** shootAnim;
+    PNode** emissionPoint;
+
+    int activeBarrel;
+
+};
+
+#endif
Index: branches/vs-enhencements/src/world_entities/weapons/rf_cannon.cc
===================================================================
--- branches/vs-enhencements/src/world_entities/weapons/rf_cannon.cc	(revision 10646)
+++ branches/vs-enhencements/src/world_entities/weapons/rf_cannon.cc	(revision 10648)
@@ -67,5 +67,7 @@
 {
 
-  this->loadModel("models/guns/rf_cannon.obj", 0.2);
+  this->setScaling(.2);
+
+  this->loadModel("models/guns/rf_cannon.obj", this->getScaling());
 
 
@@ -102,8 +104,8 @@
   }
 
-  this->emissionPoint[0]->setRelCoor(Vector(1.02, 0.0, 0.15));
-  this->emissionPoint[1]->setRelCoor(Vector(1.02, 0.09, 0.0));
-  this->emissionPoint[2]->setRelCoor(Vector(1.02, 0.0, -0.15));
-  this->emissionPoint[3]->setRelCoor(Vector(1.02, -0.09, 0.0));
+  this->emissionPoint[0]->setRelCoor(Vector(4.1, 0.0, 0.75) * this->getScaling());
+  this->emissionPoint[1]->setRelCoor(Vector(4.1, 0.45, 0.0) * this->getScaling());
+  this->emissionPoint[2]->setRelCoor(Vector(4.1, 0.0, -0.75) * this->getScaling());
+  this->emissionPoint[3]->setRelCoor(Vector(4.1, -0.45, 0.0) * this->getScaling());
 
   Animation3D* animation2 = this->getAnimation(WS_ACTIVATING, this);
Index: branches/vs-enhencements/src/world_entities/weapons/weapon.cc
===================================================================
--- branches/vs-enhencements/src/world_entities/weapons/weapon.cc	(revision 10646)
+++ branches/vs-enhencements/src/world_entities/weapons/weapon.cc	(revision 10648)
@@ -134,5 +134,5 @@
   for(int i = 0; i < this->barrels; i++){
     this->emissionPoint[i] = new PNode;
-    this->emissionPoint[i]->setParent(this);             //< One EmissionPoint, that is a PNode connected to the weapon. You can set this to the exitting point of the Projectiles
+    this->emissionPoint[i]->setParent(this);  //Parenting emissionPoint to Weapons
     this->emissionPoint[i]->setName("EmissionPoint");
     this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
@@ -159,46 +159,4 @@
   //this->setSynchronized(true);
 }
-
-/**
- * needed, if there are more than one barrel or segments
- */
-/*
-void Weapon::init2()
-{
-  if (this->barrels == 1 && this->segs == 1)
-    return;
-
-  delete this->emissionPoint[0];
-  delete this->emissionPoint;
-  delete this->shootAnim[0];
-  delete this->shootAnim;
-
-  this->shootAnim = new Animation3D**[this->barrels];
-  this->emissionPoint = new PNode*[this->barrels];
-  for(int i = 0; i < this->barrels; i++){
-    this->emissionPoint[i] = new PNode;
-    this->emissionPoint[i]->setParent(this);             //< One EmissionPoint, that is a PNode connected to the weapon. You can set this to the exitting point of the Projectiles
-    this->emissionPoint[i]->setName("EmissionPoint");
-    this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
-    this->shootAnim[i] = new Animation3D* [this->segs];
-  }
-}*/
-
-/**
- * deconstructor for init2
- */
-/*
-void Weapon::deconstr()
-{
-  for(int i = 0; i < this->barrels; i++) {
-    delete this->emissionPoint[i];
-    for (int j = 0; j < this->segs; j++)
-      delete this->shootAnim[i][j];
-    delete this->shootAnim[i];
-  }
-
-  delete this->emissionPoint;
-  delete this->shootAnim;
-}*/
 
 /**
Index: branches/vs-enhencements/src/world_entities/weapons/weapon.h
===================================================================
--- branches/vs-enhencements/src/world_entities/weapons/weapon.h	(revision 10646)
+++ branches/vs-enhencements/src/world_entities/weapons/weapon.h	(revision 10648)
@@ -124,4 +124,6 @@
     Projectile* getProjectile();
 
+    inline void setScaling(float scaling) { this->scaling = scaling; };
+    inline float getScaling() { return this->scaling; };
 
     // EMISSION
@@ -248,4 +250,6 @@
     PNode*               defaultTarget;                    //!< A target for targeting Weapons.
 
+    float                scaling;                          //!< Local scaling factor. any scaling will be done through this vector.
+
     ////////////
     // PHASES //
