#ifndef __WW_WEAPONS_H__
#define __WW_WEAPONS_H__


enum
{
	SLOT_MELEE							= 0,
	SLOT_BASIC,
	SLOT_PRIMARY,
	SLOT_SECONDARY,
	SLOT_UTILITY,
};


enum
{
	WEIGHT_UTILITY						= 0,
	WEIGHT_SECONDARY,
	WEIGHT_PRIMARY,
	WEIGHT_BASIC,
	WEIGHT_MELEE,
};


enum
{
	// generic weapons
	WEAPON_STAFF						= 1,		// done
	WEAPON_SHIELD,
	WEAPON_SEAL,									// done
	WEAPON_MISSILE,									// done
	WEAPON_DOUBLEMISSILE,							// done

	// wind weapons
	WEAPON_UPDRAFT,									// done
	WEAPON_LEVITATE,								// done

	// lightning weapons
	WEAPON_LIGHTNINGBOLT,							// done
	WEAPON_SPOTBOLT,								// done

	// fire weapons
	WEAPON_FLAMELICK,								// done
	WEAPON_FIREBALL,								// done

	// death weapons
	WEAPON_DEATHRAY,								// done
	WEAPON_SKULL,									// done

	// life weapons
	WEAPON_WHITERAY,								// done
	WEAPON_FORCEBLAST,								// done

	// earth weapons
	WEAPON_PEBBLEBLAST,								// done
	WEAPON_ROLLINGSTONE,							// done
	WEAPON_BIRD,									// done
	WEAPON_BEARBITE,								// done

	// dragon weapons
	WEAPON_DRAGONBREATH,							// done
	WEAPON_WYVERN,									// done

	// ice weapons
	WEAPON_ICEPOKE,									// done
	WEAPON_FREEZERAY,								// done

	// nature weapons
	WEAPON_THORNBLAST,								// done
	WEAPON_BEANSTALK,
};


enum
{
	// generic weapons
	SLOT_STAFF							= SLOT_MELEE,
	SLOT_SHIELD							= SLOT_UTILITY,
	SLOT_SEAL							= SLOT_UTILITY,
	SLOT_MISSILE						= SLOT_BASIC,
	SLOT_DOUBLEMISSILE					= SLOT_BASIC,

	// wind weapons
	SLOT_UPDRAFT						= SLOT_PRIMARY,
	SLOT_LEVITATE						= SLOT_SECONDARY,

	// lightning weapons
	SLOT_LIGHTNINGBOLT					= SLOT_PRIMARY,
	SLOT_SPOTBOLT						= SLOT_SECONDARY,

	// fire weapons
	SLOT_FLAMELICK						= SLOT_PRIMARY,
	SLOT_FIREBALL						= SLOT_SECONDARY,

	// death weapons
	SLOT_DEATHRAY						= SLOT_PRIMARY,
	SLOT_SKULL							= SLOT_SECONDARY,

	// life weapons
	SLOT_WHITERAY						= SLOT_PRIMARY,
	SLOT_FORCEBLAST						= SLOT_SECONDARY,

	// earth weapons
	SLOT_PEBBLEBLAST					= SLOT_BASIC,
	SLOT_ROLLINGSTONE					= SLOT_PRIMARY,
	SLOT_BIRD							= SLOT_SECONDARY,
	SLOT_BEARBITE						= SLOT_MELEE,

	// dragon weapons
	SLOT_DRAGONBREATH					= SLOT_PRIMARY,
	SLOT_WYVERN							= SLOT_SECONDARY,

	// ice weapons
	SLOT_ICEPOKE						= SLOT_PRIMARY,
	SLOT_FREEZERAY						= SLOT_SECONDARY,

	// nature weapons
	SLOT_THORNBLAST						= SLOT_PRIMARY,
	SLOT_BEANSTALK						= SLOT_SECONDARY,
};


