//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
//=============================================================================//

#include "cbase.h"
#include "tfc_shareddefs.h"


const char *g_AmmoTypeNames[] =
{
	"DUMMY AMMO",
	TFC_AMMO_SHELLS_NAME,
	TFC_AMMO_NAILS_NAME,
	TFC_AMMO_ROCKETS_NAME,
	TFC_AMMO_CELLS_NAME,
	TFC_AMMO_MEDIKIT_NAME,
	TFC_AMMO_DETPACK_NAME,
	TFC_AMMO_GRENADES1_NAME,
	TFC_AMMO_GRENADES2_NAME
};


int g_nMaxGrenades[NUM_GRENADE_TYPES] =
{
	0,	// GR_TYPE_NONE
	4,	// GR_TYPE_NORMAL
	3,	// GR_TYPE_CONCUSSION
	2,	// GR_TYPE_NAIL
	2,	// GR_TYPE_MIRV
	2,	// GR_TYPE_NAPALM
	2,	// GR_TYPE_GAS
	4,	// GR_TYPE_EMP
	3,	// GR_TYPE_CALTROP
};


CTFCPlayerClassInfo g_TFCPlayerClassInfo[PC_LASTCLASS];


// Note: this could go in a script, but it's not much trouble to have it all here.
class CClassInfoInitializer
{
public:

