//======== (C) Copyright 2001 Charles G. Cleveland All rights reserved. =========
//
// The copyright to the contents herein is the property of Charles G. Cleveland.
// The contents may be used and/or copied only with the written permission of
// Charles G. Cleveland, or in accordance with the terms and conditions stipulated in
// the agreement/contract under which the contents have been supplied.
//
// Purpose: Controls placement and order of all weapons
//
// $Workfile: AvHItemInfo.cpp $
// $Date: 2002/10/18 22:20:26 $
//
//-------------------------------------------------------------------------------
// $Log: AvHItemInfo.cpp,v $
// Revision 1.21  2002/10/18 22:20:26  Flayra
// - Don't auto pickup weapons so much
//
// Revision 1.20  2002/10/17 17:33:27  Flayra
// - Fixed missing bacterial spray weapon caused by secondary weapons switch
//
// Revision 1.19  2002/10/16 20:54:02  Flayra
// - Move secondary weapons to secondary slots
//
// Revision 1.18  2002/10/16 00:59:44  Flayra
// - Added concept of secondary weapons
//
// Revision 1.17  2002/10/03 18:56:21  Flayra
// - Swapped umbra and spores
//
// Revision 1.16  2002/08/16 02:38:59  Flayra
// - Swapped around umbra, blink and bilebomb
//
// Revision 1.15  2002/08/09 01:04:13  Flayra
// - Added concept of primary weapon
// - Removed autoreloading for weapons that don't use it, fixing bugs where knife slashes immediately when drawing it, and others
//
// Revision 1.14  2002/07/24 19:09:17  Flayra
// - Linux issues
//
// Revision 1.13  2002/07/24 18:45:41  Flayra
// - Linux and scripting changes
//
// Revision 1.12  2002/07/01 21:36:42  Flayra
// - Regular update (new weapons, new placement)
//
// Revision 1.11  2002/06/25 18:03:56  Flayra
// - Mark weapons with hive flags, deleted old weapons, added new weapons, fixed mines, changed weapon IDs
//
// Revision 1.10  2002/06/10 19:57:21  Flayra
// - Regular update (moved alien upgrade chambers around)
//
// Revision 1.9  2002/05/28 17:49:39  Flayra
// - Moved resource tower to second slot
//
// Revision 1.8  2002/05/23 02:33:42  Flayra
// - Post-crash checkin.  Restored @Backup from around 4/16.  Contains changes for last four weeks of development.
//
//===============================================================================
#include "mod/AvHMarineWeapons.h"
#include "mod/AvHPlayer.h"

#ifdef AVH_CLIENT
#include "cl_dll/eventscripts.h"
#include "cl_dll/in_defs.h"
#include "cl_dll/wrect.h"
#include "cl_dll/cl_dll.h"
#endif

#include "common/hldm.h"
#include "common/event_api.h"
#include "common/event_args.h"
#include "common/vector_util.h"
#include "mod/AvHMarineWeapons.h"
#include "mod/AvHMarineWeaponConstants.h"
#include "mod/AvHMarineEquipmentConstants.h"
#include "mod/AvHAlienWeapons.h"
#include "mod/AvHAlienWeaponConstants.h"
#include "mod/AvHMarineEquipment.h"
#include "mod/AvHAlienAbilities.h"
#include "mod/AvHAlienAbilityConstants.h"
#include "mod/AvHBalance.h"
#include "util/MathUtil.h"

typedef enum
{
	AVH_FIRST_SLOT = 0,
	AVH_SECOND_SLOT = 1,
	AVH_THIRD_SLOT = 2,
	AVH_FOURTH_SLOT = 3,
	AVH_FIFTH_SLOT = 4
} AvHSlotType;

// IMPORTANT NOTE:
//   When moving weapons around, be sure to update AvHBasePlayerWeapon::GetAnimationExtension() also.
//
// AVH_FIRST_SLOT
//	1: Machine gun
//	2: Sonic
//	3: HMG
//	4: Bite
//	5: Claws
//	6: Swipe
//	7: Builder spit
//  8: GrenadeGun
//	9: Bite2 //

// AVH_SECOND_SLOT
//	0: Pistol
//	1: Builder bacterial spray
//	2: 
//	3: Parasite
//	4: BlinkGun
//	5: Devour
//	6: Spore
//	7: Spike
//	8: 
//	9: 

// AVH_THIRD_SLOT
//	0: None
//	1: Knife
//	2: Metabolize
//	3: BileBomb
//	4: Stomp
//	5: Leap
//	6: 
//	7: Umbra
//  8: 
//	9: 