enum
{
	// melee weapons
	POS_STAFF							= 0,
	POS_BEARBITE,

	// utility weapons
	POS_SHIELD							= 0,
	POS_SEAL,

	// basic weapons
	POS_MISSILE							= 0,
	POS_DOUBLEMISSILE,
	POS_PEBBLEBLAST,

	// primary weapons
	POS_UPDRAFT							= 0,
	POS_LIGHTNINGBOLT,
	POS_FLAMELICK,
	POS_DEATHRAY,
	POS_WHITERAY,
	POS_ROLLINGSTONE,
	POS_DRAGONBREATH,
	POS_ICEPOKE,
	POS_THORNBLAST,

	// secondary weapons
	POS_LEVITATE						= 0,
	POS_SPOTBOLT,
	POS_FIREBALL,
	POS_SKULL,
	POS_FORCEBLAST,
	POS_BIRD,
	POS_WYVERN,
	POS_FREEZERAY,
	POS_BEANSTALK,

	//special weapons
};


enum
{
	// generic weapons
	WEIGHT_STAFF						= WEIGHT_MELEE,
	WEIGHT_SHIELD						= WEIGHT_UTILITY,
	WEIGHT_SEAL							= WEIGHT_UTILITY,
	WEIGHT_MISSILE						= WEIGHT_BASIC,
	WEIGHT_DOUBLEMISSILE				= WEIGHT_BASIC,

	// wind weapons
	WEIGHT_UPDRAFT						= WEIGHT_PRIMARY,
	WEIGHT_LEVITATE						= WEIGHT_SECONDARY,

	// lightning weapons
	WEIGHT_LIGHTNINGBOLT				= WEIGHT_PRIMARY,
	WEIGHT_SPOTBOLT						= WEIGHT_SECONDARY,

	// fire weapons
	WEIGHT_FLAMELICK					= WEIGHT_PRIMARY,
	WEIGHT_FIREBALL						= WEIGHT_SECONDARY,

	// death weapons
	WEIGHT_DEATHRAY						= WEIGHT_PRIMARY,
	WEIGHT_SKULL						= WEIGHT_SECONDARY,

	// life weapons
	WEIGHT_WHITERAY						= WEIGHT_PRIMARY,
	WEIGHT_FORCEBLAST					= WEIGHT_SECONDARY,

	// earth weapons
	WEIGHT_PEBBLEBLAST					= WEIGHT_BASIC,
	WEIGHT_ROLLINGSTONE					= WEIGHT_PRIMARY,
	WEIGHT_BIRD							= WEIGHT_SECONDARY,
	WEIGHT_BEARBITE						= WEIGHT_MELEE,

	// dragon weapons
	WEIGHT_DRAGONBREATH					= WEIGHT_PRIMARY,
	WEIGHT_WYVERN						= WEIGHT_SECONDARY,

	// ice weapons
	WEIGHT_ICEPOKE						= WEIGHT_PRIMARY,
	WEIGHT_FREEZERAY					= WEIGHT_SECONDARY,

	// nature weapons
	WEIGHT_THORNBLAST					= WEIGHT_PRIMARY,
	WEIGHT_BEANSTALK					= WEIGHT_SECONDARY,
};


enum
{
	HANDS_IDLE							= 0,
	HANDS_HIT1,
	HANDS_MISS1,
	HANDS_HIT2,
	HANDS_MISS2,
	HANDS_HIT3,
	HANDS_MISS3,
	HANDS_SHIELD_IDLE,
	HANDS_SHIELD_CAST,
	HANDS_NOMISSILE,
	HANDS_MISSILE_IDLE					= HANDS_NOMISSILE,
	HANDS_MISSILE_CAST,
	HANDS_LASTCOMMON,
};


enum
{
	HANDS_WIND_UPDRAFT_IDLE				= HANDS_LASTCOMMON,
	HANDS_WIND_UPDRAFT_CAST,
	HANDS_WIND_LEVITATE_IDLE,
};