	CClassInfoInitializer()
	{
		memset( &g_TFCPlayerClassInfo, 0xFE, sizeof( g_TFCPlayerClassInfo ) );
		
		// PC_UNDEFINED.
			CTFCPlayerClassInfo *pInfo = &g_TFCPlayerClassInfo[PC_UNDEFINED];
			pInfo->m_pClassName = "undefined";
			pInfo->m_pModelName = "models/player/civilian.mdl";
			pInfo->m_flMaxSpeed = 1;
			memset( pInfo->m_MaxAmmo, 0, sizeof( pInfo->m_MaxAmmo ) );

		// PC_SCOUT.
			pInfo = &g_TFCPlayerClassInfo[PC_SCOUT];
			pInfo->m_pClassName = "scout";
			pInfo->m_pModelName = "models/player/scout.mdl";
			pInfo->m_flMaxSpeed = 400;
			pInfo->m_iMaxHealth = 75;
			
			pInfo->m_iInitArmor = 25;
			pInfo->m_iMaxArmor = 50;
			
			pInfo->m_flInitArmorType = 0.3;
			pInfo->m_flMaxArmorType = 0.3;
			pInfo->m_nArmorClasses = 3;
			pInfo->m_iInitArmorClass = 0;

			pInfo->m_iGrenadeType1 = GR_TYPE_CALTROP;
			pInfo->m_iGrenadeType2 = GR_TYPE_CONCUSSION;

			pInfo->m_InitAmmo[TFC_AMMO_SHELLS] = 25;
			pInfo->m_InitAmmo[TFC_AMMO_NAILS] = 100;
			pInfo->m_InitAmmo[TFC_AMMO_ROCKETS] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_CELLS] = 50;
			pInfo->m_InitAmmo[TFC_AMMO_MEDIKIT] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES1] = 2;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES2] = 3;

			pInfo->m_MaxAmmo[TFC_AMMO_SHELLS] = 50;
			pInfo->m_MaxAmmo[TFC_AMMO_NAILS] = 200;
			pInfo->m_MaxAmmo[TFC_AMMO_ROCKETS] = 25;
			pInfo->m_MaxAmmo[TFC_AMMO_CELLS] = 100;
			pInfo->m_MaxAmmo[TFC_AMMO_MEDIKIT] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES1] = 4;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES2] = 4;

		// PC_SNIPER.
			pInfo = &g_TFCPlayerClassInfo[PC_SNIPER];
			pInfo->m_pClassName = "sniper";
			pInfo->m_pModelName = "models/player/sniper.mdl";
			pInfo->m_flMaxSpeed = 300;
			pInfo->m_iMaxHealth = 90;
			
			pInfo->m_iInitArmor = 25;
			pInfo->m_iMaxArmor = 50;
			
			pInfo->m_flInitArmorType = 0.3;
			pInfo->m_flMaxArmorType = 0.3;
			pInfo->m_nArmorClasses = 3;
			pInfo->m_iInitArmorClass = 0;

			pInfo->m_iGrenadeType1 = GR_TYPE_NORMAL;
			pInfo->m_iGrenadeType2 = GR_TYPE_NONE;

			pInfo->m_InitAmmo[TFC_AMMO_SHELLS] = 60;
			pInfo->m_InitAmmo[TFC_AMMO_NAILS] = 50;
			pInfo->m_InitAmmo[TFC_AMMO_ROCKETS] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_CELLS] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_MEDIKIT] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES1] = 2;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES2] = 0;

			pInfo->m_MaxAmmo[TFC_AMMO_SHELLS] = 75;
			pInfo->m_MaxAmmo[TFC_AMMO_NAILS] = 100;
			pInfo->m_MaxAmmo[TFC_AMMO_ROCKETS] = 25;
			pInfo->m_MaxAmmo[TFC_AMMO_CELLS] = 50;
			pInfo->m_MaxAmmo[TFC_AMMO_MEDIKIT] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES1] = 4;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES2] = 4;

		// PC_SOLDIER.
			pInfo = &g_TFCPlayerClassInfo[PC_SOLDIER];
			pInfo->m_pClassName = "soldier";
			pInfo->m_pModelName = "models/player/soldier.mdl";
			pInfo->m_flMaxSpeed = 240;
			pInfo->m_iMaxHealth = 100;
			
			pInfo->m_iInitArmor = 100;
			pInfo->m_iMaxArmor = 200;
			
			pInfo->m_flInitArmorType = 0.8;
			pInfo->m_flMaxArmorType = 0.8;
			pInfo->m_nArmorClasses = 31;
			pInfo->m_iInitArmorClass = 0;

			pInfo->m_iGrenadeType1 = GR_TYPE_NORMAL;
			pInfo->m_iGrenadeType2 = GR_TYPE_NAIL;

			pInfo->m_InitAmmo[TFC_AMMO_SHELLS] = 50;
			pInfo->m_InitAmmo[TFC_AMMO_NAILS] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_ROCKETS] = 10;
			pInfo->m_InitAmmo[TFC_AMMO_CELLS] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_MEDIKIT] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES1] = 2;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES2] = 1;

			pInfo->m_MaxAmmo[TFC_AMMO_SHELLS] = 100;
			pInfo->m_MaxAmmo[TFC_AMMO_NAILS] = 100;
			pInfo->m_MaxAmmo[TFC_AMMO_ROCKETS] = 50;
			pInfo->m_MaxAmmo[TFC_AMMO_CELLS] = 50;
			pInfo->m_MaxAmmo[TFC_AMMO_MEDIKIT] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES1] = 4;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES2] = 4;


		// PC_DEMOMAN.
			pInfo = &g_TFCPlayerClassInfo[PC_DEMOMAN];
			pInfo->m_pClassName = "demoman";
			pInfo->m_pModelName = "models/player/demo.mdl";
			pInfo->m_flMaxSpeed = 280;
			pInfo->m_iMaxHealth = 90;
			
			pInfo->m_iInitArmor = 50;
			pInfo->m_iMaxArmor = 120;
			
			pInfo->m_flInitArmorType = 0.6;
			pInfo->m_flMaxArmorType = 0.6;
			pInfo->m_nArmorClasses = 31;
			pInfo->m_iInitArmorClass = 0;

			pInfo->m_iGrenadeType1 = GR_TYPE_NORMAL;
			pInfo->m_iGrenadeType2 = GR_TYPE_MIRV;

			pInfo->m_InitAmmo[TFC_AMMO_SHELLS] = 30;
			pInfo->m_InitAmmo[TFC_AMMO_NAILS] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_ROCKETS] = 20;
			pInfo->m_InitAmmo[TFC_AMMO_CELLS] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_MEDIKIT] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES1] = 2;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES2] = 2;

			pInfo->m_MaxAmmo[TFC_AMMO_SHELLS] = 75;
			pInfo->m_MaxAmmo[TFC_AMMO_NAILS] = 50;
			pInfo->m_MaxAmmo[TFC_AMMO_ROCKETS] = 50;
			pInfo->m_MaxAmmo[TFC_AMMO_CELLS] = 50;
			pInfo->m_MaxAmmo[TFC_AMMO_MEDIKIT] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES1] = 4;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES2] = 4;


		// PC_MEDIC.
			pInfo = &g_TFCPlayerClassInfo[PC_MEDIC];
			pInfo->m_pClassName = "medic";
			pInfo->m_pModelName = "models/player/medic.mdl";
			pInfo->m_flMaxSpeed = 320;
			pInfo->m_iMaxHealth = 90;
			
			pInfo->m_iInitArmor = 50;
			pInfo->m_iMaxArmor = 100;
			
			pInfo->m_flInitArmorType = 0.3;
			pInfo->m_flMaxArmorType = 0.6;
			pInfo->m_nArmorClasses = 11;
			pInfo->m_iInitArmorClass = 0;

			pInfo->m_iGrenadeType1 = GR_TYPE_NORMAL;
			pInfo->m_iGrenadeType2 = GR_TYPE_CONCUSSION;

			pInfo->m_InitAmmo[TFC_AMMO_SHELLS] = 50;
			pInfo->m_InitAmmo[TFC_AMMO_NAILS] = 50;
			pInfo->m_InitAmmo[TFC_AMMO_ROCKETS] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_CELLS] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_MEDIKIT] = 50;
			pInfo->m_InitAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES1] = 2;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES2] = 2;

			pInfo->m_MaxAmmo[TFC_AMMO_SHELLS] = 75;
			pInfo->m_MaxAmmo[TFC_AMMO_NAILS] = 150;
			pInfo->m_MaxAmmo[TFC_AMMO_ROCKETS] = 25;
			pInfo->m_MaxAmmo[TFC_AMMO_CELLS] = 50;
			pInfo->m_MaxAmmo[TFC_AMMO_MEDIKIT] = 50;
			pInfo->m_MaxAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES1] = 4;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES2] = 4;


		// PC_HWGUY.
			pInfo = &g_TFCPlayerClassInfo[PC_HWGUY];
			pInfo->m_pClassName = "hwguy";
			pInfo->m_pModelName = "models/player/hvyweapon.mdl";
			pInfo->m_flMaxSpeed = 230;
			pInfo->m_iMaxHealth = 100;
			
			pInfo->m_iInitArmor = 150;
			pInfo->m_iMaxArmor = 300;
			
			pInfo->m_flInitArmorType = 0.8;
			pInfo->m_flMaxArmorType = 0.8;
			pInfo->m_nArmorClasses = 31;
			pInfo->m_iInitArmorClass = 0;

			pInfo->m_iGrenadeType1 = GR_TYPE_NORMAL;
			pInfo->m_iGrenadeType2 = GR_TYPE_MIRV;

			pInfo->m_InitAmmo[TFC_AMMO_SHELLS] = 200;
			pInfo->m_InitAmmo[TFC_AMMO_NAILS] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_ROCKETS] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_CELLS] = 30;
			pInfo->m_InitAmmo[TFC_AMMO_MEDIKIT] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES1] = 2;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES2] = 1;

			pInfo->m_MaxAmmo[TFC_AMMO_SHELLS] = 200;
			pInfo->m_MaxAmmo[TFC_AMMO_NAILS] = 200;
			pInfo->m_MaxAmmo[TFC_AMMO_ROCKETS] = 25;
			pInfo->m_MaxAmmo[TFC_AMMO_CELLS] = 50;
			pInfo->m_MaxAmmo[TFC_AMMO_MEDIKIT] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES1] = 4;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES2] = 4;


		// PC_PYRO.
			pInfo = &g_TFCPlayerClassInfo[PC_PYRO];
			pInfo->m_pClassName = "pyro";
			pInfo->m_pModelName = "models/player/pyro.mdl";
			pInfo->m_flMaxSpeed = 300;
			pInfo->m_iMaxHealth = 100;
			
			pInfo->m_iInitArmor = 50;
			pInfo->m_iMaxArmor = 150;
			
			pInfo->m_flInitArmorType = 0.6;
			pInfo->m_flMaxArmorType = 0.6;
			pInfo->m_nArmorClasses = 27;
			pInfo->m_iInitArmorClass = 0;

			pInfo->m_iGrenadeType1 = GR_TYPE_NORMAL;
			pInfo->m_iGrenadeType2 = GR_TYPE_NAPALM;

			pInfo->m_InitAmmo[TFC_AMMO_SHELLS] = 20;
			pInfo->m_InitAmmo[TFC_AMMO_NAILS] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_ROCKETS] = 5;
			pInfo->m_InitAmmo[TFC_AMMO_CELLS] = 120;
			pInfo->m_InitAmmo[TFC_AMMO_MEDIKIT] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES1] = 2;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES2] = 4;

			pInfo->m_MaxAmmo[TFC_AMMO_SHELLS] = 40;
			pInfo->m_MaxAmmo[TFC_AMMO_NAILS] = 50;
			pInfo->m_MaxAmmo[TFC_AMMO_ROCKETS] = 20;
			pInfo->m_MaxAmmo[TFC_AMMO_CELLS] = 200;
			pInfo->m_MaxAmmo[TFC_AMMO_MEDIKIT] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES1] = 4;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES2] = 4;


		// PC_SPY.
			pInfo = &g_TFCPlayerClassInfo[PC_SPY];
			pInfo->m_pClassName = "spy";
			pInfo->m_pModelName = "models/player/spy.mdl";
			pInfo->m_flMaxSpeed = 300;
			pInfo->m_iMaxHealth = 90;
			
			pInfo->m_iInitArmor = 25;
			pInfo->m_iMaxArmor = 100;
			
			pInfo->m_flInitArmorType = 0.6;
			pInfo->m_flMaxArmorType = 0.6;
			pInfo->m_nArmorClasses = 27;
			pInfo->m_iInitArmorClass = 0;

			pInfo->m_iGrenadeType1 = GR_TYPE_NORMAL;
			pInfo->m_iGrenadeType2 = GR_TYPE_GAS;

			pInfo->m_InitAmmo[TFC_AMMO_SHELLS] = 40;
			pInfo->m_InitAmmo[TFC_AMMO_NAILS] = 50;
			pInfo->m_InitAmmo[TFC_AMMO_ROCKETS] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_CELLS] = 10;
			pInfo->m_InitAmmo[TFC_AMMO_MEDIKIT] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES1] = 2;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES2] = 2;

			pInfo->m_MaxAmmo[TFC_AMMO_SHELLS] = 40;
			pInfo->m_MaxAmmo[TFC_AMMO_NAILS] = 100;
			pInfo->m_MaxAmmo[TFC_AMMO_ROCKETS] = 15;
			pInfo->m_MaxAmmo[TFC_AMMO_CELLS] = 30;
			pInfo->m_MaxAmmo[TFC_AMMO_MEDIKIT] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES1] = 4;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES2] = 4;


		// PC_ENGINEER.
			pInfo = &g_TFCPlayerClassInfo[PC_ENGINEER];
			pInfo->m_pClassName = "engineer";
			pInfo->m_pModelName = "models/player/engineer.mdl";
			pInfo->m_flMaxSpeed = 300;
			pInfo->m_iMaxHealth = 80;
			
			pInfo->m_iInitArmor = 25;
			pInfo->m_iMaxArmor = 50;
			
			pInfo->m_flInitArmorType = 0.3;
			pInfo->m_flMaxArmorType = 0.6;
			pInfo->m_nArmorClasses = 31;
			pInfo->m_iInitArmorClass = 0;

			pInfo->m_iGrenadeType1 = GR_TYPE_NORMAL;
			pInfo->m_iGrenadeType2 = GR_TYPE_EMP;

			pInfo->m_InitAmmo[TFC_AMMO_SHELLS] = 20;
			pInfo->m_InitAmmo[TFC_AMMO_NAILS] = 25;
			pInfo->m_InitAmmo[TFC_AMMO_ROCKETS] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_CELLS] = 100;
			pInfo->m_InitAmmo[TFC_AMMO_MEDIKIT] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES1] = 2;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES2] = 2;

			pInfo->m_MaxAmmo[TFC_AMMO_SHELLS] = 50;
			pInfo->m_MaxAmmo[TFC_AMMO_NAILS] = 50;
			pInfo->m_MaxAmmo[TFC_AMMO_ROCKETS] = 30;
			pInfo->m_MaxAmmo[TFC_AMMO_CELLS] = 200;
			pInfo->m_MaxAmmo[TFC_AMMO_MEDIKIT] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES1] = 4;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES2] = 4;


		// PC_CIVILIAN.
			pInfo = &g_TFCPlayerClassInfo[PC_CIVILIAN];
			pInfo->m_pClassName = "civilian";
			pInfo->m_pModelName = "models/player/civilian.mdl";
			pInfo->m_flMaxSpeed = 240;
			pInfo->m_iMaxHealth = 50;
			
			pInfo->m_iInitArmor = 0;
			pInfo->m_iMaxArmor = 0;
			
			pInfo->m_flInitArmorType = 0;
			pInfo->m_flMaxArmorType = 0;
			pInfo->m_nArmorClasses = 0;
			pInfo->m_iInitArmorClass = 0;

			pInfo->m_iGrenadeType1 = GR_TYPE_NONE;
			pInfo->m_iGrenadeType2 = GR_TYPE_NONE;

			pInfo->m_InitAmmo[TFC_AMMO_SHELLS] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_NAILS] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_ROCKETS] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_CELLS] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_MEDIKIT] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES1] = 0;
			pInfo->m_InitAmmo[TFC_AMMO_GRENADES2] = 0;

			pInfo->m_MaxAmmo[TFC_AMMO_SHELLS] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_NAILS] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_ROCKETS] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_CELLS] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_MEDIKIT] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_DETPACK] = 0;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES1] = 4;
			pInfo->m_MaxAmmo[TFC_AMMO_GRENADES2] = 4;
	}

} g_ClassInfoInitializer;




const CTFCPlayerClassInfo* GetTFCClassInfo( int iClass )
{
	Assert( iClass >= 0 && iClass < PC_LASTCLASS );
	return &g_TFCPlayerClassInfo[iClass];
}