Index: branches/ai/src/world_entities/npcs/npc.cc
===================================================================
--- branches/ai/src/world_entities/npcs/npc.cc	(revision 10262)
+++ branches/ai/src/world_entities/npcs/npc.cc	(revision 10263)
@@ -18,4 +18,13 @@
 
 
+#include "movement_module.h"
+#include "ai_module.h"
+#include "ai_team.h"
+#include "ai_swarm.h"
+#include "ai_engine.h"
+
+#include "loading/load_param.h"
+
+
 #include "npc.h"
 
@@ -23,4 +32,5 @@
 
 NPC::NPC(const TiXmlElement* root)
+  : weaponMan(this)
 {
   this->registerObject(this, NPC::_objectList);
@@ -28,16 +38,19 @@
   this->toList(OM_GROUP_00);
 
+  std::cout << "Team Number: " << teamNumber << "\n";
+  std::cout << "Swarm Number:" << swarmNumber << "\n";
+  //aiModule=new MovementModule(this);
+  //AIEngine::getInstance()->addAI(teamNumber,swarmNumber,aiModule);
+  AIEngine::getInstance()->addAI(teamNumber,swarmNumber,(WorldEntity*)this);
+
+  this->bFire = false;
+
 }
 
 
-NPC::~NPC () {}
-
-
-
-/**
- * adds an AI to this NPC
- */
-void NPC::addAI(AI* ai)
-{}
+NPC::~NPC ()
+{
+  AIEngine::getInstance()->removeAI(teamNumber,swarmNumber,(WorldEntity*)this);
+}
 
 
@@ -50,4 +63,19 @@
 {
    WorldEntity::loadParams(root);
+
+  LoadParam(root, "team", this, NPC, setTeamNumber)
+  .describe("this sets the team number")
+  .defaultValues(0);
+
+  LoadParam(root, "swarm", this, NPC, setSwarmNumber)
+  .describe("this sets the swarm number")
+  .defaultValues(0);
 }
 
+
+void NPC::tick(float dt)
+{
+  this->weaponMan.tick(dt);
+  if (this->bFire)
+    weaponMan.fire();
+}
Index: branches/ai/src/world_entities/npcs/npc.h
===================================================================
--- branches/ai/src/world_entities/npcs/npc.h	(revision 10262)
+++ branches/ai/src/world_entities/npcs/npc.h	(revision 10263)
@@ -4,20 +4,38 @@
 
 #include "world_entity.h"
+#include "ai_module.h"
+#include "world_entities/weapons/weapon_manager.h"
 
 class AI;
 
-class NPC : public WorldEntity {
+class NPC : public WorldEntity
+{
   ObjectListDeclaration(NPC);
- public:
-   NPC (const TiXmlElement* root);
+
+public:
+  NPC(const TiXmlElement* root = NULL);
   virtual ~NPC ();
 
   virtual void loadParams(const TiXmlElement* root = NULL);
 
-  void addAI(AI* ai);
+  virtual void tick(float dt);
+  inline int getTeam()  { return teamNumber; }
+
+
+private:
+  inline void setTeamNumber(int number) { teamNumber=number; }
+  inline void setSwarmNumber(int number) { swarmNumber=number; }
 
 
  private:
 
+  int                   teamNumber;   //!< number of the team
+  int                   swarmNumber;  //!< number of the swarm
+  int                   difficulty;   //!< difficulty
+
+  WeaponManager         weaponMan;    //!< weapon manager
+  bool                  bFire;        //!< fire
+
+  AIModule*             aiModule;
 };
 
Index: branches/ai/src/world_entities/npcs/npc_test.cc
===================================================================
--- branches/ai/src/world_entities/npcs/npc_test.cc	(revision 10262)
+++ branches/ai/src/world_entities/npcs/npc_test.cc	(revision 10263)
@@ -32,9 +32,5 @@
 
 #include "class_id_DEPRECATED.h"
-#include "movement_module.h"
-#include "ai_module.h"
-#include "ai_team.h"
-#include "ai_swarm.h"
-#include "ai_engine.h"
+
 
 ObjectListDefinitionID(NPC2, CL_NPC_TEST2);
@@ -42,21 +38,18 @@
 
 
-NPC2::NPC2(const TiXmlElement* root) : NPC(NULL)
+NPC2::NPC2(const TiXmlElement* root)
 {
-	this->registerObject(this, NPC2::_objectList);
+  this->registerObject(this, NPC2::_objectList);
 
-	if (root != NULL)
-		this->loadParams(root);
+  if (root != NULL)
+    this->loadParams(root);
 
-	std::cout << "Team Number: " << teamNumber << "\n";
-	std::cout << "Swarm Number:" << swarmNumber << "\n";
-	//aiModule=new MovementModule(this);
-	//AIEngine::getInstance()->addAI(teamNumber,swarmNumber,aiModule);
-	AIEngine::getInstance()->addAI(teamNumber,swarmNumber,(WorldEntity*)this);
+
+  // create the weapons and their manager
+
 }
 
 NPC2::~NPC2()
 {
-	AIEngine::getInstance()->removeAI(teamNumber,swarmNumber,(WorldEntity*)this);
 }
 
@@ -65,11 +58,4 @@
   NPC::loadParams(root);
 
-  LoadParam(root, "team", this, NPC2, setTeamNumber)
-		.describe("this sets the team number")
-		.defaultValues(0);
-
-  LoadParam(root, "swarm", this, NPC2, setSwarmNumber)
-		.describe("this sets the swarm number")
-		.defaultValues(0);
 }
 
@@ -78,7 +64,11 @@
 void NPC2::tick(float dt)
 {
-	// animating the md2 model
-	if( likely(this->getModel(0) != NULL) && this->getModel(0)->isA(MD2Model::staticClassID()))
-		((MD2Model*)this->getModel(0))->tick(dt);
+
+
+
+
+  // animating the md2 model
+  if( likely(this->getModel(0) != NULL) && this->getModel(0)->isA(MD2Model::staticClassID()))
+    ((MD2Model*)this->getModel(0))->tick(dt);
 }
 
Index: branches/ai/src/world_entities/npcs/npc_test.h
===================================================================
--- branches/ai/src/world_entities/npcs/npc_test.h	(revision 10262)
+++ branches/ai/src/world_entities/npcs/npc_test.h	(revision 10263)
@@ -4,5 +4,6 @@
 
 #include "npc.h"
-#include "ai_module.h"
+
+
 
 class AI;
@@ -10,24 +11,19 @@
 class AIModule;
 
-class NPC2 : public NPC {
-	ObjectListDeclaration(NPC2);
+class NPC2 : public NPC
+{
+  ObjectListDeclaration(NPC2);
 
-	public:
-		NPC2 (const TiXmlElement* root);
-		virtual ~NPC2 ();
-		virtual void loadParams(const TiXmlElement* root);
-		virtual void tick(float dt);
-		inline int getTeam(){return teamNumber;}
+public:
+  NPC2 (const TiXmlElement* root);
+  virtual ~NPC2 ();
+  virtual void loadParams(const TiXmlElement* root);
+  virtual void tick(float dt);
 
 
-	private:
-		inline void setTeamNumber(int number){teamNumber=number;}
-		inline void setSwarmNumber(int number){swarmNumber=number;}
 
- 		int teamNumber;
- 		int swarmNumber;
-		int difficulty;
 
-		AIModule* aiModule;
+private:
+
 };
 