enum
{
	HANDS_LIGHTNING_LIGHTNINGBOLT_IDLE	= HANDS_NOMISSILE,
	HANDS_LIGHTNING_LIGHTNINGBOLT_CAST,
	HANDS_LIGHTNING_SPOTBOLT_IDLE,
	HANDS_LIGHTNING_SPOTBOLT_START,
	HANDS_LIGHTNING_SPOTBOLT_CHARGE,
	HANDS_LIGHTNING_SPOTBOLT_FULL,
	HANDS_LIGHTNING_SPOTBOLT_FIRE,
};


enum
{
	HANDS_FIRE_FLAMELICK_IDLE			= HANDS_LASTCOMMON,
	HANDS_FIRE_FLAMELICK_CAST,
	HANDS_FIRE_FIREBALL_IDLE,
	HANDS_FIRE_FIREBALL_CAST,
};


enum
{
	HANDS_DEATH_DEATHRAY_IDLE			= HANDS_LASTCOMMON,
	HANDS_DEATH_DEATHRAY_CAST,
	HANDS_DEATH_DEATHRAY_END,
	HANDS_DEATH_SKULL_IDLE,
	HANDS_DEATH_SKULL_CAST,
};


enum
{
	HANDS_LIFE_WHITERAY_IDLE			= HANDS_LASTCOMMON,
	HANDS_LIFE_WHITERAY_CAST,
	HANDS_LIFE_WHITERAY_END,
	HANDS_LIFE_FORCEBLAST_IDLE,
	HANDS_LIFE_FORCEBLAST_CAST,
};


enum
{
	HANDS_EARTH_ROLLINGSTONE_IDLE		= HANDS_NOMISSILE,
	HANDS_EARTH_ROLLINGSTONE_CAST,
	HANDS_EARTH_PEBBLEBLAST_IDLE,
	HANDS_EARTH_PEBBLEBLAST_CAST,
	HANDS_EARTH_BIRD_IDLE,
	HANDS_EARTH_BIRD_CAST,
	HANDS_EARTH_BEARBITE_IDLE			= 0,
	HANDS_EARTH_BEARBITE_HIT1,
};


enum
{
	HANDS_DRAGON_DRAGONBREATH_IDLE		= HANDS_LASTCOMMON,
	HANDS_DRAGON_DRAGONBREATH_CAST,
	HANDS_DRAGON_WYVERN_IDLE,
	HANDS_DRAGON_WYVERN_CAST,
};


enum
{
	HANDS_ICE_FREEZERAY_IDLE			= HANDS_LASTCOMMON,
	HANDS_ICE_FREEZERAY_CAST,
	HANDS_ICE_FREEZERAY_END,
	HANDS_ICE_ICEPOKE_IDLE,
	HANDS_ICE_ICEPOKE_CAST,
};


enum
{
	HANDS_NATURE_THORNBLAST_IDLE		= HANDS_LASTCOMMON,
	HANDS_NATURE_THORNBLAST_CAST,
	HANDS_NATURE_BEANSTALK_IDLE,
};


// generic weapons
const float	STAFF_DAMAGE				= 25.0f;
const float	STAFF_RANGE					= 32.0f;
const float	STAFF_DELAY					= 0.5f;

const float	SHIELD_DELAY				= 1.5f;
const float	SHIELD_COST					= 10.0f;
const float	SHIELD_REPAIR				= 30.0f;

const float SEAL_MANABURN				= 0.1f;
const float	SEAL_COST					= 1.0f;

const float	MISSILE_DELAY				= 0.6f;
const float	MISSILE_COST				= 5.0f;
const float MISSILE_DAMAGE				= 50.0f;
const float	MISSILE_SPEED				= 2000.0f; // this is the engine's limit