// AVH_FOURTH_SLOT
//	0: Mine
//	1: Webspinner
//	2: Grenade
//	3: 
//	4: PrimalScream
//	5: DivineWind
//	6: Charge
//	7: Acid rocket
//	8: Welder

// AVH_FIFTH_SLOT
//	0: None

//order = special primary, primary, special secondary, secondary, tertiary (slot 4 except grenade), melee (slot3, not droppable), grenade (not droppable)
const int kGrenadeWeaponWeight = 1;
const int kMeleeWeaponWeight = 2;
const int kDefaultTertiaryWeaponWeight = 3;
const int kDefaultSecondaryWeaponWeight = 4;
const int kSpecialSecondaryWeaponWeight = 5;
const int kDefaultPrimaryWeaponWeight = 6;
const int kSpecialPrimaryWeaponWeight = 7;

int AvHKnife::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_THIRD_SLOT;
	p->iPosition = 1;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kKNDamage);
	p->iMaxClip = WEAPON_NOCLIP;
	//p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ITEM_FLAG_SELECTONEMPTY;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD;
	p->iId = AVH_WEAPON_KNIFE;
	p->iWeight = kMeleeWeaponWeight;
	
	return 1;
}

int	AvHKnife::iItemSlot(void)
{
	return AVH_THIRD_SLOT + 1;
}


int AvHMine::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_FOURTH_SLOT;
	p->iPosition = 0;

	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = "MineAmmo";
	p->iMaxAmmo1 = 0;//BALANCE_IVAR(kMineMaxAmmo);
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kMineDamage);
	p->iMaxClip = BALANCE_IVAR(kMineMaxAmmo);
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY;//ITEM_FLAG_LIMITINWORLD | ITEM_FLAG_EXHAUSTIBLE;
	p->iId = AVH_WEAPON_MINE;
	p->iWeight = kDefaultTertiaryWeaponWeight;

//	p->pszName = STRING(pev->classname);
//	p->pszAmmo1 = "MineAmmo";
//	p->iMaxAmmo1 = kMineMaxAmmo;
//	p->pszAmmo2 = NULL;
//	p->iMaxAmmo2 = -1;
//	p->iMaxClip = WEAPON_NOCLIP;
//	p->iFlags = ITEM_FLAG_LIMITINWORLD | ITEM_FLAG_EXHAUSTIBLE;
//	p->iId = m_iId = AVH_WEAPON_MINE;
//	p->iWeight = 5;
	
	return 1;
}

int	AvHMine::iItemSlot(void)
{
	return AVH_FOURTH_SLOT + 1;
}


int AvHWelder::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_FOURTH_SLOT;
	p->iPosition = 8;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kWelderDamage);
	p->iMaxClip = WEAPON_NOCLIP;
	//p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ITEM_FLAG_SELECTONEMPTY;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD;
	p->iId = AVH_WEAPON_WELDER;
	p->iWeight = kDefaultTertiaryWeaponWeight;
	
	return 1;
}

int	AvHWelder::iItemSlot(void)
{
	return AVH_FOURTH_SLOT + 1;
}



int AvHMachineGun::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_FIRST_SLOT;
	p->iPosition = 1;

	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = "MGAmmo";
	p->iMaxAmmo1 = BALANCE_IVAR(kMGMaxAmmo);
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kMGDamage);
	p->iMaxClip = BALANCE_IVAR(kMGMaxClip);
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | PRIMARY_WEAPON;
	p->iId = AVH_WEAPON_MG;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHMachineGun::iItemSlot(void)
{
	return AVH_FIRST_SLOT + 1;
}

int AvHPistol::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_SECOND_SLOT;
	p->iPosition = 0;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = "HGAmmo";
	p->iMaxAmmo1 = BALANCE_IVAR(kHGMaxAmmo);
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kHGDamage);
	p->iMaxClip = BALANCE_IVAR(kHGMaxClip);
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | SECONDARY_WEAPON;
	p->iId = AVH_WEAPON_PISTOL;
	p->iWeight = kDefaultSecondaryWeaponWeight;
	
	return 1;
}

int	AvHPistol::iItemSlot(void)
{
	return AVH_SECOND_SLOT + 1;
}

int AvHSonicGun::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_FIRST_SLOT;
	p->iPosition = 2;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = "SonicAmmo";
	p->iMaxAmmo1 = BALANCE_IVAR(kSGMaxAmmo);
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kSGDamage);
	p->iMaxClip = BALANCE_IVAR(kSGMaxClip);
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | PRIMARY_WEAPON;
	p->iId = AVH_WEAPON_SONIC;
	p->iWeight = kSpecialPrimaryWeaponWeight;
	
	return 1;
}

