/* File: borg3.h */

/* Purpose: Header file for "borg3.c" -BEN- */

#ifndef INCLUDED_BORG3_H
#define INCLUDED_BORG3_H

#include "angband.h"

#ifdef ALLOW_BORG

/*
 * This file provides support for "borg3.c".
 */

#include "borg1.h"




/*
 * Hack -- location of the "Lv Mana Fail" prompt
 */
#define ROW_SPELL   1
#define COL_SPELL   20+35




/*
 * Forward declare
 */
typedef struct auto_item auto_item;
typedef struct auto_shop auto_shop;




/*
 * A structure holding information about an object.  120 bytes.
 *
 * The "iqty" is zero if the object is "missing"
 * The "kind" is zero if the object is "unaware" (or missing)
 * The "able" is zero if the object is "unknown" (or unaware or missing)
 *
 * Note that unaware items will have a "tval" but an invalid "sval".
 */
struct auto_item
{
    char desc[80];  /* Actual Description */

    cptr note;      /* Pointer to tail of 'desc' */

    s16b kind;      /* Kind index */

    bool able;      /* True if item is identified */

    bool fully_identified; /* True if item is fully identified (AJG) */

    bool needs_I;   /* True if item needs to be 'I'd (AJG) */

    bool xxxx;      /* Unused */

    byte tval;      /* Item type */
    byte sval;      /* Item sub-type */
    s16b pval;      /* Item extra-info */

    byte discount;  /* Discount */

    byte iqty;      /* Number of items */

    s16b weight;    /* Probable weight */

    byte name1;     /* Artifact index (if any) */
    byte name2;     /* Ego-item index (if any) */

    s16b timeout;   /* Timeout counter */

    s16b to_h;      /* Bonus to hit */
    s16b to_d;      /* Bonus to dam */
    s16b to_a;      /* Bonus to ac */
    s16b ac;        /* Armor class */
    byte dd;        /* Damage dice */
    byte ds;        /* Damage sides */

    s16b unused;    /* Unused */

    s32b cost;      /* Cost (in stores) */

    s32b value;     /* Value (estimated) */

    u32b flags1;    /* Extracted item flags (set 1) */
    u32b flags2;    /* Extracted item flags (set 2) */
    u32b flags3;    /* Extracted item flags (set 3) */
};


/*
 * A store
 */
struct auto_shop
{
    s16b when;      /* Time stamp */

    s16b xtra;      /* Something unused */

    s16b page;      /* Current page */
    s16b more;      /* Number of pages */

    auto_item ware[24]; /* Store contents */
};



/*
 * Spell method values
 */

#define BORG_MAGIC_ICK      0   /* Spell is illegible */
#define BORG_MAGIC_NOP      1   /* Spell takes no arguments */
#define BORG_MAGIC_EXT      2   /* Spell has "detection" effects */
#define BORG_MAGIC_AIM      3   /* Spell requires a direction */
#define BORG_MAGIC_OBJ      4   /* Spell requires a pack object */
#define BORG_MAGIC_WHO      5   /* Spell requires a monster symbol */


/*
 * Spell status values
 */

#define BORG_MAGIC_ICKY     0   /* Spell is illegible */
#define BORG_MAGIC_LOST     1   /* Spell is forgotten */
#define BORG_MAGIC_HIGH     2   /* Spell is high level */
#define BORG_MAGIC_OKAY     3   /* Spell is learnable */
#define BORG_MAGIC_TEST     4   /* Spell is untried */
#define BORG_MAGIC_KNOW     5   /* Spell is known */


/*
 * Forward declare
 */
typedef struct auto_magic auto_magic;


/*
 * A spell/prayer in a book
 */
struct auto_magic
{
    cptr name;      /* Textual name */

    byte status;    /* Status (see above) */

    byte method;    /* Method (see above) */

    byte rating;    /* Usefulness */

    byte level;     /* Required level */

    byte power;     /* Required power */

byte sfail;     /* Minimum chance of failure */

    byte cheat;     /* Actual "spell index" (or 99) */
};



/*
 * Some variables
 */

extern auto_item *auto_items;       /* Current "inventory" */

extern auto_shop *auto_shops;       /* Current "shops" */


/*
 * Safety arrays for simulating possible worlds
 */

extern auto_item *safe_items;       /* Safety "inventory" */
extern auto_item *safe_home;        /* Safety "home" */

extern auto_shop *safe_shops;       /* Safety "shops" */


/*
 * Spell casting information
 */

extern auto_magic auto_magics[9][9];    /* Spell info */




/*
 * Determine which slot an item could be wielded into
 */
extern int borg_wield_slot(auto_item *item);

/*
 * Analyze an item, given a textual description
 */
extern void borg_item_analyze(auto_item *item, cptr desc);


/* look for a *id*'d item */
extern bool borg_object_star_id( void );

/* look for a *id*'d item */
extern bool borg_object_star_id_aux(auto_item *borg_item, object_type *real_item);

/*
 * Inscribe an object
 */
extern void borg_send_inscribe(int i, cptr str);


/*
 * Count the items of a given tval/sval
 */
extern int borg_count(int tval, int sval);

/*
 * Find an item with a given tval/sval
 */
extern int borg_slot(int tval, int sval);

/*
 * Item usage functions
 */
extern bool borg_refuel_torch(void);
extern bool borg_refuel_lantern(void);

/*
 * Item usage functions (by sval)
 */
extern bool borg_eat_food(int sval);
extern bool borg_quaff_potion(int sval);
extern bool borg_read_scroll(int sval);
extern bool borg_zap_rod(int sval);
extern bool borg_aim_wand(int sval);
extern bool borg_use_staff(int sval);

/*
 * Artifact usage function (by index)
 */
extern bool borg_activate_artifact(int name1);


/*
 * Spell functions
 */
extern bool borg_spell_legal(int book, int what);
extern bool borg_spell_okay(int book, int what);
extern bool borg_spell(int book, int what);
extern bool borg_spell_fail(int book, int what, int allow_fail);
extern bool borg_spell_okay_fail(int book, int what, int allow_fail );
extern bool borg_spell_legal_fail(int book, int what, int allow_fail );

/*
 * Prayer functions
 */
extern bool borg_prayer_legal(int book, int what);
extern bool borg_prayer_okay(int book, int what);
extern bool borg_prayer(int book, int what);
extern bool borg_prayer_fail(int book, int what, int allow_fail);
extern bool borg_prayer_okay_fail(int book, int what, int allow_fail );
extern bool borg_prayer_legal_fail(int book, int what, int allow_fail );



/*
 * Cheat/Parse the "equip" and "inven" screens.
 */
extern void borg_cheat_equip(void);
extern void borg_cheat_inven(void);
extern void borg_parse_equip(void);
extern void borg_parse_inven(void);

/*
 * Cheat/Parse the "spell" screen
 */
extern void borg_cheat_spell(int book);
extern void borg_parse_spell(int book);

/*
 * Hack -- prepare stuff based on the race/class
 */
extern void prepare_race_class_info(void);

/*
 * Initialize this file
 */
extern void borg_init_3(void);


#endif

#endif

