 	float xOffSet = 0.3f * (first ? 1 : -1);
 	pNode.Translate(Vector3(xOffSet,-0.2,0));
 	
-	BillboardSet@ bbSet = pNode.CreateComponent("BillboardSet");
-	bbSet.numBillboards = 1;
-	bbSet.material = cache.GetResource("Material", "Resources/Materials/bullet_particle.xml");
-	
-	ParticleEmitter@ pEmitter = pNode.CreateComponent("ParticleEmitter");
-	pEmitter.effect = cache.GetResource("ParticleEffect", "Resources/Particles/bullet_particle.xml");
-	pEmitter.enabled = true;
-	
-	pNode.CreateScriptObject(scriptFile, "BulletObject");
-	
-	
-	
-	RigidBody@ objBody = pNode.CreateComponent("RigidBody");
-	objBody.mass = 1.0f;
-	objBody.trigger = true;
-	objBody.useGravity = false;
-	objBody.ccdRadius = 0.05;
-	objBody.ccdMotionThreshold = 0.15f;
-	objBody.SetCollisionLayerAndMask(BULLET_COLLISION_LAYER, DRONE_COLLISION_LAYER | FLOOR_COLLISION_LAYER);
-	
-	CollisionShape@ objShape = pNode.CreateComponent("CollisionShape");
-	objShape.SetSphere(0.3f);
-	objBody.linearVelocity = pNode.rotation * Vector3(0,0,70);
+	pNode.CreateScriptObject(scriptFile, "LowLevelBullet");
 }
 
 

{
	Node@ droneNode = scene_.CreateChild();
	droneNode.SetScale(3.0f);
	AnimatedModel@ droneBody = droneNode.CreateComponent("AnimatedModel");
	droneBody.model = cache.GetResource("Model", "Resources/Models/drone_body.mdl");
	droneBody.material = cache.GetResource("Material", "Resources/Materials/drone_body.xml");
	
	AnimatedModel@ droneArm = droneNode.CreateComponent("AnimatedModel");
	droneArm.model = cache.GetResource("Model", "Resources/Models/drone_arm.mdl");
	droneArm.material = cache.GetResource("Material", "Resources/Materials/drone_arm.xml");
	
	RigidBody@ droneRB = droneNode.CreateComponent("RigidBody");
	droneRB.mass = 1.0f;
	droneRB.SetCollisionLayerAndMask(DRONE_COLLISION_LAYER, BULLET_COLLISION_LAYER | PLAYER_COLLISION_LAYER | FLOOR_COLLISION_LAYER);
	droneRB.kinematic = true;
	
	CollisionShape@ droneCS = droneNode.CreateComponent("CollisionShape");
	droneCS.SetSphere(0.3f);
	
	droneNode.CreateScriptObject(scriptFile,"DroneObject");
	AnimationController@ animController = droneNode.CreateComponent("AnimationController");
	animController.PlayExclusive("Resources/Models/open_arm.ani", 0, false);
	
	float nodeYaw = Random(360);
	droneNode.rotation = Quaternion(0,nodeYaw, 0);
	droneNode.Translate(Vector3(0,7,40));
	droneNode.vars["Sprite"] = CreateDroneSprite();
	
}


Sprite@ CreateDroneSprite()
{
	Texture2D@ droneSpriteTex = cache.GetResource("Texture2D", "Resources/Textures/drone_sprite.png");
	Sprite@ droneSprite = radarScreenBase_.CreateChild("Sprite");
	
	droneSprite.texture = droneSpriteTex;

	}
	

}


int GetDroneCount()
{
	Array<Node@> scriptNodes = scene_.GetChildrenWithScript(true);
	int count = 0;
	
	for(uint i=0; i < scriptNodes.length ; i++)
	{
		Node@ droneNode = scriptNodes[i];
		Sprite@ nodeSprite = droneNode.vars["Sprite"].GetPtr();
		
		if(nodeSprite !is null)
		{
			count += 1;
		}

	}
	
	return count;
}

void HandlePlayerHit(StringHash eventType, VariantMap& eventData)
