/
/********************************************************************************
 **    ( .-""-.   )+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+(   .-""-. )   **
 **     / _  _ \ ( | | | | | | |D|A|R|K| |R|E|A|L|M|S| | | | | | ) / _  _ \    **
 **     |(_\/_)|  )+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+(  |/_)(_\|    **
 **     (_ /\ _)           MULTIVERSE Distribution v1.0            (_ /\ _)    **
 **      |v==v| (       Multiverse source created by Exodus       ) |mmmm|     **
 **      '-..-'           with Aeone, Kain, Kyros, and Kast         '-..-'     **
 **----------------------------------------------------------------------------**
 ** SMAUG 1.4 written by : Thoric (Derek Snider) with Altrag, Blodkai,         **
 **                        Haus, Narn, Scryn, Swordbearer, Tricops, Gorog,     **
 **                        Rennard, Grishnakh, Fireblade and Nivek.            **
 **----------------------------------------------------------------------------**
 ** Original MERC 2.1 by : Hatchet, Furey, and Kahn.                           **
 ** Original Diku MUD by : Hans Staerfeldt, Katja Nyboe, Tom Madsen,           **
 **                        Michael Seifert & Sebastian Hammer.                 **
 **----------------------------------------------------------------------------**
 *			   Player Kingdoms header			        *
 ********************************************************************************/



typedef struct  kingdom_data            KINGDOM_DATA;
typedef struct  kgdmwar_data		KGDMWAR_DATA;
typedef struct  unit_data		UNIT_DATA;
typedef struct  troop_data		TROOP_DATA;
typedef struct  hero_data		HERO_DATA;
typedef struct  kingdom_area_data	KGDM_AREA;
typedef struct  kingdom_news_data	KGDM_NEWS;
typedef struct  subunit_data		SUBUNIT_DATA;
typedef struct	kingdom_system		KINGDOM_SYSTEM;



extern	KINGDOM_DATA    *	first_kingdom;
extern  KINGDOM_DATA    *       last_kingdom;
extern	KGDMWAR_DATA    *	first_kgdmwar;
extern	KGDMWAR_DATA	*	last_kgdmwar;
extern  UNIT_DATA       *     	first_unit;
extern  UNIT_DATA       *     	last_unit;
extern  HERO_DATA       *     	first_hero;
extern  HERO_DATA       *     	last_hero;
extern  TROOP_DATA      *     	first_troop;
extern  TROOP_DATA      *     	last_troop;
extern	KGDM_AREA	*	first_karea;
extern	KGDM_AREA	*	last_karea;

extern	char *	const	troop_attributes   [];
extern  char *  const   troop_abilities    [];
extern  char *  const   hero_abiltites     [];



typedef enum
{
  TROOP_ATTRIB_MERCENARY, TROOP_ATTRIB_SUMMON, TROOP_ATTRIB_SPECIAL, TROOP_ATTRIB_UNDISBANDABLE,
  TROOP_ATTRIB_EVENT, TROOP_ATTRIB_NOLEAVE, TROOP_ATTRIB_NOBATTLE, TROOP_ATTRIB_SINGLE,
  TROOP_ATTRIB_LIMIT_TURN, TROOP_ATTRIB_NORECRUIT, TROOP_ATTRIB_BASICT,
  MAX_TROOP_ATTRIB
} troop_attribute;