int	AvHSonicGun::iItemSlot(void)
{
	return AVH_FIRST_SLOT + 1;
}


int AvHHeavyMachineGun::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_FIRST_SLOT;
	p->iPosition = 3;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = "HMGAmmo";
	p->iMaxAmmo1 = BALANCE_IVAR(kHMGMaxAmmo);
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kHMGDamage);
	p->iMaxClip = BALANCE_IVAR(kHMGMaxClip);
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | PRIMARY_WEAPON;
	p->iId = AVH_WEAPON_HMG;
	p->iWeight = kSpecialPrimaryWeaponWeight;
	
	return 1;
}

int	AvHHeavyMachineGun::iItemSlot(void)
{
	return AVH_FIRST_SLOT + 1;
}


int AvHGrenadeGun::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_FIRST_SLOT;
	p->iPosition = 8;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = "GrenadeAmmo";
	p->iMaxAmmo1 = BALANCE_IVAR(kGGMaxAmmo);
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kGrenadeDamage);
 	p->iMaxClip = BALANCE_IVAR(kGGMaxClip);
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | PRIMARY_WEAPON;
	p->iId = AVH_WEAPON_GRENADE_GUN;
	p->iWeight = kSpecialPrimaryWeaponWeight;
	
	return 1;
}

int	AvHGrenadeGun::iItemSlot(void)
{
	return AVH_FIRST_SLOT + 1;
}


int AvHHealingSpray::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_SECOND_SLOT;
	p->iPosition = 1;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kHealingSprayDamage);
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ITEM_FLAG_SELECTONEMPTY | ONE_HIVE_REQUIRED;
	p->iId = AVH_WEAPON_HEALINGSPRAY;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHHealingSpray::iItemSlot(void)
{
	return AVH_SECOND_SLOT + 1;
}





///////////////////
// Alien weapons //
///////////////////

int AvHSpikeGun::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_SECOND_SLOT;
	p->iPosition = 7;

	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;//"SpikeAmmo";
	p->iMaxAmmo1 = -1;//kSpikeMaxClip;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kSpikeDamage);
	p->iMaxClip = WEAPON_NOCLIP;//kSpikeMaxClip;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ITEM_FLAG_SELECTONEMPTY;
	p->iId = AVH_WEAPON_SPIKE;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHSpikeGun::iItemSlot(void)
{
	return AVH_SECOND_SLOT + 1;
}


int AvHUmbraGun::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_THIRD_SLOT;
	p->iPosition = 7;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;//kSpikeMaxClip;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kUmbraCloudDuration);
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ONE_HIVE_REQUIRED | TWO_HIVES_REQUIRED;
	p->iId = AVH_WEAPON_UMBRA;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHUmbraGun::iItemSlot(void)
{
	return AVH_THIRD_SLOT + 1;
}


//int AvHBabblerGun::GetItemInfo(ItemInfo *p) const
//{
//	p->iSlot = AVH_FOURTH_SLOT;
//	p->iPosition = 3;
//
//	p->pszName = STRING(pev->classname);
//	p->pszAmmo1 = "BabblerAmmo";
//	p->iMaxAmmo1 = -1;
//	p->pszAmmo2 = NULL;
//	p->iMaxAmmo2 = -1;
//	p->iMaxClip = WEAPON_NOCLIP;
//	p->iId = AVH_WEAPON_BABBLER;
//	p->iWeight = kDefaultPrimaryWeaponWeight;
//	p->iFlags =  ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ONE_HIVE_REQUIRED | TWO_HIVES_REQUIRED | THREE_HIVES_REQUIRED;
//
//	return 1;
//}
//
//
//int	AvHBabblerGun::iItemSlot(void)
//{
//	return AVH_FOURTH_SLOT + 1;
//}


int AvHBileBombGun::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_THIRD_SLOT;
	p->iPosition = 3;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;//kSpikeMaxClip;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kBileBombDamage);
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ONE_HIVE_REQUIRED | TWO_HIVES_REQUIRED;
	p->iId = AVH_WEAPON_BILEBOMB;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHBileBombGun::iItemSlot(void)
{
	return AVH_THIRD_SLOT + 1;
}



int	AvHSwipe::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_FIRST_SLOT;
	p->iPosition = 6;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kSwipeDamage);
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ITEM_FLAG_SELECTONEMPTY;
	p->iId = AVH_WEAPON_SWIPE;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHSwipe::iItemSlot(void)
{
	return AVH_FIRST_SLOT + 1;
}




