/*

  [BC] b_info.h
  Last updated: 10/4/2000

  Class definitions for botinfo, chatinfo, and
  other various bot information thingamabobers.

*/

#include "doomdef.h"
#include "d_main.h"

#ifndef __B_INFO_H__
#define __B_INFO_H__

enum
{
	rc_blue,
	rc_red,
	rc_yellow,
	rc_black,
	rc_silver,
	rc_gold,
	rc_green,
	rc_white,
	rc_purple,
	rc_orange,
	rc_rainbow
};

// Note: Any bot past NUMBOTTYPES won't be spawned 
// randomly. So, in other words, if you did "addbot" at the
// console, no bots past NUMBOTTYPES will ever be spawned.
// They can only be spawned by going "addbot <botname>"
// (ex. "addbot massmouth").

typedef enum
{
	BOT_CHUBBS,
	BOT_DEIMOS,
	BOT_CRASH,
	BOT_CHARON,
	BOT_PLUTO,
	BOT_GAMMA,
	BOT_SCYON,
	BOT_SCYTHE,
	BOT_PROTOS,
	BOT_ELECTRA,
	BOT_OMEGA,
	BOT_PREY,
	BOT_MANEK,
	BOT_OBELSIK,
	BOT_DAEMOS,
	BOT_MAABUS,
	BOT_ORION,
	BOT_ULTIMUS,

	NUMBOTTYPES,

	BOT_ROMERO,
	BOT_H4X0R,
	BOT_FRAD,
	BOT_MEWSE,
	BOT_LINGUICA,
	BOT_CONNIE,
	BOT_CACODEMON,
	BOT_HISSY,
	BOT_MASSMOUTH,
	BOT_DOOMCRATE,
	BOT_ZOMBIEMAN,
	BOT_SHOTGUNGUY,
	BOT_BIGCHAINGUNGUY,
	BOT_MRTANG,
	BOT_XXENEMYXX,
	BOT_FIFFY,
	BOT_TRIUMPH,
	BOT_MEEPY,
	BOT_CHEXMAN,
	BOT_QUOTEBOT,

	NUMTOTALBOTS
} bottype_t;

inline FArchive &operator<< (FArchive &arc, bottype_t i) { return arc << (WORD)i; }
inline FArchive &operator>> (FArchive &arc, bottype_t &i) { return arc >> (WORD &)i; }

typedef enum
{
	CT_NONE,
	CT_1337,
	CT_BASRAD,
	CT_CRASH,
	CT_CHUBBY,
	CT_SOLDIER,
	CT_INSECT,
	CT_ALIEN,
	CT_DEMON,
	CT_CYBORG,
	CT_GAMMA,
	CT_ORION,
	CT_ULTIMUS,
	CT_CONNIE,
	CT_CACODEMON,
	CT_MASSMOUTH,
	CT_HISSY,
	CT_HISSYHOGGER,
	CT_MEWSE,
	CT_TANGY,
	CT_MEEPMEEP,
	CT_PISSEDGUY,
	CT_REOLLAME,
	CT_TRIUMPHANT,
	CT_ROMERO,
	CT_CRATE,
	CT_DOOMROOM,

	NUMCHATTYPES
} chattype_t;

typedef enum
{
	bsk_verypoor,
	bsk_poor,
	bsk_low,
	bsk_medium,
	bsk_high,
	bsk_excellent,
	bsk_supreme
} botskill_t;

typedef struct
{
	char			name[16];		// Bot's name
	botskill_t		accuracy;		// Accuracy with "instant" weapons (this includes "leading")
	botskill_t		intelect;		// Accuracy with "missile" weapons (rocket launcher, etc.)
	botskill_t		evade;			// Ability to dodge incoming missiles
	botskill_t		anticip;		// Ability to anticipate "instant" shots
	botskill_t		reaction;		// Overall reaction time (lower is "better")
	int				pisschance;		// Chance the bot will get pissed when his threshold is reached
	int				threshold;		// How much it takes to frustrate/piss off the bot
	int				dangerlevel;	// When health is below this, we need some health
	weapontype_t	wpfav;			// Favorite weapon
	chattype_t		chatinfo;		// Bot's chat strings
	int				chattime;		// How long it takes us to type a line
	int				chatty;			// How talkative the bot is
	char			*color;			// Color (in form of a string)
	char			*gender;		// Male/female/it :)
	char			*skin;			// Skin
	int				railcolor;		// Railgun trail color
	bool			revealed;		// Hidden bots must be revealed
} botinfo_t;

struct chatinfo_t;
typedef struct chatline_t
{
	char		*string;
	chattype_t  bot;
	chatline_t	*line;
} chatline_t;

struct chatline_t;
typedef struct chatinfo_t
{
	chatline_t		intro[5];
	chatline_t		inter[5];
	chatline_t		rare[5];
	chatline_t		frag[15];
	chatline_t		died[10];
	chatline_t		roam[10];
	chatline_t		pissed[5];
	chatline_t		frustrated[5];
	chatline_t		special[20];
} chatinfo_t;

extern botinfo_t botinfo[NUMTOTALBOTS];
extern chatinfo_t chatinfo[NUMCHATTYPES];

#endif