class AnimalBase extends DayZAnimal
{
	protected ref ArrowManagerBase m_ArrowManager;
	
	void AnimalBase()
	{
		m_ArrowManager = new ArrowManagerBase(this);
		CacheSkinningBloodInfectionChance(eAgents.SALMONELLA);
	}
	
	override ArrowManagerBase GetArrowManager()
	{
		return m_ArrowManager;
	}
	
	override bool IsRefresherSignalingViable()
	{
		return false;
	}
	
	override bool IsSelfAdjustingTemperature()
	{
		return IsAlive();
	}
	
	override void DeathUpdate()
	{
		EntityAI dead_entity = EntityAI.Cast( GetGame().CreateObjectEx( GetDeadItemName(), GetPosition(), ECE_OBJECT_SWAP, RF_ORIGINAL ) );
		dead_entity.SetOrientation(GetOrientation());
		MiscGameplayFunctions.TransferItemProperties(this,dead_entity,true,true,true,true);
		if (!KeepHealthOnReplace())
			dead_entity.SetHealthMax("","Health");
		
		DeleteSafe();
	}
}

class Animal_BosTaurus extends AnimalBase
{
	override void RegisterHitComponentsForAI()
	{
		m_DefaultHitComponent = "Zone_Chest";
		m_DefaultHitPositionComponent = "Pelvis";
		
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Head", 5);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Belly", 25);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Neck", 65);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Chest", 50);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Legs", 70);
	}
	
	override string CaptureSound()
	{
		return "CattleBellow_SoundSet";
	}
	
	override string ReleaseSound()
	{
		return "CattleMooA_SoundSet";
	}
}
class Animal_BosTaurusF extends Animal_BosTaurus {}

class Animal_CanisLupus extends AnimalBase
{
	override void RegisterHitComponentsForAI()
	{
		m_DefaultHitComponent = "Zone_Chest";
		m_DefaultHitPositionComponent = "Pelvis";
		
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Head", 2);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Neck", 65);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Chest", 50);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Legs_Back", 75);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Legs_Front", 70);
	}
	
	override bool IsDanger()
	{
		return true;
	}
	
	override string CaptureSound()
	{
		return "WolfWhimper_SoundSet";
	}
	
	override string ReleaseSound()
	{
		return "WolfBark_SoundSet";
	}
}

class Animal_CapraHircus extends AnimalBase
{
	override void RegisterHitComponentsForAI()
	{
		m_DefaultHitComponent = "Zone_Chest";
		m_DefaultHitPositionComponent = "Pelvis";
		
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Head", 4);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Neck", 65);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Chest", 50);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Legs", 70);
	}
	
	override string CaptureSound()
	{
		return "GoatBleat_B_SoundSet";
	}
	
	override string ReleaseSound()
	{
		return "GoatBleat_A_SoundSet";
	}
	
}
class Animal_CapraHircusF extends Animal_CapraHircus {}
class Animal_CapraHircus_Spooky extends Animal_CapraHircus
{
	override string GetDestructionBehaviour()
    {
       	return "DestructionEffectSpookyGoat";
   	}
 
	override bool IsDestructionBehaviour()
   	{	
		return true;
	}
	
	#ifndef SERVER
	protected GoatLight m_EyeLight;
	
	override void EEInit()
	{
		if (!IsDamageDestroyed())//walking up to or connecting to already dead zombies check
			m_EyeLight = GoatLight.Cast(ScriptedLightBase.CreateLightAtObjMemoryPoint(GoatLight, this, "GoatLight"));
	}

	void ~Animal_CapraHircus_Spooky()
	{
		if (m_EyeLight)
			m_EyeLight.Destroy();
	}
	override void OnDamageDestroyed(int oldLevel)
	{
		if (m_EyeLight)
			m_EyeLight.FadeOut(15);
			
	}
	#endif
	
	override bool ResistContaminatedEffect()
	{
		return true;
	}
}

class Animal_CapreolusCapreolus extends AnimalBase
{
	override void RegisterHitComponentsForAI()
	{
		m_DefaultHitComponent = "Zone_Chest";
		m_DefaultHitPositionComponent = "Pelvis";
		
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Head", 4);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Neck", 65);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Chest", 50);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Legs", 70);
	}
	
	override string CaptureSound()
	{
		return "HareSquawk_SoundSet";
	}
	
	override string ReleaseSound()
	{
		return "HareChirp_SoundSet";
	}
}
class Animal_CapreolusCapreolusF extends Animal_CapreolusCapreolus {}

class Animal_CervusElaphus extends AnimalBase
{
	override void RegisterHitComponentsForAI()
	{
		m_DefaultHitComponent = "Zone_Chest";
		m_DefaultHitPositionComponent = "Pelvis";
		
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Head", 2);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Neck", 65);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Chest", 50);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Legs", 70);
	}
	
	override string CaptureSound()
	{
		return "DeerBleat_SoundSet";
	}
	
	override string ReleaseSound()
	{
		return "DeerRoar_SoundSet";
	}
}
class Animal_CervusElaphusF extends Animal_CervusElaphus {}

class Animal_RangiferTarandus extends AnimalBase
{
	override void RegisterHitComponentsForAI()
	{
		m_DefaultHitComponent = "Zone_Chest";
		m_DefaultHitPositionComponent = "Pelvis";
		
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Head", 2);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Neck", 65);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Chest", 50);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Legs", 70);
	}
	
	override string CaptureSound()
	{
		return "DeerBleat_SoundSet";
	}
	
	override string ReleaseSound()
	{
		return "DeerRoar_SoundSet";
	}
}
class Animal_RangiferTarandusF extends Animal_RangiferTarandus {}
class Animal_RangiferTarandus_Xmas extends Animal_RangiferTarandus {}