int	AvHClaws::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_FIRST_SLOT;
	p->iPosition = 5;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kClawsDamage);
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ITEM_FLAG_SELECTONEMPTY;
	p->iId = AVH_WEAPON_CLAWS;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHClaws::iItemSlot(void)
{
	return AVH_FIRST_SLOT + 1;
}



int AvHBite::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_FIRST_SLOT;
	p->iPosition = 4;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kBiteDamage);
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ITEM_FLAG_SELECTONEMPTY;
	p->iId = AVH_WEAPON_BITE;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHBite::iItemSlot(void)
{
	return AVH_FIRST_SLOT + 1;
}


int AvHBite2::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_FIRST_SLOT;
	p->iPosition = 9;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kBite2Damage);
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ITEM_FLAG_SELECTONEMPTY;
	p->iId = AVH_WEAPON_BITE2;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHBite2::iItemSlot(void)
{
	return AVH_FIRST_SLOT + 1;
}


//int	AvHResourceTowerGun::GetItemInfo(ItemInfo *p) const
//{
//	p->iSlot = AVH_FIRST_SLOT;
//	p->iPosition = 7;
//	
//	p->pszName = STRING(pev->classname);
//	p->pszAmmo1 = NULL;
//	p->iMaxAmmo1 = -1;
//	p->pszAmmo2 = NULL;
//	p->iMaxAmmo2 = -1;
//	p->iMaxClip = WEAPON_NOCLIP;
//	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY + ITEM_FLAG_NOAUTORELOAD + ITEM_FLAG_SELECTONEMPTY;
//	p->iId = AVH_WEAPON_RESOURCE_TOWER;
//	p->iWeight = 7;
//	
//	return 1;
//}
//
//int	AvHResourceTowerGun::iItemSlot(void)
//{
//	return AVH_FIRST_SLOT + 1;
//}



int AvHSpitGun::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_FIRST_SLOT;
	p->iPosition = 7;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kSpitGDamage);
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ITEM_FLAG_SELECTONEMPTY;
	p->iId = AVH_WEAPON_SPIT;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHSpitGun::iItemSlot(void)
{
	return AVH_FIRST_SLOT + 1;
}




int	AvHSpore::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_SECOND_SLOT;
	p->iPosition = 6;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = (int)(BALANCE_IVAR(kSporeDamage)/BALANCE_FVAR(kSporeCloudThinkInterval));
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ITEM_FLAG_SELECTONEMPTY | ONE_HIVE_REQUIRED;
	p->iId = AVH_WEAPON_SPORES;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHSpore::iItemSlot(void)
{
	return AVH_SECOND_SLOT + 1;
}


int	AvHParasiteGun::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_SECOND_SLOT;
	p->iPosition = 3;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kParasiteDamage);
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ITEM_FLAG_SELECTONEMPTY | ONE_HIVE_REQUIRED;
	p->iId = AVH_WEAPON_PARASITE;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHParasiteGun::iItemSlot(void)
{
	return AVH_SECOND_SLOT + 1;
}



int	AvHGrenade::GetItemInfo(ItemInfo *p) const
{
    p->iSlot = AVH_FOURTH_SLOT;
    p->iPosition = 2;

    p->pszName = STRING(pev->classname);
    p->pszAmmo1 = "HandGrenadeAmmo";
    p->iMaxAmmo1 = BALANCE_IVAR(kHandGrenadeMaxAmmo);
    p->pszAmmo2 = NULL;
    p->iMaxAmmo2 = BALANCE_IVAR(kHandGrenadeDamage);
    p->iMaxClip = 1;
    p->iFlags = ITEM_FLAG_EXHAUSTIBLE;
    p->iId = AVH_WEAPON_GRENADE;
    p->iWeight = kGrenadeWeaponWeight;
    
    return 1;
}

int	AvHGrenade::iItemSlot(void)
{
    return AVH_FOURTH_SLOT + 1;
}


int	AvHWebSpinner::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_FOURTH_SLOT;
	p->iPosition = 1;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = -1;
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ITEM_FLAG_SELECTONEMPTY | ONE_HIVE_REQUIRED | TWO_HIVES_REQUIRED | THREE_HIVES_REQUIRED;
	p->iId = AVH_WEAPON_WEBSPINNER;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHWebSpinner::iItemSlot(void)
{
	return AVH_FOURTH_SLOT + 1;
}

int AvHLeap::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_THIRD_SLOT;
	p->iPosition = 5;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kLeapDamage);
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ONE_HIVE_REQUIRED | TWO_HIVES_REQUIRED;
	p->iId = AVH_ABILITY_LEAP;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHLeap::iItemSlot(void)
{
	return AVH_THIRD_SLOT + 1;
}


