Index: trunk/src/world_entities/npcs/ground_turret.cc
===================================================================
--- trunk/src/world_entities/npcs/ground_turret.cc	(revision 7072)
+++ trunk/src/world_entities/npcs/ground_turret.cc	(revision 7076)
@@ -18,4 +18,9 @@
 #include "world_entities/weapons/turret.h"
 
+#include "state.h"
+#include "playable.h"
+#include "player.h"
+
+
 #include "factory.h"
 #include "network_game_manager.h"
@@ -58,4 +63,7 @@
   this->left = NULL;
   this->right = NULL;
+
+  this->setHealthMax(300);
+  this->setHealth(300);
 
   /*  left = new Turret();
@@ -113,4 +121,8 @@
 void GroundTurret::tick(float dt)
 {
+  if(this->getHealth() > 0.0f && State::getPlayer() &&
+     State::getPlayer()->getPlayable() &&
+     State::getPlayer()->getPlayable()->distance(this) < 150) // HACK
+  {
   if (likely(this->left != NULL))
   {
@@ -123,5 +135,5 @@
     this->right->requestAction(WA_SHOOT);
   }
-
+  }
 }
 
@@ -140,13 +152,4 @@
 
 
-/**
- *
- *
- */
-void GroundTurret::collidesWith (WorldEntity* entity, const Vector& location)
-{
-  if (entity->isA(CL_PROJECTILE))
-    this->setAbsDirSoft(Quaternion(-90, Vector(0,0,1)), 90);
-}
 
 /**
@@ -166,4 +169,9 @@
 {
 
+}
+
+void GroundTurret::destroy()
+{
+  this->setAbsDirSoft(Quaternion(-90, Vector(0,0,1)), 90);
 }
 
Index: trunk/src/world_entities/npcs/ground_turret.h
===================================================================
--- trunk/src/world_entities/npcs/ground_turret.h	(revision 7072)
+++ trunk/src/world_entities/npcs/ground_turret.h	(revision 7076)
@@ -25,8 +25,8 @@
   virtual void leftWorld ();
 
+  virtual void destroy();
 
   virtual void draw() const;
   virtual void tick(float time);
-  virtual void collidesWith (WorldEntity* entity, const Vector& location);
 
   virtual int writeBytes(const byte* data, int length, int sender);
Index: trunk/src/world_entities/npcs/npc.cc
===================================================================
--- trunk/src/world_entities/npcs/npc.cc	(revision 7072)
+++ trunk/src/world_entities/npcs/npc.cc	(revision 7076)
@@ -41,32 +41,46 @@
 void NPC::collidesWith(WorldEntity* entity, const Vector& location)
 {
-  if (entity->isA(CL_PROJECTILE) && entity != this->collider)
+
+  if (entity == collider)
+    return;
+  collider = entity;
+
+  if (entity->isA(CL_PROJECTILE))
   {
-//    PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getName(), entity->getName(), location.x, location.y, location.z);
-//    this->applyForce(Vector(0,0,0)-location*1000);
-    if ((float)rand()/RAND_MAX < .3)
+    this->decreaseHealth(entity->getHealth() *(float)rand()/(float)RAND_MAX);
+    // EXTREME HACK
+    if (this->getHealth() <= 0.0f)
     {
-      WorldEntity* powerUp = new TurretPowerUp();
-      powerUp->setAbsCoor(this->getAbsCoor());
-//      powerUp->toList(OM_COMMON);
+      this->destroy();
     }
-    else if ((float)rand()/RAND_MAX < .3)
-    {
-      WorldEntity* powerUp = new LaserPowerUp();
-      powerUp->setAbsCoor(this->getAbsCoor());
-      powerUp->toList(OM_COMMON);
-    }
-    this->toList(OM_DEAD);
-    this->removeNode();
+  }
 
-      this->collider = entity;
-  }
-  //  else if (entity->isA(CL_PLAYER))
-  //    this->applyForce(Vector(0,0,0)-location*100);
-  else if (entity->isA(CL_NPC))
-  {
-    this->setVisibiliy(false);
-    this->toList(OM_DEAD);
-    this->removeNode();
-  }
+
+// //    PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getName(), entity->getName(), location.x, location.y, location.z);
+// //    this->applyForce(Vector(0,0,0)-location*1000);
+//     if ((float)rand()/RAND_MAX < .3)
+//     {
+//       WorldEntity* powerUp = new TurretPowerUp();
+//       powerUp->setAbsCoor(this->getAbsCoor());
+// //      powerUp->toList(OM_COMMON);
+//     }
+//     else if ((float)rand()/RAND_MAX < .3)
+//     {
+//       WorldEntity* powerUp = new LaserPowerUp();
+//       powerUp->setAbsCoor(this->getAbsCoor());
+//       powerUp->toList(OM_COMMON);
+//     }
+//     this->toList(OM_DEAD);
+//     this->removeNode();
+//
+//       this->collider = entity;
+//   }
+//   //  else if (entity->isA(CL_PLAYER))
+//   //    this->applyForce(Vector(0,0,0)-location*100);
+//   else if (entity->isA(CL_NPC))
+//   {
+//     this->setVisibiliy(false);
+//     this->toList(OM_DEAD);
+//     this->removeNode();
+//   }
 }
Index: trunk/src/world_entities/projectiles/hyperblast.cc
===================================================================
--- trunk/src/world_entities/projectiles/hyperblast.cc	(revision 7072)
+++ trunk/src/world_entities/projectiles/hyperblast.cc	(revision 7076)
@@ -41,6 +41,6 @@
   this->loadModel("models/projectiles/hyperblast.obj", 5);
 
-  this->setMinEnergy(1);
-  this->setHealthMax(10);
+  this->setMinEnergy(50);
+  this->setHealthMax(1000);
   this->lifeSpan = 1;
   this->size = 4.0;
@@ -91,4 +91,6 @@
   this->emitter->setEmissionRate(5000.0);
   this->emitter->setEmissionVelocity(50.0);
+
+  this->setHealth(200);
 }
 
Index: trunk/src/world_entities/skysphere.h
===================================================================
--- trunk/src/world_entities/skysphere.h	(revision 7072)
+++ trunk/src/world_entities/skysphere.h	(revision 7076)
@@ -28,5 +28,4 @@
   Skysphere(char* fileName = NULL);
   virtual ~Skysphere();
-  void destroy();
 
   void setRadius(float radius);
Index: trunk/src/world_entities/weapons/hyperblaster.cc
===================================================================
--- trunk/src/world_entities/weapons/hyperblaster.cc	(revision 7072)
+++ trunk/src/world_entities/weapons/hyperblaster.cc	(revision 7076)
@@ -69,6 +69,6 @@
   this->setStateDuration(WS_DEACTIVATING, .8);
 
-  this->setEnergyMax(10);
-  this->increaseEnergy(10);
+  this->setEnergyMax(5000);
+  this->increaseEnergy(5000);
   //this->minCharge = 2;
 
Index: trunk/src/world_entities/world_entity.h
===================================================================
--- trunk/src/world_entities/world_entity.h	(revision 7072)
+++ trunk/src/world_entities/world_entity.h	(revision 7076)
@@ -55,4 +55,5 @@
   virtual void postSpawn ();
   virtual void leaveWorld ();
+  virtual void destroy() {};
 
   virtual void tick (float time);
