Files
Hellfire/ITEMS.HSV
T
Justin Marshall 101266ab72 Initial commit.
2026-04-27 10:35:40 -07:00

753 lines
20 KiB
Plaintext

/*-----------------------------------------------------------------------**
** Diablo
**
** Constants and Variables
**
** (C)1995 Condor, Inc. All rights reserved.
**-----------------------------------------------------------------------**
** $Header: /Diablo/ITEMS.H 3 2/06/97 6:08p Jessmac $
**-----------------------------------------------------------------------*/
/*-----------------------------------------------------------------------**
** Defines
**-----------------------------------------------------------------------*/
#define MAXITEMS 127
#define MAXUITEMS 128 // Max number of uniques
#define TEMPAVAIL 127
#define ITEM_RND -1
#define INFINITE_DUR 255
#define GOLD_VT1 1000 // Gold gfx transition from 1 to several
#define GOLD_VT2 2500 // Gold gfx transition from several to many
//#define GOLD_VMAX 5000 // Max gold in an inv slot
extern int GOLD_VMAX;
// Used for cursors
// 1x1
enum {
ITEM_BLUEBTL = 0,
ITEM_SCROLL , // 1
ITEM_SCROLL2 , // 2
ITEM_SCROLL3 , // 3
ITEM_1GOLD , // 4
ITEM_3GOLD , // 5
ITEM_5GOLD , // 6
ITEM_GOLDRING , // 7
ITEM_1JRING , // 8
ITEM_WOODRING , // 9
ITEM_BLUERING , // 10
ITEM_3JRING , // 11
ITEM_SLVRRING , // 12
ITEM_MJRING , // 13
ITEM_BRNRING , // 14
ITEM_SPECTRAL , // 15
ITEM_3COLORPOT , // 16
ITEM_GOLDENELIX , // 17
ITEM_EMPYBAND , // 18
ITEM_EAR1 , // 19
ITEM_EAR2 , // 20
ITEM_EAR3 , // 21
ITEM_SPHERE , // 22
ITEM_CUBE , // 23
ITEM_PYRIMID , // 24
ITEM_BLOODGEM , // 25
ITEM_JSPHERE , // 26
ITEM_JCUBE , // 27
ITEM_JPYRIMID , // 28
ITEM_VILE , // 29
ITEM_BLKBTL , // 30
ITEM_WHTEBTL , // 31
ITEM_REDBTL , // 32
ITEM_YELBTL , // 33
ITEM_ORGBTL , // 34
ITEM_BREDBTL , // 35
ITEM_BLKBTL2 , // 36
ITEM_GOLDBTL , // 37
ITEM_LTBLUEBTL , // 38
ITEM_BLUEBTL2 , // 39
ITEM_BRAIN , // 40
ITEM_CLAW , // 41
ITEM_FANG , // 42
ITEM_BREAD , // 43
ITEM_AMULET , // 44
ITEM_AMULET1 , // 45
ITEM_AMULET2 , // 46
ITEM_AMULET3 , // 47
ITEM_AMULET4 , // 48
ITEM_POUCH1 , // 49
// Add these back in when you can read them from the .cel file.
//ITEM_DOHICKY ,
//ITEM_THEODORE ,
//ITEM_PAPER1 ,
//ITEM_PAPER2 ,
//ITEM_PAPER3 ,
//ITEM_PAPER4 ,
// 1x2
ITEM_DAGGER1 , // 50
ITEM_DAGGER2 , // 51
ITEM_BIGBOTTLE , // 52
ITEM_DAGGER3 , // 53
ITEM_DAGGER4 , // 54
ITEM_DAGGER5 , // 55
// 1x3
ITEM_BLADE , // 56
ITEM_BASTSRD , // 57
ITEM_FALCHION , // 58
ITEM_MACE , // 59
ITEM_LONGSRD , // 60
ITEM_BROADSRD , // 61
ITEM_SCIMITAR , // 62
ITEM_MORNSTAR , // 63
ITEM_SHORTSRD , // 64
ITEM_CLAYMORE , // 65
ITEM_CLUB , // 66
ITEM_SABRE , // 67
ITEM_KNTSWORD , // 68
ITEM_CLUB1 , // 69
ITEM_CLUB2 , // 70
ITEM_CLUB3 , // 71
ITEM_SCIMITAR2 , // 72
ITEM_MAGSWORD , // 73
ITEM_SKULSWORD , // 74
// 2x2
ITEM_HELM , // 75
ITEM_ROCK , // 76
ITEM_CROWN , // 77
ITEM_SKCROWN , // 78
ITEM_MCROWN , // 79
ITEM_JESTER , // 80
ITEM_HARLEQ , // 81
ITEM_FHELM , // 82
ITEM_BUCKLER , // 83
ITEM_FHELM2 , // 84
ITEM_GRTHELM , // 85
ITEM_BOOK2 , // 86
ITEM_BOOK3 , // 87
ITEM_BOOK , // 88
ITEM_MUSHROOM , // 89
ITEM_SKLCAP , // 90
ITEM_LCAP , // 91
ITEM_FLESH , // 92
ITEM_SKLCAP2 , // 93
ITEM_CLOTHES , // 94
ITEM_CROWN2 , // 95
ITEM_MAP , // 96
ITEM_BOOK4 , // 97
ITEM_FHELM3 , // 98
ITEM_SAMHELM , // 99
///#define ITEM_MUSHROOM, // 100
// 2x3
ITEM_COMPSHLD , // 100
ITEM_BTLAXE , // 101
ITEM_LONGBOW , // 102
ITEM_PARMOR , // 103
ITEM_AXE , // 104
ITEM_WSHIELD , // 105
ITEM_CLEAVER , // 106
ITEM_STDARMOR , // 107
ITEM_COMPBOW , // 108
ITEM_SHRTSTAFF , // 109
ITEM_2HSWORD , // 110
ITEM_CHARMOR , // 111
ITEM_SMALLAXE , // 112
ITEM_HVYSHIELD , // 113
ITEM_SCLARMOR , // 114
ITEM_SMLSHLD , // 115
ITEM_SKULLSHLD , // 116
ITEM_WOLFSHLD , // 117
ITEM_SHORTBOW , // 118
ITEM_STLLONGBOW , // 119
ITEM_STLSHRTBOW , // 120
ITEM_SMLWARHAM , // 121
ITEM_MAUL , // 122
ITEM_IRONSTAFF , // 123
ITEM_STLSTAFF , // 124
ITEM_LONGSTAFF , // 125
ITEM_INNSIGN , // 126
ITEM_HLARMOR , // 127
ITEM_RAGS , // 128
ITEM_QARMOR , // 129
ITEM_BALLNCHN , // 130
ITEM_FLAIL , // 131
ITEM_TSHIELD , // 132
ITEM_HNTRBOW , // 133
ITEM_GRTSWORD , // 134
ITEM_LARMOR , // 135
ITEM_SPLTARMOR , // 136
ITEM_ROBE , // 137
ITEM_HVYROBE , // 138
ITEM_RINGARMOR , // 139
ITEM_ANVIL , // 140 //#define ITEM_OBOLISK 140
ITEM_BROADAXE , // 141
ITEM_LRGAXE , // 142
ITEM_WICKAXE , // 143
ITEM_HANDAXE , // 144
ITEM_GREATAXE , // 145
ITEM_IRONSHLD , // 146
ITEM_KITESHLD , // 147
ITEM_LRGSHLD , // 148
ITEM_CLOAK , // 149
ITEM_CAPE , // 150
ITEM_PARMOR2 , // 151
ITEM_PARMOR3 , // 152
ITEM_BPLATE , // 153
ITEM_RINGMAIL , // 154
ITEM_BISHOPSTF , // 155
ITEM_GEMGRTAXE , // 156
ITEM_ARKARMOR , // 157
ITEM_CROSBOW , // 158
ITEM_NAJARMOR , // 159
ITEM_GRIZZLY , // 160
ITEM_GRANDPA , // 161
ITEM_PROTECT , // 162
ITEM_REAVER , // 163
ITEM_WINDFOR , // 164
ITEM_SWARBOW , // 165
ITEM_COMPSTF , // 166
ITEM_SBATLBOW , // 167
ITEM_GOLD , // 168
// New 1x1
ITEM_MERLINRING , // 168
ITEM_MANARING , // 169
ITEM_AMULWARD , // 170
ITEM_NECMAGIC , // 171
ITEM_NECHEALTH , // 172
ITEM_KARIKSRING , // 173
ITEM_RINGGROUND , // 174
ITEM_AMULPROT , // 175
ITEM_MERCRING , // 176
ITEM_RINGTHUND , // 177
ITEM_NECTRUTH , // 178
ITEM_RINGGIANTS , // 179
ITEM_AMULGOLD , // 180
ITEM_RINGMYSTIC , // 181
ITEM_RINGCOPPER , // 182
ITEM_AMULACOLYT , // 183
ITEM_RINGMAGMA , // 184
ITEM_NECPURIFY , // 185
ITEM_RINGGLADTR , // 186
ITEM_RUNEBOMB , // 187
// new 1x3
ITEM_SWORDEDGE , // 188
ITEM_SWORDGLAM , // 189
ITEM_SWORDSERR , // 190
// new 2x3
ITEM_ARMRDARK , // 191
ITEM_ARMRBONECH , // 192
ITEM_HAMRTHUND , // 193
ITEM_SWRDCRYSTL , // 194
ITEM_STAFJESTER , // 195
ITEM_STAFMANA , // 196
ITEM_BOWVULCAN , // 197
ITEM_BOWSPEED , // 198
ITEM_AXEANCIENT , // 199
ITEM_CLUBCARNAG , // 200
ITEM_MACEDARK , // 201
ITEM_CLUBDECAY , // 202
ITEM_AXEDECAY , // 203
ITEM_SWRDDECAY , // 204
ITEM_MACEDECAY , // 205
ITEM_STAFDECAY , // 206
ITEM_BOWDECAY , // 207
ITEM_CLUBOUCH , // 208
ITEM_SWRDDEVAST , // 209
ITEM_AXEDEVAST , // 210
ITEM_MORNDEVAST , // 211
ITEM_MACEDEVAST , // 212
};
// Split later
// Used for plr gfx
#define IT_MISC 0
#define IT_SWORD 1
#define IT_AXE 2
#define IT_BOW 3
#define IT_MACE 4
#define IT_SHIELD 5
#define IT_ARMOR 6
#define IT_HELM 7
#define IT_MARMOR 8
#define IT_HARMOR 9
#define IT_STAFF 10
#define IT_GOLD 11
#define IT_RING 12
#define IT_AMULET 13
#define IT_FOOD 14
// Used for inv location
#define IL_HAND 1
#define IL_2HAND 2
#define IL_BODY 3
#define IL_HEAD 4
#define IL_RING 5
#define IL_NECK 6
#define IL_INV 7
#define IL_SPD 8
// Item classification for treasure types
#define IC_WEAP 1
#define IC_ARMOR 2
#define IC_ITEM 3
#define IC_GOLD 4
#define IC_SPECIAL 5
// Set item indexes for first non-random items
enum _item_indexes {
IDI_GOLD=0, // Item Data Table indexes
// Init items
IDI_WARRIOR,
IDI_WARRSHLD,
IDI_WARRCLUB,
IDI_ROGUE,
IDI_SORCEROR,
// Quest items
IDI_FIRSTQUEST,
IDI_CLEAVER=IDI_FIRSTQUEST,
IDI_SKCROWN, // Same as cleaver
IDI_INFRARING, // Same as cleaver
IDI_ROCK,
IDI_OPTAMULET,
IDI_TRING, // Same as cleaver
IDI_BANNER,
IDI_HARCREST, // Same as cleaver
IDI_STEELVEIL, // Same as cleaver
IDI_GLDNELIX, // Golden Elixor
IDI_ANVIL, // Anvil of Dawn
IDI_MUSHROOM, // Black Mushroom
IDI_BRAIN, // Brain
IDI_FUNGALTM, // Fungal Tome
IDI_SPECELIX, // Spectral Elixir
IDI_BLDSTONE, // Blood Stones
IDI_MAPOFDOOM,
IDI_LASTQUEST=IDI_MAPOFDOOM,
// Ears
IDI_EAR,
// Useful item
IDI_HEAL,
IDI_MANA,
IDI_IDENTIFY,
IDI_PORTAL,
// New items
IDI_ARMOFVAL, // Same as cleaver
IDI_FULLHEAL,
IDI_FULLMANA,
IDI_GRISWOLD,
IDI_LGTFORGE,
IDI_LAZSTAFF,
IDI_RESURRECT,
IDI_OILACC,
IDI_MONK,
IDI_BARD,
IDI_BARDDAGGER,
IDI_RUNEBOMB,
IDI_THEODORE,
IDI_AURIC
};
#define IAF_INFRAVISION 0x00000001
#define IAF_SKING 0x00000002
#define IAF_RNDARROW 0x00000004
#define IAF_FIREARROW 0x00000008
#define IAF_FIREHIT 0x00000010
#define IAF_LIGHTHIT 0x00000020
#define IAF_CONSTRICT 0x00000040
#define IAF_NOMANA 0x00000080
#define IAF_NOHEAL 0x00000100
#define IAF_RABID 0x00000200 // not in game
#define IAF_HALFTRAP 0x00000400 // not in game -called TRAPDAM
#define IAF_KNOCKBACK 0x00000800
#define IAF_MNOHEAL 0x00001000
#define IAF_BAT10 0x00002000
#define IAF_BAT20 0x00004000
#define IAF_ALLBAT (IAF_BAT10 | IAF_BAT20)
#define IAF_LEECH10 0x00008000
#define IAF_LEECH20 0x00010000
#define IAF_ALLLEECH (IAF_LEECH10 | IAF_LEECH20)
#define IAF_ATANIM1 0x00020000
#define IAF_ATANIM2 0x00040000
#define IAF_ATANIM3 0x00080000
#define IAF_ATANIM4 0x00100000
#define IAF_ALLATANIM (IAF_ATANIM1 | IAF_ATANIM2 | IAF_ATANIM3 | IAF_ATANIM4 )
#define IAF_HTANIM1 0x00200000
#define IAF_HTANIM2 0x00400000
#define IAF_HTANIM3 0x00800000
#define IAF_ALLHTANIM (IAF_HTANIM1 | IAF_HTANIM2 | IAF_HTANIM3)
#define IAF_BLANIM 0x01000000
#define IAF_LARROW 0x02000000
#define IAF_THORN 0x04000000
#define IAF_LMANA 0x08000000
#define IAF_TRAPDAM 0x10000000
#define IAF_OMEHAND 0x20000000
#define IAF_DAMDEMON 0x40000000
#define IAF_ZERORES 0x80000000
#define IAF2_DEVASTATION 0x00000001
#define IAF2_DECAY 0x00000002
#define IAF2_PERIL 0x00000004
#define IAF2_JESTER 0x00000008
#define IAF2_CLONE 0x00000010
#define IAF2_DEMONAC 0x00000020
#define IAF2_UNDEADAC 0x00000040
#define ISEL_NONE 0 // Items start out unselectable
#define ISEL_FLR 1 // Most items
#define ISEL_TOP 2 // Items on objects usually
#define ISEL_ALL 3 // Large (2 square) items
#define IMAGIC_NONE 0
#define IMAGIC_MAGIC 1
#define IMAGIC_UNIQUE 2
// Item re-creation information
// Creation bits are as follows:
// bit# desc
// 1-6 Level
// 7 Item Goodonly (T/F)
// 8,9 Unique percentage (0 = 0%, 1 = 15%, 2 = 1%)
// 8&9 Useful item only
// 10 Unique item
// 11 Spawned by Blacksmith
// 12 Spawned by Blacksmith premium
// 13 Spawned by Pegboy
// 14 Spawned by Witch
// 15 Spawned by Healer
#define ICI_USEFUL 0x0180
#define ICI_UPER1 0x0100
#define ICI_UPER15 0x0080
#define ICI_ONLYGOOD 0x0040
#define ICI_UNIQUE 0x0200
#define ICI_SMITH 0x0400
#define ICI_PREMIUM 0x0800
#define ICI_BOY 0x1000
#define ICI_WITCH 0x2000
#define ICI_HEALER 0x4000
#define ICI_PREGEN 0x8000
#define ICI_LVLMASK 0x003f
#define ICI_TOWNMASK 0x7c00
#define ICI_PREGENMASK 0x7fff
// Unique item index list
#define UID_CLEAVER 0 // Butcher's cleaver
#define UID_SKCROWN 1 // Skeleton King's crown
#define UID_INFRARING 2 // Infravision ring
#define UID_OPTAMULET 3 // Optic Amulet
#define UID_TRING 4 // Ring of truth
#define UID_HARCREST 5 // Harlequin Crest
#define UID_STEELVEIL 6 // Veil of Steel
#define UID_ARMOFVAL 7 // Armor of Valor
#define UID_GRISWOLD 8 // Griswold's Edge
#define UID_LGTFORGE 9 // LightForge
// item no random spawn, normal random spawn, or double chance random spawn
#define IRND_NO 0
#define IRND_NORMAL 1
#define IRND_DOUBLE 2
#define RESIST_MAX 75
/*-----------------------------------------------------------------------**
** Structures
**-----------------------------------------------------------------------*/
typedef struct {
char *PLName; // Name of power
int PLPower; // Power type
int PLParam1; // Misc param 1
int PLParam2; // Misc param 2
char PLMinLvl; // Min dungeon level of power appearing
long PLIType; // Item type (armor/shield/weapon/staff/bow/ring)
byte PLGOE; // Good/Evil/Either
BOOL PLDouble; // Double chance of spawning (more common magic)
BOOL PLOk; // Item good or bad
int PLMinVal; // Item min value modifier
int PLMaxVal; // Item max value modifier
int PLMultVal; // Item value multiplier
} PLStruct;
typedef struct {
char *UIName; // Unique item name
char UIItemId; // Item id for base stats
char UIMinLvl; // Min level can be found at
char UINumPL; // Number of power list items
int UIValue; // Items value
char UIPower1; // Power 1 and 2 params
int UIParam1;
int UIParam2;
char UIPower2; // Power 2 and 2 params
int UIParam3;
int UIParam4;
char UIPower3; // Power 3 and 2 params
int UIParam5;
int UIParam6;
char UIPower4; // Power 4 and 2 params
int UIParam7;
int UIParam8;
char UIPower5; // Power 5 and 2 params
int UIParam9;
int UIParam10;
char UIPower6; // Power 6 and 2 params
int UIParam11;
int UIParam12;
} UItemStruct;
typedef struct {
BOOL iRnd; // Random item or special
char iClass; // Item classification
char iLoc; // Item Body Location
int iCurs; // Item cursor gfx
char itype; // Item type
char iItemId; // Item id#
char *iName; // name
char *iSName; // short name
char iMinMLvl; // Min monster level to drop it
int iDurability; // Durability of the item
int iMinDam; // Min damage
int iMaxDam; // Max damage
int iMinAC; // Min Armor Class
int iMaxAC; // Max Armor Class
char iMinStr; // Min Strength stat to use item
char iMinMag; // Min Magic stat to use item
char iMinDex; // Min Dexterity stat to use item
long iFlags; // Item ability flags
int iMiscId; // Misc item uses id
long iSpell; // item spell
BOOL iUsable; // Usable item?
int iValue; // item min value
int iMaxValue; // item max value
} ItemDataStruct;
// PATCH1.JMM
typedef struct {
int nSeed;
WORD wCI;
int nIndex;
DWORD dwTimestamp;
} ItemGetRecordStruct;
// ENDPATCH1.JMM
typedef struct {
int _iSeed; // item seed to generate itself
WORD _iCreateInfo; // item re-creation info
int _itype; // item type
int _ix; // item map x
int _iy; // item map y
BOOL _iAnimFlag; // Does this item animate?
BYTE *_iAnimData; // Data pointer to anim tables
int _iAnimLen; // number of anim frames
int _iAnimFrame; // current anim frame
long _iAnimWidth; // Width of anim
long _iAnimWidth2; // (Width - 64) >> 1 of anim
// PATCH1.JMM
// FLAG IS NO LONGER USED
//BOOL _iDelFlag; // Delete this item
BOOL _iInvalid;
// ENDPATCH1.JMM
char _iSelFlag; // Select top, floor, or all
BOOL _iPostDraw; // Draw after objects or before?
BOOL _iIdentified; // Has item been identified?
char _iMagical; // (No/Reg/Unique) Does the item have magical attributes?
char _iName[64]; // item name
char _iIName[64]; // identified name
char _iLoc; // item body location
char _iClass; // item classification
int _iCurs; // item cursor type
int _ivalue; // item value
int _iIvalue; // item identified value
int _iMinDam; // item min damage
int _iMaxDam; // item max damage
int _iAC; // item armor class
long _iFlags; // item ability flags
int _iMiscId; // Misc item uses id
int _iSpell; // item spell
int _iCharges; // random number of charges
int _iMaxCharges; // Max Charges of a staff
int _iDurability; // How much strength until it breaks
int _iMaxDur; // Max Durability
int _iPLDam; // Power List damage multiplier
int _iPLToHit; // Power List to hit increase
int _iPLAC; // Power List AC increase
int _iPLStr; // Power List Strength increase
int _iPLMag; // Power List Magic increase
int _iPLDex; // Power List Dexterity increase
int _iPLVit; // Power List Vitality increase
int _iPLFR; // Power List Fire resistance
int _iPLLR; // Power List Lightning resistance
int _iPLMR; // Power List Misc Magic resistance
long _iPLMana; // Power List Mana
long _iPLHP; // Power List Hit Points
int _iPLDamMod; // Power List damage modifier (num, not %)
int _iPLGetHit; // Power List Get hit modifier (+/-)
int _iPLLight; // Power List light radius
char _iSplLvlAdd; // What to add to each spell level
char _iRequest; // If item has be requested to be picked up (drb 12/9)
int _iUid; // If unique item, index into unique table (drb 12/8)
int _iFMinDam; // Fire hit min damage
int _iFMaxDam; // Fire hit max damage
int _iLMinDam; // Lightning hit min damage
int _iLMaxDam; // Lightning hit max damage
int _iPLEnAc; // Enemy armor class reduced by this amount
char _iPrePower; // Power List index for prefix
char _iSufPower; // Power List index for suffix
int _iVAdd1; // value add #1
int _iVMult1; // value multiplier #1
int _iVAdd2; // value add #2
int _iVMult2; // value multiplier #2
char _iMinStr; // Min Strength stat to use item
byte _iMinMag; // Min Magic stat to use item
char _iMinDex; // Min Dexterity stat to use item
BOOL _iStatFlag; // Draw with red filter or not
int IDidx; // AllItemsData index
char _oldlight; // Old prelight val
long _iFlags2; // item ability flags
} ItemStruct;
#define SAVE_ITEM_SIZE sizeof(ItemStruct)
/*-----------------------------------------------------------------------**
** Externs
**-----------------------------------------------------------------------*/
extern ItemStruct item[MAXITEMS+1];
extern long numitems;
extern int itemactive[MAXITEMS];
extern int itemavail[MAXITEMS];
// PATCH1.JMM
extern ItemGetRecordStruct itemgets[MAXITEMS];
extern int gnNumGetRecords;
// ENDPATCH1.JMM
extern BOOL UniqueItemFlag[MAXUITEMS];
extern BOOL uitemflag;
extern int ItemInvSnds[];
extern BYTE ItemCAnimTbl[];
#if CHEATS
extern BOOL davecheat;
extern int tstQMsgSpd;
extern int tstQMsgIndex;
extern BOOL tstQMsgFlag;
extern BOOL tstQMsgIndexFlag;
#endif
/*-----------------------------------------------------------------------**
** Prototypes
**-----------------------------------------------------------------------*/
void InitItems();
void ProcessItems();
void InitItemGFX();
void FreeItemGFX();
void DaveGold();
void DaveNewPremium();
void DaveCleanUp();
void DaveSpells();
void DaveSpells2();
void DaveQuestText();
BOOL ItemSpaceOk(int, int);
void SpawnItem(int, int, int, BOOL); // Called by monsters
void SpawnUnique(int, int, int); // Called by monsters
void RespawnItem(int ii, BOOL FlipFlag); // Called by plr placing object back
void CreateItem(int, int, int); // Spawn a specific item at x, y
void CreateRndItem(int, int, BOOL, BOOL, BOOL); // Spawn any item around x,y (item level >= (currlevel*2))
void CreateRndUseful(int, int, int, BOOL); // Spawn either health, mana, or identify
void CreateTypeItem(int, int, BOOL, int, int, BOOL, BOOL); // Spawn a specific type of item
void CreateSpellBook(int x, int y, int ispell, BOOL sendmsg, BOOL delta); //Spawn a specific spell book
void CreateMagicArmor(int x, int y, int imisc, int icurs, BOOL sendmsg, BOOL delta); //Spawn specific magical armor
void CreateAmulet(int x, int y, int level, BOOL sendmsg, BOOL delta); //Spawn an amulet
void CreateMagicWeapon(int x, int y, int imisc, int icurs, BOOL sendmsg, BOOL delta); //Spawn specific magical weapon
void RecreateItem(int, int, WORD, int, int);
void RecreateEar(int, WORD, int, BOOL, int, int, int, int, int, int);
void SyncItemAnim(int);
void GetItemStr(int);
void CalcPlrItemVals(int,BOOL);
void CalcPlrScrolls(int);
void CalcPlrStaff(int);
void CalcPlrItemMin(int);
void CalcPlrInv(int,BOOL);
void CreatePlrItems(int);
void SpawnRock();
void CheckIdentify(int, int);
void DoRepair(int, int);
void DoRecharge(int, int);
void DoOil(int, int);
void PrintItemPower(char,const ItemStruct * x);
void PrintItemDetails(const ItemStruct * x);
void PrintItemDur(const ItemStruct * x);
void UseItem(int, int, int);
void SpawnSmith(int);
void SpawnPremium(int);
void SpawnWitch(int);
void SpawnBoy(int);
void SpawnHealer(int);
void SpawnStoreGold();
void SpawnQuestItem(int itemid, int x,int y, int randarea, int selflag);
void DrawUniqueInfo();
void GetItemAttrs(int i, int idata, int lvl);
int ItemNoFlippy();
void GetSuperItemLoc(int x, int y, int &xx, int &yy);
// PATCH1.JMM
BOOL CheckGetRecord( int nSeed, WORD wCI, int nIndex );
void AddGetRecord( int nSeed, WORD wCI, int nIndex );
void RemoveGetRecord( int nSeed, WORD wCI, int nIndex );
// ENDPATCH1.JMM
void SetPlrHandItem(ItemStruct *h, int idata);
void GetPlrHandSeed(ItemStruct *h);
typedef struct {
int x;
int y;
BOOL Initted;
ItemStruct item;
} CornerStoneType;
extern CornerStoneType CornerStone;
extern void CornerstoneRestore(int x, int y);
extern void CornerstoneSave();