typedef enum
{
  TROOP_ABILITY_FLYING, TROOP_ABILITY_ADDITIONAL_STRIKE, TROOP_ABILITY_SWIFT, TROOP_ABILITY_LARGE_SHIELD,
  TROOP_ABILITY_PIKE, TROOP_ABILITY_REGENERATION, TROOP_ABILITY_ENDURANCE, TROOP_ABILITY_SIEGE,
  TROOP_ABILITY_BEAUTY, TROOP_ABILITY_STEAL_LIFE, TROOP_ABILITY_MARKSMANSHIP, TROOP_ABILITY_SCALES,
  TROOP_ABILITY_FEAR, TROOP_ABILITY_HEALING, TROOP_ABILITY_CHARM, TROOP_ABILITY_BURSTING_FLAME,
  TROOP_ABILITY_CLUMSINESS, TROOP_ABILITY_ACCURACY, TROOP_ABILITY_RECRUIT_SPEED, TROOP_ABILITY_WEAKNESS,
  TROOP_ABILITY_INITIATIVE, TROOP_ABILITY_ATTACK, TROOP_ABILITY_COUNTERATTACK, TROOP_ABILITY_HITPOINT,
  TROOP_ABILITY_ATTACKTYPE, TROOP_ABILITY_MANA, TROOP_ABILITY_MOVE, TROOP_ABILITY_PREVENT_DAMAGE,
  TROOP_ABILITY_DESTROY, TROOP_ABILITY_RESURRECT, TROOP_ABILITY_SPELL_IMMUNITY, TROOP_ABILITY_SLEEP,
  TROOP_ABILITY_ATTDEF, TROOP_ABILITY_ATTACK_RESISTANCE, TROOP_ABILITY_SPELL_RESISTANCE, TROOP_ABILITY_DAMAGE_SELF,
  MAX_TROOP_ABILITY
} troop_ability;


typedef enum
{
  HERO_ABILITY_ACID_DISSOLVE, HERO_ABILITY_ALCHEMY, HERO_ABILITY_ANIMAL_TAMING, HERO_ABILITY_ANIMATE_DEAD,
  HERO_ABILITY_ARCFIRE, HERO_ABILITY_BACKSTABBING, HERO_ABILITY_BEASTMASTER, HERO_ABILITY_BERSERK,
  HERO_ABILITY_BLESSING, HERO_ABILITY_BLOODTHIRSTY, HERO_ABILITY_BREWING, HERO_ABILITY_BUILDING,
  HERO_ABILITY_CHANNELING, HERO_ABILITY_CHARISMA, HERO_ABILITY_CHILL_TOUCH, HERO_ABILITY_CONFUSE,
  HERO_ABILITY_CONTRACT, HERO_ABILITY_COUNTERSPELL, HERO_ABILITY_CURSING, HERO_ABILITY_DEMON_HUNTER,
  HERO_ABILITY_DRAGON_RIDER, HERO_ABILITY_DRAGONSLAYER, HERO_ABILITY_DWARFBANE, HERO_ABILITY_EARTHQUAKE,
  HERO_ABILITY_ENCHANT_ITEM, HERO_ABILITY_ENCHANT_WEAPON, HERO_ABILITY_FIRESTORM, HERO_ABILITY_FIREWALL,
  HERO_ABILITY_FORCEFIELD, HERO_ABILITY_GIANTSLAYER, HERO_ABILITY_HEALING, HERO_ABILITY_HONOR,
  HERO_ABILITY_ICESHIELD, HERO_ABILITY_ICESTORM, HERO_ABILITY_ICICLE, HERO_ABILITY_LEADERSHIP,
  HERO_ABILITY_LIGHTNING_FLASH, HERO_ABILITY_LIGHTNINGSTORM, HERO_ABILITY_MAGIC_SHIELD, HERO_ABILITY_MINDBLAST,
  HERO_ABILITY_MIRROR, HERO_ABILITY_NECROMANCY, HERO_ABILITY_ORCSLAYER, HERO_ABILITY_PACIFIST,
  HERO_ABILITY_PEACE_WITH_NATURE, HERO_ABILITY_PLANT_CONTROL, HERO_ABILITY_POLYMORPH, HERO_ABILITY_QUICKSAND,
  HERO_ABILITY_RAISE_DEAD, HERO_ABILITY_RALLY, HERO_ABILITY_RESEARCHING, HERO_ABILITY_SHEPHERDING,
  HERO_ABILITY_SONG, HERO_ABILITY_SOUL_DEVOUR, HERO_ABILITY_SPELL_LORE, HERO_ABILITY_SPRING_OF_LIFE,
  HERO_ABILITY_SQUIRREL_DANCE, HERO_ABILITY_SUMMONING, HERO_ABILITY_TACTICS, HERO_ABILITY_TELEPORTATION,
  HERO_ABILITY_TERROR, HERO_ABILITY_TRADING, HERO_ABILITY_TURN_UNDEAD, HERO_ABILITY_UNHOLY_AURA,
  HERO_ABILITY_VALOR, HERO_ABILITY_VAMPIRE_HUNTER, HERO_ABILITY_WALL_OF_FORCE, HERO_ABILITY_WALL_OF_THORN,
  MAX_HERO_ABILITY
} hero_ability;