const float	DOUBLEMISSILE_DELAY			= 0.3f;
const float	DOUBLEMISSILE_COST			= 5.0f;
const float	DOUBLEMISSILE_SPEED			= 2000.0f; // this is the engine's limit


// wind wizard weapons
const float	UPDRAFT_COST				= 5.0f;
const float	UPDRAFT_DELAY				= 0.8f;
const float	UPDRAFT_DAMAGE				= 5.0f;
const float	UPDRAFT_STRENGTH			= 800.0f;
const float UPDRAFT_RADIUS				= 128.0f;

const float	LEVITATE_DELAY				= 0.1f;
const float LEVITATE_MANABURN			= 1.0f;
const float	LEVITATE_COST				= 5.0f;
const float	LEVITATE_VELOCITY			= 75.0f;
const float	LEVITATE_MAXVELOCITY		= 400.0f;


// lightning wizard weapons
const float LIGHTNINGBOLT_DELAY			= 0.25f;
const float LIGHTNINGBOLT_MANABURN		= 1.0f;
const float	LIGHTNINGBOLT_COST			= 2.0f;
const float	LIGHTNINGBOLT_RANGE			= 8192.0f;
const float	LIGHTNINGBOLT_DAMAGE		= 20.0f;
const float	LIGHTNINGBOLT_AREA			= 64.0f;

const float SPOTBOLT_MANABURN			= 1.0f;
const float	SPOTBOLT_COST				= 2.0f;
const float	SPOTBOLT_DAMAGE				= 600.0f;
const float	SPOTBOLT_MINCHARGE			= 1.5f;
const float	SPOTBOLT_MAXCHARGE			= 11.0f;
const float SPOTBOLT_OVERCHARGE			= 20.0f;
const float	SPOTBOLT_AREA				= 64.0f;


// fire wizard weapons
const float	FLAMELICK_COST				= 5.0f;
const float	FLAMELICK_DELAY				= 1.0f;
const float	FLAMELICK_DAMAGE			= 15.0f;
const float FLAMELICK_RADIUS			= 200.0f;
const float	FLAMELICK_STRENGTH			= 400.0f;

const float	FIREBALL_DELAY				= 1.7f;
const float	FIREBALL_COST				= 20.0f;
const float FIREBALL_DAMAGE				= 100.0f;
const float	FIREBALL_SPEED				= 1200.0f;
const float	FIREBALL_RADIUS				= 128.0f;


// death wizard weapons
const float DEATHRAY_DELAY				= 0.25f;
const float DEATHRAY_MANABURN			= 1.0f;
const float	DEATHRAY_COST				= 2.0f;
const float	DEATHRAY_RANGE				= 500.0f;
const float	DEATHRAY_DAMAGE				= 10.0f;

const float	SKULL_DELAY					= 1.5f;
const float	SKULL_COST					= 5.0f;
const float SKULL_DAMAGE				= 35.0f;
const float SKULL_RADIUS				= 64.0f;
const float	SKULL_SPEED					= 400.0f;
const float SKULL_TURNSPEED				= 120.0f;
const float	SKULL_LIFE					= 1.0f;
const float	SKULL_HUNTLIFE				= 5.0f;
const float SKULL_SEARCH				= 256.0f;


// life wizard weapons
const float WHITERAY_DELAY				= 0.25f;
const float WHITERAY_MANABURN			= 1.0f;
const float	WHITERAY_COST				= 2.0f;
const float	WHITERAY_RANGE				= 500.0f;
const float	WHITERAY_DAMAGE				= 10.0f;

const float	FORCEBLAST_COST				= 5.0f;
const float	FORCEBLAST_DELAY			= 1.5f;
const float	FORCEBLAST_STRENGTH			= 1000.0f;
const float FORCEBLAST_RADIUS			= 512.0f;
const float	FORCEBLAST_DAMAGE			= 5.0f;
const float FORCEBLAST_EXTRAVELOCITY	= 1.4f;