class Animal_GallusGallusDomesticus extends AnimalBase
{
	override void RegisterHitComponentsForAI()
	{
		m_DefaultHitComponent = "Spine";
		m_DefaultHitPositionComponent = "Spine";
		
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Head", 1);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Head", 5);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Head", 20);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "LArm1", 33);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "RArm1", 33);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Spine", 70);
	}
	
	override string CaptureSound()
	{
		return "HenScream_SoundSet";
	}
	
	override string ReleaseSound()
	{
		return "HenCluck_X_SoundSet";
	}
	
	override bool ReplaceOnDeath()
	{
		return true;
	}
	
	override bool CanBeSkinned()
	{
		return false;
	}
	
	override string GetDeadItemName()
	{
		return "DeadRooster";
	}
	
	override bool KeepHealthOnReplace()
	{
		return false;
	}
}

class Animal_GallusGallusDomesticusF extends Animal_GallusGallusDomesticus 
{
	override string GetDeadItemName()
	{
		return "DeadChicken_Brown";
	}
}

class Animal_GallusGallusDomesticusF_Brown extends Animal_GallusGallusDomesticusF
{
	override string GetDeadItemName()
	{
		return "DeadChicken_Brown";
	}
}

class Animal_GallusGallusDomesticusF_Spotted extends Animal_GallusGallusDomesticusF
{
	override string GetDeadItemName()
	{
		return "DeadChicken_Spotted";
	}
}

class Animal_GallusGallusDomesticusF_White extends Animal_GallusGallusDomesticusF
{
	override string GetDeadItemName()
	{
		return "DeadChicken_White";
	}
}


class Animal_OvisAries extends AnimalBase
{
	override void RegisterHitComponentsForAI()
	{
		m_DefaultHitComponent = "Zone_Chest";
		m_DefaultHitPositionComponent = "Pelvis";
		
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Head", 4);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Chest", 15);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Neck", 55);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Chest", 50);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Legs", 70);
	}
	
	override string CaptureSound()
	{
		return "SheepBleat_E_SoundSet";
	}
	
	override string ReleaseSound()
	{
		return "SheepBleat_G_SoundSet";
	}
}
class Animal_OvisAriesF extends Animal_OvisAries {}

class Animal_SusDomesticus extends AnimalBase
{
	override void RegisterHitComponentsForAI()
	{
		m_DefaultHitComponent = "Zone_Spine";
		m_DefaultHitPositionComponent = "Spine1";
		
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Head", 5);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Belly", 25);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Neck", 65);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Chest", 50);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Legs", 70);
	}
	
	override string CaptureSound()
	{
		return "HogSqueal_SoundSet";
	}
	
	override string ReleaseSound()
	{
		return "HogGrunt_G_SoundSet";
	}
}

class Animal_SusScrofa extends AnimalBase
{
	override void RegisterHitComponentsForAI()
	{
		m_DefaultHitComponent = "Zone_Spine";
		m_DefaultHitPositionComponent = "Pelvis";
		
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Head", 3);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Neck", 55);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Belly", 15);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Legs", 70);
	}
	
	override string CaptureSound()
	{
		return "HogSqueal_SoundSet";
	}
	
	override string ReleaseSound()
	{
		return "HogGrunt_G_SoundSet";
	}
}

class Animal_UrsusArctos extends AnimalBase
{
	override void RegisterHitComponentsForAI()
	{
		m_DefaultHitComponent = "Zone_Head";
		m_DefaultHitPositionComponent = "Pelvis";
		
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Head", 25);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Belly", 50);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Neck", 65);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Zone_Legs", 70);
	}
	
	override bool IsDanger()
	{
		return true;
	}
	
	override string CaptureSound()
	{
		return "BearSnarl_SoundSet";
	}
	
	override string ReleaseSound()
	{
		return "BearRoarShort_SoundSet";
	}
}

class Animal_LepusEuropaeus extends AnimalBase
{
	override void RegisterHitComponentsForAI()
	{
		m_DefaultHitComponent = "Spine";
		m_DefaultHitPositionComponent = "Spine";
		
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Head", 20);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "LFLeg2", 5);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "RFLeg2", 5);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Chest", 70);
	}
	
	override string CaptureSound()
	{
		return "HenScream_SoundSet";
	}
	
	override string ReleaseSound()
	{
		return "HenCluck_X_SoundSet";
	}
	
	override bool ReplaceOnDeath()
	{
		return true;
	}
	
	override bool CanBeSkinned()
	{
		return false;
	}
	
	override string GetDeadItemName()
	{
		return "DeadRabbit";
	}
	
	override bool KeepHealthOnReplace()
	{
		return false;
	}
}

class Animal_VulpesVulpes extends AnimalBase
{
	override void RegisterHitComponentsForAI()
	{
		m_DefaultHitComponent = "Spine";
		m_DefaultHitPositionComponent = "Spine";
		
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Head", 20);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "LFLeg2", 5);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "RFLeg2", 5);
		DayZAIHitComponentHelpers.RegisterHitComponent(m_HitComponentsForAI, "Chest", 70);
	}
	
	override string CaptureSound()
	{
		return "HenScream_SoundSet";
	}
	
	override string ReleaseSound()
	{
		return "HenCluck_X_SoundSet";
	}
	
	override bool ReplaceOnDeath()
	{
		return true;
	}
	
	override bool CanBeSkinned()
	{
		return false;
	}
	
	override string GetDeadItemName()
	{
		return "DeadFox";
	}
	
	override bool KeepHealthOnReplace()
	{
		return false;
	}
}