struct kingdom_data
{
  KINGDOM_DATA *next;        /* next Kingdom in list                  */
  KINGDOM_DATA *prev;        /* previous Kingdom in list              */
  UNIT_DATA * 	first_unit;  	/* First unit in list                    */
  UNIT_DATA * 	last_unit;   	/* Last unit in list                     */
  HERO_DATA * 	first_hero;  	/* First hero in list                    */
  HERO_DATA * 	last_hero;   	/* Last hero in list                     */
  KGDM_AREA * 	first_karea;
  KGDM_AREA * 	last_karea;
  char *      	filename;       /* Kingdom filename                      */
  char *	dirname;	/* Kingdom directory			 */
  char *      	name;           /* Kingdom name                          */
  int         	race;           /* Kingdom's Race                        */
  char *      	whoname;        /* name displayed                        */
  char *      	motto;          /* Kingdom motto                         */
  char *      	description;    /* A brief description                   */
  char *      	deity;          /* kingdoms deity                        */
  char *      	ruler;          /* kingdom leader                        */
  char *      	number1;        /* First officer                         */
  char *      	number2;        /* Second officer                        */
  char *      	number3;        /* Third officer                         */
  char *      	number4;	/* Fourth officer			 */
  char *	number5;	/* Fifth officer			 */
  char *      	general;	/* Millitary Advisor			 */
  char *      	badge;          /* Kingdoms badge on who/where/to_room   */
  char *      	leadrank;       /* Ruler's rank                          */
  char *      	onerank;        /* Number One's rank                     */
  char *      	tworank;        /* Number Two's rank                     */
  char *      	threerank;      /* Number Three's rank                   */
  char *	fourrank;	/* Number Four's rank			 */
  char *	fiverank;	/* Number Five's rank			 */
  char *      	genrank;	/* General's rank			 */
  short      	members;        /* Number of kingdom members             */
  char *      	url;            /* Kingdoms Webpage (Aurora)             */
  char *      	warwith;        /* At War with  	                 */
  char *      	allywith;       /* Allied with	        	         */
  short      	warkills;       /* Current KingdomWar Kills              */
  short      	wkills;         /* Total KingdomWar Kills                */
  int		population;	/* Current population of kingdom         */
  int		max_population; /* Maximum population allowed		 */
  int		gold;		/* Current amount of gold in possession  */
  int		wood;		/* Current amount of wood in possession  */
  int		stone;		/* Current amount of stone in possession */
  int		food;		/* Current amount of food in possession  */
  int		mana;
  int		max_mana;
  int		curr_glory;	/* Current amount of glory in possession */
  int		max_glory;	/* Lifetime amount of glory achieved     */
  short      	gminers;        /* Number of peons assigned to mine gold */
  short      	sminers;        /* Number of peons assigned to mine stone */
  short      	farmers;        /* Number of peons assigned to farm      */
  short      	woodcutters;    /* Number of peons assigned to cut wood  */
  short		timer_hero;	/* Timer left until hero is spawned	 */
  KGDM_NEWS	*news;		/* News					 */
};


struct kgmdwar_data
{
    KGDMWAR_DATA * next;        /* next War in list                  	*/
    KGDMWAR_DATA * prev;        /* previous War in list              	*/
    KINGDOM_DATA * fighting;
};


struct unit_data
{
  UNIT_DATA *	next;
  UNIT_DATA *	prev;
  SUBUNIT_DATA *first_troop;
  SUBUNIT_DATA *last_troop;
  char *	commander;
  short		commander_level;
  short		commander_class;
};


struct subunit_data
{
  SUBUNIT_DATA *next;
  SUBUNIT_DATA *prev;
  char *	name;
  int		number;
};