// earth wizard weapons
const float	PEBBLEBLAST_COST			= 10.0f;
const float	PEBBLEBLAST_DELAY			= 1.0f;
const int	PEBBLEBLAST_DAMAGE			= 20;
const int	PEBBLEBLAST_COUNT			= 8;

const float	ROLLINGSTONE_DELAY			= 1.0f;
const float	ROLLINGSTONE_COST			= 2.0f;
const float ROLLINGSTONE_DAMAGE			= 80.0f;
const float	ROLLINGSTONE_SPEED			= 700.0f;
const float	ROLLINGSTONE_LIFE			= 2.0f;

const float	BIRD_DELAY					= 1.5f;
const float	BIRD_COST					= 5.0f;
const float BIRD_DAMAGE					= 35.0f;
const float	BIRD_SPEED					= 500.0f;
const float BIRD_TURNSPEED				= 90.0f;
const float	BIRD_LIFE					= 1.0f;
const float	BIRD_HUNTLIFE				= 3.0f;
const float BIRD_SEARCH					= 512.0f;

const float	BEARBITE_DAMAGE				= 150.0f;
const float	BEARBITE_RANGE				= 48.0f;
const float	BEARBITE_DELAY				= 1.0f;


// dragon wizard weapons
const float DRAGONBREATH_DELAY			= 0.25f;
const float DRAGONBREATH_MANABURN		= 1.0f;
const float	DRAGONBREATH_COST			= 2.0f;
const float	DRAGONBREATH_RANGE			= 200.0f;
const float	DRAGONBREATH_DAMAGE			= 10.0f;
const float DRAGONBREATH_RADIUS			= 64.0f;

const float	WYVERN_DELAY				= 1.5f;
const float	WYVERN_COST					= 5.0f;
const float WYVERN_DAMAGE				= 35.0f;
const float	WYVERN_RADIUS				= 64.0f;
const float	WYVERN_SPEED				= 400.0f;
const float WYVERN_TURNSPEED			= 80.0f;
const float	WYVERN_LIFE					= 2.0f;
const float	WYVERN_HUNTLIFE				= 3.0f;
const float WYVERN_SEARCH				= 384.0f;


// ice wizard weapons
const float	ICEPOKE_COST				= 1.0f;
const float	ICEPOKE_DAMAGE				= 10.0f;
const float	ICEPOKE_CYCLEDELAY			= 0.3f;
const float	ICEPOKE_CYCLETIME			= 0.6f;
const float	ICEPOKE_DELAY				= 0.6f;
const int	ICEPOKE_COUNT				= 6;
const float ICEPOKE_FROSTTIME			= 1.0f;
const float ICEPOKE_SPEED				= 1000.0f;
const float ICEPOKE_SINGLESHOT			= ICEPOKE_CYCLETIME / (float)ICEPOKE_COUNT;

const float FREEZERAY_DELAY				= 0.25f;
const float FREEZERAY_MANABURN			= 1.0f;
const float	FREEZERAY_COST				= 4.0f;
const float	FREEZERAY_RANGE				= 500.0f;
const float	FREEZERAY_DAMAGE			= 5.0f;
const float	FREEZERAY_FROSTTIME			= 2.0f;


// nature wizard weapons
const float	BEANSTALK_COST				= 5.0f;
const float	BEANSTALK_DELAY				= 0.5f;
const float	BEANSTALK_AREA				= 32.0f;
const float BEANSTALK_HEIGHT			= 45.0f;
const float	BEANSTALK_HEALTH			= 200.0f;
const float BEANSTALK_HEALTHTIME		= 1.0f;
const float	BEANSTALK_HEALTHGAIN		= 20.0f;

const float	THORNBLAST_COST				= 5.0f;
const float	THORNBLAST_DELAY			= 0.8f;
const int	THORNBLAST_DAMAGE			= 20;
const int	THORNBLAST_COUNT			= 4;


#endif // __WW_WEAPONS_H__
