#ifndef __DAGDATA_H
#define __DAGDATA_H

	/* Array sizes */
#define MAX_ITEMS        600
#define MAX_PICTURES     1500
#define MAX_ENCHANTS     600
#define MAX_MOBS	 100


	/* Flags for loading the DF data file */
#define DFFL_NONE     0
#define DFFL_ITEMS    1
#define DFFL_PICTURES 2
#define DFFL_ENCHANTS 4
#define DFFL_MOBS     8
#define DFFL_ALL      0xFFFF


	/* Types for loading purposes */
#define READING_NOTHING 0
#define READING_ITEM    1
#define READING_PICTURE 2
#define READING_MOB     3
#define READING_ENCHANT 4


/*========== Holds the Item Group/Subgrouping and Name ====================*/
class ITEM_TYPE {
public:
  char group;
  char sub_group;
  long cost;
  unsigned short picture;
  char *name;

	/* Class Constructor */
  ITEM_TYPE (void) { name = NULL; }
  ITEM_TYPE (const char *string) { name = create_ptr(string); }

	/* Class Destructor */
  ~ITEM_TYPE (void) { destroy(); }
  void destroy (void) { DESTROY(name); }

 };
/*========== End of Class ITEM_TYPE Definition ============================*/


/*========== Holds Picture Information ====================================*/
class PICTURE_TYPE {
public:
  unsigned short index;
  char *name;


	/* Class Constructor */
  PICTURE_TYPE (void) { name = NULL; }
  PICTURE_TYPE (const char *string) { name = create_ptr(string); }

	/* Class Destructor */
  ~PICTURE_TYPE (void) { destroy(); }
  void destroy (void) { DESTROY(name); }

 };
/*========== End of Class PICTURE_TYPE ====================================*/


/*========== Structure to hold the Material Cost Multipliers ==============*/
class MAT_TYPE {

public:
  int material;
  int constr;
  int mult;
 };
/*========== End of structure MAT_TYPE ====================================*/


/*========== Structure to Hold the Enchantments Cost ======================*/
class ENCHANT_TYPE {

public:
  unsigned short type;
  short subtype;
  long cost;
  char *name;


	/* Class Constructor */
  ENCHANT_TYPE (void) { name = NULL; }
  ENCHANT_TYPE (const char *string) { name = create_ptr(string); }

	/* Class Destructor */
  ~ENCHANT_TYPE (void) { destroy(); }
  void destroy (void) { DESTROY(name); }

 };
/*========== End of structure ENCHANT_TYPE ================================*/


/*========== Structure to Hold the Monster Data ===========================*/
class MOB_TYPE {

public:
  short index;
  long soul_cost;
  char *name;

	/* Class Constructor */
  MOB_TYPE (void) { name = NULL; }
  MOB_TYPE (const char *string) { name = create_ptr(string); }

	/* Class Destructor */
  ~MOB_TYPE (void) { destroy(); }
  void destroy (void) { DESTROY(name); }
 };
/*========== End of structure MOB_TYPE ====================================*/


/*=========== External Variables ==========================================*/
  extern ENCHANT_TYPE *enchants[];
  extern PICTURE_TYPE *pictures[];
  extern ITEM_TYPE *items[];
  extern MOB_TYPE *mobs[];
  extern MAT_TYPE armor_mult[];
  extern MAT_TYPE weapon_mult[];
  extern short num_items;
  extern short num_mobs;
  extern short num_pictures;
  extern short num_enchants;
/*=========== End of External Variable Definitions ========================*/


/*=========== Begin Function and Procedure Prototypes =====================*/

	/* Clears the Data Arrays */
  void destroy_dag_data (void);

	/* Attempts to Load Item Data From a Data File */
  boolean load_dag_data (const char *filename, const short flags);

/*=========== End of Function and Procedure Prototypes ====================*/

	/* End of __DAGDATA_H */
#endif