struct troop_data
{
  TROOP_DATA *	next;
  TROOP_DATA *	prev;
  char *      	filename;
  short		magic_specialty;
  char *	name;
  short		race;
  EXT_BV	attribute;
  int		power_rank;
  int		attack_power;
  int		extra_attack_power;
  short		attack_type;
  short		extra_attack_type;
  short      	damtype;
  short      	extra_damtype;
  short		attack_initiative;
  short		extra_attack_initiative;
  short		counter_attack;
  short		hit;
  short		mana;
  short		move;
  short		recruit_cost;
  int		upkeep[5];
  short		spell_resistance[5];
  short		attack_resistance[11];
  EXT_BV	ability;
  int		recruit_speed;
};


struct hero_data
{
  HERO_DATA *	next;
  HERO_DATA *	prev;
  char *	filename;
  char *	name;
  short		Class;
  short		level;
  short		magic_specialty;
  EXT_BV	attribute;
  short		race;
  short		gender;
  int		attack_power;
  int		attack_level;
  int		attack_type;
  int		counter_attack;
  int		counter_attack_level;
  int		hit;
  int		hit_level;
  int		upkeep[5];
  int		upkeep_level[5];
  int		mana;
  int		mana_level;
  EXT_BV	ability;
};


struct kingdom_system
{
  int		build_town    [5];  // Gold, Food, Wood, Stone, Mana, Days
  int   	build_farm    [5];
  int   	build_guild   [5];
  int   	build_node    [5];
  int   	build_barrier [5];
  int   	build_workshop[5];
  int   	build_barracks[5];
  int   	build_fortress[5];
  short		max_command;
};


struct kingdom_area_data
{
  KGDM_AREA *	next;
  KGDM_AREA *	prev;
  char *	filename;
  char *	name;
  char *	owner;
  int		gold[2];
  int		food[2];
  int		wood[2];
  int		stone[2];
  int		land;
  short		towns;
  short		farms;
  short		barracks;
  short		guilds;
  short		barriers;
  short		fortresses;
  short		nodes;
  short		workshops;
  int		population;
  short		mood;
  char *	troop1;
  char *	troop2;
  char *	troop3;
  short		rec_timer1;
  short		rec_timer2;
  short		rec_timer3;
  short		rec_spd1;
  short		rec_spd2;
  short		rec_spd3;
  short		rec_num1;
  short		rec_num2;
  short		rec_num3;
  short		num_troops1;
  short		num_troops2;
  short		num_troops3;
  UNIT_DATA *	first_unit;
  UNIT_DATA *	last_unit;
};


struct kingdom_news_data
{
  char *         news;
  char *         date;
  time_t         mudtime;
};



// Eradication
#define HCLASS_BERSERKER		0
#define HCLASS_DRAGON_KNIGHT		1
#define HCLASS_FIRE_ELEMENTALIST	2
#define HCLASS_WARLORD			3

// Verdant
#define HCLASS_AMAZON			4
#define HCLASS_ENCHANTRESS		5
#define HCLASS_SHAMAN			6
#define HCLASS_SHEPHERDESS		7
#define HCLASS_SUMMONER			8

// Phantasm
#define HCLASS_BARD			9
#define HCLASS_ILLUSIONIST		10
#define HCLASS_SAGE			11
#define HCLASS_VALKYRIE			12

// Ascendant
#define HCLASS_PRIESTESS		13
#define HCLASS_SHIELDMAIDEN		14
#define HCLASS_VAMPIRE_HUNTER		15
#define HCLASS_WHITE_KNIGHT		16

// Nether
#define HCLASS_CRYPT_KEEPER		17
#define HCLASS_DEVIL_PRINCE		18
#define HCLASS_DREAD_KNIGHT		19
#define HCLASS_NECROMANCER		20
#define HCLASS_SOUL_REAPER		21
#define HCLASS_WITCH			22

// General
#define HCLASS_ALCHEMIST		23
#define HCLASS_ENGINEER			24
#define HCLASS_MERCHANT			25
#define HCLASS_VETERAN			26


#define MAX_HCLASS		26

#define MSPEC_PLAIN		0
#define MSPEC_ERADICATION	1
#define MSPEC_VERDANCY		2
#define MSPEC_PHANTASM		3
#define MSPEC_ASCENDANT		4
#define MSPEC_NETHER		5