int AvHPrimalScream::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_FOURTH_SLOT;
	p->iPosition = 4;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = "";
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kPrimalScreamRange);
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ONE_HIVE_REQUIRED | TWO_HIVES_REQUIRED | THREE_HIVES_REQUIRED;
	p->iId = AVH_WEAPON_PRIMALSCREAM;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHPrimalScream::iItemSlot(void)
{
	return AVH_FOURTH_SLOT + 1;
}

int	AvHMetabolize::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_THIRD_SLOT;
	p->iPosition = 2;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = -1;
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ITEM_FLAG_SELECTONEMPTY | ONE_HIVE_REQUIRED | TWO_HIVES_REQUIRED;
	p->iId = AVH_WEAPON_METABOLIZE;
	p->iWeight = 7;
	
	return 1;
}

int	AvHMetabolize::iItemSlot(void)
{
	return AVH_THIRD_SLOT + 1;
}



//int	AvHParalysisGun::GetItemInfo(ItemInfo *p)
//{
//	p->iSlot = AVH_SECOND_SLOT;
//	p->iPosition = 5;
//	
//	p->pszName = STRING(pev->classname);
//	p->pszAmmo1 = NULL;
//	p->iMaxAmmo1 = -1;
//	p->pszAmmo2 = NULL;
//	p->iMaxAmmo2 = -1;
//	p->iMaxClip = WEAPON_NOCLIP;
//	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ITEM_FLAG_SELECTONEMPTY | ONE_HIVE_REQUIRED | TWO_HIVES_REQUIRED;
//	p->iId = AVH_WEAPON_PARALYSIS;
//	p->iWeight = 7;
//	
//	return 1;
//}
//
//int	AvHParalysisGun::iItemSlot(void)
//{
//	return AVH_SECOND_SLOT + 1;
//}

int	AvHAcidRocketGun::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_FOURTH_SLOT;
	p->iPosition = 7;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kAcidRocketDamage);
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ITEM_FLAG_SELECTONEMPTY | ONE_HIVE_REQUIRED | TWO_HIVES_REQUIRED | THREE_HIVES_REQUIRED;
	p->iId = AVH_WEAPON_ACIDROCKET;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHAcidRocketGun::iItemSlot(void)
{
	return AVH_FOURTH_SLOT + 1;
}



int	AvHBlinkGun::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_SECOND_SLOT;
	p->iPosition = 4;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = -1;
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ITEM_FLAG_SELECTONEMPTY | ONE_HIVE_REQUIRED;
	p->iId = AVH_WEAPON_BLINK;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHBlinkGun::iItemSlot(void)
{
	return AVH_SECOND_SLOT + 1;
}


int	AvHDivineWind::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_FOURTH_SLOT;
	p->iPosition = 5;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kDivineWindDamage);
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ITEM_FLAG_SELECTONEMPTY | ONE_HIVE_REQUIRED | TWO_HIVES_REQUIRED | THREE_HIVES_REQUIRED;
	p->iId = AVH_WEAPON_DIVINEWIND;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHDivineWind::iItemSlot(void)
{
	return AVH_FOURTH_SLOT + 1;
}



int AvHCharge::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_FOURTH_SLOT;
	p->iPosition = 6;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kChargeDamage);
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ONE_HIVE_REQUIRED | TWO_HIVES_REQUIRED | THREE_HIVES_REQUIRED;
	p->iId = AVH_ABILITY_CHARGE;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHCharge::iItemSlot(void)
{
	return AVH_FOURTH_SLOT + 1;
}

int AvHStomp::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_THIRD_SLOT;
	p->iPosition = 4;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = (int)BALANCE_FVAR(kStompTime);
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ONE_HIVE_REQUIRED | TWO_HIVES_REQUIRED;
	p->iId = AVH_WEAPON_STOMP;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHStomp::iItemSlot(void)
{
	return AVH_THIRD_SLOT + 1;
}


int AvHDevour::GetItemInfo(ItemInfo *p) const
{
	p->iSlot = AVH_SECOND_SLOT;
	p->iPosition = 5;
	
	p->pszName = STRING(pev->classname);
	p->pszAmmo1 = NULL;
	p->iMaxAmmo1 = -1;
	p->pszAmmo2 = NULL;
	p->iMaxAmmo2 = BALANCE_IVAR(kDevourDamage);
	p->iMaxClip = WEAPON_NOCLIP;
	p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD | ONE_HIVE_REQUIRED;
	p->iId = AVH_WEAPON_DEVOUR;
	p->iWeight = kDefaultPrimaryWeaponWeight;
	
	return 1;
}

int	AvHDevour::iItemSlot(void)
{
	return AVH_SECOND_SLOT + 1;
}