#ifndef __DUDE_H
#define __DUDE_H

#include "actor.h"
#include "seq.h"

#define kGibMax		8

enum {
	kSeqDudeIdle	= 0,
	kSeqDudeDeath1,	// normal death
	kSeqDudeDeath2,	// exploding death
	kSeqDudeDeath3,	// burning death
	kSeqDudeRecoil,
	kSeqDudeCustomStart,
	kSeqDudeMax		= 16,

	kSeqCultistAttack1 = kSeqDudeCustomStart,
	kSeqCultistAttack2,
	kSeqCultistWalk,
	kSeqCultistJump1,
	kSeqCultistJump2,
	kSeqCultistJump3,

	kSeqAxeZombieAttack = kSeqDudeCustomStart,
	kSeqAxeZombieDeath4,
	kSeqAxeZombieWalk,
	kSeqEarthZombieUp,
	kSeqAxeZombieUp,
	kSeqEarthZombieIdle,

	kSeqFatZombieAttack	= kSeqDudeCustomStart,
	kSeqFatZombieDeath4,
	kSeqFatZombieWalk,

	kSeqGargoyleAttack	= kSeqDudeCustomStart,
	kSeqGargoyleFly,
	kSeqGargoyleSwoop,

	kSeqStoneStatueTurn	= kSeqDudeCustomStart,

	kSeqFleshStatueTurn	= kSeqDudeCustomStart,

	kSeqPhantasmAttack1	= kSeqDudeCustomStart,
	kSeqPhantasmMove1,
	kSeqPhantasmRecoil2,

	kSeqBatFly			= kSeqDudeCustomStart,

	kSeqRatWalk		= kSeqDudeCustomStart,

	kSeqSpiderBite	= kSeqDudeCustomStart,
	kSeqSpiderWalk,
	kSeqSpiderJump,

	kSeqGillAttack1		= kSeqDudeCustomStart,
	kSeqGillAttack2,
	kSeqGillDeath4,
	kSeqGillMove1,
	kSeqGillMove2,
	kSeqGillRecoil2,

	kSeqHoundBite		= kSeqDudeCustomStart,
	kSeqHoundBurn,
	kSeqHoundWalk,

	kSeqEelMove1		= kSeqDudeCustomStart,

	kSeqCerberusAttack1	= kSeqDudeCustomStart,
	kSeqCerberusMove1,

	kSeqCerberus2Attack1	= kSeqDudeCustomStart,
	kSeqCerberus2Move1,

	kSeqBeastAttack1	= kSeqDudeCustomStart,
	kSeqBeastAttack2,	// no sequence yet!
	kSeqBeastMove1,

	kSeqHandWalk		= kSeqDudeCustomStart,
	kSeqHandJump,
};


struct GIB
{
	ushort	chance;		// likelihood (out of 256)
	ushort	tile;		// tile number
};


struct DUDEINFO
{
	short	seqStartID;
	short	startHealth;
	ushort	mass;			// in KG
	char	clipdist;
	int 	eyeHeight;		// (in pixels?) relative to origin
	int		hearDist;		// how far it can hear (?)
	int		seeDist;		// how far it can see
	int		periphery;		// peripheral vision in angle units
	int		meleeDist;		// how close it needs to be to melee attack
	int		fleeHealth;
	int		hinderDamage;	// amount of damage necessary to "hinder"
	int		changeTarget;	// probably of changing target per hit point (1/2^16)
	int		changeTargetKin;// probably of changing target to same species
	int		alertChance;	// chance of noticing player and activating
	int		frontAccel;
	int		sideAccel;
	int		backAccel;
	int		frontSpeed;
	int		sideSpeed;
	int		backSpeed;
	int		angSpeed;
	GIB		gib[kGibMax];
	int		damageShift[kDamageMax];	// use to indicate resistance to damage types

	// used internally -- do not initialize
//	Seq		*pSeq[kSeqDudeMax];
};

extern DUDEINFO dudeInfo[];

extern DUDEINFO gPlayerTemplate[2];	// player human/beast templates

#endif