#define KINGDOM_DIR     "../kingdoms/"          /* Nation data dir              */
#define KINGDOM_LIST    "kingdom.lst"           /* List of nations              */
#define TROOP_DIR       "../kingdoms/troops/"   /* Army data dir                */
#define TROOP_LIST      "troops.lst"            /* List of army troops          */
#define HERO_DIR	"../kingdoms/heroes/"	/* Hero data dir		*/
#define HERO_LIST	"heroes.lst"		/* List of heroes		*/
#define KGDM_AREA_DIR	"../kingdoms/areas/"	/* Dir of conquered areas	*/
#define KGDM_AREA_LIST  "kgdmarea.lst"	/* List of conquered areas	*/


#define MAX_KINGDOM            20
#define MAX_UNITS              20
#define MAX_TROOPS(hero)       hero->level * 5;

#define KGDM_GPD		3
#define KGDM_SPD		1
#define KGDM_WPD		2
#define KGDM_FPD		4

#define ATWAR            	1   /* If a kingdom is at war */
#define ALLIED           	1   /* If a kingdom is allied */


#define UPKEEP_GOLD             0
#define UPKEEP_FOOD             1
#define UPKEEP_WOOD             2
#define UPKEEP_STONE            3
#define UPKEEP_MANA             4
#define UPKEEP_POPULATION       5
#define UPKEEP_MAX		UPKEEP_POPULATION


#define GATHERING		0	// How many villagers are gathering resource?
#define REMAINING		1	// How much of the resource remains?
#define STOCKPILE		2	// How much is in the areas stockpile?

#define KCOST_GOLD		0
#define KCOST_FOOD		1
#define KCOST_WOOD		2
#define KCOST_STONE		3
#define KCOST_MANA		4
#define KCOST_DAYS		5

#define BUILDING_TOWN		0
#define BUILDING_FARM		1
#define BUILDING_GUILD		2
#define BUILDING_NODE		3
#define BUILDING_BARRIER	4
#define BUILDING_BARRACKS	5
#define BUILDING_WORKSHOP	6
#define BUILDING_FORTRESS	7



#define TROOP_ATTKTYPE_CLOSE    	0
#define TROOP_ATTKTYPE_RANGED   	1
#define TROOP_ATTKTYPE_MAGIC    	3
#define TROOP_ATTKTYPE_MAGIC_RANGED     4
#define TROOP_ATTKTYPE_PARALYZE 	5
#define TROOP_ATTKTYPE_BREATH   	6
#define TROOP_ATTKTYPE_MAX		TROOP_ATTKTYPE_BREATH


#define TROOP_DAMTYPE_MELEE     	0
#define TROOP_DAMTYPE_MISSILE   	1
#define TROOP_DAMTYPE_MAGIC     	2
#define TROOP_DAMTYPE_HOLY      	3
#define TROOP_DAMTYPE_POISON    	4
#define TROOP_DAMTYPE_LIGHTNING 	5
#define TROOP_DAMTYPE_PSYCHIC   	6
#define TROOP_DAMTYPE_FIRE      	7
#define TROOP_DAMTYPE_MAX		TROOP_DAMTYPE_FIRE


#define TIMER_HERO		7


// Command validation --Exo
#define KRANK_LEADER	8
#define KRANK_DEITY	7
#define KRANK_NUMBER1	6
#define KRANK_NUMBER2	5
#define KRANK_NUMBER3	4
#define KRANK_NUMBER4	3
#define KRANK_NUMBER5	2
#define KRANK_GENERAL	1


#ifndef NULLSTR
  #define NULLSTR(str)                    ((!str) || ((str[0]) == '\0'))
#endif

#ifndef FCLOSE
  #define FCLOSE(fp)                      fclose(fp); fp=NULL;
#endif


#define KD	KINGDOM_DATA
KD *    get_kingdom	args( ( char *name ) );
void 	remove_kmember	args( ( CHAR_DATA *ch ) );
void 	save_kingdom	args( ( KINGDOM_DATA *kingdom ) );
#undef KD